Class TruthTable
In: truthtable/qm.rb
truthtable.rb
Parent: Object

truth table and formula generator from Ruby block

The truthtable library generates a truth table from a logical formula written in Ruby. The truth table can be converted to a logical formula.

Author

Tanaka Akira <akr@fsij.org>

Feature

  • generate a truth table from a given block which contains logical formula written in Ruby.
  • generate a formula from the table:
    • minimal one (obtained by Quine-McCluskey algorithm)
    • disjunctive normal form
    • conjunctive normal form

Usage

  • require
     require 'truthtable'
    
  • puts, p and pp shows truth table
     puts TruthTable.new {|v| v[0] & v[1] }
     #=>
     v[0] v[1] |
     ----------+--
      f    f   | f
      f    t   | f
      t    f   | f
      t    t   | t
    
     p TruthTable.new {|v| v[0] & v[1] }
     #=> #<TruthTable: !v[0]&!v[1]=>false !v[0]&v[1]=>false v[0]&!v[1]=>false v[0]&v[1]=>true>
    
     require 'pp'
     pp TruthTable.new {|v| v[0] & v[1] }
     #=>
     #<TruthTable:
      !v[0]&!v[1]=>false
      !v[0]& v[1]=>false
       v[0]&!v[1]=>false
       v[0]& v[1]=>true>
    
  • formula generation
     p TruthTable.new {|v| v[0] }.formula         #=>"v[0]"
     p TruthTable.new {|v| !v[0] }.formula        #=> "!v[0]"
     p TruthTable.new {|v| true ^ v[0] }.formula  #=> "!v[0]"
     p TruthTable.new {|v| v[0] & v[1] }.formula  #=> "v[0]&v[1]"
     p TruthTable.new {|v| v[0] | v[1] }.formula  #=> "v[0] | v[1]"
     p TruthTable.new {|v| v[0] ^ v[1] }.formula  #=> "!v[0]&v[1] | v[0]&!v[1]"
     p TruthTable.new {|v| v[0] == v[1] }.formula #=> "!v[0]&!v[1] | v[0]&v[1]"
    
  • shortcuts, && and ||, are also usable but converted to & and |
     p TruthTable.new {|v| v[0] && v[1] }.formula #=> "v[0]&v[1]"
     p TruthTable.new {|v| v[0] || v[1] }.formula #=> "v[0] | v[1]"
    
  • actually any expression (without side effect)
     p TruthTable.new {|v| v[0] ? !v[1] : v[1] }.formula #=> "!v[0]&v[1] | v[0]&!v[1]"
    
  • any number of inputs
     p TruthTable.new {|v| [v[0], v[1], v[2], v[3]].grep(true).length <= 3 }.formula
     #=> "!v[0] | !v[1] | !v[2] | !v[3]"
    

Methods

cnf   dnf   formula   new   test   to_s  

Classes and Modules

Module TruthTable::QM

Public Class methods

Public Instance methods

obtains a formula in conjunctive normal form.

obtains a formula in disjunctive normal form.

obtains a minimal formula using Quine-McCluskey algorithm.

[Validate]