Skip to content

Commit 3b0c5f6

Browse files
committed
breaking changes to the analysis of NonZero arguments left over from agda#2182
1 parent 82cf294 commit 3b0c5f6

File tree

1 file changed

+34
-25
lines changed

1 file changed

+34
-25
lines changed

src/Data/Nat/DivMod.agda

+34-25
Original file line numberDiff line numberDiff line change
@@ -203,12 +203,13 @@ m/n≤m m n = *-cancelʳ-≤ (m / n) m n (begin
203203
m ≤⟨ m≤m*n m n ⟩
204204
m * n ∎)
205205

206-
m/n<m : m n .{{_ : NonZero m}} .{{_ : NonZero n}}
207-
1 < n m / n < m
208-
m/n<m m n 1<n = *-cancelʳ-< _ (m / n) m $ begin-strict
206+
m/n<m : m n .{{_ : NonZero m}} .{{_ : NonTrivial n}}
207+
let instance _ = nonTrivial⇒nonZero n in m / n < m
208+
m/n<m m n = *-cancelʳ-< _ (m / n) m $ begin-strict
209209
m / n * n ≤⟨ m/n*n≤m m n ⟩
210-
m <⟨ m<m*n m n 1<n
210+
m <⟨ m<m*n m n (nonTrivial⇒n>1 n)
211211
m * n ∎
212+
where instance _ = nonTrivial⇒nonZero n
212213

213214
/-mono-≤ : .{{_ : NonZero o}} .{{_ : NonZero p}}
214215
m ≤ n o ≥ p m / o ≤ n / p
@@ -245,7 +246,7 @@ m/n≡0⇒m<n {m} {n@(suc _)} m/n≡0 with <-≤-connex m n
245246
where instance _ = >-nonZero (m≥n⇒m/n>0 n≤m)
246247

247248
m/n≢0⇒n≤m : {m n} .{{_ : NonZero n}} m / n ≢ 0 n ≤ m
248-
m/n≢0⇒n≤m {m} {n@(suc _)} m/n≢0 with <-≤-connex m n
249+
m/n≢0⇒n≤m {m} {n} m/n≢0 with <-≤-connex m n
249250
... | inj₁ m<n = contradiction (m<n⇒m/n≡0 m<n) m/n≢0
250251
... | inj₂ n≤m = n≤m
251252

@@ -307,15 +308,15 @@ m∣n⇒o%n%m≡o%m m n@.(p * m) o (divides-refl p) = begin-equality
307308
o / pm * pm ≤⟨ m/n*n≤m o pm ⟩
308309
o ∎
309310

310-
m*n/m*o≡n/o : m n o .{{_ : NonZero o}} .{{_ : NonZero (m * o)}}
311+
m*n/m*o≡n/o : m n o .{{_ : NonZero m}} .{{_ : NonZero o}}
312+
let instance _ = m*n≢0 m o in
311313
(m * n) / (m * o) ≡ n / o
312314
m*n/m*o≡n/o m n o = helper (<-wellFounded n)
313315
where
314316
instance _ = m*n≢0 m o
315317
helper : {n} Acc _<_ n (m * n) / (m * o) ≡ n / o
316318
helper {n} (acc rec) with <-≤-connex n o
317319
... | inj₁ n<o = trans (m<n⇒m/n≡0 (*-monoʳ-< m n<o)) (sym (m<n⇒m/n≡0 n<o))
318-
where instance _ = m*n≢0⇒m≢0 m
319320
... | inj₂ n≥o = begin-equality
320321
(m * n) / (m * o) ≡⟨ m/n≡1+[m∸n]/n (*-monoʳ-≤ m n≥o) ⟩
321322
1 + (m * n ∸ m * o) / (m * o) ≡⟨ cong (suc ∘ (_/ (m * o))) (*-distribˡ-∸ m n o) ⟨
@@ -324,17 +325,17 @@ m*n/m*o≡n/o m n o = helper (<-wellFounded n)
324325
n / o ∎
325326
where n∸o<n = ∸-monoʳ-< (n≢0⇒n>0 (≢-nonZero⁻¹ o)) n≥o
326327

