Skip to content

Commit c36eae9

Browse files
authored
Miscellaneous improvements done during finite cycle group implementation (#1080)
1 parent 14025c1 commit c36eae9

File tree

4 files changed

+91
-8
lines changed

4 files changed

+91
-8
lines changed

CHANGELOG.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ Bug-fixes
2121
* The incorrectly named proof `p⊆q⇒∣p∣<∣q∣ : p ⊆ q → ∣ p ∣ ≤ ∣ q ∣` in
2222
`Data.Fin.Subset.Properties` now has the correct name `p⊆q⇒∣p∣≤∣q∣`.
2323

24+
* The incorrectly named proofs `∀[m≤n⇒m≢o]⇒o<n : (∀ {m} → m ≤ n → m ≢ o) → n < o`
25+
and `∀[m<n⇒m≢o]⇒o≤n : (∀ {m} → m < n → m ≢ o) → n ≤ o` in `Data.Nat.Properties`
26+
now has the correct names `∀[m≤n⇒m≢o]⇒n<o` and `∀[m<n⇒m≢o]⇒n≤o`.
27+
28+
2429
* Changed the definition of `_⊓_` for `Codata.Conat`; it was mistakenly using
2530
`_⊔_` in a recursive call.
2631

@@ -268,6 +273,12 @@ attached to all deprecated names to discourage their use.
268273
Any¬→¬All ↦ Any¬⇒¬All
269274
```
270275

276+
* In `Data.Nat.Properties
277+
```agda
278+
∀[m≤n⇒m≢o]⇒o<n ↦ ∀[m≤n⇒m≢o]⇒n<o
279+
∀[m<n⇒m≢o]⇒o≤n ↦ ∀[m<n⇒m≢o]⇒n≤o
280+
```
281+
271282
* In `Algebra.Morphism.Definitions` and `Relation.Binary.Morphism.Definitions`
272283
the type `Morphism A B` has been deprecated in favour of the standard
273284
function notation `A → B`.
@@ -409,6 +420,8 @@ Other major additions
409420
Other minor additions
410421
---------------------
411422

423+
* Added commutativeSemigroup to `Algebra.Bundles.CommutativeMonoid`
424+
412425
* Added new record to `Algebra.Bundles`:
413426
```
414427
+-rawGroup : RawGroup c ℓ
@@ -540,6 +553,21 @@ Other minor additions
540553
_∷ʳ_ : DiffList A → A → DiffList A
541554
```
542555

556+
* Added new proofs to `Data.Nat.DivMod`:
557+
```agda
558+
%-distribˡ-* : (m * n) % d ≡ ((m % d) * (n % d)) % d
559+
```
560+
561+
* Added new proofs to `Data.Nat.Properties`:
562+
```agda
563+
∸-cancelʳ-≡ : o ≤ m → o ≤ n → m ∸ o ≡ n ∸ o → m ≡ n
564+
⌊n/2⌋+⌈n/2⌉≡n : ⌊ n /2⌋ + ⌈ n /2⌉ ≡ n
565+
⌊n/2⌋≤n : ⌊ n /2⌋ ≤ n
566+
⌊n/2⌋<n : ⌊ suc n /2⌋ < suc n
567+
⌈n/2⌉≤n : ⌈ n /2⌉ ≤ n
568+
⌈n/2⌉<n : ⌈ suc (suc n) /2⌉ < suc (suc n)
569+
```
570+
543571
* Added new properties to `Data.Fin.Subset`:
544572
```agda
545573
_⊂_ : Subset n → Subset n → Set

src/Algebra/Bundles.agda

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,9 @@ record CommutativeMonoid c ℓ : Set (suc (c ⊔ ℓ)) where
187187
monoid : Monoid _ _
188188
monoid = record { isMonoid = isMonoid }
189189

190+
commutativeSemigroup : CommutativeSemigroup _ _
191+
commutativeSemigroup = record { isCommutativeSemigroup = isCommutativeSemigroup }
192+
190193
open Monoid monoid public using (rawMagma; magma; semigroup; rawMonoid)
191194

192195

src/Data/Nat/DivMod.agda

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ open import Data.Nat.Base as Nat
1616
open import Data.Nat.DivMod.Core
1717
open import Data.Nat.Divisibility.Core
1818
open import Data.Nat.Properties
19+
open import Data.Nat.Tactic.RingSolver
1920
open import Relation.Binary.PropositionalEquality
2021
open import Relation.Nullary.Decidable using (False)
2122

@@ -115,6 +116,22 @@ m<[1+n%d]⇒m≤[n%d] {m} n (suc d-1) = k<1+a[modₕ]n⇒k≤a[modₕ]n 0 m n d-
115116
(m % d + n % d + (n / d) * d) % d ≡⟨ [m+kn]%n≡m%n (m % d + n % d) (n / d) d-1 ⟩
116117
(m % d + n % d) % d ∎
117118

119+
%-distribˡ-* : m n d {≢0} ((m * n) % d) {≢0} ≡ (((m % d) {≢0} * (n % d) {≢0}) % d) {≢0}
120+
%-distribˡ-* m n d@(suc d-1) = begin-equality
121+
(m * n) % d ≡⟨ cong (λ h (h * n) % d) (m≡m%n+[m/n]*n m d-1) ⟩
122+
((m′ + k * d) * n) % d ≡⟨ cong (λ h ((m′ + k * d) * h) % d) (m≡m%n+[m/n]*n n d-1) ⟩
123+
((m′ + k * d) * (n′ + j * d)) % d ≡⟨ cong (_% d) (lemma m′ n′ k j d) ⟩
124+
(m′ * n′ + (m′ * j + (n′ + j * d) * k) * d) % d ≡⟨ [m+kn]%n≡m%n (m′ * n′) (m′ * j + (n′ + j * d) * k) d-1 ⟩
125+
(m′ * n′) % d ≡⟨⟩
126+
((m % d) * (n % d)) % d ∎
127+
where
128+
m′ = m % d
129+
n′ = n % d
130+
k = m / d
131+
j = n / d
132+
lemma : m′ n′ k j d (m′ + k * d) * (n′ + j * d) ≡ m′ * n′ + (m′ * j + (n′ + j * d) * k) * d
133+
lemma = solve-∀
134+
118135
%-remove-+ˡ : {m} n {d} {≢0} d ∣ m ((m + n) % d) {≢0} ≡ (n % d) {≢0}
119136
%-remove-+ˡ {m} n {d@(suc d-1)} (divides p refl) = begin-equality
120137
(p * d + n) % d ≡⟨ cong (_% d) (+-comm (p * d) n) ⟩

src/Data/Nat/Properties.agda

Lines changed: 43 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -377,18 +377,18 @@ m<n⇒m≤1+n : ∀ {m n} → m < n → m ≤ suc n
377377
m<n⇒m≤1+n (s≤s z≤n) = z≤n
378378
m<n⇒m≤1+n (s≤s (s≤s m<n)) = s≤s (m<n⇒m≤1+n (s≤s m<n))
379379

380-
∀[m≤n⇒m≢o]⇒o<n : n o ( {m} m ≤ n m ≢ o) n < o
381-
∀[m≤n⇒m≢o]⇒o<n _ zero m≤n⇒n≢0 = contradiction refl (m≤n⇒n≢0 z≤n)
382-
∀[m≤n⇒m≢o]⇒o<n zero (suc o) _ = 0<1+n
383-
∀[m≤n⇒m≢o]⇒o<n (suc n) (suc o) m≤n⇒n≢o = s≤s (∀[m≤n⇒m≢o]⇒o<n n o rec)
380+
∀[m≤n⇒m≢o]⇒n<o : n o ( {m} m ≤ n m ≢ o) n < o
381+
∀[m≤n⇒m≢o]⇒n<o _ zero m≤n⇒n≢0 = contradiction refl (m≤n⇒n≢0 z≤n)
382+
∀[m≤n⇒m≢o]⇒n<o zero (suc o) _ = 0<1+n
383+
∀[m≤n⇒m≢o]⇒n<o (suc n) (suc o) m≤n⇒n≢o = s≤s (∀[m≤n⇒m≢o]⇒n<o n o rec)
384384
where
385385
rec : {m} m ≤ n m ≢ o
386386
rec m≤n refl = m≤n⇒n≢o (s≤s m≤n) refl
387387

388-
∀[m<n⇒m≢o]⇒o≤n : n o ( {m} m < n m ≢ o) n ≤ o
389-
∀[m<n⇒m≢o]⇒o≤n zero n _ = z≤n
390-
∀[m<n⇒m≢o]⇒o≤n (suc n) zero m<n⇒m≢0 = contradiction refl (m<n⇒m≢0 0<1+n)
391-
∀[m<n⇒m≢o]⇒o≤n (suc n) (suc o) m<n⇒m≢o = s≤s (∀[m<n⇒m≢o]⇒o≤n n o rec)
388+
∀[m<n⇒m≢o]⇒n≤o : n o ( {m} m < n m ≢ o) n ≤ o
389+
∀[m<n⇒m≢o]⇒n≤o zero n _ = z≤n
390+
∀[m<n⇒m≢o]⇒n≤o (suc n) zero m<n⇒m≢0 = contradiction refl (m<n⇒m≢0 0<1+n)
391+
∀[m<n⇒m≢o]⇒n≤o (suc n) (suc o) m<n⇒m≢o = s≤s (∀[m<n⇒m≢o]⇒n≤o n o rec)
392392
where
393393
rec : {m} m < n m ≢ o
394394
rec x<m refl = m<n⇒m≢o (s≤s x<m) refl
@@ -1520,6 +1520,10 @@ m≮m∸n (suc m) (suc n) = m≮m∸n m n ∘ ≤-trans (n≤1+n (suc m))
15201520
∸-cancelˡ-≡ {n = suc n} (s≤s _) z≤n eq = contradiction (sym eq) (1+m≢m∸n n)
15211521
∸-cancelˡ-≡ {_} (s≤s n≤m) (s≤s o≤m) eq = cong suc (∸-cancelˡ-≡ n≤m o≤m eq)
15221522

1523+
∸-cancelʳ-≡ : {m n o} o ≤ m o ≤ n m ∸ o ≡ n ∸ o m ≡ n
1524+
∸-cancelʳ-≡ z≤n z≤n eq = eq
1525+
∸-cancelʳ-≡ (s≤s o≤m) (s≤s o≤n) eq = cong suc (∸-cancelʳ-≡ o≤m o≤n eq)
1526+
15231527
m∸n≡0⇒m≤n : {m n} m ∸ n ≡ 0 m ≤ n
15241528
m∸n≡0⇒m≤n {zero} {_} _ = z≤n
15251529
m∸n≡0⇒m≤n {suc m} {suc n} eq = s≤s (m∸n≡0⇒m≤n eq)
@@ -1798,6 +1802,22 @@ m≤∣m-n∣+n m n = subst (m ≤_) (+-comm n _) (m≤n+∣m-n∣ m n)
17981802
suc (⌊ n /2⌋ + ⌊ suc n /2⌋) ≡⟨ cong suc (⌊n/2⌋+⌈n/2⌉≡n n) ⟩
17991803
suc n ∎
18001804

1805+
⌊n/2⌋≤n : n ⌊ n /2⌋ ≤ n
1806+
⌊n/2⌋≤n zero = z≤n
1807+
⌊n/2⌋≤n (suc zero) = z≤n
1808+
⌊n/2⌋≤n (suc (suc n)) = s≤s (≤-step (⌊n/2⌋≤n n))
1809+
1810+
⌊n/2⌋<n : n ⌊ suc n /2⌋ < suc n
1811+
⌊n/2⌋<n zero = s≤s z≤n
1812+
⌊n/2⌋<n (suc n) = s≤s (s≤s (⌊n/2⌋≤n n))
1813+
1814+
⌈n/2⌉≤n : n ⌈ n /2⌉ ≤ n
1815+
⌈n/2⌉≤n zero = z≤n
1816+
⌈n/2⌉≤n (suc n) = s≤s (⌊n/2⌋≤n n)
1817+
1818+
⌈n/2⌉<n : n ⌈ suc (suc n) /2⌉ < suc (suc n)
1819+
⌈n/2⌉<n n = s≤s (⌊n/2⌋<n n)
1820+
18011821
------------------------------------------------------------------------
18021822
-- Properties of _≤′_ and _<′_
18031823
------------------------------------------------------------------------
@@ -2234,3 +2254,18 @@ n∸m≤n m n = m∸n≤m n m
22342254
"Warning: n∸m≤n was deprecated in v1.2.
22352255
Please use m∸n≤m instead (note, you will need to switch the argument order)."
22362256
#-}
2257+
2258+
-- Version 1.3
2259+
2260+
∀[m≤n⇒m≢o]⇒o<n : n o ( {m} m ≤ n m ≢ o) n < o
2261+
∀[m≤n⇒m≢o]⇒o<n = ∀[m≤n⇒m≢o]⇒n<o
2262+
{-# WARNING_ON_USAGE n∸m≤∣n-m∣
2263+
"Warning: ∀[m≤n⇒m≢o]⇒o<n was deprecated in v1.3.
2264+
Please use ∀[m≤n⇒m≢o]⇒n<o instead."
2265+
#-}
2266+
∀[m<n⇒m≢o]⇒o≤n : n o ( {m} m < n m ≢ o) n ≤ o
2267+
∀[m<n⇒m≢o]⇒o≤n = ∀[m<n⇒m≢o]⇒n≤o
2268+
{-# WARNING_ON_USAGE n∸m≤∣n-m∣
2269+
"Warning: ∀[m<n⇒m≢o]⇒o≤n was deprecated in v1.3.
2270+
Please use ∀[m<n⇒m≢o]⇒n≤o instead."
2271+
#-}

0 commit comments

Comments
 (0)