truthtable - truth table to logical formula
The truthtable library generates a truth table from a logical formula written in Ruby. The truth table can be converted to a logical formula.
Install
gem install 'truthtable'
Features
-
generate a truth table from a given block written in Ruby.
-
generate a formula from the table:
-
minimal one (obtained by Quine-McCluskey algorithm)
-
disjunctive normal form
-
conjunctive normal form
-
Usage
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>
-
‘?’ is shown for non-evaluated variable
puts TruthTable.new {|v| v[0] && v[1] }' #=> v[0] v[1] | ----------+-- f ? | f t f | f t t | t puts TruthTable.new {|v| v[0] || v[1] }' #=> v[0] v[1] | ----------+-- f f | f f t | t t ? | t puts TruthTable.new {|v| !v[0] ? !v[1] : !v[2] }' #=> v[0] v[1] v[2] | ---------------+-- f f ? | t f t ? | f t ? f | t t ? t | f
-
formula generation
p TruthTable.new {|v| !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 not preserved
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]"
Reference Manual
See rdoc/classes/TruthTable.html or www.a-k-r.org/truthtable/rdoc/TruthTable.html