Skip to content

Commit aab6732

Browse files
[ add ] ∸-suc lemma for natural numbers (#2757)
* [add]: ∸-suc in Data.Nat.Properties * [changelog]: ∸-suc in Data.Nat.Properties * [refactor]: use ∸-suc instead of +-∸-assoc 1 * [refactor]: +-∸-assoc as proposed by jamesmckinna * Update src/Data/Nat/Properties.agda whitespace * [refactor]: replace usages of +-∸-assoc 1 with ∸-suc --------- Co-authored-by: jamesmckinna <[email protected]>
1 parent 628f0a2 commit aab6732

File tree

7 files changed

+33
-15
lines changed

7 files changed

+33
-15
lines changed

CHANGELOG.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,15 @@ Non-backwards compatible changes
1717
Minor improvements
1818
------------------
1919

20+
* Refactored usages of `+-∸-assoc 1` to `∸-suc` in:
21+
```agda
22+
README.Data.Fin.Relation.Unary.Top
23+
Algebra.Properties.Semiring.Binomial
24+
Data.Fin.Subset.Properties
25+
Data.Nat.Binary.Subtraction
26+
Data.Nat.Combinatorics
27+
```
28+
2029
Deprecated modules
2130
------------------
2231

@@ -28,3 +37,9 @@ New modules
2837

2938
Additions to existing modules
3039
-----------------------------
40+
41+
* In `Data.Nat.Properties`:
42+
```agda
43+
∸-suc : m ≤ n → suc n ∸ m ≡ suc (n ∸ m)
44+
```
45+

doc/README/Data/Fin/Relation/Unary/Top.agda

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
module README.Data.Fin.Relation.Unary.Top where
1818

1919
open import Data.Nat.Base using (ℕ; zero; suc; _∸_; _≤_)
20-
open import Data.Nat.Properties using (n∸n≡0; +-∸-assoc; ≤-reflexive)
20+
open import Data.Nat.Properties using (n∸n≡0; ∸-suc; ≤-reflexive)
2121
open import Data.Fin.Base using (Fin; zero; suc; toℕ; fromℕ; inject₁; _>_)
2222
open import Data.Fin.Properties using (toℕ-fromℕ; toℕ<n; toℕ-inject₁)
2323
open import Data.Fin.Induction hiding (>-weakInduction)
@@ -76,7 +76,7 @@ opposite-prop {suc n} i with view i
7676
... | ‵fromℕ rewrite toℕ-fromℕ n | n∸n≡0 n = refl
7777
... | ‵inject₁ j = begin
7878
suc (toℕ (opposite j)) ≡⟨ cong suc (opposite-prop j) ⟩
79-
suc (n ∸ suc (toℕ j)) ≡⟨ +-∸-assoc 1 (toℕ<n j) ⟨
79+
suc (n ∸ suc (toℕ j)) ≡⟨ ∸-suc (toℕ<n j) ⟨
8080
n ∸ toℕ j ≡⟨ cong (n ∸_) (toℕ-inject₁ j) ⟨
8181
n ∸ toℕ (inject₁ j) ∎ where open ≡-Reasoning
8282

src/Algebra/Properties/Semiring/Binomial.agda

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ open import Data.Nat.Base as ℕ hiding (_+_; _*_; _^_)
2121
open import Data.Nat.Combinatorics
2222
using (_C_; nCn≡1; nC1≡n; nCk+nC[k+1]≡[n+1]C[k+1])
2323
open import Data.Nat.Properties as ℕ
24-
using (<⇒<ᵇ; n<1+n; n∸n≡0; +-∸-assoc)
24+
using (<⇒<ᵇ; n<1+n; n∸n≡0; ∸-suc)
2525
open import Data.Fin.Base as Fin
2626
using (Fin; zero; suc; toℕ; fromℕ; inject₁)
2727
open import Data.Fin.Patterns using (0F)
@@ -149,7 +149,7 @@ y*lemma x*y≈y*x {n} j = begin
149149
k≡j = toℕ-inject₁ j
150150

151151
[n-k]≡[n-j] : [n-k] ≡ [n-j]
152-
[n-k]≡[n-j] = ≡.trans (cong (n ∸_) k≡j) (+-∸-assoc 1 (toℕ<n j))
152+
[n-k]≡[n-j] = ≡.trans (cong (n ∸_) k≡j) (∸-suc (toℕ<n j))
153153

154154
------------------------------------------------------------------------
155155
-- Now, a lemma characterising the sum of the term₁ and term₂ expressions

src/Data/Fin/Subset/Properties.agda

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,7 @@ p∪∁p≡⊤ (inside ∷ p) = cong (inside ∷_) (p∪∁p≡⊤ p)
367367
∣∁p∣≡n∸∣p∣ (inside ∷ p) = ∣∁p∣≡n∸∣p∣ p
368368
∣∁p∣≡n∸∣p∣ (outside ∷ p) = begin
369369
suc ∣ ∁ p ∣ ≡⟨ cong suc (∣∁p∣≡n∸∣p∣ p) ⟩
370-
suc (_ ∸ ∣ p ∣) ≡⟨ sym (ℕ.+-∸-assoc 1 (∣p∣≤n p)) ⟩
370+
suc (_ ∸ ∣ p ∣) ≡⟨ sym (ℕ.∸-suc (∣p∣≤n p)) ⟩
371371
suc _ ∸ ∣ p ∣ ∎
372372
where open ≡-Reasoning
373373

src/Data/Nat/Binary/Subtraction.agda

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ toℕ-homo-∸ 2[1+ x ] 1+[2 y ] with x <? y
8888
... | no x≮y = begin
8989
ℕ.suc (2 ℕ.* toℕ (x ∸ y)) ≡⟨ cong (ℕ.suc ∘ (2 ℕ.*_)) (toℕ-homo-∸ x y) ⟩
9090
ℕ.suc (2 ℕ.* (toℕ x ℕ.∸ toℕ y)) ≡⟨ cong ℕ.suc (ℕ.*-distribˡ-∸ 2 (toℕ x) (toℕ y)) ⟩
91-
ℕ.suc (2 ℕ.* toℕ x ℕ.∸ 2 ℕ.* toℕ y) ≡⟨ sym (ℕ.+-∸-assoc 1 (ℕ.*-monoʳ-≤ 2 (toℕ-mono-≤ (≮⇒≥ x≮y)))) ⟩
91+
ℕ.suc (2 ℕ.* toℕ x ℕ.∸ 2 ℕ.* toℕ y) ≡⟨ sym (ℕ.∸-suc (ℕ.*-monoʳ-≤ 2 (toℕ-mono-≤ (≮⇒≥ x≮y)))) ⟩
9292
ℕ.suc (2 ℕ.* toℕ x) ℕ.∸ 2 ℕ.* toℕ y ≡⟨ sym (cong (ℕ._∸ 2 ℕ.* toℕ y) (ℕ.+-suc (toℕ x) (1 ℕ.* toℕ x))) ⟩
9393
2 ℕ.* (ℕ.suc (toℕ x)) ℕ.∸ ℕ.suc (2 ℕ.* toℕ y) ∎
9494
where open ≡-Reasoning

src/Data/Nat/Combinatorics.agda

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ module _ {n k} (k<n : k < n) where
122122
[n-k-1]! = [n-k-1] !
123123

124124
[n-k]≡1+[n-k-1] : [n-k] ≡ suc [n-k-1]
125-
[n-k]≡1+[n-k-1] = +-∸-assoc 1 k<n
125+
[n-k]≡1+[n-k-1] = ∸-suc k<n
126126

127127

128128
[n-k]*[n-k-1]!≡[n-k]! : [n-k] * [n-k-1]! ≡ [n-k]!

src/Data/Nat/Properties.agda

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1524,6 +1524,10 @@ pred[m∸n]≡m∸[1+n] (suc m) (suc n) = pred[m∸n]≡m∸[1+n] m n
15241524
------------------------------------------------------------------------
15251525
-- Properties of _∸_ and _≤_/_<_
15261526

1527+
∸-suc : m ≤ n suc n ∸ m ≡ suc (n ∸ m)
1528+
∸-suc z≤n = refl
1529+
∸-suc (s≤s m≤n) = ∸-suc m≤n
1530+
15271531
m∸n≤m : m n m ∸ n ≤ m
15281532
m∸n≤m n zero = ≤-refl
15291533
m∸n≤m zero (suc n) = ≤-refl
@@ -1614,12 +1618,11 @@ m≤n⇒n∸m≤n (s≤s m≤n) = m≤n⇒m≤1+n (m≤n⇒n∸m≤n m≤n)
16141618
∸-+-assoc (suc m) (suc n) o = ∸-+-assoc m n o
16151619

16161620
+-∸-assoc : m {n o} o ≤ n (m + n) ∸ o ≡ m + (n ∸ o)
1617-
+-∸-assoc m (z≤n {n = n}) = begin-equality m + n ∎
1618-
+-∸-assoc m (s≤s {m = o} {n = n} o≤n) = begin-equality
1619-
(m + suc n) ∸ suc o ≡⟨ cong (_∸ suc o) (+-suc m n) ⟩
1620-
suc (m + n) ∸ suc o ≡⟨⟩
1621-
(m + n) ∸ o ≡⟨ +-∸-assoc m o≤n ⟩
1622-
m + (n ∸ o) ∎
1621+
+-∸-assoc zero {n = n} {o = o} _ = begin-equality n ∸ o ∎
1622+
+-∸-assoc (suc m) {n = n} {o = o} o≤n = begin-equality
1623+
suc (m + n) ∸ o ≡⟨ ∸-suc (m≤n⇒m≤o+n m o≤n) ⟩
1624+
suc ((m + n) ∸ o) ≡⟨ cong suc (+-∸-assoc m o≤n) ⟩
1625+
suc (m + (n ∸ o)) ∎
16231626

16241627
m≤n+o⇒m∸n≤o : m n {o} m ≤ n + o m ∸ n ≤ o
16251628
m≤n+o⇒m∸n≤o m zero le = le
@@ -1634,7 +1637,7 @@ m<n+o⇒m∸n<o (suc m) (suc n) lt = m<n+o⇒m∸n<o m n (s<s⁻¹
16341637
m+n≤o⇒m≤o∸n : m {n o} m + n ≤ o m ≤ o ∸ n
16351638
m+n≤o⇒m≤o∸n zero le = z≤n
16361639
m+n≤o⇒m≤o∸n (suc m) (s≤s le)
1637-
rewrite +-∸-assoc 1 (m+n≤o⇒n≤o m le) = s≤s (m+n≤o⇒m≤o∸n m le)
1640+
rewrite ∸-suc (m+n≤o⇒n≤o m le) = s≤s (m+n≤o⇒m≤o∸n m le)
16381641

16391642
m≤o∸n⇒m+n≤o : m {n o} (n≤o : n ≤ o) m ≤ o ∸ n m + n ≤ o
16401643
m≤o∸n⇒m+n≤o m z≤n le rewrite +-identityʳ m = le
@@ -1671,7 +1674,7 @@ m∸n+n≡m {m} {n} n≤m = begin-equality
16711674
m∸[m∸n]≡n : {m n} n ≤ m m ∸ (m ∸ n) ≡ n
16721675
m∸[m∸n]≡n {m} {_} z≤n = n∸n≡0 m
16731676
m∸[m∸n]≡n {suc m} {suc n} (s≤s n≤m) = begin-equality
1674-
suc m ∸ (m ∸ n) ≡⟨ +-∸-assoc 1 (m∸n≤m m n) ⟩
1677+
suc m ∸ (m ∸ n) ≡⟨ ∸-suc (m∸n≤m m n) ⟩
16751678
suc (m ∸ (m ∸ n)) ≡⟨ cong suc (m∸[m∸n]≡n n≤m) ⟩
16761679
suc n ∎
16771680

0 commit comments

Comments
 (0)