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

Remove (almost!) all external use of _≤″_ beyond Data.Nat.* #2262

Merged
merged 22 commits into from
Jun 17, 2024
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
1f1a90a
additional proofs and patterns in `Data.Nat.Properties`
jamesmckinna Jan 21, 2024
889a7a8
added two projections; refactored `pad*` operations
jamesmckinna Jan 21, 2024
b03b0a6
`CHANGELOG`
jamesmckinna Jan 21, 2024
2c06c98
removed one more use
jamesmckinna Feb 5, 2024
cae8032
removed final uses of `<″-offset` outside `Data.Nat.Base|Properties`
jamesmckinna Feb 5, 2024
235c334
rename `≤-proof` to `m≤n⇒∃[o]m+o≡n`
jamesmckinna Mar 24, 2024
f7809ab
removed new pattern synonyms
jamesmckinna Mar 24, 2024
5a71c35
interim commit: deprecate everything!
jamesmckinna Mar 24, 2024
5091a4e
add guarded monus; make arguments more irrelevant
jamesmckinna Mar 24, 2024
59986ff
fixed up `CHANGELOG`
jamesmckinna Mar 24, 2024
7724d0d
propagate use of irrelevance
jamesmckinna Mar 24, 2024
92d9076
Merge branch 'master' into vec-bounded-bis
jamesmckinna Mar 24, 2024
a9e9a2e
tidy up deprecations; reinstate `s<″s⁻¹` for `Data.Fin.Properties`
jamesmckinna Mar 24, 2024
a78538a
tightened up the deprecation story
jamesmckinna Mar 25, 2024
ca44eb0
paragraph on use of `pattern` synonyms
jamesmckinna Mar 25, 2024
f58442f
removed `import`
jamesmckinna Mar 25, 2024
2eef1ba
Merge branch 'master' into vec-bounded-bis
jamesmckinna May 6, 2024
84eebc4
Merge branch 'master' into vec-bounded-bis
jamesmckinna Jun 3, 2024
bdd91ee
Update CHANGELOG.md
jamesmckinna Jun 5, 2024
561502d
Update Base.agda
jamesmckinna Jun 5, 2024
bdb1306
inlined guarded monus definition in property
jamesmckinna Jun 5, 2024
a26a9c3
remove comment about guarded monus
jamesmckinna Jun 8, 2024
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
14 changes: 13 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,20 +75,32 @@ Additions to existing modules
nonZeroDivisor : DivMod dividend divisor → NonZero divisor
```

* Added new proofs in `Data.Nat.Properties`:
* Added new proofs and pattern synonyms in `Data.Nat.Properties`:
```agda
m≤n+o⇒m∸n≤o : ∀ m n {o} → m ≤ n + o → m ∸ n ≤ o
m<n+o⇒m∸n<o : ∀ m n {o} → .{{NonZero o}} → m < n + o → m ∸ n < o
pred-cancel-≤ : pred m ≤ pred n → (m ≡ 1 × n ≡ 0) ⊎ m ≤ n
pred-cancel-< : pred m < pred n → m < n
pred-injective : .{{NonZero m}} → .{{NonZero n}} → pred m ≡ pred n → m ≡ n
pred-cancel-≡ : pred m ≡ pred n → ((m ≡ 0 × n ≡ 1) ⊎ (m ≡ 1 × n ≡ 0)) ⊎ m ≡ n

<⇒<″ : _<_ ⇒ _<″_
≤-proof : m ≤ n → ∃ λ k → m + k ≡ n

