Skip to content

Commit e759a75

Browse files
committed
[ add ] Nat lemmas with _∸_, _⊔_ and _⊓_
Some stuff that I've needed. I have no idea if those belong here in stdlib. I don't know if I've put those in the right place, or named them properly. Hence the draft and lack of changlog entry.
1 parent b0d29e1 commit e759a75

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,11 @@ Additions to existing modules
280280
∸-suc : m ≤ n → suc n ∸ m ≡ suc (n ∸ m)
281281
^-distribʳ-* : ∀ m n o → (n * o) ^ m ≡ n ^ m * o ^ m
282282
2*suc[n]≡2+n+n : ∀ n → 2 * (suc n) ≡ 2 + (n + n)
283+
m∸n+o≡m∸[n∸o] : ∀ {m n o} → n ≤ m → o ≤ n → (m ∸ n) + o ≡ m ∸ (n ∸ o)
284+
m∸n≤m⊔n : ∀ m n → m ∸ n ≤ m ⊔ n
285+
m⊔n∸[m∸n]≡n : ∀ m n → m ⊔ n ∸ (m ∸ n) ≡ n
286+
m⊔n≡m∸n+n : ∀ m n → m ⊔ n ≡ m ∸ n + n
287+
∣m-n∣≡m⊔n∸m⊓n : ∀ m n → ∣ m - n ∣ ≡ m ⊔ n ∸ m ⊓ n
283288
```
284289

285290
* In `Data.Product.Properties`:

src/Data/Nat/Properties.agda

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1640,6 +1640,15 @@ m≤n⇒n∸m≤n (s≤s m≤n) = m≤n⇒m≤1+n (m≤n⇒n∸m≤n m≤n)
16401640
suc ((m + n) ∸ o) ≡⟨ cong suc (+-∸-assoc m o≤n) ⟩
16411641
suc (m + (n ∸ o)) ∎
16421642

1643+
m∸n+o≡m∸[n∸o] : {m n o} n ≤ m o ≤ n (m ∸ n) + o ≡ m ∸ (n ∸ o)
1644+
m∸n+o≡m∸[n∸o] {m} {zero} {zero} z≤n _ = +-identityʳ m
1645+
m∸n+o≡m∸[n∸o] {suc m} {suc n} {zero} (s≤s n≤m) z≤n = +-identityʳ (m ∸ n)
1646+
m∸n+o≡m∸[n∸o] {suc m} {suc n} {suc o} (s≤s n≤m) (s≤s o≤n) = begin-equality
1647+
suc m ∸ suc n + suc o ≡⟨ +-suc (m ∸ n) o ⟩
1648+
suc (m ∸ n + o) ≡⟨ cong suc (m∸n+o≡m∸[n∸o] n≤m o≤n) ⟩
1649+
suc (m ∸ (n ∸ o)) ≡⟨ ∸-suc (≤-trans (m∸n≤m n o) n≤m) ⟨
1650+
suc m ∸ (n ∸ o) ∎
1651+
16431652
m≤n+o⇒m∸n≤o : m n {o} m ≤ n + o m ∸ n ≤ o
16441653
m≤n+o⇒m∸n≤o m zero le = le
16451654
m≤n+o⇒m∸n≤o zero (suc n) _ = z≤n
@@ -1728,11 +1737,30 @@ even≢odd (suc m) (suc n) eq = even≢odd m n (suc-injective (begin-equality
17281737
------------------------------------------------------------------------
17291738
-- Properties of _∸_ and _⊓_ and _⊔_
17301739

1740+
m∸n≤m⊔n : m n m ∸ n ≤ m ⊔ n
1741+
m∸n≤m⊔n m n = ≤-trans (m∸n≤m m n) (m≤m⊔n m n)
1742+
17311743
m⊓n+n∸m≡n : m n (m ⊓ n) + (n ∸ m) ≡ n
17321744
m⊓n+n∸m≡n zero n = refl
17331745
m⊓n+n∸m≡n (suc m) zero = refl
17341746
m⊓n+n∸m≡n (suc m) (suc n) = cong suc $ m⊓n+n∸m≡n m n
17351747

1748+
m⊔n∸[m∸n]≡n : m n m ⊔ n ∸ (m ∸ n) ≡ n
1749+
m⊔n∸[m∸n]≡n zero n = cong (n ∸_) (0∸n≡0 n)
1750+
m⊔n∸[m∸n]≡n (suc m) zero = n∸n≡0 m
1751+
m⊔n∸[m∸n]≡n (suc m) (suc n) = begin-equality
1752+
suc (m ⊔ n) ∸ (m ∸ n) ≡⟨ ∸-suc (m∸n≤m⊔n m n) ⟩
1753+
suc ((m ⊔ n) ∸ (m ∸ n)) ≡⟨ cong suc (m⊔n∸[m∸n]≡n m n) ⟩
1754+
suc n ∎
1755+
1756+
m⊔n≡m∸n+n : m n m ⊔ n ≡ m ∸ n + n
1757+
m⊔n≡m∸n+n zero n = sym (cong (_+ n) (0∸n≡0 n))
1758+
m⊔n≡m∸n+n (suc m) zero = sym (cong suc (+-identityʳ m))
1759+
m⊔n≡m∸n+n (suc m) (suc n) = begin-equality
1760+
suc (m ⊔ n) ≡⟨ cong suc (m⊔n≡m∸n+n m n) ⟩
1761+
suc (m ∸ n + n) ≡⟨ +-suc (m ∸ n) n ⟨
1762+
m ∸ n + suc n ∎
1763+
17361764
[m∸n]⊓[n∸m]≡0 : m n (m ∸ n) ⊓ (n ∸ m) ≡ 0
17371765
[m∸n]⊓[n∸m]≡0 zero zero = refl
17381766
[m∸n]⊓[n∸m]≡0 zero (suc n) = refl
@@ -1850,6 +1878,17 @@ m∸n≤∣m-n∣ m n with ≤-total m n
18501878
∣m-n∣≤m⊔n (suc m) zero = ≤-refl
18511879
∣m-n∣≤m⊔n (suc m) (suc n) = m≤n⇒m≤1+n (∣m-n∣≤m⊔n m n)
18521880

1881+
∣m-n∣≡m⊔n∸m⊓n : m n ∣ m - n ∣ ≡ m ⊔ n ∸ m ⊓ n
1882+
∣m-n∣≡m⊔n∸m⊓n m n with ≤-total m n
1883+
... | inj₁ m≤n = begin-equality
1884+
∣ m - n ∣ ≡⟨ m≤n⇒∣m-n∣≡n∸m m≤n ⟩
1885+
n ∸ m ≡⟨ cong₂ _∸_ (m≤n⇒m⊔n≡n m≤n) (m≤n⇒m⊓n≡m m≤n) ⟨
1886+
m ⊔ n ∸ m ⊓ n ∎
1887+
... | inj₂ n≤m = begin-equality
1888+
∣ m - n ∣ ≡⟨ m≤n⇒∣n-m∣≡n∸m n≤m ⟩
1889+
m ∸ n ≡⟨ cong₂ _∸_ (m≥n⇒m⊔n≡m n≤m) (m≥n⇒m⊓n≡n n≤m) ⟨
1890+
m ⊔ n ∸ m ⊓ n ∎
1891+
18531892
∣-∣-identityˡ : LeftIdentity 0 ∣_-_∣
18541893
∣-∣-identityˡ x = refl
18551894

0 commit comments

Comments
 (0)