Skip to content

Commit d5bb6cf

Browse files
authoredDec 18, 2024··
[ refactor ] Change definition of Data.Nat.Base._≤‴_ (agda#2518)
* Fixes agda#2504 * add missing URL * typo * remove spurious delta
1 parent fc8f1a0 commit d5bb6cf

File tree

3 files changed

+26
-23
lines changed

3 files changed

+26
-23
lines changed
 

‎CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ Non-backwards compatible changes
3030
them to name the operation `+`.
3131
* `distribˡ` and `distribʳ` are defined in the record.
3232

33+
* [issue #2504](https://github.com/agda/agda-stdlib/issues/2504) In `Data.Nat.Base` the definition of `_≤‴_` has been modified to make the witness to equality explicit in a new `≤‴-reflexive` constructor; a pattern synonym ≤‴-refl` has been added for backwards compatibility but NB. the change in parametrisation means that this pattern is *not* well-formed if the old implicit arguments `m`,`n` are supplied explicitly.
34+
3335
Minor improvements
3436
------------------
3537

‎src/Data/Nat/Base.agda

+8-4
Original file line numberDiff line numberDiff line change
@@ -379,15 +379,19 @@ s<″s⁻¹ (k , eq) = k , cong pred eq
379379

380380
-- _≤‴_: this definition is useful for induction with an upper bound.
381381

382-
data _≤‴_ : Set where
383-
≤‴-refl : {m} m ≤‴ m
384-
≤‴-step : {m n} suc m ≤‴ n m ≤‴ n
385-
386382
infix 4 _≤‴_ _<‴_ _≥‴_ _>‴_
387383

384+
data _≤‴_ (m n : ℕ) : Set
385+
388386
_<‴_ : Rel ℕ 0ℓ
389387
m <‴ n = suc m ≤‴ n
390388

389+
data _≤‴_ m n where
390+
≤‴-reflexive : m ≡ n m ≤‴ n
391+
≤‴-step : m <‴ n m ≤‴ n
392+
393+
pattern ≤‴-refl = ≤‴-reflexive refl
394+
391395
_≥‴_ : Rel ℕ 0ℓ
392396
m ≥‴ n = n ≤‴ m
393397

‎src/Data/Nat/Properties.agda

+16-19
Original file line numberDiff line numberDiff line change
@@ -2196,25 +2196,25 @@ _>″?_ = flip _<″?_
21962196
-- Properties of _≤‴_
21972197
------------------------------------------------------------------------
21982198

2199-
≤‴⇒≤″ : {m n} m ≤‴ n m ≤″ n
2200-
≤‴⇒≤″ {m = m} ≤‴-refl = 0 , +-identityʳ m
2201-
≤‴⇒≤″ {m = m} (≤‴-step m≤n) = _ , trans (+-suc m _) (≤″-proof (≤‴⇒≤″ m≤n))
2199+
≤‴⇒≤″ : m ≤‴ n m ≤″ n
2200+
≤‴⇒≤″ ≤‴-refl = _ , +-identityʳ _
2201+
≤‴⇒≤″ (≤‴-step m≤n) = _ , trans (+-suc _ _) (≤″-proof (≤‴⇒≤″ m≤n))
22022202

2203-
m≤‴m+k : {m n k} m + k ≡ n m ≤‴ n
2204-
m≤‴m+k {m} {k = zero} refl = subst (λ z m ≤‴ z) (sym (+-identityʳ m)) (≤‴-refl {m})
2205-
m≤‴m+k {m} {k = suc k} prf = ≤‴-step (m≤‴m+k {k = k} (trans (sym (+-suc m _)) prf))
2203+
m≤‴m+k : m + k ≡ n m ≤‴ n
2204+
m≤‴m+k {k = zero} = ≤‴-reflexive ∘ trans (sym (+-identityʳ _))
2205+
m≤‴m+k {k = suc _} = ≤‴-step m≤‴m+k trans (sym (+-suc _ _))
22062206

2207-
≤″⇒≤‴ : {m n} m ≤″ n m ≤‴ n
2208-
≤″⇒≤‴ m≤n = m≤‴m+k (≤″-proof m≤n)
2207+
≤″⇒≤‴ : m ≤″ n m ≤‴ n
2208+
≤″⇒≤‴ = m≤‴m+k ≤″-proof
22092209

22102210
0≤‴n : 0 ≤‴ n
22112211
0≤‴n = m≤‴m+k refl
22122212

22132213
<ᵇ⇒<‴ : T (m <ᵇ n) m <‴ n
2214-
<ᵇ⇒<‴ leq = ≤″⇒≤‴ (<ᵇ⇒<″ leq)
2214+
<ᵇ⇒<‴ = ≤″⇒≤‴ <ᵇ⇒<″
22152215

2216-
<‴⇒<ᵇ : {m n} m <‴ n T (m <ᵇ n)
2217-
<‴⇒<ᵇ leq = <″⇒<ᵇ (≤‴⇒≤″ leq)
2216+
<‴⇒<ᵇ : m <‴ n T (m <ᵇ n)
2217+
<‴⇒<ᵇ = <″⇒<ᵇ ≤‴⇒≤″
22182218

22192219
infix 4 _<‴?_ _≤‴?_ _≥‴?_ _>‴?_
22202220

@@ -2240,14 +2240,11 @@ _>‴?_ = flip _<‴?_
22402240
<‴-irrefl : Irreflexive _≡_ _<‴_
22412241
<‴-irrefl eq = <-irrefl eq ∘ ≤‴⇒≤
22422242

2243-
≤‴-irrelevant : Irrelevant {A = ℕ} _≤‴_
2244-
≤‴-irrelevant ≤‴-refl = lemma refl
2245-
where
2246-
lemma : {m n} (e : m ≡ n) (q : m ≤‴ n) subst (m ≤‴_) e ≤‴-refl ≡ q
2247-
lemma {m} e ≤‴-refl = cong (λ e subst (m ≤‴_) e ≤‴-refl) $ ≡-irrelevant e refl
2248-
lemma refl (≤‴-step m<m) with () <‴-irrefl refl m<m
2249-
≤‴-irrelevant (≤‴-step m<m) ≤‴-refl with () <‴-irrefl refl m<m
2250-
≤‴-irrelevant (≤‴-step p) (≤‴-step q) = cong ≤‴-step $ ≤‴-irrelevant p q
2243+
≤‴-irrelevant : Irrelevant _≤‴_
2244+
≤‴-irrelevant (≤‴-reflexive eq₁) (≤‴-reflexive eq₂) = cong ≤‴-reflexive (≡-irrelevant eq₁ eq₂)
2245+
≤‴-irrelevant (≤‴-reflexive eq₁) (≤‴-step q) with () <‴-irrefl eq₁ q
2246+
≤‴-irrelevant (≤‴-step p) (≤‴-reflexive eq₂) with () <‴-irrefl eq₂ p
2247+
≤‴-irrelevant (≤‴-step p) (≤‴-step q) = cong ≤‴-step (≤‴-irrelevant p q)
22512248

22522249
<‴-irrelevant : Irrelevant {A = ℕ} _<‴_
22532250
<‴-irrelevant = ≤‴-irrelevant

0 commit comments

Comments
 (0)
Please sign in to comment.