@@ -380,13 +380,18 @@ normalize-injective-≃ m n c d eq = ℕ./-cancelʳ-≡
380
380
/-cong { -[1+ n ]} refl = cong -_ ∘′ normalize-cong {suc n} refl
381
381
382
382
private
383
- /-injective-≃-helper : ∀ {m n c-1 d-1} →
384
- - normalize (suc m) (suc c-1) ≡ normalize n (suc d-1) →
385
- mkℚᵘ -[1+ m ] c-1 ≃ᵘ mkℚᵘ (+ n) d-1
386
- /-injective-≃-helper {m} {n} {c-1} {d-1} eq
387
- with normalize-pos (suc m) (suc c-1) | normalize-nonNeg n (suc d-1)
388
- ... | norm[m,c]-pos | norm[n,d]-nonNeg =
389
- contradiction (sym eq) (nonNeg≢neg _ _ {{norm[n,d]-nonNeg}} {{neg-pos norm[m,c]-pos}})
383
+ /-injective-≃-helper : ∀ {m n c d} .{{_ : ℕ.NonZero c}} .{{_ : ℕ.NonZero d}} →
384
+ - normalize (suc m) c ≡ normalize n d →
385
+ mkℚᵘ -[1+ m ] (ℕ.pred c) ≃ᵘ mkℚᵘ (+ n) (ℕ.pred d)
386
+ /-injective-≃-helper {m} {n} {c} {d} -norm≡norm = contradiction
387
+ (sym -norm≡norm)
388
+ (nonNeg≢neg (normalize n d) (- normalize (suc m) c))
389
+ where instance
390
+ _ : NonNegative (normalize n d)
391
+ _ = normalize-nonNeg n d
392
+
393
+ _ : Negative (- normalize (suc m) c)
394
+ _ = neg-pos {normalize (suc m) c} (normalize-pos (suc m) c)
390
395
391
396
/-injective-≃ : ∀ p q → ↥ᵘ p / ↧ₙᵘ p ≡ ↥ᵘ q / ↧ₙᵘ q → p ≃ᵘ q
392
397
/-injective-≃ (mkℚᵘ (+ m) c-1) (mkℚᵘ (+ n) d-1) eq =
@@ -402,11 +407,17 @@ private
402
407
-- Properties of toℚ/fromℚ
403
408
------------------------------------------------------------------------
404
409
410
+ ↥ᵘ-toℚᵘ : ∀ p → ↥ᵘ (toℚᵘ p) ≡ ↥ p
411
+ ↥ᵘ-toℚᵘ p@record{} = refl
412
+
413
+ ↧ᵘ-toℚᵘ : ∀ p → ↧ᵘ (toℚᵘ p) ≡ ↧ p
414
+ ↧ᵘ-toℚᵘ p@record{} = refl
415
+
405
416
toℚᵘ-injective : Injective _≡_ _≃ᵘ_ toℚᵘ
406
- toℚᵘ-injective (*≡* eq) = ≃⇒≡ eq
417
+ toℚᵘ-injective {x@record{}} {y@record{}} (*≡* eq) = ≃⇒≡ eq
407
418
408
419
fromℚᵘ-injective : Injective _≃ᵘ_ _≡_ fromℚᵘ
409
- fromℚᵘ-injective {p} {q} = /-injective-≃ p q
420
+ fromℚᵘ-injective {p@record{}} {q@record{} } = /-injective-≃ p q
410
421
411
422
fromℚᵘ-toℚᵘ : ∀ p → fromℚᵘ (toℚᵘ p) ≡ p
412
423
fromℚᵘ-toℚᵘ (mkℚ (+ n) d-1 c) = normalize-coprime c
@@ -448,10 +459,10 @@ drop-*≤* (*≤* pq≤qp) = pq≤qp
448
459
-- toℚᵘ is a isomorphism
449
460
450
461
toℚᵘ-mono-≤ : p ≤ q → toℚᵘ p ≤ᵘ toℚᵘ q
451
- toℚᵘ-mono-≤ (*≤* p≤q) = *≤* p≤q
462
+ toℚᵘ-mono-≤ {p@record{}} {q@record{}} (*≤* p≤q) = *≤* p≤q
452
463
453
464
toℚᵘ-cancel-≤ : toℚᵘ p ≤ᵘ toℚᵘ q → p ≤ q
454
- toℚᵘ-cancel-≤ (*≤* p≤q) = *≤* p≤q
465
+ toℚᵘ-cancel-≤ {p@record{}} {q@record{}} (*≤* p≤q) = *≤* p≤q
455
466
456
467
toℚᵘ-isOrderHomomorphism-≤ : IsOrderHomomorphism _≡_ _≃ᵘ_ _≤_ _≤ᵘ_ toℚᵘ
457
468
toℚᵘ-isOrderHomomorphism-≤ = record
@@ -556,10 +567,10 @@ drop-*<* (*<* pq<qp) = pq<qp
556
567
-- toℚᵘ is a isomorphism
557
568
558
569
toℚᵘ-mono-< : p < q → toℚᵘ p <ᵘ toℚᵘ q
559
- toℚᵘ-mono-< (*<* p<q) = *<* p<q
570
+ toℚᵘ-mono-< {p@record{}} {q@record{}} (*<* p<q) = *<* p<q
560
571
561
572
toℚᵘ-cancel-< : toℚᵘ p <ᵘ toℚᵘ q → p < q
562
- toℚᵘ-cancel-< (*<* p<q) = *<* p<q
573
+ toℚᵘ-cancel-< {p@record{}} {q@record{}} (*<* p<q) = *<* p<q
563
574
564
575
toℚᵘ-isOrderHomomorphism-< : IsOrderHomomorphism _≡_ _≃ᵘ_ _<_ _<ᵘ_ toℚᵘ
565
576
toℚᵘ-isOrderHomomorphism-< = record
@@ -763,10 +774,10 @@ private
763
774
+-nf p q = gcd (↥+ᵘ p q) (↧+ᵘ p q)
764
775
765
776
↥-+ : ∀ p q → ↥ (p + q) ℤ.* +-nf p q ≡ ↥+ᵘ p q
766
- ↥-+ p q = ↥-/ (↥+ᵘ p q) (↧ₙ p ℕ.* ↧ₙ q)
777
+ ↥-+ p@record{} q@record{} = ↥-/ (↥+ᵘ p q) (↧ₙ p ℕ.* ↧ₙ q)
767
778
768
779
↧-+ : ∀ p q → ↧ (p + q) ℤ.* +-nf p q ≡ ↧+ᵘ p q
769
- ↧-+ p q = ↧-/ (↥+ᵘ p q) (↧ₙ p ℕ.* ↧ₙ q)
780
+ ↧-+ p@record{} q@record{} = ↧-/ (↥+ᵘ p q) (↧ₙ p ℕ.* ↧ₙ q)
770
781
771
782
------------------------------------------------------------------------
772
783
-- Raw bundles
@@ -825,12 +836,14 @@ private
825
836
open Definitions ℚ ℚᵘ ℚᵘ._≃_
826
837
827
838
toℚᵘ-homo-+ : Homomorphic₂ toℚᵘ _+_ ℚᵘ._+_
828
- toℚᵘ-homo-+ p q with +-nf p q ℤ.≟ 0ℤ
829
- ... | yes nf[p,q]≡0 = *≡* (begin
830
- ↥ (p + q) ℤ.* ↧+ᵘ p q ≡⟨ cong (ℤ._* ↧+ᵘ p q) eq ⟩
831
- 0ℤ ℤ.* ↧+ᵘ p q ≡⟨⟩
832
- 0ℤ ℤ.* ↧ (p + q) ≡⟨ cong (ℤ._* ↧ (p + q)) (sym eq2) ⟩
833
- ↥+ᵘ p q ℤ.* ↧ (p + q) ∎)
839
+ toℚᵘ-homo-+ p@record{} q@record{} with +-nf p q ℤ.≟ 0ℤ
840
+ ... | yes nf[p,q]≡0 = *≡* $ begin
841
+ ↥ᵘ (toℚᵘ (p + q)) ℤ.* ↧+ᵘ p q ≡⟨ cong (ℤ._* ↧+ᵘ p q) (↥ᵘ-toℚᵘ (p + q)) ⟩
842
+ ↥ (p + q) ℤ.* ↧+ᵘ p q ≡⟨ cong (ℤ._* ↧+ᵘ p q) eq ⟩
843
+ 0ℤ ℤ.* ↧+ᵘ p q ≡⟨⟩
844
+ 0ℤ ℤ.* ↧ (p + q) ≡⟨ cong (ℤ._* ↧ (p + q)) (sym eq2) ⟩
845
+ ↥+ᵘ p q ℤ.* ↧ (p + q) ≡⟨ cong (↥+ᵘ p q ℤ.*_) (sym (↧ᵘ-toℚᵘ (p + q))) ⟩
846
+ ↥+ᵘ p q ℤ.* ↧ᵘ (toℚᵘ (p + q)) ∎
834
847
where
835
848
open ≡-Reasoning
836
849
eq2 : ↥+ᵘ p q ≡ 0ℤ
@@ -839,12 +852,14 @@ toℚᵘ-homo-+ p q with +-nf p q ℤ.≟ 0ℤ
839
852
eq : ↥ (p + q) ≡ 0ℤ
840
853
eq rewrite eq2 = cong ↥_ (0/n≡0 (↧ₙ p ℕ.* ↧ₙ q))
841
854
842
- ... | no nf[p,q]≢0 = *≡* (ℤ.*-cancelʳ-≡ _ _ (+-nf p q) {{ℤ.≢-nonZero nf[p,q]≢0}} (begin
843
- ↥ (p + q) ℤ.* ↧+ᵘ p q ℤ.* +-nf p q ≡⟨ xy∙z≈xz∙y (↥ (p + q)) _ _ ⟩
844
- ↥ (p + q) ℤ.* +-nf p q ℤ.* ↧+ᵘ p q ≡⟨ cong (ℤ._* ↧+ᵘ p q) (↥-+ p q) ⟩
845
- ↥+ᵘ p q ℤ.* ↧+ᵘ p q ≡⟨ cong (↥+ᵘ p q ℤ.*_) (sym (↧-+ p q)) ⟩
846
- ↥+ᵘ p q ℤ.* (↧ (p + q) ℤ.* +-nf p q) ≡⟨ x∙yz≈xy∙z (↥+ᵘ p q) _ _ ⟩
847
- ↥+ᵘ p q ℤ.* ↧ (p + q) ℤ.* +-nf p q ∎))
855
+ ... | no nf[p,q]≢0 = *≡* $ ℤ.*-cancelʳ-≡ _ _ (+-nf p q) {{ℤ.≢-nonZero nf[p,q]≢0}} $ begin
856
+ (↥ᵘ (toℚᵘ (p + q))) ℤ.* ↧+ᵘ p q ℤ.* +-nf p q ≡⟨ cong (λ v → v ℤ.* ↧+ᵘ p q ℤ.* +-nf p q) (↥ᵘ-toℚᵘ (p + q)) ⟩
857
+ ↥ (p + q) ℤ.* ↧+ᵘ p q ℤ.* +-nf p q ≡⟨ xy∙z≈xz∙y (↥ (p + q)) _ _ ⟩
858
+ ↥ (p + q) ℤ.* +-nf p q ℤ.* ↧+ᵘ p q ≡⟨ cong (ℤ._* ↧+ᵘ p q) (↥-+ p q) ⟩
859
+ ↥+ᵘ p q ℤ.* ↧+ᵘ p q ≡⟨ cong (↥+ᵘ p q ℤ.*_) (sym (↧-+ p q)) ⟩
860
+ ↥+ᵘ p q ℤ.* (↧ (p + q) ℤ.* +-nf p q) ≡⟨ x∙yz≈xy∙z (↥+ᵘ p q) _ _ ⟩
861
+ ↥+ᵘ p q ℤ.* ↧ (p + q) ℤ.* +-nf p q ≡˘⟨ cong (λ v → ↥+ᵘ p q ℤ.* v ℤ.* +-nf p q) (↧ᵘ-toℚᵘ (p + q)) ⟩
862
+ ↥+ᵘ p q ℤ.* ↧ᵘ (toℚᵘ (p + q)) ℤ.* +-nf p q ∎
848
863
where open ≡-Reasoning ; open CommSemigroupProperties ℤ.*-commutativeSemigroup
849
864
850
865
toℚᵘ-isMagmaHomomorphism-+ : IsMagmaHomomorphism +-rawMagma ℚᵘ.+-rawMagma toℚᵘ
@@ -1024,10 +1039,10 @@ private
1024
1039
*-nf p q = gcd (↥ p ℤ.* ↥ q) (↧ p ℤ.* ↧ q)
1025
1040
1026
1041
↥-* : ∀ p q → ↥ (p * q) ℤ.* *-nf p q ≡ ↥ p ℤ.* ↥ q
1027
- ↥-* p q = ↥-/ (↥ p ℤ.* ↥ q) (↧ₙ p ℕ.* ↧ₙ q)
1042
+ ↥-* p@record{} q@record{} = ↥-/ (↥ p ℤ.* ↥ q) (↧ₙ p ℕ.* ↧ₙ q)
1028
1043
1029
1044
↧-* : ∀ p q → ↧ (p * q) ℤ.* *-nf p q ≡ ↧ p ℤ.* ↧ q
1030
- ↧-* p q = ↧-/ (↥ p ℤ.* ↥ q) (↧ₙ p ℕ.* ↧ₙ q)
1045
+ ↧-* p@record{} q@record{} = ↧-/ (↥ p ℤ.* ↥ q) (↧ₙ p ℕ.* ↧ₙ q)
1031
1046
1032
1047
------------------------------------------------------------------------
1033
1048
-- Raw bundles
@@ -1049,25 +1064,29 @@ private
1049
1064
-- Monomorphic to unnormalised _*_
1050
1065
1051
1066
toℚᵘ-homo-* : Homomorphic₂ toℚᵘ _*_ ℚᵘ._*_
1052
- toℚᵘ-homo-* p q with *-nf p q ℤ.≟ 0ℤ
1053
- ... | yes nf[p,q]≡0 = *≡* (begin
1054
- ↥ (p * q) ℤ.* (↧ p ℤ.* ↧ q) ≡⟨ cong (ℤ._* (↧ p ℤ.* ↧ q)) eq ⟩
1055
- 0ℤ ℤ.* (↧ p ℤ.* ↧ q) ≡⟨⟩
1056
- 0ℤ ℤ.* ↧ (p * q) ≡⟨ cong (ℤ._* ↧ (p * q)) (sym eq2) ⟩
1057
- (↥ p ℤ.* ↥ q) ℤ.* ↧ (p * q) ∎)
1067
+ toℚᵘ-homo-* p@record{} q@record{} with *-nf p q ℤ.≟ 0ℤ
1068
+ ... | yes nf[p,q]≡0 = *≡* $ begin
1069
+ ↥ᵘ (toℚᵘ (p * q)) ℤ.* (↧ p ℤ.* ↧ q) ≡⟨ cong (ℤ._* (↧ p ℤ.* ↧ q)) (↥ᵘ-toℚᵘ (p * q)) ⟩
1070
+ ↥ (p * q) ℤ.* (↧ p ℤ.* ↧ q) ≡⟨ cong (ℤ._* (↧ p ℤ.* ↧ q)) eq ⟩
1071
+ 0ℤ ℤ.* (↧ p ℤ.* ↧ q) ≡⟨⟩
1072
+ 0ℤ ℤ.* ↧ (p * q) ≡⟨ cong (ℤ._* ↧ (p * q)) (sym eq2) ⟩
1073
+ (↥ p ℤ.* ↥ q) ℤ.* ↧ (p * q) ≡⟨ cong ((↥ p ℤ.* ↥ q) ℤ.*_) (sym (↧ᵘ-toℚᵘ (p * q))) ⟩
1074
+ (↥ p ℤ.* ↥ q) ℤ.* ↧ᵘ (toℚᵘ (p * q)) ∎
1058
1075
where
1059
1076
open ≡-Reasoning
1060
1077
eq2 : ↥ p ℤ.* ↥ q ≡ 0ℤ
1061
1078
eq2 = gcd[i,j]≡0⇒i≡0 (↥ p ℤ.* ↥ q) (↧ p ℤ.* ↧ q) nf[p,q]≡0
1062
1079
1063
1080
eq : ↥ (p * q) ≡ 0ℤ
1064
1081
eq rewrite eq2 = cong ↥_ (0/n≡0 (↧ₙ p ℕ.* ↧ₙ q))
1065
- ... | no nf[p,q]≢0 = *≡* (ℤ.*-cancelʳ-≡ _ _ (*-nf p q) {{ℤ.≢-nonZero nf[p,q]≢0}} (begin
1066
- ↥ (p * q) ℤ.* (↧ p ℤ.* ↧ q) ℤ.* *-nf p q ≡⟨ xy∙z≈xz∙y (↥ (p * q)) _ _ ⟩
1067
- ↥ (p * q) ℤ.* *-nf p q ℤ.* (↧ p ℤ.* ↧ q) ≡⟨ cong (ℤ._* (↧ p ℤ.* ↧ q)) (↥-* p q) ⟩
1068
- (↥ p ℤ.* ↥ q) ℤ.* (↧ p ℤ.* ↧ q) ≡⟨ cong ((↥ p ℤ.* ↥ q) ℤ.*_) (sym (↧-* p q)) ⟩
1069
- (↥ p ℤ.* ↥ q) ℤ.* (↧ (p * q) ℤ.* *-nf p q) ≡⟨ x∙yz≈xy∙z (↥ p ℤ.* ↥ q) _ _ ⟩
1070
- (↥ p ℤ.* ↥ q) ℤ.* ↧ (p * q) ℤ.* *-nf p q ∎))
1082
+ ... | no nf[p,q]≢0 = *≡* $ ℤ.*-cancelʳ-≡ _ _ (*-nf p q) {{ℤ.≢-nonZero nf[p,q]≢0}} $ begin
1083
+ ↥ᵘ (toℚᵘ (p * q)) ℤ.* (↧ p ℤ.* ↧ q) ℤ.* *-nf p q ≡⟨ cong (λ v → v ℤ.* (↧ p ℤ.* ↧ q) ℤ.* *-nf p q) (↥ᵘ-toℚᵘ (p * q)) ⟩
1084
+ ↥ (p * q) ℤ.* (↧ p ℤ.* ↧ q) ℤ.* *-nf p q ≡⟨ xy∙z≈xz∙y (↥ (p * q)) _ _ ⟩
1085
+ ↥ (p * q) ℤ.* *-nf p q ℤ.* (↧ p ℤ.* ↧ q) ≡⟨ cong (ℤ._* (↧ p ℤ.* ↧ q)) (↥-* p q) ⟩
1086
+ (↥ p ℤ.* ↥ q) ℤ.* (↧ p ℤ.* ↧ q) ≡⟨ cong ((↥ p ℤ.* ↥ q) ℤ.*_) (sym (↧-* p q)) ⟩
1087
+ (↥ p ℤ.* ↥ q) ℤ.* (↧ (p * q) ℤ.* *-nf p q) ≡⟨ x∙yz≈xy∙z (↥ p ℤ.* ↥ q) _ _ ⟩
1088
+ (↥ p ℤ.* ↥ q) ℤ.* ↧ (p * q) ℤ.* *-nf p q ≡˘⟨ cong (λ v → (↥ p ℤ.* ↥ q) ℤ.* v ℤ.* *-nf p q) (↧ᵘ-toℚᵘ (p * q)) ⟩
1089
+ (↥ p ℤ.* ↥ q) ℤ.* ↧ᵘ (toℚᵘ (p * q)) ℤ.* *-nf p q ∎
1071
1090
where open ≡-Reasoning ; open CommSemigroupProperties ℤ.*-commutativeSemigroup
1072
1091
1073
1092
toℚᵘ-homo-1/ : ∀ p .{{_ : NonZero p}} → toℚᵘ (1/ p) ℚᵘ.≃ (ℚᵘ.1/ toℚᵘ p)
@@ -1337,22 +1356,22 @@ neg-distribʳ-* = +-*-Monomorphism.neg-distribʳ-* ℚᵘ.+-0-isGroup ℚᵘ.*-i
1337
1356
------------------------------------------------------------------------
1338
1357
1339
1358
p≤q⇒p⊔q≡q : p ≤ q → p ⊔ q ≡ q
1340
- p≤q⇒p⊔q≡q {p} {q} p≤q with p ≤ᵇ q | inspect (p ≤ᵇ_) q
1359
+ p≤q⇒p⊔q≡q {p@record{}} {q@record{} } p≤q with p ≤ᵇ q | inspect (p ≤ᵇ_) q
1341
1360
... | true | _ = refl
1342
1361
... | false | [ p≰q ] = contradiction (≤⇒≤ᵇ p≤q) (subst (¬_ ∘ T) (sym p≰q) λ ())
1343
1362
1344
1363
p≥q⇒p⊔q≡p : p ≥ q → p ⊔ q ≡ p
1345
- p≥q⇒p⊔q≡p {p} {q} p≥q with p ≤ᵇ q | inspect (p ≤ᵇ_) q
1364
+ p≥q⇒p⊔q≡p {p@record{}} {q@record{} } p≥q with p ≤ᵇ q | inspect (p ≤ᵇ_) q
1346
1365
... | true | [ p≤q ] = ≤-antisym p≥q (≤ᵇ⇒≤ (subst T (sym p≤q) _))
1347
1366
... | false | [ p≤q ] = refl
1348
1367
1349
1368
p≤q⇒p⊓q≡p : p ≤ q → p ⊓ q ≡ p
1350
- p≤q⇒p⊓q≡p {p} {q} p≤q with p ≤ᵇ q | inspect (p ≤ᵇ_) q
1369
+ p≤q⇒p⊓q≡p {p@record{}} {q@record{} } p≤q with p ≤ᵇ q | inspect (p ≤ᵇ_) q
1351
1370
... | true | _ = refl
1352
1371
... | false | [ p≰q ] = contradiction (≤⇒≤ᵇ p≤q) (subst (¬_ ∘ T) (sym p≰q) λ ())
1353
1372
1354
1373
p≥q⇒p⊓q≡q : p ≥ q → p ⊓ q ≡ q
1355
- p≥q⇒p⊓q≡q {p} {q} p≥q with p ≤ᵇ q | inspect (p ≤ᵇ_) q
1374
+ p≥q⇒p⊓q≡q {p@record{}} {q@record{} } p≥q with p ≤ᵇ q | inspect (p ≤ᵇ_) q
1356
1375
... | true | [ p≤q ] = ≤-antisym (≤ᵇ⇒≤ (subst T (sym p≤q) _)) p≥q
1357
1376
... | false | [ p≤q ] = refl
1358
1377
@@ -1603,15 +1622,15 @@ toℚᵘ-homo-∣-∣ (mkℚ -[1+ _ ] _ _) = *≡* refl
1603
1622
∣p∣≡0⇒p≡0 (mkℚ +0 zero _) ∣p∣≡0 = refl
1604
1623
1605
1624
0≤∣p∣ : ∀ p → 0ℚ ≤ ∣ p ∣
1606
- 0≤∣p∣ p = *≤* (begin
1625
+ 0≤∣p∣ p@record{} = *≤* (begin
1607
1626
(↥ 0ℚ) ℤ.* (↧ ∣ p ∣) ≡⟨ ℤ.*-zeroˡ (↧ ∣ p ∣) ⟩
1608
1627
0ℤ ≤⟨ ℤ.+≤+ ℕ.z≤n ⟩
1609
1628
↥ ∣ p ∣ ≡˘⟨ ℤ.*-identityʳ (↥ ∣ p ∣) ⟩
1610
1629
↥ ∣ p ∣ ℤ.* 1ℤ ∎)
1611
1630
where open ℤ.≤-Reasoning
1612
1631
1613
1632
0≤p⇒∣p∣≡p : 0ℚ ≤ p → ∣ p ∣ ≡ p
1614
- 0≤p⇒∣p∣≡p {p} 0≤p = toℚᵘ-injective (ℚᵘ.0≤p⇒∣p∣≃p (toℚᵘ-mono-≤ 0≤p))
1633
+ 0≤p⇒∣p∣≡p {p@record{} } 0≤p = toℚᵘ-injective (ℚᵘ.0≤p⇒∣p∣≃p (toℚᵘ-mono-≤ 0≤p))
1615
1634
1616
1635
∣-p∣≡∣p∣ : ∀ p → ∣ - p ∣ ≡ ∣ p ∣
1617
1636
∣-p∣≡∣p∣ (mkℚ +[1+ n ] d-1 _) = refl
@@ -1640,7 +1659,7 @@ toℚᵘ-homo-∣-∣ (mkℚ -[1+ _ ] _ _) = *≡* refl
1640
1659
where open ℚᵘ.≤-Reasoning
1641
1660
1642
1661
∣p-q∣≤∣p∣+∣q∣ : ∀ p q → ∣ p - q ∣ ≤ ∣ p ∣ + ∣ q ∣
1643
- ∣p-q∣≤∣p∣+∣q∣ p q = begin
1662
+ ∣p-q∣≤∣p∣+∣q∣ p@record{} q@record{} = begin
1644
1663
∣ p - q ∣ ≤⟨ ∣p+q∣≤∣p∣+∣q∣ p (- q) ⟩
1645
1664
∣ p ∣ + ∣ - q ∣ ≡⟨ cong (λ h → ∣ p ∣ + h) (∣-p∣≡∣p∣ q) ⟩
1646
1665
∣ p ∣ + ∣ q ∣ ∎
0 commit comments