| module IR.NAND (toNAND, isNANDNormal) where | |
| import IR.Boolean | |
| toNAND :: BExpr -> BExpr | |
| toNAND BTrue = BNand BFalse BFalse | |
| toNAND BFalse = BNand (BNand BFalse BFalse) (BNand BFalse BFalse) | |
| toNAND (BVar v) = BVar v | |
| toNAND (BNand a b) = BNand (toNAND a) (toNAND b) | |
| isNANDNormal :: BExpr -> Bool | |
| isNANDNormal BTrue = False | |
| isNANDNormal BFalse = False | |
| isNANDNormal (BVar _) = True | |
| isNANDNormal (BNand a b) = isNANDNormal a && isNANDNormal b | |