@@ -3,18 +3,23 @@ import Prelude.Bits
4%default total
4%default total
6data Modulo : Nat -> Type where
7data Modulo : Nat -> Type where
7 MkModulo : {n : Nat} -> Bits (log2 (2*n)) -> Modulo (S n)
8 MkModulo : {n : Nat} -> Bits (log2 (2*n)) -> Modulo (S n)
9modAdd : Modulo n -> Modulo n -> Modulo n
11modAdd : Modulo n -> Modulo n -> Modulo n
10modAdd (MkModulo x) (MkModulo y) = MkModulo (bitsAdd x y)
12modAdd (MkModulo x) (MkModulo y) = MkModulo (bitsAdd x y)
12modSub : Modulo n -> Modulo n -> Modulo n
15modSub : Modulo n -> Modulo n -> Modulo n
13modSub (MkModulo x) (MkModulo y) = MkModulo (bitsSub x y)
16modSub (MkModulo x) (MkModulo y) = MkModulo (bitsSub x y)
15modMul : Modulo n -> Modulo n -> Modulo n
19modMul : Modulo n -> Modulo n -> Modulo n
16modMul (MkModulo x) (MkModulo y) = MkModulo (bitsMul x y)
20modMul (MkModulo x) (MkModulo y) = MkModulo (bitsMul x y)
18modDiv : Modulo n -> Modulo n -> Modulo n
23modDiv : Modulo n -> Modulo n -> Modulo n
19modDiv (MkModulo x) (MkModulo y) = MkModulo (bitsUDiv x y)
24modDiv (MkModulo x) (MkModulo y) = MkModulo (bitsUDiv x y)