Skip to content

Commit 81a7b28

Browse files
committed
Refactoring (inversion) properties of _<_ on Nat, plus consequences (agda#2000)
1 parent eee9f58 commit 81a7b28

19 files changed

+244
-205
lines changed

CHANGELOG.md

+14-3
Original file line numberDiff line numberDiff line change
@@ -1276,7 +1276,7 @@ Deprecated modules
12761276

12771277
### Deprecation of `Data.Nat.Properties.Core`
12781278

1279-
* The module `Data.Nat.Properties.Core` has been deprecated, and its one entry moved to `Data.Nat.Properties`
1279+
* The module `Data.Nat.Properties.Core` has been deprecated, and its one lemma moved to `Data.Nat.Base`, renamed as `s≤s⁻¹`
12801280

12811281
### Deprecation of `Data.Fin.Substitution.Example`
12821282

@@ -1543,6 +1543,7 @@ Deprecated names
15431543
≤-stepsˡ ↦ m≤n⇒m≤o+n
15441544
≤-stepsʳ ↦ m≤n⇒m≤n+o
15451545
<-step ↦ m<n⇒m<1+n
1546+
pred-mono ↦ pred-mono-≤
15461547

15471548
<-transʳ ↦ ≤-<-trans
15481549
<-transˡ ↦ <-≤-trans
@@ -2618,9 +2619,18 @@ Additions to existing modules
26182619
pattern z<s {n} = s≤s (z≤n {n})
26192620
pattern s<s {m} {n} m<n = s≤s {m} {n} m<n
26202621
2622+
s≤s⁻¹ : suc m ≤ suc n → m ≤ n
2623+
s<s⁻¹ : suc m < suc n → m < n
2624+
26212625
pattern <′-base = ≤′-refl
26222626
pattern <′-step {n} m<′n = ≤′-step {n} m<′n
26232627
2628+
pattern ≤″-offset k = less-than-or-equal {k} refl
2629+
pattern <″-offset k = ≤″-offset k
2630+
2631+
s≤″s⁻¹ : ∀ {m n} → suc m ≤″ suc n → m ≤″ n
2632+
s<″s⁻¹ : ∀ {m n} → suc m <″ suc n → m <″ n
2633+
26242634
_⊔′_ : ℕ → ℕ → ℕ
26252635
_⊓′_ : ℕ → ℕ → ℕ
26262636
∣_-_∣′ : ℕ → ℕ → ℕ
@@ -2671,12 +2681,13 @@ Additions to existing modules
26712681
m*n≢0 : .{{_ : NonZero m}} .{{_ : NonZero n}} → NonZero (m * n)
26722682
m≤n⇒n∸m≤n : m ≤ n → n ∸ m ≤ n
26732683
2674-
≤-pred : suc m ≤ suc n → m ≤ n
26752684
s<s-injective : ∀ {p q : m < n} → s<s p ≡ s<s q → p ≡ q
2676-
<-pred : suc m < suc n → m < n
26772685
<-step : m < n → m < 1 + n
26782686
m<1+n⇒m<n∨m≡n : m < suc n → m < n ⊎ m ≡ n
26792687
2688+
pred-mono-≤ : m ≤ n → pred m ≤ pred n
2689+
pred-mono-< : .⦃ _ : NonZero m ⦄ → m < n → pred m < pred n
2690+
26802691
z<′s : zero <′ suc n
26812692
s<′s : m <′ n → suc m <′ suc n
26822693
<⇒<′ : m < n → m <′ n

src/Data/Digit/Properties.agda

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ open import Data.Product.Base using (_,_; proj₁)
1515
open import Data.Vec.Relation.Unary.Unique.Propositional using (Unique)
1616
import Data.Vec.Relation.Unary.Unique.Propositional.Properties as Uniqueₚ
1717
open import Data.Vec.Relation.Unary.AllPairs using (allPairs?)
18-
open import Relation.Nullary.Decidable using (True; from-yes; ¬?)
18+
open import Relation.Nullary.Decidable.Core using (True; from-yes; ¬?)
1919
open import Relation.Binary.PropositionalEquality.Core using (_≡_; refl)
2020
open import Function.Base using (_∘_)
2121

src/Data/Fin/Base.agda

+21-23
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,16 @@
1111

1212
module Data.Fin.Base where
1313

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)
1616
open import Data.Product.Base as Product using (_×_; _,_; proj₁; proj₂)
1717
open import Data.Sum.Base as Sum using (_⊎_; inj₁; inj₂; [_,_]′)
1818
open import Function.Base using (id; _∘_; _on_; flip)
1919
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)
2220
open import Relation.Binary.Core
2321
open import Relation.Binary.PropositionalEquality.Core using (_≡_; _≢_; refl; cong)
2422
open import Relation.Binary.Indexed.Heterogeneous.Core using (IRel)
23+
open import Relation.Nullary.Negation.Core using (contradiction)
2524

2625
private
2726
variable
@@ -68,16 +67,15 @@ fromℕ (suc n) = suc (fromℕ n)
6867

6968
-- fromℕ< {m} _ = "m".
7069

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))
7473

7574
-- fromℕ<″ m _ = "m".
7675

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))
8179

8280
-- canonical liftings of i:Fin m to larger index
8381

@@ -95,9 +93,9 @@ zero ↑ʳ i = i
9593

9694
-- reduce≥ "m + i" _ = "i".
9795

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)
10199

102100
-- inject⋆ m "i" = "i".
103101

@@ -106,16 +104,16 @@ inject {i = suc i} zero = zero
106104
inject {i = suc i} (suc j) = suc (inject j)
107105

108106
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)
111109

112110
inject₁ : Fin n Fin (suc n)
113111
inject₁ zero = zero
114112
inject₁ (suc i) = suc (inject₁ i)
115113

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))
119117

120118
-- lower₁ "i" _ = "i".
121119

@@ -166,12 +164,12 @@ combine {suc m} {n} zero j = j ↑ˡ (m ℕ.* n)
166164
combine {suc m} {n} (suc i) j = n ↑ʳ (combine i j)
167165

168166
-- 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
172170

173171
-- inverse of above function
174-
funToFin : (Fin m Fin n) Fin (n ^ m)
172+
funToFin : (Fin m Fin n) Fin (n ℕ.^ m)
175173
funToFin {zero} f = zero
176174
funToFin {suc m} f = combine (f zero) (funToFin (f ∘ suc))
177175

0 commit comments

Comments
 (0)