Skip to content

Commit 74796a4

Browse files
authored
Merge pull request #79 from docardoso/demorgan_fix
Fixing De Morgan's laws effect on double negation propositions
2 parents 5a9f02b + 88ff2b0 commit 74796a4

File tree

2 files changed

+6
-1
lines changed

2 files changed

+6
-1
lines changed

boolean/boolean.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1041,7 +1041,7 @@ def demorgan(self):
10411041
This is achieved by canceling double NOTs and using De Morgan laws.
10421042
"""
10431043
expr = self.cancel()
1044-
if expr.isliteral or not isinstance(expr.args[0], (self.NOT, self.AND, self.OR)):
1044+
if expr.isliteral or not isinstance(expr, self.NOT):
10451045
return expr
10461046
op = expr.args[0]
10471047
return op.dual(*(self.__class__(arg).cancel() for arg in op.args))

boolean/test_boolean.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -522,9 +522,14 @@ def test_demorgan(self):
522522
algebra = BooleanAlgebra()
523523
a = algebra.Symbol('a')
524524
b = algebra.Symbol('b')
525+
c = algebra.Symbol('c')
525526
self.assertEqual(algebra.parse('~(a&b)').demorgan(), ~a | ~b)
526527
self.assertEqual(algebra.parse('~(a|b|c)').demorgan(), algebra.parse('~a&~b&~c'))
527528
self.assertEqual(algebra.parse('~(~a&b)').demorgan(), a | ~b)
529+
self.assertEqual((~~(a&b|c)).demorgan(), a&b|c)
530+
self.assertEqual((~~~(a&b|c)).demorgan(), ~(a&b)&~c)
531+
self.assertEqual(algebra.parse('~'*10 + '(a&b|c)').demorgan(), a&b|c)
532+
self.assertEqual(algebra.parse('~'*11 + '(a&b|c)').demorgan(), (~(a&b|c)).demorgan())
528533

529534
def test_order(self):
530535
algebra = BooleanAlgebra()

0 commit comments

Comments
 (0)