Skip to content

Commit c3c9f4f

Browse files
authored
Lemmas for Positive, Negative, etc. and _+_ and _*_ for rationals (#2496)
* Add lemmas relating Positive etc to addition for rationals * Add lemmas relating Positive etc to multiplication for rationals * Actually save filling last hole Whoops
1 parent 4739d4a commit c3c9f4f

File tree

2 files changed

+100
-0
lines changed

2 files changed

+100
-0
lines changed

CHANGELOG.md

+20
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,26 @@ Additions to existing modules
316316
m≤pred[n]⇒suc[m]≤n : .{{NonZero n}} → m ≤ pred n → suc m ≤ n
317317
```
318318

319+
* New lemmas in `Data.Rational.Properties`:
320+
```agda
321+
nonNeg+nonNeg⇒nonNeg : ∀ p .{{_ : NonNegative p}} q .{{_ : NonNegative q}} → NonNegative (p + q)
322+
nonPos+nonPos⇒nonPos : ∀ p .{{_ : NonPositive p}} q .{{_ : NonPositive q}} → NonPositive (p + q)
323+
pos+nonNeg⇒pos : ∀ p .{{_ : Positive p}} q .{{_ : NonNegative q}} → Positive (p + q)
324+
nonNeg+pos⇒pos : ∀ p .{{_ : NonNegative p}} q .{{_ : Positive q}} → Positive (p + q)
325+
pos+pos⇒pos : ∀ p .{{_ : Positive p}} q .{{_ : Positive q}} → Positive (p + q)
326+
neg+nonPos⇒neg : ∀ p .{{_ : Negative p}} q .{{_ : NonPositive q}} → Negative (p + q)
327+
nonPos+neg⇒neg : ∀ p .{{_ : NonPositive p}} q .{{_ : Negative q}} → Negative (p + q)
328+
neg+neg⇒neg : ∀ p .{{_ : Negative p}} q .{{_ : Negative q}} → Negative (p + q)
329+
nonNeg*nonNeg⇒nonNeg : ∀ p .{{_ : NonNegative p}} q .{{_ : NonNegative q}} → NonNegative (p * q)
330+
nonPos*nonNeg⇒nonPos : ∀ p .{{_ : NonPositive p}} q .{{_ : NonNegative q}} → NonPositive (p * q)
331+
nonNeg*nonPos⇒nonPos : ∀ p .{{_ : NonNegative p}} q .{{_ : NonPositive q}} → NonPositive (p * q)
332+
nonPos*nonPos⇒nonPos : ∀ p .{{_ : NonPositive p}} q .{{_ : NonPositive q}} → NonNegative (p * q)
333+
pos*pos⇒pos : ∀ p .{{_ : Positive p}} q .{{_ : Positive q}} → Positive (p * q)
334+
neg*pos⇒neg : ∀ p .{{_ : Negative p}} q .{{_ : Positive q}} → Negative (p * q)
335+
pos*neg⇒neg : ∀ p .{{_ : Positive p}} q .{{_ : Negative q}} → Negative (p * q)
336+
neg*neg⇒pos : ∀ p .{{_ : Negative p}} q .{{_ : Negative q}} → Positive (p * q)
337+
```
338+
319339
* New lemma in `Data.Vec.Properties`:
320340
```agda
321341
map-concat : map f (concat xss) ≡ concat (map (map f) xss)

src/Data/Rational/Properties.agda

+80
Original file line numberDiff line numberDiff line change
@@ -1012,6 +1012,12 @@ neg-distrib-+ = +-Monomorphism.⁻¹-distrib-∙ ℚᵘ.+-0-isAbelianGroup (ℚ
10121012
+-monoʳ-≤ : r (_+_ r) Preserves _≤_ ⟶ _≤_
10131013
+-monoʳ-≤ r p≤q = +-mono-≤ (≤-refl {r}) p≤q
10141014

1015+
nonNeg+nonNeg⇒nonNeg : p .{{_ : NonNegative p}} q .{{_ : NonNegative q}} NonNegative (p + q)
1016+
nonNeg+nonNeg⇒nonNeg p q = nonNegative $ +-mono-≤ (nonNegative⁻¹ p) (nonNegative⁻¹ q)
1017+
1018+
nonPos+nonPos⇒nonPos : p .{{_ : NonPositive p}} q .{{_ : NonPositive q}} NonPositive (p + q)
1019+
nonPos+nonPos⇒nonPos p q = nonPositive $ +-mono-≤ (nonPositive⁻¹ p) (nonPositive⁻¹ q)
1020+
10151021
------------------------------------------------------------------------
10161022
-- Properties of _+_ and _<_
10171023

@@ -1035,6 +1041,24 @@ neg-distrib-+ = +-Monomorphism.⁻¹-distrib-∙ ℚᵘ.+-0-isAbelianGroup (ℚ
10351041
+-monoʳ-< : r (_+_ r) Preserves _<_ ⟶ _<_
10361042
+-monoʳ-< r p<q = +-mono-≤-< (≤-refl {r}) p<q
10371043

1044+
pos+nonNeg⇒pos : p .{{_ : Positive p}} q .{{_ : NonNegative q}} Positive (p + q)
1045+
pos+nonNeg⇒pos p q = positive $ +-mono-<-≤ (positive⁻¹ p) (nonNegative⁻¹ q)
1046+
1047+
nonNeg+pos⇒pos : p .{{_ : NonNegative p}} q .{{_ : Positive q}} Positive (p + q)
1048+
nonNeg+pos⇒pos p q = positive $ +-mono-≤-< (nonNegative⁻¹ p) (positive⁻¹ q)
1049+
1050+
pos+pos⇒pos : p .{{_ : Positive p}} q .{{_ : Positive q}} Positive (p + q)
1051+
pos+pos⇒pos p q = positive $ +-mono-< (positive⁻¹ p) (positive⁻¹ q)
1052+
1053+
neg+nonPos⇒neg : p .{{_ : Negative p}} q .{{_ : NonPositive q}} Negative (p + q)
1054+
neg+nonPos⇒neg p q = negative $ +-mono-<-≤ (negative⁻¹ p) (nonPositive⁻¹ q)
1055+
1056+
nonPos+neg⇒neg : p .{{_ : NonPositive p}} q .{{_ : Negative q}} Negative (p + q)
1057+
nonPos+neg⇒neg p q = negative $ +-mono-≤-< (nonPositive⁻¹ p) (negative⁻¹ q)
1058+
1059+
neg+neg⇒neg : p .{{_ : Negative p}} q .{{_ : Negative q}} Negative (p + q)
1060+
neg+neg⇒neg p q = negative $ +-mono-< (negative⁻¹ p) (negative⁻¹ q)
1061+
10381062
------------------------------------------------------------------------
10391063
-- Properties of _*_
10401064
------------------------------------------------------------------------
@@ -1340,6 +1364,34 @@ module _ where
13401364
*-cancelˡ-≤-neg : r .{{_ : Negative r}} r * p ≤ r * q p ≥ q
13411365
*-cancelˡ-≤-neg {p} {q} r rewrite *-comm r p | *-comm r q = *-cancelʳ-≤-neg r
13421366

1367+
nonNeg*nonNeg⇒nonNeg : p .{{_ : NonNegative p}} q .{{_ : NonNegative q}} NonNegative (p * q)
1368+
nonNeg*nonNeg⇒nonNeg p q = nonNegative $ begin
1369+
0ℚ ≡⟨ *-zeroʳ p ⟨
1370+
p * 0ℚ ≤⟨ *-monoˡ-≤-nonNeg p (nonNegative⁻¹ q) ⟩
1371+
p * q ∎
1372+
where open ≤-Reasoning
1373+
1374+
nonPos*nonNeg⇒nonPos : p .{{_ : NonPositive p}} q .{{_ : NonNegative q}} NonPositive (p * q)
1375+
nonPos*nonNeg⇒nonPos p q = nonPositive $ begin
1376+
p * q ≤⟨ *-monoˡ-≤-nonPos p (nonNegative⁻¹ q) ⟩
1377+
p * 0ℚ ≡⟨ *-zeroʳ p ⟩
1378+
0ℚ ∎
1379+
where open ≤-Reasoning
1380+
1381+
nonNeg*nonPos⇒nonPos : p .{{_ : NonNegative p}} q .{{_ : NonPositive q}} NonPositive (p * q)
1382+
nonNeg*nonPos⇒nonPos p q = nonPositive $ begin
1383+
p * q ≤⟨ *-monoˡ-≤-nonNeg p (nonPositive⁻¹ q) ⟩
1384+
p * 0ℚ ≡⟨ *-zeroʳ p ⟩
1385+
0ℚ ∎
1386+
where open ≤-Reasoning
1387+
1388+
nonPos*nonPos⇒nonPos : p .{{_ : NonPositive p}} q .{{_ : NonPositive q}} NonNegative (p * q)
1389+
nonPos*nonPos⇒nonPos p q = nonNegative $ begin
1390+
0ℚ ≡⟨ *-zeroʳ p ⟨
1391+
p * 0ℚ ≤⟨ *-monoˡ-≤-nonPos p (nonPositive⁻¹ q) ⟩
1392+
p * q ∎
1393+
where open ≤-Reasoning
1394+
13431395
------------------------------------------------------------------------
13441396
-- Properties of _*_ and _<_
13451397

@@ -1387,6 +1439,34 @@ module _ where
13871439
*-cancelʳ-<-nonPos : r .{{_ : NonPositive r}} p * r < q * r p > q
13881440
*-cancelʳ-<-nonPos {p} {q} r rewrite *-comm p r | *-comm q r = *-cancelˡ-<-nonPos r
13891441

1442+
pos*pos⇒pos : p .{{_ : Positive p}} q .{{_ : Positive q}} Positive (p * q)
1443+
pos*pos⇒pos p q = positive $ begin-strict
1444+
0ℚ ≡⟨ *-zeroʳ p ⟨
1445+
p * 0ℚ <⟨ *-monoʳ-<-pos p (positive⁻¹ q) ⟩
1446+
p * q ∎
1447+
where open ≤-Reasoning
1448+
1449+
neg*pos⇒neg : p .{{_ : Negative p}} q .{{_ : Positive q}} Negative (p * q)
1450+
neg*pos⇒neg p q = negative $ begin-strict
1451+
p * q <⟨ *-monoʳ-<-neg p (positive⁻¹ q) ⟩
1452+
p * 0ℚ ≡⟨ *-zeroʳ p ⟩
1453+
0ℚ ∎
1454+
where open ≤-Reasoning
1455+
1456+
pos*neg⇒neg : p .{{_ : Positive p}} q .{{_ : Negative q}} Negative (p * q)
1457+
pos*neg⇒neg p q = negative $ begin-strict
1458+
p * q <⟨ *-monoʳ-<-pos p (negative⁻¹ q) ⟩
1459+
p * 0ℚ ≡⟨ *-zeroʳ p ⟩
1460+
0ℚ ∎
1461+
where open ≤-Reasoning
1462+
1463+
neg*neg⇒pos : p .{{_ : Negative p}} q .{{_ : Negative q}} Positive (p * q)
1464+
neg*neg⇒pos p q = positive $ begin-strict
1465+
0ℚ ≡⟨ *-zeroʳ p ⟨
1466+
p * 0ℚ <⟨ *-monoʳ-<-neg p (negative⁻¹ q) ⟩
1467+
p * q ∎
1468+
where open ≤-Reasoning
1469+
13901470
------------------------------------------------------------------------
13911471
-- Properties of _⊓_
13921472
------------------------------------------------------------------------

0 commit comments

Comments
 (0)