327-
m*n/o*n≡m/o : m n o .{{_ : NonZero o}} .{{_ : NonZero (o * n)}}
328+
m*n/o*n≡m/o : m n o .{{_ : NonZero n}} .{{_ : NonZero o}}
329+
let instance _ = m*n≢0 o n in
328330
m * n / (o * n) ≡ m / o
329331
m*n/o*n≡m/o m n o = begin-equality
330-
m * n / (o * n) ≡⟨ /-congˡ (*-comm m n) ⟩
332+
m * n / (o * n) ≡⟨ /-congˡ {{o*n≢0}} (*-comm m n) ⟩
331333
n * m / (o * n) ≡⟨ /-congʳ (*-comm o n) ⟩
332334
n * m / (n * o) ≡⟨ m*n/m*o≡n/o n m o ⟩
333335
m / o ∎
334336
where instance
335-
_ : NonZero n
336-
_ = m*n≢0⇒n≢0 o
337-
_ : NonZero (n * o)
337+
o*n≢0 : NonZero (o * n)
338+
o*n≢0 = m*n≢0 o n
338339
_ = m*n≢0 n o
339340

340341
m<n*o⇒m/o<n : {m n o} .{{_ : NonZero o}} m < n * o m / o < n
@@ -357,8 +358,9 @@ m<n*o⇒m/o<n {m} {suc n@(suc _)} {o} m<n*o = pred-cancel-< $ begin-strict
357358
m / o ∸ 1 ∸ n ≡⟨ ∸-+-assoc (m / o) 1 n ⟩
358359
m / o ∸ suc n ∎
359360

360-
m/n/o≡m/[n*o] : m n o .{{_ : NonZero n}} .{{_ : NonZero o}}
361-
.{{_ : NonZero (n * o)}} m / n / o ≡ m / (n * o)
361+
m/n/o≡m/[n*o] : m n o .{{_ : NonZero n}} .{{_ : NonZero o}}
362+
let instance _ = m*n≢0 n o in
363+
m / n / o ≡ m / (n * o)
362364
m/n/o≡m/[n*o] m n o = begin-equality
363365
m / n / o ≡⟨ /-congˡ {o = o} (/-congˡ (m≡m%n+[m/n]*n m n*o)) ⟩
364366
(m % n*o + m / n*o * n*o) / n / o ≡⟨ /-congˡ (+-distrib-/-∣ʳ (m % n*o) lem₁) ⟩
@@ -370,6 +372,8 @@ m/n/o≡m/[n*o] m n o = begin-equality
370372
where
371373
n*o = n * o
372374
o*n = o * n
375+
instance
376+
_ = m*n≢0 n o
373377

374378
lem₁ : n ∣ m / n*o * n*o
375379
lem₁ = divides (m / n*o * o) $ begin-equality
@@ -397,10 +401,11 @@ m/n/o≡m/[n*o] m n o = begin-equality
397401
n / d + (m * n) / d ≡⟨ cong (n / d +_) (*-/-assoc m d∣n) ⟩
398402
n / d + m * (n / d) ∎
399403

400-
/-*-interchange : .{{_ : NonZero o}} .{{_ : NonZero p}} .{{_ : NonZero (o * p)}}
401-
o ∣ m p ∣ n (m * n) / (o * p) ≡ (m / o) * (n / p)
404+
/-*-interchange : .{{_ : NonZero o}} .{{_ : NonZero p}}
405+
let instance _ = m*n≢0 o p in o ∣ m p ∣ n
406+
(m * n) / (o * p) ≡ (m / o) * (n / p)
402407
/-*-interchange {o} {p} {m@.(q * o)} {n@.(r * p)} (divides-refl q) (divides-refl r)
403-
= begin-equality
408+
= let instance _ = m*n≢0 o p in begin-equality
404409
(m * n) / (o * p) ≡⟨⟩
405410
q * o * (r * p) / (o * p) ≡⟨ /-congˡ ([m*n]*[o*p]≡[m*o]*[n*p] q o r p) ⟩
406411
q * r * (o * p) / (o * p) ≡⟨ m*n/n≡m (q * r) (o * p) ⟩
@@ -411,13 +416,11 @@ m/n/o≡m/[n*o] m n o = begin-equality
411416
m*n/m!≡n/[m∸1]! : m n .{{_ : NonZero m}}
412417
let instance _ = m !≢0 ; instance _ = (pred m) !≢0 in
413418
(m * n / m !) ≡ (n / (pred m) !)
414-
m*n/m!≡n/[m∸1]! m′@(suc m) n = m*n/m*o≡n/o m′ n (m !)
415-
where instance
416-
_ = m !≢0
417-
_ = m′ !≢0
419+
m*n/m!≡n/[m∸1]! m′@(suc m) n = let instance _ = m !≢0 in m*n/m*o≡n/o m′ n (m !)
418420

