@@ -42,7 +42,7 @@ finToNatInjective FZ FZ Refl = Refl
42finToNatInjective (FS m) FZ Refl impossible
42finToNatInjective (FS m) FZ Refl impossible
43finToNatInjective FZ (FS n) Refl impossible
43finToNatInjective FZ (FS n) Refl impossible
44finToNatInjective (FS m) (FS n) prf =
44finToNatInjective (FS m) (FS n) prf =
45− cong (finToNatInjective m n (succInjective (finToNat m) (finToNat n) prf))
45+ cong (finToNatInjective m n (succInjective (finToNat m) (finToNat n) prf))
47instance Cast (Fin n) Nat where
47instance Cast (Fin n) Nat where
48 cast x = finToNat x
48 cast x = finToNat x
@@ -94,7 +94,7 @@ instance Ord (Fin n) where
94 compare FZ (FS _) = LT
94 compare FZ (FS _) = LT
95 compare (FS _) FZ = GT
95 compare (FS _) FZ = GT
96 compare (FS x) (FS y) = compare x y
96 compare (FS x) (FS y) = compare x y
98instance MinBound (Fin (S n)) where
98instance MinBound (Fin (S n)) where
99 minBound = FZ
99 minBound = FZ
@@ -102,24 +102,6 @@ instance MaxBound (Fin (S n)) where
102 maxBound = last
102 maxBound = last
105−||| Add two Fins, extending the bound
106−(+) : Fin n -> Fin m -> Fin (n + m)
107−(+) {n=S n} {m=m} FZ f' = rewrite plusCommutative n m in weaken (weakenN n f')
108−(+) (FS f) f' = FS (f + f')
110−||| Substract two Fins, keeping the bound of the minuend
111−(-) : Fin n -> Fin m -> Fin n
114−(FS f) - (FS f') = weaken $ f - f'
116−||| Multiply two Fins, extending the bound
117−(*) : Fin n -> Fin m -> Fin (n * m)
118−(*) {n=Z} f f' = FinZElim f
119−(*) {m=Z} f f' = FinZElim f'
120−(*) {n=S n} {m=S m} FZ f' = FZ
121−(*) {n=S n} {m=S m} (FS f) f' = f' + (f * f')
123-- Construct a Fin from an integer literal which must fit in the given Fin
105-- Construct a Fin from an integer literal which must fit in the given Fin
125natToFin : Nat -> (n : Nat) -> Maybe (Fin n)
107natToFin : Nat -> (n : Nat) -> Maybe (Fin n)