Skip to content

Commit c428533

Browse files
jamesmckinnaandreasabel
authored andcommitted
Add new pattern synonym divides-refl to Data.Nat.Divisibility.Core
1 parent 3352d4f commit c428533

File tree

7 files changed

+74
-65
lines changed

7 files changed

+74
-65
lines changed

CHANGELOG.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -908,7 +908,7 @@ Major improvements
908908
for them still live in `Data.Nat.DivMod` (which also publicly re-exports them
909909
to provide backwards compatability).
910910
911-
* Beneficieries of this change include `Data.Rational.Unnormalised.Base` whose
911+
* Beneficiaries of this change include `Data.Rational.Unnormalised.Base` whose
912912
dependencies are now significantly smaller.
913913
914914
### Moved raw bundles from Data.X.Properties to Data.X.Base
@@ -2207,6 +2207,11 @@ Other minor changes
22072207
suc-injective : Injective _≡_ _≡_ suc
22082208
```
22092209

2210+
* Added a new pattern synonym to `Data.Nat.Divisibility.Core`:
2211+
```agda
2212+
pattern divides-refl q = divides q refl
2213+
```
2214+
22102215
* Added new definitions and proofs to `Data.Nat.Primality`:
22112216
```agda
22122217
Composite : ℕ → Set

src/Data/Nat/Coprimality.agda

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99
module Data.Nat.Coprimality where
1010

1111
open import Data.Empty
12-
open import Data.Fin.Base using (toℕ; fromℕ<)
13-
open import Data.Fin.Properties using (toℕ-fromℕ<)
1412
open import Data.Nat.Base
1513
open import Data.Nat.Divisibility
1614
open import Data.Nat.GCD
@@ -45,8 +43,8 @@ coprime⇒GCD≡1 : ∀ {m n} → Coprime m n → GCD m n 1
4543
coprime⇒GCD≡1 {m} {n} c = GCD.is (1∣ m , 1∣ n) (∣-reflexive ∘ c)
4644

4745
GCD≡1⇒coprime : {m n} GCD m n 1 Coprime m n
48-
GCD≡1⇒coprime g cd with GCD.greatest g cd
49-
... | divides q eq = m*n≡1⇒n≡1 q _ (P.sym eq)
46+
GCD≡1⇒coprime g cd with divides q eq GCD.greatest g cd
47+
= m*n≡1⇒n≡1 q _ (P.sym eq)
5048

5149
coprime⇒gcd≡1 : {m n} Coprime m n gcd m n ≡ 1
5250
coprime⇒gcd≡1 coprime = GCD.unique (gcd-GCD _ _) (coprime⇒GCD≡1 coprime)
@@ -111,9 +109,9 @@ recompute {n} {d} c = Nullary.recompute (coprime? n d) c
111109

112110
Bézout-coprime : {i j d} .{{_ : NonZero d}}
113111
Bézout.Identity d (i * d) (j * d) Coprime i j
114-
Bézout-coprime {d = suc _} (Bézout.+- x y eq) (divides q₁ refl , divides q₂ refl) =
112+
Bézout-coprime {d = suc _} (Bézout.+- x y eq) (divides-refl q₁ , divides-refl q₂) =
115113
lem₁₀ y q₂ x q₁ eq
116-
Bézout-coprime {d = suc _} (Bézout.-+ x y eq) (divides q₁ refl , divides q₂ refl) =
114+
Bézout-coprime {d = suc _} (Bézout.-+ x y eq) (divides-refl q₁ , divides-refl q₂) =
117115
lem₁₀ x q₁ y q₂ eq
118116

119117
-- Coprime numbers satisfy Bézout's identity.

src/Data/Nat/DivMod.agda

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@ open import Relation.Binary.PropositionalEquality
2222
open import Relation.Nullary.Decidable using (yes; no)
2323
open import Relation.Nullary.Decidable using (False; toWitnessFalse)
2424

25-
import Algebra.Properties.CommutativeSemigroup *-commutativeSemigroup as *-CS
26-
2725
open ≤-Reasoning
2826

2927
------------------------------------------------------------------------
@@ -91,7 +89,8 @@ m*n≤o⇒[o∸m*n]%n≡o%n m {n} {o} m*n≤o = begin-equality
9189

