File size: 454 Bytes
56de343
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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