Hacked reduction.
1.1 --- a/smm.py Tue May 17 03:38:02 2011 +0200
1.2 +++ b/smm.py Tue May 17 04:10:39 2011 +0200
1.3 @@ -20,24 +20,23 @@
1.4 r = Variable(["r"])
1.5 formula = Imp([Eq([p, q]), r])
1.6 formula = Not([Or([p, q])])
1.7 - formula = Not([Not([p])])
1.8 + #formula = Not([Not([p])])
1.9 print formula
1.10 print "reduced"
1.11 print reduce(formula)
1.12
1.13
1.14 def reduce(formula):
1.15 - print formula
1.16 map = {IMP: lambda (a, b): Or([Not([a]), b]),
1.17 EQ: lambda (a, b): And([Or([Not([a]), b]), Or([a, Not([b])])]),
1.18 - NOT: lambda (a,): isinstance(a, Operator) and a.__class__([Not([v]) for v in a.values] or Not([a])),
1.19 + NOT: lambda (a,): not isinstance(a, Not) and a.__class__([Not([v]) for v in a.values]) or Not(a.values),
1.20 AND: lambda (a, b): And([a, b]),
1.21 - OR: lambda (a, b): Or([a, b]),
1.22 - VARIABLE: lambda (v,): v}
1.23 + OR: lambda (a, b): Or([a, b])}
1.24 def values():
1.25 return [reduce(v) for v in formula.values]
1.26
1.27 if not isinstance(formula, Operator) or formula.id not in map:
1.28 + print "skipped"
1.29 return formula
1.30 return map[formula.id](values())
1.31