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