9290
m∣n⇒o%n%m≡o%m : ∀ m n o .⦃ _ : NonZero m ⦄ .⦃ _ : NonZero n ⦄ m ∣ n
9391
o % n % m ≡ o % m
94-
m∣n⇒o%n%m≡o%m m n o (divides p refl) = begin-equality
92+
m∣n⇒o%n%m≡o%m m n@.(p * m) o (divides-refl p) = begin-equality
93+
o % n % m ≡⟨⟩
9594
o % pm % m ≡⟨ %-congˡ (m%n≡m∸m/n*n o pm) ⟩
9695
(o ∸ o / pm * pm) % m ≡˘⟨ cong (λ # (o ∸ #) % m) (*-assoc (o / pm) p m) ⟩
9796
(o ∸ o / pm * p * m) % m ≡⟨ m*n≤o⇒[o∸m*n]%n≡o%n (o / pm * p) lem ⟩
@@ -171,7 +170,8 @@ 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-
171170
m′ * n′ + (m′ * j + (n′ + j * d) * k) * d ∎
172171

173172
%-remove-+ˡ : {m} n {d} .{{_ : NonZero d}} d ∣ m (m + n) % d ≡ n % d
174-
%-remove-+ˡ {m} n {d@(suc d-1)} (divides p refl) = begin-equality
173+
%-remove-+ˡ {m@.(p * d)} n {d@(suc _)} (divides-refl p) = begin-equality
174+
(m + n) % d ≡⟨⟩
175175
(p * d + n) % d ≡⟨ cong (_% d) (+-comm (p * d) n) ⟩
176176
(n + p * d) % d ≡⟨ [m+kn]%n≡m%n n p d ⟩
177177
n % d ∎
@@ -191,7 +191,7 @@ 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-
191191
/-congʳ refl = refl
192192

193193
0/n≡0 : n .{{_ : NonZero n}} 0 / n ≡ 0
194-
0/n≡0 (suc n-1) = refl
194+
0/n≡0 (suc _) = refl
195195

196196
n/1≡n : n n / 1 ≡ n
197197
n/1≡n n = a[divₕ]1≡a 0 n
@@ -203,7 +203,7 @@ m*n/n≡m : ∀ m n .{{_ : NonZero n}} → m * n / n ≡ m
203203
m*n/n≡m m (suc n-1) = a*n[divₕ]n≡a 0 m n-1
204204

205205
m/n*n≡m : {m n} .{{_ : NonZero n}} n ∣ m m / n * n ≡ m
206-
m/n*n≡m {_} {n@(suc n-1)} (divides q refl) = cong (_* n) (m*n/n≡m q n)
206+
m/n*n≡m {_} {n@(suc _)} (divides-refl q) = cong (_* n) (m*n/n≡m q n)
207207

208208
m*[n/m]≡n : {m n} .{{_ : NonZero m}} m ∣ n m * (n / m) ≡ n
209209
m*[n/m]≡n {m} m∣n = trans (*-comm m (_ / m)) (m/n*n≡m m∣n)
@@ -261,14 +261,16 @@ m≥n⇒m/n>0 {m@(suc _)} {n@(suc _)} m≥n = begin
261261

262262
+-distrib-/-∣ˡ : {m} n {d} .{{_ : NonZero d}}
263263
d ∣ m (m + n) / d ≡ m / d + n / d
264-
+-distrib-/-∣ˡ {m} n {d} (divides p refl) = +-distrib-/ m n (begin-strict
264+
+-distrib-/-∣ˡ {m@.(p * d)} n {d} (divides-refl p) = +-distrib-/ m n (begin-strict
265+
m % d + n % d ≡⟨⟩
265266
p * d % d + n % d ≡⟨ cong (_+ n % d) (m*n%n≡0 p d) ⟩
266267
n % d <⟨ m%n<n n d ⟩
267268
d ∎)
268269

269270
+-distrib-/-∣ʳ : m {n} {d} .{{_ : NonZero d}}
270271
d ∣ n (m + n) / d ≡ m / d + n / d
271-
+-distrib-/-∣ʳ m {n} {d} (divides p refl) = +-distrib-/ m n (begin-strict
272+
+-distrib-/-∣ʳ m {n@.(p * d)} {d} (divides-refl p) = +-distrib-/ m n (begin-strict
273+
m % d + n % d ≡⟨⟩
272274
m % d + p * d % d ≡⟨ cong (m % d +_) (m*n%n≡0 p d) ⟩
273275
m % d + 0 ≡⟨ +-identityʳ _ ⟩
274276
m % d <⟨ m%n<n m d ⟩
@@ -284,7 +286,7 @@ m/n≡1+[m∸n]/n {m@(suc m-1)} {n@(suc n-1)} m≥n = begin-equality
284286

285287
m*n/m*o≡n/o : m n o .{{_ : NonZero o}} .{{_ : NonZero (m * o)}}
286288
(m * n) / (m * o) ≡ n / o
287-
m*n/m*o≡n/o m@(suc m-1) n o = helper (<-wellFounded n)
289+
m*n/m*o≡n/o m@(suc _) n o = helper (<-wellFounded n)
288290
where
289291
helper : {n} Acc _<_ n (m * n) / (m * o) ≡ n / o
290292
helper {n} (acc rec) with n <? o
@@ -354,7 +356,7 @@ m/n/o≡m/[n*o] m n o = begin-equality
354356
m / n / o ≡⟨ /-congˡ {o = o} (/-congˡ (m≡m%n+[m/n]*n m n*o)) ⟩
355357
(m % n*o + m / n*o * n*o) / n / o ≡⟨ /-congˡ (+-distrib-/-∣ʳ (m % n*o) lem₁) ⟩
356358
(m % n*o / n + m / n*o * n*o / n) / o ≡⟨ cong (λ # (m % n*o / n + #) / o) lem₂ ⟩
357-
(m % n*o / n + m / n*o * o) / o ≡⟨ +-distrib-/-∣ʳ (m % n*o / n) (divides (m / n*o) refl) ⟩
359+
(m % n*o / n + m / n*o * o) / o ≡⟨ +-distrib-/-∣ʳ (m % n*o / n) (divides-refl (m / n*o)) ⟩
358360
m % n*o / n / o + m / n*o * o / o ≡⟨ cong (m % n*o / n / o +_) (m*n/n≡m (m / n*o) o) ⟩
359361
m % n*o / n / o + m / n*o ≡⟨ cong (_+ m / n*o) (m<n⇒m/n≡0 (m<n*o⇒m/o<n {n = o} lem₃)) ⟩
360362
m / n*o ∎

src/Data/Nat/Divisibility.agda

Lines changed: 36 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,7 @@ m%n≡0⇒n∣m m n eq = divides (m / n) (begin-equality
4040
where open ≤-Reasoning
4141

4242
n∣m⇒m%n≡0 : m n .{{_ : NonZero n}} n ∣ m m % n ≡ 0
43-
n∣m⇒m%n≡0 m n (divides v eq) = begin-equality
44-
m % n ≡⟨ cong (_% n) eq ⟩
45-
(v * n) % n ≡⟨ m*n%n≡0 v n ⟩
46-
0
47-
where open ≤-Reasoning
43+
n∣m⇒m%n≡0 .(q * n) n (divides-refl q) = m*n%n≡0 q n
4844

4945
m%n≡0⇔n∣m : m n .{{_ : NonZero n}} m % n ≡ 0 ⇔ n ∣ m
5046
m%n≡0⇔n∣m m n = mk⇔ (m%n≡0⇒n∣m m n) (n∣m⇒m%n≡0 m n)
@@ -65,26 +61,28 @@ m%n≡0⇔n∣m m n = mk⇔ (m%n≡0⇒n∣m m n) (n∣m⇒m%n≡0 m n)
6561
------------------------------------------------------------------------
6662
-- _∣_ is a partial order
6763

64+
-- these could/should inherit from Algebra.Properties.Monoid.Divisibility
65+
6866
∣-reflexive : _≡_ ⇒ _∣_
6967
∣-reflexive {n} refl = divides 1 (sym (*-identityˡ n))
7068

7169
∣-refl : Reflexive _∣_
7270
∣-refl = ∣-reflexive refl
7371

7472
∣-trans : Transitive _∣_
75-
∣-trans (divides p refl) (divides q refl) =
73+
∣-trans (divides-refl p) (divides-refl q) =
7674
divides (q * p) (sym (*-assoc q p _))
7775

7876
∣-antisym : Antisymmetric _≡_ _∣_
79-
∣-antisym {m} {zero} _ (divides q refl) = *-zeroʳ q
77+
∣-antisym {m} {zero} _ (divides-refl q) = *-zeroʳ q
8078
∣-antisym {zero} {n} (divides p eq) _ = sym (trans eq (*-comm p 0))
8179
∣-antisym {suc m} {suc n} p∣q q∣p = ≤-antisym (∣⇒≤ p∣q) (∣⇒≤ q∣p)
8280

8381
infix 4 _∣?_
8482

8583
_∣?_ : Decidable _∣_
86-
zero ∣? zero = yes (divides 0 refl)
87-
zero ∣? suc m = no ((λ()) ∘′ ∣-antisym (divides 0 refl))
84+
zero ∣? zero = yes (divides-refl 0)
85+
zero ∣? suc m = no ((λ()) ∘′ ∣-antisym (divides-refl 0))
8886
suc n ∣? m = Dec.map (m%n≡0⇔n∣m m (suc n)) (m % suc n ≟ 0)
8987

9088
∣-isPreorder : IsPreorder _≡_ _∣_
@@ -133,7 +131,7 @@ infix 10 1∣_ _∣0
133131
1∣ n = divides n (sym (*-identityʳ n))
134132

135133
_∣0 : n n ∣ 0
136-
n ∣0 = divides 0 refl
134+
n ∣0 = divides-refl 0
137135

138136
0∣⇒≡0 : {n} 0 ∣ n n ≡ 0
139137
0∣⇒≡0 {n} 0∣n = ∣-antisym (n ∣0) 0∣n
@@ -148,7 +146,7 @@ n∣n {n} = ∣-refl
148146
-- Properties of _∣_ and _+_
149147

150148
∣m∣n⇒∣m+n : {i m n} i ∣ m i ∣ n i ∣ m + n
151-
∣m∣n⇒∣m+n (divides p refl) (divides q refl) =
149+
∣m∣n⇒∣m+n (divides-refl p) (divides-refl q) =
152150
divides (p + q) (sym (*-distribʳ-+ _ p q))
153151

154152
∣m+n∣m⇒∣n : {i m n} i ∣ m + n i ∣ m i ∣ n
@@ -174,19 +172,20 @@ n∣m*n*o : ∀ m {n} o → n ∣ m * n * o
174172
n∣m*n*o m o = ∣-trans (n∣m*n m) (m∣m*n o)
175173

176174
∣m⇒∣m*n : {i m} n i ∣ m i ∣ m * n
177-
∣m⇒∣m*n {i} {m} n (divides q refl) = ∣-trans (n∣m*n q) (m∣m*n n)
175+
∣m⇒∣m*n {i} {m} n (divides-refl q) = ∣-trans (n∣m*n q) (m∣m*n n)
178176

179177
∣n⇒∣m*n : {i} m {n} i ∣ n i ∣ m * n
180178
∣n⇒∣m*n m {n} rewrite *-comm m n = ∣m⇒∣m*n m
181179

182180
m*n∣⇒m∣ : {i} m n m * n ∣ i m ∣ i
183-
m*n∣⇒m∣ m n (divides q refl) = ∣n⇒∣m*n q (m∣m*n n)
181+
m*n∣⇒m∣ m n (divides-refl q) = ∣n⇒∣m*n q (m∣m*n n)
184182

185183
m*n∣⇒n∣ : {i} m n m * n ∣ i n ∣ i
186184
m*n∣⇒n∣ m n rewrite *-comm m n = m*n∣⇒m∣ n m
187185

188186
*-monoʳ-∣ : {i j} k i ∣ j k * i ∣ k * j
189-
*-monoʳ-∣ {i} {j} k (divides q refl) = divides q $ begin-equality
187+
*-monoʳ-∣ {i} {j@.(q * i)} k (divides-refl q) = divides q $ begin-equality
188+
k * j ≡⟨⟩
190189
k * (q * i) ≡⟨ sym (*-assoc k q i) ⟩
191190
(k * q) * i ≡⟨ cong (_* i) (*-comm k q) ⟩
192191
(q * k) * i ≡⟨ *-assoc q k i ⟩
@@ -226,27 +225,30 @@ m*n∣⇒n∣ m n rewrite *-comm m n = m*n∣⇒m∣ n m
226225
-- Properties of _∣_ and _/_
227226

228227
m/n∣m : {m n} .{{_ : NonZero n}} n ∣ m m / n ∣ m
229-
m/n∣m {m} {n} (divides p refl) = begin
228+
m/n∣m {m@.(p * n)} {n} (divides-refl p) = begin
229+
m / n ≡⟨⟩
230230
p * n / n ≡⟨ m*n/n≡m p n ⟩
231231
p ∣⟨ m∣m*n n ⟩
232-
p * n ∎
232+
p * n ≡⟨⟩
233+
m ∎
233234
where open ∣-Reasoning
234235

235236
m*n∣o⇒m∣o/n : m n {o} .{{_ : NonZero n}} m * n ∣ o m ∣ o / n
236-
m*n∣o⇒m∣o/n m n {_} (divides p refl) = begin
237+
m*n∣o⇒m∣o/n m n {o@.(p * (m * n))} (divides-refl p) = begin
237238
m ∣⟨ n∣m*n p ⟩
238239
p * m ≡⟨ sym (*-identityʳ (p * m)) ⟩
239240
p * m * 1 ≡⟨ sym (cong (p * m *_) (n/n≡1 n)) ⟩
240241
p * m * (n / n) ≡⟨ sym (*-/-assoc (p * m) (n∣n {n})) ⟩
241242
p * m * n / n ≡⟨ cong (_/ n) (*-assoc p m n) ⟩
242-
p * (m * n) / n ∎
243+
p * (m * n) / n ≡⟨⟩
244+
o / n ∎
243245
where open ∣-Reasoning
244246

245247
m*n∣o⇒n∣o/m : m n {o} .{{_ : NonZero m}} m * n ∣ o n ∣ (o / m)
246248
m*n∣o⇒n∣o/m m n rewrite *-comm m n = m*n∣o⇒m∣o/n n m
247249

248250
m∣n/o⇒m*o∣n : {m n o} .{{_ : NonZero o}} o ∣ n m ∣ n / o m * o ∣ n
249-
m∣n/o⇒m*o∣n {m} {n} {o} (divides p refl) m∣p*o/o = begin
251+
m∣n/o⇒m*o∣n {m} {n} {o} (divides-refl p) m∣p*o/o = begin
250252
m * o ∣⟨ *-monoˡ-∣ o (subst (m ∣_) (m*n/n≡m p o) m∣p*o/o) ⟩
251253
p * o ∎
252254
where open ∣-Reasoning
@@ -255,13 +257,14 @@ m∣n/o⇒o*m∣n : ∀ {m n o} .{{_ : NonZero o}} → o ∣ n → m ∣ n / o
255257
m∣n/o⇒o*m∣n {m} {_} {o} rewrite *-comm o m = m∣n/o⇒m*o∣n
256258

257259
m/n∣o⇒m∣o*n : {m n o} .{{_ : NonZero n}} n ∣ m m / n ∣ o m ∣ o * n
258-
m/n∣o⇒m∣o*n {_} {n} {o} (divides p refl) p*n/n∣o = begin
260+
m/n∣o⇒m∣o*n {_} {n} {o} (divides-refl p) p*n/n∣o = begin
259261
p * n ∣⟨ *-monoˡ-∣ n (subst (_∣ o) (m*n/n≡m p n) p*n/n∣o) ⟩
260262
o * n ∎
261263
where open ∣-Reasoning
262264

263265
m∣n*o⇒m/n∣o : {m n o} .{{_ : NonZero n}} n ∣ m m ∣ o * n m / n ∣ o
264-
m∣n*o⇒m/n∣o {_} {n@(suc _)} {o} (divides p refl) pn∣on = begin
266+
m∣n*o⇒m/n∣o {m@.(p * n)} {n@(suc _)} {o} (divides-refl p) pn∣on = begin
267+
m / n ≡⟨⟩
265268
p * n / n ≡⟨ m*n/n≡m p n ⟩
266269
p ∣⟨ *-cancelʳ-∣ n pn∣on ⟩
267270
o ∎
@@ -271,24 +274,26 @@ m∣n*o⇒m/n∣o {_} {n@(suc _)} {o} (divides p refl) pn∣on = begin
271274
-- Properties of _∣_ and _%_
272275

273276
∣n∣m%n⇒∣m : {m n d} .{{_ : NonZero n}} d ∣ n d ∣ m % n d ∣ m
274-
∣n∣m%n⇒∣m {m} {n} {d} (divides a n≡ad) (divides b m%n≡bd) =
277+
∣n∣m%n⇒∣m {m} {n@.(a * d)} {d} (divides-refl a) (divides b m%n≡bd) =
275278
divides (b + (m / n) * a) (begin-equality
276279
m ≡⟨ m≡m%n+[m/n]*n m n ⟩
277-
m % n + (m / n) * n ≡⟨ cong₂ _+_ m%n≡bd (cong (m / n *_) n≡ad) ⟩
280+
m % n + (m / n) * n ≡⟨ cong (_+ (m / n) * n) m%n≡bd ⟩
281+
b * d + (m / n) * n ≡⟨⟩
278282
b * d + (m / n) * (a * d) ≡⟨ sym (cong (b * d +_) (*-assoc (m / n) a d)) ⟩
279283
b * d + ((m / n) * a) * d ≡⟨ sym (*-distribʳ-+ d b _) ⟩
280284
(b + (m / n) * a) * d ∎)
281285
where open ≤-Reasoning
282286

283287
%-presˡ-∣ : {m n d} .{{_ : NonZero n}} d ∣ m d ∣ n d ∣ m % n
284-
%-presˡ-∣ {m} {n} {d} (divides a refl) (divides b 1+n≡bd) =
285-
divides (a ∸ ad/n * b) $ begin-equality
286-
a * d % n ≡⟨ m%n≡m∸m/n*n (a * d) n ⟩
287-
a * d ∸ ad/n * n ≡⟨ cong (λ v a * d ∸ ad/n * v) 1+n≡bd ⟩
288-
a * d ∸ ad/n * (b * d) ≡˘⟨ cong (a * d ∸_) (*-assoc ad/n b d) ⟩
289-
a * d ∸ (ad/n * b) * d ≡˘⟨ *-distribʳ-∸ d a (ad/n * b) ⟩
290-
(a ∸ ad/n * b) * d ∎
291-
where open ≤-Reasoning; ad/n = a * d / n
288+
%-presˡ-∣ {m@.(a * d)} {n} {d} (divides-refl a) (divides b 1+n≡bd) =
289+
divides (a ∸ m / n * b) $ begin-equality
290+
m % n ≡⟨ m%n≡m∸m/n*n m n ⟩
291+
m ∸ m / n * n ≡⟨ cong (λ v m ∸ m / n * v) 1+n≡bd ⟩
292+
m ∸ m / n * (b * d) ≡˘⟨ cong (m ∸_) (*-assoc (m / n) b d) ⟩
293+
m ∸ (m / n * b) * d ≡⟨⟩
294+
a * d ∸ (m / n * b) * d ≡˘⟨ *-distribʳ-∸ d a (m / n * b) ⟩
295+
(a ∸ m / n * b) * d ∎
296+
where open ≤-Reasoning
292297

293298
------------------------------------------------------------------------
294299
-- Properties of _∣_ and !_

src/Data/Nat/Divisibility/Core.agda

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ open _∣_ using (quotient) public
4040
_∤_ : Rel ℕ 0ℓ
4141
m ∤ n = ¬ (m ∣ n)
4242

43+
-- smart constructor
44+
45+
pattern divides-refl q = divides q refl
4346

4447
------------------------------------------------------------------------
4548
-- Basic properties

src/Data/Nat/GCD.agda

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ gcd m n with <-cmp m n
5656
gcd′[m,n]∣m,n : {m n} rec n<m gcd′ m n rec n<m ∣ m × gcd′ m n rec n<m ∣ n
5757
gcd′[m,n]∣m,n {m} {zero} rec n<m = ∣-refl , m ∣0
5858
gcd′[m,n]∣m,n {m} {suc n} (acc rec) n<m
59-
with gcd′[m,n]∣m,n (rec _ n<m) (m%n<n m (suc n))
60-
... | gcd∣n , gcd∣m%n = ∣n∣m%n⇒∣m gcd∣n gcd∣m%n , gcd∣n
59+
with gcd∣n , gcd∣m%n gcd′[m,n]∣m,n (rec _ n<m) (m%n<n m (suc n))
60+
= ∣n∣m%n⇒∣m gcd∣n gcd∣m%n , gcd∣n
6161

6262
gcd′-greatest : {m n c} rec n<m c ∣ m c ∣ n c ∣ gcd′ m n rec n<m
6363
gcd′-greatest {m} {zero} rec n<m c∣m c∣n = c∣m
@@ -166,10 +166,8 @@ gcd-universality : ∀ {m n g} →
166166
( {d} d ∣ m × d ∣ n d ∣ g)
167167
( {d} d ∣ g d ∣ m × d ∣ n)
168168
g ≡ gcd m n
169-
gcd-universality {m} {n} forwards backwards with backwards ∣-refl
170-
... | back₁ , back₂ = ∣-antisym
171-
(gcd-greatest back₁ back₂)
172-
(forwards (gcd[m,n]∣m m n , gcd[m,n]∣n m n))
169+
gcd-universality {m} {n} forwards backwards with back₁ , back₂ backwards ∣-refl
170+
= ∣-antisym (gcd-greatest back₁ back₂) (forwards (gcd[m,n]∣m m n , gcd[m,n]∣n m n))
173171

174172
-- This could be simplified with some nice backwards/forwards reasoning
175173
-- after the new function hierarchy is up and running.
@@ -180,10 +178,10 @@ gcd[cm,cn]/c≡gcd[m,n] c m n = gcd-universality forwards backwards
180178
forwards {d} (d∣m , d∣n) = m*n∣o⇒n∣o/m c d (gcd-greatest (*-monoʳ-∣ c d∣m) (*-monoʳ-∣ c d∣n))
181179

182180
backwards : {d : ℕ} d ∣ gcd (c * m) (c * n) / c d ∣ m × d ∣ n
183-
backwards {d} d∣gcd[cm,cn]/c with m∣n/o⇒o*m∣n (gcd-greatest (m∣m*n m) (m∣m*n n)) d∣gcd[cm,cn]/c
184-
... | cd∣gcd[cm,n] =
185-
*-cancelˡ-∣ c (∣-trans cd∣gcd[cm,n] (gcd[m,n]∣m (c * m) _)) ,
186-
*-cancelˡ-∣ c (∣-trans cd∣gcd[cm,n] (gcd[m,n]∣n (c * m) _))
181+
backwards {d} d∣gcd[cm,cn]/c
182+
with cd∣gcd[cm,n] m∣n/o⇒o*m∣n (gcd-greatest (m∣m*n m) (m∣m*n n)) d∣gcd[cm,cn]/c
183+
= *-cancelˡ-∣ c (∣-trans cd∣gcd[cm,n] (gcd[m,n]∣m (c * m) _)) ,
184+
*-cancelˡ-∣ c (∣-trans cd∣gcd[cm,n] (gcd[m,n]∣n (c * m) _))
187185

188186
c*gcd[m,n]≡gcd[cm,cn] : c m n c * gcd m n ≡ gcd (c * m) (c * n)
189187
c*gcd[m,n]≡gcd[cm,cn] zero m n = P.sym gcd[0,0]≡0
@@ -256,8 +254,8 @@ module GCD where
256254
-- n + k.
257255

258256
step : {n k d} GCD n k d GCD n (n + k) d
259-
step g with GCD.commonDivisor g
260-
step {n} {k} {d} g | (d₁ , d₂) = is (d₁ , ∣m∣n⇒∣m+n d₁ d₂) greatest′
257+
step {n} {k} {d} g with d₁ , d₂ GCD.commonDivisor g
258+
= is (d₁ , ∣m∣n⇒∣m+n d₁ d₂) greatest′
261259
where
262260
greatest′ : {d′} d′ ∣ n × d′ ∣ n + k d′ ∣ d
263261
greatest′ (d₁ , d₂) = GCD.greatest g (d₁ , ∣m+n∣m⇒∣n d₂ d₁)
@@ -292,7 +290,7 @@ GCD-* {c = suc _} (GCD.is (dc∣nc , dc∣mc) dc-greatest) =
292290
GCD-/ : {m n d c} .{{_ : NonZero c}} c ∣ m c ∣ n c ∣ d
293291
GCD m n d GCD (m / c) (n / c) (d / c)
294292
GCD-/ {m} {n} {d} {c} {{x}}
295-
(divides p P.refl) (divides q P.refl) (divides r P.refl) gcd
293+
(divides-refl p) (divides-refl q) (divides-refl r) gcd
296294
rewrite m*n/n≡m p c {{x}} | m*n/n≡m q c {{x}} | m*n/n≡m r c {{x}} = GCD-* gcd
297295

298296
GCD-/gcd : m n .{{_ : NonZero (gcd m n)}} GCD (m / gcd m n) (n / gcd m n) 1
@@ -400,6 +398,4 @@ module Bézout where
400398
-- Bézout's identity can be recovered from the GCD.
401399

402400
identity : {m n d} GCD m n d Identity d m n
403-
identity {m} {n} g with lemma m n
404-
... | result d g′ b with GCD.unique g g′
405-
... | P.refl = b
401+
identity {m} {n} g with result d g′ b lemma m n rewrite GCD.unique g g′ = b

0 commit comments

Comments
 (0)