@@ -9,25 +9,28 @@ public
9data Mod2 : Nat -> Type where
9data Mod2 : Nat -> Type where
10 MkMod2 : {n : Nat} -> Bits n -> Mod2 n
10 MkMod2 : {n : Nat} -> Bits n -> Mod2 n
12+modBin : (Bits n -> Bits n -> Bits n) -> Mod2 n -> Mod2 n -> Mod2 n
13+modBin f (MkMod2 x) (MkMod2 y) = MkMod2 (f x y)
13modAdd : Mod2 n -> Mod2 n -> Mod2 n
16modAdd : Mod2 n -> Mod2 n -> Mod2 n
14−modAdd (MkMod2 x) (MkMod2 y) = MkMod2 (bitsAdd x y)
17+modAdd = modBin bitsAdd
17modSub : Mod2 n -> Mod2 n -> Mod2 n
20modSub : Mod2 n -> Mod2 n -> Mod2 n
18−modSub (MkMod2 x) (MkMod2 y) = MkMod2 (bitsSub x y)
21+modSub = modBin bitsSub
21modMul : Mod2 n -> Mod2 n -> Mod2 n
24modMul : Mod2 n -> Mod2 n -> Mod2 n
22−modMul (MkMod2 x) (MkMod2 y) = MkMod2 (bitsMul x y)
25+modMul = modBin bitsMul
24public partial
27public partial
25modDiv : Mod2 n -> Mod2 n -> Mod2 n
28modDiv : Mod2 n -> Mod2 n -> Mod2 n
26−modDiv (MkMod2 x) (MkMod2 y) = MkMod2 (bitsUDiv x y)
29+modDiv = modBin bitsUDiv
28public partial
31public partial
29modRem : Mod2 n -> Mod2 n -> Mod2 n
32modRem : Mod2 n -> Mod2 n -> Mod2 n
30−modRem (MkMod2 x) (MkMod2 y) = MkMod2 (bitsURem x y)
33+modRem = modBin bitsSDiv
32%assert_total
35%assert_total