11
11
12
12
module Data.Fin.Base where
13
13
14
- open import Data.Bool.Base using (Bool; true; false; T; not )
15
- open import Data.Nat.Base as ℕ using (ℕ; zero; suc; z≤n; s≤s; z<s; s<s; _^_ )
14
+ open import Data.Bool.Base using (Bool; T )
15
+ open import Data.Nat.Base as ℕ using (ℕ; zero; suc)
16
16
open import Data.Product.Base as Product using (_×_; _,_; proj₁; proj₂)
17
17
open import Data.Sum.Base as Sum using (_⊎_; inj₁; inj₂; [_,_]′)
18
18
open import Function.Base using (id; _∘_; _on_; flip)
19
19
open import Level using (0ℓ)
20
- open import Relation.Nullary.Negation.Core using (contradiction)
21
- open import Relation.Nullary.Decidable.Core using (yes; no; True; toWitness)
22
20
open import Relation.Binary.Core
23
21
open import Relation.Binary.PropositionalEquality.Core using (_≡_; _≢_; refl; cong)
24
22
open import Relation.Binary.Indexed.Heterogeneous.Core using (IRel)
23
+ open import Relation.Nullary.Negation.Core using (contradiction)
25
24
26
25
private
27
26
variable
@@ -68,16 +67,15 @@ fromℕ (suc n) = suc (fromℕ n)
68
67
69
68
-- fromℕ< {m} _ = "m".
70
69
71
- fromℕ< : m ℕ.< n → Fin n
72
- fromℕ< {zero} {suc n} z<s = zero
73
- fromℕ< {suc m} {suc n} (s<s m<n) = suc (fromℕ< m<n)
70
+ fromℕ< : .( m ℕ.< n) → Fin n
71
+ fromℕ< {zero} {suc _} _ = zero
72
+ fromℕ< {suc m} {suc _} m<n = suc (fromℕ< (ℕ.s<s⁻¹ m<n) )
74
73
75
74
-- fromℕ<″ m _ = "m".
76
75
77
- fromℕ<″ : ∀ m {n} → m ℕ.<″ n → Fin n
78
- fromℕ<″ zero (ℕ.less-than-or-equal refl) = zero
79
- fromℕ<″ (suc m) (ℕ.less-than-or-equal refl) =
80
- suc (fromℕ<″ m (ℕ.less-than-or-equal refl))
76
+ fromℕ<″ : ∀ m {n} → .(m ℕ.<″ n) → Fin n
77
+ fromℕ<″ zero {suc _} _ = zero
78
+ fromℕ<″ (suc m) {suc _} m<″n = suc (fromℕ<″ m (ℕ.s<″s⁻¹ m<″n))
81
79
82
80
-- canonical liftings of i:Fin m to larger index
83
81
@@ -95,9 +93,9 @@ zero ↑ʳ i = i
95
93
96
94
-- reduce≥ "m + i" _ = "i".
97
95
98
- reduce≥ : ∀ (i : Fin (m ℕ.+ n)) (i≥m : toℕ i ℕ.≥ m ) → Fin n
99
- reduce≥ {zero} i i≥m = i
100
- reduce≥ {suc m } (suc i) (s≤s i≥m) = reduce≥ i i≥m
96
+ reduce≥ : ∀ (i : Fin (m ℕ.+ n)) → .(m ℕ.≤ toℕ i) → Fin n
97
+ reduce≥ {zero} i _ = i
98
+ reduce≥ {suc _ } (suc i) m≤i = reduce≥ i (ℕ.s≤s⁻¹ m≤i)
101
99
102
100
-- inject⋆ m "i" = "i".
103
101
@@ -106,16 +104,16 @@ inject {i = suc i} zero = zero
106
104
inject {i = suc i} (suc j) = suc (inject j)
107
105
108
106
inject! : ∀ {i : Fin (suc n)} → Fin′ i → Fin n
109
- inject! {n = suc _} {i = suc _} zero = zero
110
- inject! {n = suc _} {i = suc _} (suc j) = suc (inject! j)
107
+ inject! {n = suc _} {i = suc _} zero = zero
108
+ inject! {n = suc _} {i = suc _} (suc j) = suc (inject! j)
111
109
112
110
inject₁ : Fin n → Fin (suc n)
113
111
inject₁ zero = zero
114
112
inject₁ (suc i) = suc (inject₁ i)
115
113
116
- inject≤ : Fin m → m ℕ.≤ n → Fin n
117
- inject≤ {_} { suc n } zero _ = zero
118
- inject≤ {_} { suc n } (suc i) (s≤s m≤n) = suc (inject≤ i m≤n)
114
+ inject≤ : Fin m → .( m ℕ.≤ n) → Fin n
115
+ inject≤ {n = suc _ } zero _ = zero
116
+ inject≤ {n = suc _ } (suc i) m≤n = suc (inject≤ i (ℕ.s≤s⁻¹ m≤n) )
119
117
120
118
-- lower₁ "i" _ = "i".
121
119
@@ -166,12 +164,12 @@ combine {suc m} {n} zero j = j ↑ˡ (m ℕ.* n)
166
164
combine {suc m} {n} (suc i) j = n ↑ʳ (combine i j)
167
165
168
166
-- Next in progression after splitAt and remQuot
169
- finToFun : Fin (m ^ n) → (Fin n → Fin m)
170
- finToFun {m} {suc n} i zero = quotient (m ^ n) i
171
- finToFun {m} {suc n} i (suc j) = finToFun (remainder {m} (m ^ n) i) j
167
+ finToFun : Fin (m ℕ. ^ n) → (Fin n → Fin m)
168
+ finToFun {m} {suc n} i zero = quotient (m ℕ. ^ n) i
169
+ finToFun {m} {suc n} i (suc j) = finToFun (remainder {m} (m ℕ. ^ n) i) j
172
170
173
171
-- inverse of above function
174
- funToFin : (Fin m → Fin n) → Fin (n ^ m)
172
+ funToFin : (Fin m → Fin n) → Fin (n ℕ. ^ m)
175
173
funToFin {zero} f = zero
176
174
funToFin {suc m} f = combine (f zero) (funToFin (f ∘ suc))
177
175
0 commit comments