pattern ≤-offset k = k , refl
pattern <-offset k = ≤-offset k
```

* Added new functions in `Data.String.Base`:
```agda
map : (Char → Char) → String → String
```

* Added new functions in `Data.Vec.Bounded.Base`:
```agda
isBounded : (as : Vec≤ A n) → Vec≤.length as ≤ n
toVec : (as : Vec≤ A n) → Vec A (Vec≤.length as)
```

* In `Function.Bundles`, added `_⟶ₛ_` as a synonym for `Func` that can
be used infix.
42 changes: 27 additions & 15 deletions src/Data/Nat/Properties.agda
Original file line number Diff line number Diff line change
Expand Up @@ -2101,31 +2101,43 @@ n≤′m+n (suc m) n = ≤′-step (n≤′m+n m n)
-- Properties of _≤″_ and _<″_
------------------------------------------------------------------------

m<ᵇn⇒1+m+[n-1+m]≡n : ∀ m n → T (m <ᵇ n) → suc m + (n ∸ suc m) ≡ n
m<ᵇn⇒1+m+[n-1+m]≡n m n lt = m+[n∸m]≡n (<ᵇ⇒< m n lt)
-- equivalence of _≤″_ to _≤_

m<ᵇ1+m+n : ∀ m {n} → T (m <ᵇ suc (m + n))
m<ᵇ1+m+n m = <⇒<ᵇ (m≤m+n (suc m) _)
≤⇒≤″ : _≤_ ⇒ _≤″_
≤⇒≤″ = less-than-or-equal ∘ m+[n∸m]≡n

<⇒<″ : T (m <ᵇ n) → m <″ n
<⇒<″ {m} {n} leq = less-than-or-equal (m+[n∸m]≡n (<ᵇ⇒< m n leq))
<⇒<″ : _<_ ⇒ _<″_
<⇒<″ = ≤⇒≤″

<″⇒<ᵇ : ∀ {m n} → m <″ n → T (m <ᵇ n)
<″⇒<ᵇ {m} (<″-offset k) = <⇒<ᵇ (m≤m+n (suc m) k)
≤″⇒≤ : _≤″_ ⇒ _≤_
≤″⇒≤ (≤″-offset k) = m≤m+n _ k

-- equivalence to the old definition of _≤″_

≤″-proof : ∀ {m n} (le : m ≤″ n) → let less-than-or-equal {k} _ = le in m + k ≡ n
≤″-proof : (le : m ≤″ n) → let less-than-or-equal {k} _ = le in m + k ≡ n
≤″-proof (less-than-or-equal prf) = prf

-- equivalence to _≤_
-- yielding corresponding proof and `pattern` aliases for _≤″_/_<_

≤″⇒≤ : _≤″_ ⇒ _≤_
≤″⇒≤ {zero} (≤″-offset k) = z≤n {k}
≤″⇒≤ {suc m} (≤″-offset k) = s≤s (≤″⇒≤ (≤″-offset k))
≤-proof : m ≤ n → ∃ λ k → m + k ≡ n
≤-proof le = _ , ≤″-proof (≤⇒≤″ le)

≤⇒≤″ : _≤_ ⇒ _≤″_
≤⇒≤″ = less-than-or-equal ∘ m+[n∸m]≡n
pattern ≤-offset k = k , refl
pattern <-offset k = ≤-offset k

-- equivalence of _<″_ to _<ᵇ_

m<ᵇn⇒1+m+[n-1+m]≡n : ∀ m n → T (m <ᵇ n) → suc m + (n ∸ suc m) ≡ n
m<ᵇn⇒1+m+[n-1+m]≡n m n lt = m+[n∸m]≡n (<ᵇ⇒< m n lt)

m<ᵇ1+m+n : ∀ m {n} → T (m <ᵇ suc (m + n))
m<ᵇ1+m+n m = <⇒<ᵇ (m≤m+n (suc m) _)

<ᵇ⇒<″ : T (m <ᵇ n) → m <″ n
<ᵇ⇒<″ {m} {n} = <⇒<″ ∘ (<ᵇ⇒< m n)

<″⇒<ᵇ : ∀ {m n} → m <″ n → T (m <ᵇ n)
<″⇒<ᵇ {m} (<″-offset k) = <⇒<ᵇ (m≤m+n (suc m) k)

-- NB: we use the builtin function `_<ᵇ_ : (m n : ℕ) → Bool` here so
-- that the function quickly decides whether to return `yes` or `no`.
Expand Down
17 changes: 12 additions & 5 deletions src/Data/Vec/Bounded/Base.agda
Original file line number Diff line number Diff line change
Expand Up @@ -43,20 +43,27 @@ record Vec≤ (A : Set a) (n : ℕ) : Set a where
vec : Vec A length
.bound : length ≤ n

-- projection to recompute irrelevant field
isBounded : (as : Vec≤ A n) → Vec≤.length as ≤ n
isBounded as@(_ , m≤n) = recompute (_ ℕ.≤? _) m≤n

------------------------------------------------------------------------
-- Conversion functions

toVec : (as : Vec≤ A n) → Vec A (Vec≤.length as)
toVec as@(vs , _) = vs

fromVec : Vec A n → Vec≤ A n
fromVec v = v , ℕ.≤-refl

padRight : A → Vec≤ A n → Vec A n
padRight a (vs , m≤n)
with ≤″-offset k ← recompute (_ ℕ.≤″? _) (ℕ.≤⇒≤″ m≤n)
padRight a as@(vs , m≤n)
with ℕ.≤-offset k ← ℕ.≤-proof (isBounded as)
= vs Vec.++ Vec.replicate k a

padLeft : A → Vec≤ A n → Vec A n
padLeft a record { length = m ; vec = vs ; bound = m≤n }
with ≤″-offset k ← recompute (_ ℕ.≤? _) (ℕ.≤⇒≤″ m≤n)
with ℕ.≤-offset k ← ℕ.≤-proof (recompute (_ ℕ.≤? _) m≤n)
rewrite ℕ.+-comm m k
= Vec.replicate k a Vec.++ vs

Expand All @@ -72,7 +79,7 @@ private

padBoth : A → A → Vec≤ A n → Vec A n
padBoth aₗ aᵣ record { length = m ; vec = vs ; bound = m≤n }
with ≤″-offset k ← recompute (_ ℕ.≤? _) (ℕ.≤⇒≤″ m≤n)
with ℕ.≤-offset k ← ℕ.≤-proof (recompute (_ ℕ.≤? _) m≤n)
rewrite split m k
= Vec.replicate ⌊ k /2⌋ aₗ
Vec.++ vs
Expand All @@ -83,7 +90,7 @@ fromList : (as : List A) → Vec≤ A (List.length as)
fromList = fromVec ∘ Vec.fromList

toList : Vec≤ A n → List A
toList = Vec.toList ∘ Vec≤.vec
toList = Vec.toList ∘ toVec

------------------------------------------------------------------------
-- Creating new Vec≤ vectors
Expand Down