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 & v } #=> v v | ----------+-- f f | f f t | f t f | f t t | t
p TruthTable.new {|v| v & v } #=> #<TruthTable: !v&!v=>false !v&v=>false v&!v=>false v&v=>true>
require 'pp' pp TruthTable.new {|v| v & v } #=> #<TruthTable: !v&!v=>false !v& v=>false v&!v=>false v& v=>true>
-
'?' is shown for non-evaluated variable
puts TruthTable.new {|v| v && v }' #=> v v | ----------+-- f ? | f t f | f t t | t
puts TruthTable.new {|v| v || v }' #=> v v | ----------+-- f f | f f t | t t ? | t
puts TruthTable.new {|v| !v ? !v : !v }' #=> v v v | ---------------+-- f f ? | t f t ? | f t ? f | t t ? t | f
-
formula generation
p TruthTable.new {|v| !v }.formula #=> "!v" p TruthTable.new {|v| v & v }.formula #=> "v&v" p TruthTable.new {|v| v | v }.formula #=> "v | v" p TruthTable.new {|v| v ^ v }.formula #=> "!v&v | v&!v" p TruthTable.new {|v| v == v }.formula #=> "!v&!v | v&v"
-
shortcuts, && and ||, are not preserved
p TruthTable.new {|v| v && v }.formula #=> "v&v" p TruthTable.new {|v| v || v }.formula #=> "v | v"
-
actually any expression (without side effect)
p TruthTable.new {|v| v ? !v : v }.formula #=> "!v&v | v&!v"
-
any number of inputs
p TruthTable.new {|v| [v[0], v[1], v[2], v[3]].grep(true).length <= 3 }.formula #=> "!v | !v | !v | !v"
Reference Manual
See rdoc/classes/TruthTable.html or http://www.a-k-r.org/truthtable/rdoc/TruthTable.html