419421
m%[n*o]/o≡m/o%n : m n o .{{_ : NonZero n}} .{{_ : NonZero o}}
420-
{{_ : NonZero (n * o)}} m % (n * o) / o ≡ m / o % n
422+
let instance _ = m*n≢0 n o in
423+
m % (n * o) / o ≡ m / o % n
421424
m%[n*o]/o≡m/o%n m n o = begin-equality
422425
m % (n * o) / o ≡⟨ /-congˡ (m%n≡m∸m/n*n m (n * o)) ⟩
423426
(m ∸ (m / (n * o) * (n * o))) / o ≡⟨ cong (λ # (m ∸ #) / o) (*-assoc (m / (n * o)) n o) ⟨
@@ -426,9 +429,12 @@ m%[n*o]/o≡m/o%n m n o = begin-equality
426429
m / o ∸ m / (o * n) * n ≡⟨ cong (λ # m / o ∸ # * n) (m/n/o≡m/[n*o] m o n ) ⟨
427430
m / o ∸ m / o / n * n ≡⟨ m%n≡m∸m/n*n (m / o) n ⟨
428431
m / o % n ∎
429-
where instance _ = m*n≢0 o n
432+
where instance
433+
_ = m*n≢0 n o
434+
_ = m*n≢0 o n
430435

431-
m%n*o≡m*o%[n*o] : m n o .{{_ : NonZero n}} .{{_ : NonZero (n * o)}}
436+
m%n*o≡m*o%[n*o] : m n o .{{_ : NonZero n}} .{{_ : NonZero o}}
437+
let instance _ = m*n≢0 n o in
432438
m % n * o ≡ m * o % (n * o)
433439
m%n*o≡m*o%[n*o] m n o = begin-equality
434440
m % n * o ≡⟨ cong (_* o) (m%n≡m∸m/n*n m n) ⟩
@@ -437,8 +443,10 @@ m%n*o≡m*o%[n*o] m n o = begin-equality
437443
m * o ∸ m * o / (n * o) * n * o ≡⟨ cong (m * o ∸_) (*-assoc (m * o / (n * o)) n o) ⟩
438444
m * o ∸ m * o / (n * o) * (n * o) ≡⟨ m%n≡m∸m/n*n (m * o) (n * o) ⟨
439445
m * o % (n * o) ∎
446+
where instance _ = m*n≢0 n o
440447

441-
[m*n+o]%[p*n]≡[m*n]%[p*n]+o : m {n o} p .{{_ : NonZero (p * n)}} o < n
448+
[m*n+o]%[p*n]≡[m*n]%[p*n]+o : m {n o} p .{{_ : NonZero n}} .{{_ : NonZero p}}
449+
let instance _ = m*n≢0 p n in o < n
442450
(m * n + o) % (p * n) ≡ (m * n) % (p * n) + o
443451
[m*n+o]%[p*n]≡[m*n]%[p*n]+o m {n} {o} p@(suc p-1) o<n = begin-equality
444452
(mn + o) % pn ≡⟨ %-distribˡ-+ mn o pn ⟩
@@ -448,6 +456,7 @@ m%n*o≡m*o%[n*o] m n o = begin-equality
448456
where
449457
mn = m * n
450458
pn = p * n
459+
instance _ = m*n≢0 p n
451460

452461
lem₁ : mn % pn ≤ p-1 * n
453462
lem₁ = begin

0 commit comments

Comments
 (0)