Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactoring (inversion) properties of _<_ on Nat, plus consequences #2000

Merged
merged 87 commits into from
Oct 12, 2023
Merged
Show file tree
Hide file tree
Changes from 16 commits
Commits
Show all changes
87 commits
Select commit Hold shift + click to select a range
c6fc2bd
towards issue #1998: `Data.Nat.Base`; `CHANGELOG`
jamesmckinna Jun 21, 2023
dd0165f
tidied up `CHANGELOG`
jamesmckinna Jun 21, 2023
80a6386
reorganised to push `LessThan` further down the module`
jamesmckinna Jun 21, 2023
a945344
relating `LessThan` and `_<ᵇ_`
jamesmckinna Jun 22, 2023
7fc2e58
relating `LessThan` and `_<ᵇ_`
jamesmckinna Jun 22, 2023
9ad0e7f
reverted to using `_<ᵇ_`; simplified imports
jamesmckinna Jun 23, 2023
44acc1f
fixed imports
jamesmckinna Jun 23, 2023
4267232
simplified imports; removed some uses of `with`
jamesmckinna Jun 23, 2023
a97fc28
spurious parentheses
jamesmckinna Jun 23, 2023
b57f651
new proofs of old properties; old proofs of new properties; reinstate…
jamesmckinna Jun 23, 2023
4177542
streamlining
jamesmckinna Jun 23, 2023
a36b9b4
premature deprecation considered harmful
jamesmckinna Jun 23, 2023
4f8e2f2
tidied up `fromℕ*` lemmas
jamesmckinna Jun 23, 2023
ea4da27
corrected `DivMod` appeals to
jamesmckinna Jun 23, 2023
f3fa536
weird unsolved metas bug?
jamesmckinna Jun 23, 2023
84d136d
towards deprecation; tightened dependencies
jamesmckinna Jun 23, 2023
e594a90
tweaks
jamesmckinna Jun 24, 2023
779c5bf
made `<-lessThan` more implicit; added constructors; removed non-cons…
jamesmckinna Jun 24, 2023
373653c
knock-on simplification
jamesmckinna Jun 24, 2023
91a5662
overdid the instances
jamesmckinna Jun 24, 2023
f2b23ba
final (?) reconsideration
jamesmckinna Jun 24, 2023
4c8f5bb
final (?) reconsideration
jamesmckinna Jun 24, 2023
b99b265
final (?) refactoring
jamesmckinna Jun 24, 2023
c1c13d5
streamlined type signatures
jamesmckinna Jun 24, 2023
1bff854
towards deprecation; lightneend dependencies
jamesmckinna Jun 24, 2023
cc7ef6d
towards deprecation
jamesmckinna Jun 24, 2023
f4f6ef0
towards deprecation
jamesmckinna Jun 24, 2023
24fe5a0
towards deprecation
jamesmckinna Jun 24, 2023
ef0c01c
Nathan's `LessThan` instance
jamesmckinna Jun 24, 2023
014a665
DEPRECATIONS plus redefinitions of `≤-pred` `<-pred`
jamesmckinna Jun 25, 2023
2f2252a
tidied up som e irrefutable `with` patterns
jamesmckinna Jun 25, 2023
e7d75d3
simplification via instance `lessThanSucSuc`
jamesmckinna Jun 28, 2023
3894b59
further simplification
jamesmckinna Jun 28, 2023
1c30be6
simplified dependencies
jamesmckinna Jun 29, 2023
228c20c
simplified dependencies
jamesmckinna Jun 29, 2023
09a1e58
irrelevant argument
jamesmckinna Jun 29, 2023
38f823b
updated `CHANGELOG` and deprecations
jamesmckinna Jun 29, 2023
23cc8d6
attempt at resolving merge conflicts
jamesmckinna Jun 29, 2023
8766149
Merge branch 'master' into issue1998
jamesmckinna Aug 6, 2023
27415e0
typo during merge conflict resolution
jamesmckinna Aug 6, 2023
d0421e8
more errors introduced during merge conflict resolution
jamesmckinna Aug 6, 2023
2f260c9
another error introduced during merge conflict resolution
jamesmckinna Aug 6, 2023
aedd6d4
lightened imports ahead of merge conflict resolution
jamesmckinna Aug 11, 2023
c951cdd
Merge branch 'master' into issue1998
jamesmckinna Aug 11, 2023
988ae21
made som e proofs lazier in their `_≤_` arguments
jamesmckinna Aug 16, 2023
eee34e1
Merge branch 'master' into issue1998
jamesmckinna Sep 29, 2023
e8822d4
simplfied `import`s
jamesmckinna Sep 29, 2023
bf2b3bb
knock-on consequence of merge conflict resolution
jamesmckinna Sep 29, 2023
7a6ad62
simplified irrelevance proof
jamesmckinna Sep 29, 2023
afca20f
simplified irrelevance proof
jamesmckinna Sep 29, 2023
34155ca
typo
jamesmckinna Sep 29, 2023
5e8a4a6
simplified injectivity proof
jamesmckinna Sep 29, 2023
2d102b1
knock-on changes; further simplified `import`s
jamesmckinna Sep 29, 2023
57c80e2
knock-on changes; further simplified `import`s
jamesmckinna Sep 29, 2023
754eefd
knock-on changes; further simplified `import`s
jamesmckinna Sep 29, 2023
27712f8
knock-on changes; further simplified `import`s
jamesmckinna Sep 29, 2023
3f6fb74
knock-on changes; further simplified `import`s
jamesmckinna Sep 29, 2023
ee823ac
simplified proof(s)
jamesmckinna Sep 29, 2023
1c82b45
removed `LessThan` from `Nat.Base`
jamesmckinna Sep 29, 2023
697cbc0
removed `LessThan` from `Nat.Properties`
jamesmckinna Sep 29, 2023
4ef9938
removed `LessThan` from `Fin.Base`
jamesmckinna Sep 29, 2023
808d89b
removed `LessThan` from `Fin.Properties`
jamesmckinna Sep 29, 2023
c8ecfd2
final tweaks to `CHANGELOG`
jamesmckinna Sep 29, 2023
547b416
attempt to resolve the deprecation problem
jamesmckinna Oct 4, 2023
4606f2f
slight rearrangement ahead of attempt to resolve merge conflict
jamesmckinna Oct 4, 2023
7dd18ce
tweak
jamesmckinna Oct 4, 2023
9ad3260
tweak `import`
jamesmckinna Oct 4, 2023
defe03a
Merge branch 'master' into issue1998
MatthewDaggitt Oct 5, 2023
fbd1c70
BUG: strange reversion of `Data.Fin.Properties.<-tri`: reappearance o…
jamesmckinna Oct 5, 2023
ed3e602
Merge branch 'issue1998' of github.com:jamesmckinna/agda-stdlib into …
jamesmckinna Oct 5, 2023
6954aa3
BUG: strange reversion of `Data.Fin.Properties.<-cmp`: reappearance o…
jamesmckinna Oct 5, 2023
0bafc6b
fixed appearance of deprecated `≤-pred` in `Data.List.Properties`
jamesmckinna Oct 5, 2023
ea0aba0
fixed appearance of deprecated `≤-pred` in `Data.List.Properties`
jamesmckinna Oct 5, 2023
d901b5e
removed redundant `variable` quantified quantifier prefix
jamesmckinna Oct 6, 2023
06fe005
fixed `reduce`
jamesmckinna Oct 6, 2023
625f610
added `s≤″s⁻¹`
jamesmckinna Oct 6, 2023
65aa0ae
added `s≤″s⁻¹`
jamesmckinna Oct 6, 2023
0de4198
use of `Sum.map`
jamesmckinna Oct 6, 2023
b0c220f
rewrote header comments about alternative definitions of 'less than (…
jamesmckinna Oct 6, 2023
15b8f41
miscellaneous irrelevance simplifications, plus redundant parentheses
jamesmckinna Oct 6, 2023
b29679d
resolved the deprecation conundrum
jamesmckinna Oct 6, 2023
729f452
`lemma` is a terrible placeholder name; renamed
jamesmckinna Oct 6, 2023
60917a6
relocations
jamesmckinna Oct 6, 2023
6eb7beb
Merge branch 'master' into issue1998
jamesmckinna Oct 6, 2023
e9c9f44
deprecated `pred-mono`
jamesmckinna Oct 6, 2023
66efad1
final merge conflict resolution?
jamesmckinna Oct 6, 2023
308c990
fixed deprecation error
jamesmckinna Oct 6, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2155,9 +2155,20 @@ Other minor changes
pattern z<s {n} = s≤s (z≤n {n})
pattern s<s {m} {n} m<n = s≤s {m} {n} m<n

s≤s⁻¹ : suc m ≤ suc n → m ≤ n
s<s⁻¹ : suc m < suc n → m < n

LessThan : Rel ℕ 0ℓ
<ᵇ-lessThan : .(T (m <ᵇ n)) → LessThan m n
<-lessThan : .(m < n) → LessThan m n
<ᵇ-lessThan⁻¹ : .{{LessThan m n}} → T (m <ᵇ n)
<-lessThan⁻¹ : .{{LessThan m n}} → m < n

pattern <′-base = ≤′-refl
pattern <′-step {n} m<′n = ≤′-step {n} m<′n

pattern ≤″-offset k = less-than-or-equal {k} refl

_⊔′_ : ℕ → ℕ → ℕ
_⊓′_ : ℕ → ℕ → ℕ
∣_-_∣′ : ℕ → ℕ → ℕ
Expand Down
51 changes: 29 additions & 22 deletions src/Data/Fin/Base.agda
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,11 @@ module Data.Fin.Base where

open import Data.Bool.Base using (Bool; true; false; T; not)
open import Data.Empty using (⊥-elim)
open import Data.Nat.Base as ℕ using (ℕ; zero; suc; z≤n; s≤s; z<s; s<s; _^_)
open import Data.Nat.Base as ℕ using (ℕ; zero; suc)
open import Data.Product as Product using (_×_; _,_; proj₁; proj₂)
open import Data.Sum.Base as Sum using (_⊎_; inj₁; inj₂; [_,_]′)
open import Function.Base using (id; _∘_; _on_; flip)
open import Level using (0ℓ)
open import Relation.Nullary.Negation.Core using (contradiction)
open import Relation.Nullary.Decidable.Core using (yes; no; True; toWitness)
open import Relation.Binary.Core
open import Relation.Binary.PropositionalEquality.Core using (_≡_; _≢_; refl; cong)
open import Relation.Binary.Indexed.Heterogeneous.Core using (IRel)
Expand Down Expand Up @@ -67,18 +65,27 @@ fromℕ : (n : ℕ) → Fin (suc n)
fromℕ zero = zero
fromℕ (suc n) = suc (fromℕ n)

-- fromℕLessThan m ⦃_⦄ = "m".

fromℕLessThan : ∀ m {n} → .{{ℕ.LessThan m n}} → Fin n
fromℕLessThan zero {suc _} = zero
fromℕLessThan (suc m) {suc _} = suc (fromℕLessThan m)

-- fromℕ<′ m ⦃_⦄ = "m".

fromℕ<′ : ∀ m {n} → .{{m ℕ.< n}} → Fin n
fromℕ<′ m {n} ⦃ m<n ⦄ = fromℕLessThan m where instance _ = ℕ.<-lessThan m<n

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

fromℕ< : m ℕ.< n → Fin n
fromℕ< {zero} {suc n} z<s = zero
fromℕ< {suc m} {suc n} (s<s m<n) = suc (fromℕ< m<n)
fromℕ< : ∀ {m n} → .(m ℕ.< n) → Fin n
fromℕ< {m} m<n = fromℕ<′ m ⦃ m<n ⦄

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

fromℕ<″ : ∀ m {n} → m ℕ.<″ n → Fin n
fromℕ<″ zero (ℕ.less-than-or-equal refl) = zero
fromℕ<″ (suc m) (ℕ.less-than-or-equal refl) =
suc (fromℕ<″ m (ℕ.less-than-or-equal refl))
fromℕ<″ : ∀ m {n} → .(m ℕ.<″ n) → Fin n
fromℕ<″ zero {suc _} _ = zero
fromℕ<″ (suc m) {suc _} m<″n = suc (fromℕ<″ m (ℕ.s<″s⁻¹ m<″n))

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

Expand All @@ -96,9 +103,9 @@ zero ↑ʳ i = i

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

reduce≥ : ∀ (i : Fin (m ℕ.+ n)) (i≥m : toℕ i ℕ.≥ m) → Fin n
reduce≥ {zero} i i≥m = i
reduce≥ {suc m} (suc i) (s≤s i≥m) = reduce≥ i i≥m
reduce≥ : ∀ (i : Fin (m ℕ.+ n)) → .(m ℕ.≤ (toℕ i)) → Fin n
reduce≥ {zero} i _ = i
reduce≥ {suc m} (suc i) m≤i = reduce≥ {m} i (ℕ.s≤s⁻¹ m≤i)

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

Expand All @@ -107,16 +114,16 @@ inject {i = suc i} zero = zero
inject {i = suc i} (suc j) = suc (inject j)

inject! : ∀ {i : Fin (suc n)} → Fin′ i → Fin n
inject! {n = suc _} {i = suc _} zero = zero
inject! {n = suc _} {i = suc _} (suc j) = suc (inject! j)
inject! {n = suc _} {i = suc _} zero = zero
inject! {n = suc _} {i = suc _} (suc j) = suc (inject! j)

inject₁ : Fin n → Fin (suc n)
inject₁ zero = zero
inject₁ (suc i) = suc (inject₁ i)

inject≤ : Fin m → m ℕ.≤ n → Fin n
inject≤ {_} {suc n} zero _ = zero
inject≤ {_} {suc n} (suc i) (s≤s m≤n) = suc (inject≤ i m≤n)
inject≤ : Fin m → .(m ℕ.≤ n) → Fin n
inject≤ {n = suc _} zero _ = zero
inject≤ {n = suc _} (suc i) m≤n = suc (inject≤ i (ℕ.s≤s⁻¹ m≤n))

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

Expand Down Expand Up @@ -167,12 +174,12 @@ combine {suc m} {n} zero j = j ↑ˡ (m ℕ.* n)
combine {suc m} {n} (suc i) j = n ↑ʳ (combine i j)

-- Next in progression after splitAt and remQuot
finToFun : Fin (m ^ n) → (Fin n → Fin m)
finToFun {m} {suc n} i zero = quotient (m ^ n) i
finToFun {m} {suc n} i (suc j) = finToFun (remainder {m} (m ^ n) i) j
finToFun : Fin (m ℕ.^ n) → (Fin n → Fin m)
finToFun {m} {suc n} i zero = quotient (m ℕ.^ n) i
finToFun {m} {suc n} i (suc j) = finToFun (remainder {m} (m ℕ.^ n) i) j

-- inverse of above function
funToFin : (Fin m → Fin n) → Fin (n ^ m)
funToFin : (Fin m → Fin n) → Fin (n ℕ.^ m)
funToFin {zero} f = zero
funToFin {suc m} f = combine (f zero) (funToFin (f ∘ suc))

Expand Down
Loading