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

Home Page

http://www.a-k-r.org/truthtable/