def formula
input_names = all_names
input_names_ary = sort_names(input_names.keys)
tbl = {}
@table.each {|inputs, output|
return output.to_s if inputs.empty?
inputs2 = [:x] * input_names.length
inputs.each {|name, input|
inputs2[input_names[name]] = input ? 1 : 0
}
tbl[inputs2] = output ? 1 : 0
}
qm = QM.qm(tbl)
r = []
qm.each {|term|
t = []
num_dontcare = 0
term.each_with_index {|v, i|
if v == false
t << ("!" + input_names_ary[i])
elsif v == true
t << input_names_ary[i]
else
num_dontcare += 1
end
}
if num_dontcare == term.length
r << 'true'
else
r << t.join('&')
end
}
return "false" if r.empty?
r.join(' | ')
end