Skip to content

Commit 92b3269

Browse files
authored
[ refactor ] Data.Nat.Properties.∸-suc to make m≤n argument irrelevant (#2939)
* [ refactor ] #2757 to make argument to `∸-suc` irrelevant * [ refactor ] #2757 to make argument to `∸-suc` irrelevant * refactor: more proofs, plus comment about eta-expansion
1 parent 12b1d16 commit 92b3269

2 files changed

Lines changed: 12 additions & 9 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ Minor improvements
6161
Data.Nat.Binary.Subtraction
6262
Data.Nat.Combinatorics
6363
```
64+
Moreover, these have been strengthened to take an irrelevant `m ≤ n` argument.
6465

6566
* In `Data.Vec.Relation.Binary.Pointwise.{Inductive,Extensional}`, the types of
6667
`refl`, `sym`, and `trans` have been weakened to allow relations of different
@@ -294,7 +295,7 @@ Additions to existing modules
294295
* In `Data.Nat.Properties`:
295296
```agda
296297
≟-≢ : (m≢n : m ≢ n) → (m ≟ n) ≡ no m≢n
297-
∸-suc : m ≤ n → suc n ∸ m ≡ suc (n ∸ m)
298+
∸-suc : .(m ≤ n) → suc n ∸ m ≡ suc (n ∸ m)
298299
^-distribʳ-* : ∀ m n o → (n * o) ^ m ≡ n ^ m * o ^ m
299300
2*suc[n]≡2+n+n : ∀ n → 2 * (suc n) ≡ 2 + (n + n)
300301
```

src/Data/Nat/Properties.agda

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1540,9 +1540,9 @@ pred[m∸n]≡m∸[1+n] (suc m) (suc n) = pred[m∸n]≡m∸[1+n] m n
15401540
------------------------------------------------------------------------
15411541
-- Properties of _∸_ and _≤_/_<_
15421542

1543-
∸-suc : m ≤ n suc n ∸ m ≡ suc (n ∸ m)
1544-
∸-suc z≤n = refl
1545-
∸-suc (s≤s m≤n) = ∸-suc m≤n
1543+
∸-suc : .(m ≤ n) suc n ∸ m ≡ suc (n ∸ m)
1544+
∸-suc {m = zero} _ = refl
1545+
∸-suc {m = suc _} {n = suc _} m≤n = ∸-suc (s≤s⁻¹ m≤n)
15461546

15471547
m∸n≤m : m n m ∸ n ≤ m
15481548
m∸n≤m n zero = ≤-refl
@@ -1633,7 +1633,7 @@ m≤n⇒n∸m≤n (s≤s m≤n) = m≤n⇒m≤1+n (m≤n⇒n∸m≤n m≤n)
16331633
∸-+-assoc (suc m) zero o = refl
16341634
∸-+-assoc (suc m) (suc n) o = ∸-+-assoc m n o
16351635

1636-
+-∸-assoc : m {n o} o ≤ n (m + n) ∸ o ≡ m + (n ∸ o)
1636+
+-∸-assoc : m {n o} .(o ≤ n) (m + n) ∸ o ≡ m + (n ∸ o)
16371637
+-∸-assoc zero {n = n} {o = o} _ = begin-equality n ∸ o ∎
16381638
+-∸-assoc (suc m) {n = n} {o = o} o≤n = begin-equality
16391639
suc (m + n) ∸ o ≡⟨ ∸-suc (m≤n⇒m≤o+n m o≤n) ⟩
@@ -1674,16 +1674,16 @@ m+n∸n≡m m n = begin-equality
16741674
m+n∸m≡n : m n m + n ∸ m ≡ n
16751675
m+n∸m≡n m n = trans (cong (_∸ m) (+-comm m n)) (m+n∸n≡m n m)
16761676

1677-
m+[n∸m]≡n : m ≤ n m + (n ∸ m) ≡ n
1677+
m+[n∸m]≡n : .(m ≤ n) m + (n ∸ m) ≡ n
16781678
m+[n∸m]≡n {m} {n} m≤n = begin-equality
1679-
m + (n ∸ m) ≡⟨ sym $ +-∸-assoc m m≤n
1679+
m + (n ∸ m) ≡⟨ +-∸-assoc m m≤n
16801680
(m + n) ∸ m ≡⟨ cong (_∸ m) (+-comm m n) ⟩
16811681
(n + m) ∸ m ≡⟨ m+n∸n≡m n m ⟩
16821682
n ∎
16831683

16841684
m∸n+n≡m : {m n} n ≤ m (m ∸ n) + n ≡ m
16851685
m∸n+n≡m {m} {n} n≤m = begin-equality
1686-
(m ∸ n) + n ≡⟨ sym (+-∸-comm n n≤m) ⟩
1686+
(m ∸ n) + n ≡⟨ +-∸-comm n n≤m
16871687
(m + n) ∸ n ≡⟨ m+n∸n≡m m n ⟩
16881688
m ∎
16891689

@@ -2136,9 +2136,11 @@ n≤′m+n (suc m) n = ≤′-step (n≤′m+n m n)
21362136
------------------------------------------------------------------------
21372137

21382138
-- equivalence of _≤″_ to _≤_
2139+
-- NB the change in #2939 making the m≤n argument to m+[n∸m]≡n irrelevant
2140+
-- means that this proof must now be eta-expanded in order to typecheck.
21392141

21402142
≤⇒≤″ : _≤_ ⇒ _≤″_
2141-
≤⇒≤″ = (_ ,_) ∘ m+[n∸m]≡n
2143+
≤⇒≤″ m≤n = (_ , m+[n∸m]≡n m≤n)
21422144

21432145
<⇒<″ : _<_ ⇒ _<″_
21442146
<⇒<″ = ≤⇒≤″

0 commit comments

Comments
 (0)