Skip to content

Commit 833f0fa

Browse files
authored
Rename equality operations in Rational reasoning (#1916)
1 parent e66601e commit 833f0fa

File tree

3 files changed

+124
-89
lines changed

3 files changed

+124
-89
lines changed

CHANGELOG.md

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@ Non-backwards compatible changes
344344
### Change in reduction behaviour of rationals
345345

346346
* Currently arithmetic expressions involving rationals (both normalised and
347-
unnormalised) undergo disastorous exponential normalisation. For example,
347+
unnormalised) undergo disastrous exponential normalisation. For example,
348348
`p + q` would often be normalised by Agda to
349349
`(↥ p ℤ.* ↧ q ℤ.+ ↥ q ℤ.* ↧ p) / (↧ₙ p ℕ.* ↧ₙ q)`. While the normalised form
350350
of `p + q + r + s + t + u + v` would be ~700 lines long. This behaviour
@@ -677,6 +677,22 @@ Non-backwards compatible changes
677677
exported by `Data.Rational.Base`. You will have to open `Data.Integer(.Base)`
678678
directly to use them.
679679

680+
* The names of the (in)equational reasoning combinators defined in the internal
681+
modules `Data.Rational(.Unnormalised).Properties.≤-Reasoning` have been renamed
682+
(issue #1437) to conform with the defined setoid equality `_≃_` on `Rational`s:
683+
```agda
684+
step-≈ ↦ step-≃
685+
step-≃˘ ↦ step-≃˘
686+
```
687+
with corresponding associated syntax:
688+
```agda
689+
_≈⟨_⟩_ ↦ _≃⟨_⟩_
690+
_≈˘⟨_⟩_ ↦ _≃˘⟨_⟩_
691+
```
692+
NB. It is not possible to rename or deprecate `syntax` declarations, so Agda will
693+
only issue a "Could not parse the application `begin ...` when scope checking"
694+
warning if the old combinators are used.
695+
680696
* The types of the proofs `pos⇒1/pos`/`1/pos⇒pos` and `neg⇒1/neg`/`1/neg⇒neg` in
681697
`Data.Rational(.Unnormalised).Properties` have been switched, as the previous
682698
naming scheme didn't correctly generalise to e.g. `pos+pos⇒pos`. For example

src/Data/Rational/Properties.agda

Lines changed: 48 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -429,9 +429,9 @@ toℚᵘ-cong refl = *≡* refl
429429

430430
fromℚᵘ-cong : fromℚᵘ Preserves _≃ᵘ_ ⟶ _≡_
431431
fromℚᵘ-cong {p} {q} p≃q = toℚᵘ-injective (begin-equality
432-
toℚᵘ (fromℚᵘ p) ⟨ toℚᵘ-fromℚᵘ p ⟩
433-
p ⟨ p≃q ⟩
434-
q ˘⟨ toℚᵘ-fromℚᵘ q ⟩
432+
toℚᵘ (fromℚᵘ p) ⟨ toℚᵘ-fromℚᵘ p ⟩
433+
p ⟨ p≃q ⟩
434+
q ˘⟨ toℚᵘ-fromℚᵘ q ⟩
435435
toℚᵘ (fromℚᵘ q) ∎)
436436
where open ℚᵘ.≤-Reasoning
437437

@@ -705,15 +705,24 @@ _>?_ = flip _<?_
705705
------------------------------------------------------------------------
706706

707707
module ≤-Reasoning where
708-
open import Relation.Binary.Reasoning.Base.Triple
708+
import Relation.Binary.Reasoning.Base.Triple
709709
≤-isPreorder
710710
<-trans
711711
(resp₂ _<_)
712712
<⇒≤
713713
<-≤-trans
714714
≤-<-trans
715-
public
716-
hiding (step-≈; step-≈˘)
715+
as Triple
716+
open Triple public hiding (step-≈; step-≈˘)
717+
718+
infixr 2 step-≃ step-≃˘
719+
720+
step-≃ = Triple.step-≈
721+
step-≃˘ = Triple.step-≈˘
722+
723+
syntax step-≃ x y∼z x≃y = x ≃⟨ x≃y ⟩ y∼z
724+
syntax step-≃˘ x y∼z y≃x = x ≃˘⟨ y≃x ⟩ y∼z
725+
717726

718727
------------------------------------------------------------------------
719728
-- Properties of Positive/NonPositive/Negative/NonNegative and _≤_/_<_
@@ -950,9 +959,9 @@ neg-distrib-+ = +-Monomorphism.⁻¹-distrib-∙ ℚᵘ.+-0-isAbelianGroup (ℚ
950959

951960
+-mono-≤ : _+_ Preserves₂ _≤_ ⟶ _≤_ ⟶ _≤_
952961
+-mono-≤ {p} {q} {r} {s} p≤q r≤s = toℚᵘ-cancel-≤ (begin
953-
toℚᵘ(p + r) ⟨ toℚᵘ-homo-+ p r ⟩
962+
toℚᵘ(p + r) ⟨ toℚᵘ-homo-+ p r ⟩
954963
toℚᵘ(p) ℚᵘ.+ toℚᵘ(r) ≤⟨ ℚᵘ.+-mono-≤ (toℚᵘ-mono-≤ p≤q) (toℚᵘ-mono-≤ r≤s) ⟩
955-
toℚᵘ(q) ℚᵘ.+ toℚᵘ(s) ⟨ ℚᵘ.≃-sym (toℚᵘ-homo-+ q s) ⟩
964+
toℚᵘ(q) ℚᵘ.+ toℚᵘ(s) ⟨ ℚᵘ.≃-sym (toℚᵘ-homo-+ q s) ⟩
956965
toℚᵘ(q + s) ∎)
957966
where open ℚᵘ.≤-Reasoning
958967

@@ -967,9 +976,9 @@ neg-distrib-+ = +-Monomorphism.⁻¹-distrib-∙ ℚᵘ.+-0-isAbelianGroup (ℚ
967976

968977
+-mono-<-≤ : _+_ Preserves₂ _<_ ⟶ _≤_ ⟶ _<_
969978
+-mono-<-≤ {p} {q} {r} {s} p<q r≤s = toℚᵘ-cancel-< (begin-strict
970-
toℚᵘ(p + r) ⟨ toℚᵘ-homo-+ p r ⟩
979+
toℚᵘ(p + r) ⟨ toℚᵘ-homo-+ p r ⟩
971980
toℚᵘ(p) ℚᵘ.+ toℚᵘ(r) <⟨ ℚᵘ.+-mono-<-≤ (toℚᵘ-mono-< p<q) (toℚᵘ-mono-≤ r≤s) ⟩
972-
toℚᵘ(q) ℚᵘ.+ toℚᵘ(s) ⟨ ℚᵘ.≃-sym (toℚᵘ-homo-+ q s) ⟩
981+
toℚᵘ(q) ℚᵘ.+ toℚᵘ(s) ⟨ ℚᵘ.≃-sym (toℚᵘ-homo-+ q s) ⟩
973982
toℚᵘ(q + s) ∎)
974983
where open ℚᵘ.≤-Reasoning
975984

@@ -1127,9 +1136,9 @@ private
11271136

11281137
*-inverseˡ : p .{{_ : NonZero p}} (1/ p) * p ≡ 1ℚ
11291138
*-inverseˡ p = toℚᵘ-injective (begin-equality
1130-
toℚᵘ (1/ p * p) ⟨ toℚᵘ-homo-* (1/ p) p ⟩
1131-
toℚᵘ (1/ p) ℚᵘ.* toℚᵘ p ⟨ ℚᵘ.*-congʳ (toℚᵘ-homo-1/ p) ⟩
1132-
ℚᵘ.1/ (toℚᵘ p) ℚᵘ.* toℚᵘ p ⟨ ℚᵘ.*-inverseˡ (toℚᵘ p) ⟩
1139+
toℚᵘ (1/ p * p) ⟨ toℚᵘ-homo-* (1/ p) p ⟩
1140+
toℚᵘ (1/ p) ℚᵘ.* toℚᵘ p ⟨ ℚᵘ.*-congʳ (toℚᵘ-homo-1/ p) ⟩
1141+
ℚᵘ.1/ (toℚᵘ p) ℚᵘ.* toℚᵘ p ⟨ ℚᵘ.*-inverseˡ (toℚᵘ p) ⟩
11331142
ℚᵘ.1ℚᵘ ∎)
11341143
where open ℚᵘ.≤-Reasoning
11351144

@@ -1201,9 +1210,9 @@ neg-distribʳ-* = +-*-Monomorphism.neg-distribʳ-* ℚᵘ.+-0-isGroup ℚᵘ.*-i
12011210

12021211
*-cancelʳ-≤-pos : r .{{_ : Positive r}} p * r ≤ q * r p ≤ q
12031212
*-cancelʳ-≤-pos {p} {q} r pr≤qr = toℚᵘ-cancel-≤ (ℚᵘ.*-cancelʳ-≤-pos (toℚᵘ r) (begin
1204-
toℚᵘ p ℚᵘ.* toℚᵘ r ˘⟨ toℚᵘ-homo-* p r ⟩
1213+
toℚᵘ p ℚᵘ.* toℚᵘ r ˘⟨ toℚᵘ-homo-* p r ⟩
12051214
toℚᵘ (p * r) ≤⟨ toℚᵘ-mono-≤ pr≤qr ⟩
1206-
toℚᵘ (q * r) ⟨ toℚᵘ-homo-* q r ⟩
1215+
toℚᵘ (q * r) ⟨ toℚᵘ-homo-* q r ⟩
12071216
toℚᵘ q ℚᵘ.* toℚᵘ r ∎))
12081217
where open ℚᵘ.≤-Reasoning
12091218

@@ -1212,9 +1221,9 @@ neg-distribʳ-* = +-*-Monomorphism.neg-distribʳ-* ℚᵘ.+-0-isGroup ℚᵘ.*-i
12121221

12131222
*-monoʳ-≤-nonNeg : r .{{_ : NonNegative r}} (_* r) Preserves _≤_ ⟶ _≤_
12141223
*-monoʳ-≤-nonNeg r {p} {q} p≤q = toℚᵘ-cancel-≤ (begin
1215-
toℚᵘ (p * r) ⟨ toℚᵘ-homo-* p r ⟩
1224+
toℚᵘ (p * r) ⟨ toℚᵘ-homo-* p r ⟩
12161225
toℚᵘ p ℚᵘ.* toℚᵘ r ≤⟨ ℚᵘ.*-monoˡ-≤-nonNeg (toℚᵘ r) (toℚᵘ-mono-≤ p≤q) ⟩
1217-
toℚᵘ q ℚᵘ.* toℚᵘ r ˘⟨ toℚᵘ-homo-* q r ⟩
1226+
toℚᵘ q ℚᵘ.* toℚᵘ r ˘⟨ toℚᵘ-homo-* q r ⟩
12181227
toℚᵘ (q * r) ∎)
12191228
where open ℚᵘ.≤-Reasoning
12201229

@@ -1223,9 +1232,9 @@ neg-distribʳ-* = +-*-Monomorphism.neg-distribʳ-* ℚᵘ.+-0-isGroup ℚᵘ.*-i
12231232

12241233
*-monoʳ-≤-nonPos : r .{{_ : NonPositive r}} (_* r) Preserves _≤_ ⟶ _≥_
12251234
*-monoʳ-≤-nonPos r {p} {q} p≤q = toℚᵘ-cancel-≤ (begin
1226-
toℚᵘ (q * r) ⟨ toℚᵘ-homo-* q r ⟩
1235+
toℚᵘ (q * r) ⟨ toℚᵘ-homo-* q r ⟩
12271236
toℚᵘ q ℚᵘ.* toℚᵘ r ≤⟨ ℚᵘ.*-monoˡ-≤-nonPos (toℚᵘ r) (toℚᵘ-mono-≤ p≤q) ⟩
1228-
toℚᵘ p ℚᵘ.* toℚᵘ r ˘⟨ toℚᵘ-homo-* p r ⟩
1237+
toℚᵘ p ℚᵘ.* toℚᵘ r ˘⟨ toℚᵘ-homo-* p r ⟩
12291238
toℚᵘ (p * r) ∎)
12301239
where open ℚᵘ.≤-Reasoning
12311240

@@ -1234,9 +1243,9 @@ neg-distribʳ-* = +-*-Monomorphism.neg-distribʳ-* ℚᵘ.+-0-isGroup ℚᵘ.*-i
12341243

12351244
*-cancelʳ-≤-neg : r .{{_ : Negative r}} p * r ≤ q * r p ≥ q
12361245
*-cancelʳ-≤-neg {p} {q} r pr≤qr = toℚᵘ-cancel-≤ (ℚᵘ.*-cancelʳ-≤-neg _ (begin
1237-
toℚᵘ p ℚᵘ.* toℚᵘ r ˘⟨ toℚᵘ-homo-* p r ⟩
1246+
toℚᵘ p ℚᵘ.* toℚᵘ r ˘⟨ toℚᵘ-homo-* p r ⟩
12381247
toℚᵘ (p * r) ≤⟨ toℚᵘ-mono-≤ pr≤qr ⟩
1239-
toℚᵘ (q * r) ⟨ toℚᵘ-homo-* q r ⟩
1248+
toℚᵘ (q * r) ⟨ toℚᵘ-homo-* q r ⟩
12401249
toℚᵘ q ℚᵘ.* toℚᵘ r ∎))
12411250
where open ℚᵘ.≤-Reasoning
12421251

@@ -1248,9 +1257,9 @@ neg-distribʳ-* = +-*-Monomorphism.neg-distribʳ-* ℚᵘ.+-0-isGroup ℚᵘ.*-i
12481257

12491258
*-monoˡ-<-pos : r .{{_ : Positive r}} (_* r) Preserves _<_ ⟶ _<_
12501259
*-monoˡ-<-pos r {p} {q} p<q = toℚᵘ-cancel-< (begin-strict
1251-
toℚᵘ (p * r) ⟨ toℚᵘ-homo-* p r ⟩
1260+
toℚᵘ (p * r) ⟨ toℚᵘ-homo-* p r ⟩
12521261
toℚᵘ p ℚᵘ.* toℚᵘ r <⟨ ℚᵘ.*-monoˡ-<-pos (toℚᵘ r) (toℚᵘ-mono-< p<q) ⟩
1253-
toℚᵘ q ℚᵘ.* toℚᵘ r ˘⟨ toℚᵘ-homo-* q r ⟩
1262+
toℚᵘ q ℚᵘ.* toℚᵘ r ˘⟨ toℚᵘ-homo-* q r ⟩
12541263
toℚᵘ (q * r) ∎)
12551264
where open ℚᵘ.≤-Reasoning
12561265

@@ -1259,9 +1268,9 @@ neg-distribʳ-* = +-*-Monomorphism.neg-distribʳ-* ℚᵘ.+-0-isGroup ℚᵘ.*-i
12591268

12601269
*-cancelˡ-<-nonNeg : r .{{_ : NonNegative r}} {p q} r * p < r * q p < q
12611270
*-cancelˡ-<-nonNeg r {p} {q} rp<rq = toℚᵘ-cancel-< (ℚᵘ.*-cancelˡ-<-nonNeg (toℚᵘ r) (begin-strict
1262-
toℚᵘ r ℚᵘ.* toℚᵘ p ˘⟨ toℚᵘ-homo-* r p ⟩
1271+
toℚᵘ r ℚᵘ.* toℚᵘ p ˘⟨ toℚᵘ-homo-* r p ⟩
12631272
toℚᵘ (r * p) <⟨ toℚᵘ-mono-< rp<rq ⟩
1264-
toℚᵘ (r * q) ⟨ toℚᵘ-homo-* r q ⟩
1273+
toℚᵘ (r * q) ⟨ toℚᵘ-homo-* r q ⟩
12651274
toℚᵘ r ℚᵘ.* toℚᵘ q ∎))
12661275
where open ℚᵘ.≤-Reasoning
12671276

@@ -1270,9 +1279,9 @@ neg-distribʳ-* = +-*-Monomorphism.neg-distribʳ-* ℚᵘ.+-0-isGroup ℚᵘ.*-i
12701279

12711280
*-monoˡ-<-neg : r .{{_ : Negative r}} (_* r) Preserves _<_ ⟶ _>_
12721281
*-monoˡ-<-neg r {p} {q} p<q = toℚᵘ-cancel-< (begin-strict
1273-
toℚᵘ (q * r) ⟨ toℚᵘ-homo-* q r ⟩
1282+
toℚᵘ (q * r) ⟨ toℚᵘ-homo-* q r ⟩
12741283
toℚᵘ q ℚᵘ.* toℚᵘ r <⟨ ℚᵘ.*-monoˡ-<-neg (toℚᵘ r) (toℚᵘ-mono-< p<q) ⟩
1275-
toℚᵘ p ℚᵘ.* toℚᵘ r ˘⟨ toℚᵘ-homo-* p r ⟩
1284+
toℚᵘ p ℚᵘ.* toℚᵘ r ˘⟨ toℚᵘ-homo-* p r ⟩
12761285
toℚᵘ (p * r) ∎)
12771286
where open ℚᵘ.≤-Reasoning
12781287

@@ -1281,9 +1290,9 @@ neg-distribʳ-* = +-*-Monomorphism.neg-distribʳ-* ℚᵘ.+-0-isGroup ℚᵘ.*-i
12811290

12821291
*-cancelˡ-<-nonPos : r .{{_ : NonPositive r}} r * p < r * q p > q
12831292
*-cancelˡ-<-nonPos {p} {q} r rp<rq = toℚᵘ-cancel-< (ℚᵘ.*-cancelˡ-<-nonPos (toℚᵘ r) (begin-strict
1284-
toℚᵘ r ℚᵘ.* toℚᵘ p ˘⟨ toℚᵘ-homo-* r p ⟩
1293+
toℚᵘ r ℚᵘ.* toℚᵘ p ˘⟨ toℚᵘ-homo-* r p ⟩
12851294
toℚᵘ (r * p) <⟨ toℚᵘ-mono-< rp<rq ⟩
1286-
toℚᵘ (r * q) ⟨ toℚᵘ-homo-* r q ⟩
1295+
toℚᵘ (r * q) ⟨ toℚᵘ-homo-* r q ⟩
12871296
toℚᵘ r ℚᵘ.* toℚᵘ q ∎))
12881297
where open ℚᵘ.≤-Reasoning
12891298

@@ -1578,7 +1587,7 @@ toℚᵘ-homo-∣-∣ (mkℚ -[1+ _ ] _ _) = *≡* refl
15781587

15791588
∣p∣≡p⇒0≤p : {p} ∣ p ∣ ≡ p 0ℚ ≤ p
15801589
∣p∣≡p⇒0≤p {p} ∣p∣≡p = toℚᵘ-cancel-≤ (ℚᵘ.∣p∣≃p⇒0≤p (begin-equality
1581-
ℚᵘ.∣ toℚᵘ p ∣ ⟨ ℚᵘ.≃-sym (toℚᵘ-homo-∣-∣ p) ⟩
1590+
ℚᵘ.∣ toℚᵘ p ∣ ⟨ ℚᵘ.≃-sym (toℚᵘ-homo-∣-∣ p) ⟩
15821591
toℚᵘ ∣ p ∣ ≡⟨ cong toℚᵘ ∣p∣≡p ⟩
15831592
toℚᵘ p ∎))
15841593
where open ℚᵘ.≤-Reasoning
@@ -1589,11 +1598,11 @@ toℚᵘ-homo-∣-∣ (mkℚ -[1+ _ ] _ _) = *≡* refl
15891598

15901599
∣p+q∣≤∣p∣+∣q∣ : p q ∣ p + q ∣ ≤ ∣ p ∣ + ∣ q ∣
15911600
∣p+q∣≤∣p∣+∣q∣ p q = toℚᵘ-cancel-≤ (begin
1592-
toℚᵘ ∣ p + q ∣ ⟨ toℚᵘ-homo-∣-∣ (p + q) ⟩
1593-
ℚᵘ.∣ toℚᵘ (p + q) ∣ ⟨ ℚᵘ.∣-∣-cong (toℚᵘ-homo-+ p q) ⟩
1601+
toℚᵘ ∣ p + q ∣ ⟨ toℚᵘ-homo-∣-∣ (p + q) ⟩
1602+
ℚᵘ.∣ toℚᵘ (p + q) ∣ ⟨ ℚᵘ.∣-∣-cong (toℚᵘ-homo-+ p q) ⟩
15941603
ℚᵘ.∣ toℚᵘ p ℚᵘ.+ toℚᵘ q ∣ ≤⟨ ℚᵘ.∣p+q∣≤∣p∣+∣q∣ (toℚᵘ p) (toℚᵘ q) ⟩
1595-
ℚᵘ.∣ toℚᵘ p ∣ ℚᵘ.+ ℚᵘ.∣ toℚᵘ q ∣ ˘⟨ ℚᵘ.+-cong (toℚᵘ-homo-∣-∣ p) (toℚᵘ-homo-∣-∣ q) ⟩
1596-
toℚᵘ ∣ p ∣ ℚᵘ.+ toℚᵘ ∣ q ∣ ˘⟨ toℚᵘ-homo-+ ∣ p ∣ ∣ q ∣ ⟩
1604+
ℚᵘ.∣ toℚᵘ p ∣ ℚᵘ.+ ℚᵘ.∣ toℚᵘ q ∣ ˘⟨ ℚᵘ.+-cong (toℚᵘ-homo-∣-∣ p) (toℚᵘ-homo-∣-∣ q) ⟩
1605+
toℚᵘ ∣ p ∣ ℚᵘ.+ toℚᵘ ∣ q ∣ ˘⟨ toℚᵘ-homo-+ ∣ p ∣ ∣ q ∣ ⟩
15971606
toℚᵘ (∣ p ∣ + ∣ q ∣) ∎)
15981607
where open ℚᵘ.≤-Reasoning
15991608

@@ -1606,11 +1615,11 @@ toℚᵘ-homo-∣-∣ (mkℚ -[1+ _ ] _ _) = *≡* refl
16061615

16071616
∣p*q∣≡∣p∣*∣q∣ : p q ∣ p * q ∣ ≡ ∣ p ∣ * ∣ q ∣
16081617
∣p*q∣≡∣p∣*∣q∣ p q = toℚᵘ-injective (begin-equality
1609-
toℚᵘ ∣ p * q ∣ ⟨ toℚᵘ-homo-∣-∣ (p * q) ⟩
1610-
ℚᵘ.∣ toℚᵘ (p * q) ∣ ⟨ ℚᵘ.∣-∣-cong (toℚᵘ-homo-* p q) ⟩
1611-
ℚᵘ.∣ toℚᵘ p ℚᵘ.* toℚᵘ q ∣ ⟨ ℚᵘ.∣p*q∣≃∣p∣*∣q∣ (toℚᵘ p) (toℚᵘ q) ⟩
1612-
ℚᵘ.∣ toℚᵘ p ∣ ℚᵘ.* ℚᵘ.∣ toℚᵘ q ∣ ˘⟨ ℚᵘ.*-cong (toℚᵘ-homo-∣-∣ p) (toℚᵘ-homo-∣-∣ q) ⟩
1613-
toℚᵘ ∣ p ∣ ℚᵘ.* toℚᵘ ∣ q ∣ ˘⟨ toℚᵘ-homo-* ∣ p ∣ ∣ q ∣ ⟩
1618+
toℚᵘ ∣ p * q ∣ ⟨ toℚᵘ-homo-∣-∣ (p * q) ⟩
1619+
ℚᵘ.∣ toℚᵘ (p * q) ∣ ⟨ ℚᵘ.∣-∣-cong (toℚᵘ-homo-* p q) ⟩
1620+
ℚᵘ.∣ toℚᵘ p ℚᵘ.* toℚᵘ q ∣ ⟨ ℚᵘ.∣p*q∣≃∣p∣*∣q∣ (toℚᵘ p) (toℚᵘ q) ⟩
1621+
ℚᵘ.∣ toℚᵘ p ∣ ℚᵘ.* ℚᵘ.∣ toℚᵘ q ∣ ˘⟨ ℚᵘ.*-cong (toℚᵘ-homo-∣-∣ p) (toℚᵘ-homo-∣-∣ q) ⟩
1622+
toℚᵘ ∣ p ∣ ℚᵘ.* toℚᵘ ∣ q ∣ ˘⟨ toℚᵘ-homo-* ∣ p ∣ ∣ q ∣ ⟩
16141623
toℚᵘ (∣ p ∣ * ∣ q ∣) ∎)
16151624
where open ℚᵘ.≤-Reasoning
16161625

0 commit comments

Comments
 (0)