Cauchy-completion, first parts (#52)

This commit is contained in:
Patrick Stevens
2019-10-22 07:51:09 +01:00
committed by GitHub
parent 959071214e
commit 6eaa181104
15 changed files with 567 additions and 518 deletions

View File

@@ -7,6 +7,7 @@ open import Numbers.Integers.Addition
open import Numbers.Integers.Multiplication
open import Semirings.Definition
open import Rings.Definition
open import Rings.Order
open import Setoids.Setoids
open import Setoids.Orders
open import Orders

View File

@@ -554,3 +554,9 @@ module Numbers.Naturals.Naturals where
sumZeroImpliesOperandsZero : (a : ) {b : } a +N b 0 (a 0) && (b 0)
sumZeroImpliesOperandsZero zero {zero} pr = refl ,, refl
inequalityShrinkRight : {a b c : } a +N b <N c b <N c
inequalityShrinkRight {a} {b} {c} (le x proof) = le (x +N a) (transitivity (applyEquality succ (additionNIsAssociative x a b)) proof)
inequalityShrinkLeft : {a b c : } a +N b <N c a <N c
inequalityShrinkLeft {a} {b} {c} (le x proof) = le (x +N b) (transitivity (applyEquality succ (transitivity (additionNIsAssociative x b a) (applyEquality (x +N_) (additionNIsCommutative b a)))) proof)

View File

@@ -6,6 +6,7 @@ open import Numbers.Integers.Integers
open import Groups.Groups
open import Groups.Definition
open import Rings.Definition
open import Rings.Order
open import Fields.Fields
open import Numbers.Primes.PrimeNumbers
open import Setoids.Setoids
@@ -17,53 +18,57 @@ open import Sets.EquivalenceRelations
module Numbers.Rationals where
: Set
= fieldOfFractionsSet IntDom
: Set
= fieldOfFractionsSet IntDom
_+Q_ :
a +Q b = fieldOfFractionsPlus IntDom a b
_+Q_ :
a +Q b = fieldOfFractionsPlus IntDom a b
_*Q_ :
a *Q b = fieldOfFractionsTimes IntDom a b
_*Q_ :
a *Q b = fieldOfFractionsTimes IntDom a b
Ring : Ring (fieldOfFractionsSetoid IntDom) _+Q_ _*Q_
Ring = fieldOfFractionsRing IntDom
Ring : Ring (fieldOfFractionsSetoid IntDom) _+Q_ _*Q_
Ring = fieldOfFractionsRing IntDom
0Q :
0Q = Ring.0R Ring
0Q :
0Q = Ring.0R Ring
Field : Field Ring
Field = fieldOfFractions IntDom
Field : Field Ring
Field = fieldOfFractions IntDom
_<Q_ : Set
_<Q_ = fieldOfFractionsComparison IntDom OrderedRing
_<Q_ : Set
_<Q_ = fieldOfFractionsComparison IntDom OrderedRing
_=Q_ : Set
a =Q b = Setoid.__ (fieldOfFractionsSetoid IntDom) a b
_=Q_ : Set
a =Q b = Setoid.__ (fieldOfFractionsSetoid IntDom) a b
reflQ : {x : } (x =Q x)
reflQ {x} = Equivalence.reflexive (Setoid.eq (fieldOfFractionsSetoid IntDom)) {x}
reflQ : {x : } (x =Q x)
reflQ {x} = Equivalence.reflexive (Setoid.eq (fieldOfFractionsSetoid IntDom)) {x}
_≤Q_ : Set
a ≤Q b = (a <Q b) || (a =Q b)
_≤Q_ : Set
a ≤Q b = (a <Q b) || (a =Q b)
negateQ :
negateQ a = Group.inverse (Ring.additiveGroup Ring) a
negateQ :
negateQ a = Group.inverse (Ring.additiveGroup Ring) a
_-Q_ :
a -Q b = a +Q negateQ b
_-Q_ :
a -Q b = a +Q negateQ b
PartialOrder : SetoidPartialOrder (fieldOfFractionsSetoid IntDom) (fieldOfFractionsComparison IntDom OrderedRing)
PartialOrder = fieldOfFractionsOrder IntDom OrderedRing
a-A : (a : ) (a -Q a) =Q 0Q
a-A a = Group.invRight (Ring.additiveGroup Ring) {a}
TotalOrder : SetoidTotalOrder (fieldOfFractionsOrder IntDom OrderedRing)
TotalOrder = fieldOfFractionsTotalOrder IntDom OrderedRing
PartialOrder : SetoidPartialOrder (fieldOfFractionsSetoid IntDom) (fieldOfFractionsComparison IntDom OrderedRing)
PartialOrder = fieldOfFractionsOrder IntDom OrderedRing
absQ :
absQ q with SetoidTotalOrder.totality (fieldOfFractionsTotalOrder IntDom OrderedRing) 0Q q
absQ q | inl (inl 0<q) = q
absQ q | inl (inr q<0) = Group.inverse (Ring.additiveGroup Ring) q
absQ q | inr x = 0Q
TotalOrder : SetoidTotalOrder (fieldOfFractionsOrder IntDom OrderedRing)
TotalOrder = fieldOfFractionsTotalOrder IntDom OrderedRing
Ordered : OrderedRing Ring (fieldOfFractionsTotalOrder IntDom OrderedRing)
Ordered = fieldOfFractionsOrderedRing IntDom OrderedRing
open SetoidTotalOrder (fieldOfFractionsTotalOrder IntDom OrderedRing)
open SetoidPartialOrder partial
open Setoid (fieldOfFractionsSetoid IntDom)
negateQWellDefined : (a b : ) (a =Q b) (negateQ a) =Q (negateQ b)
negateQWellDefined a b a=b = inverseWellDefined (Ring.additiveGroup Ring) {a} {b} a=b
Ordered : OrderedRing Ring (fieldOfFractionsTotalOrder IntDom OrderedRing)
Ordered = fieldOfFractionsOrderedRing IntDom OrderedRing

View File

@@ -1,209 +0,0 @@
{-# OPTIONS --safe --warning=error #-}
open import LogicalFormulae
open import Numbers.Naturals.Naturals
open import Numbers.Integers.Integers
open import Numbers.Rationals
open import Groups.Groups
open import Groups.Lemmas
open import Groups.Definition
open import Rings.Definition
open import Fields.Fields
open import Numbers.Primes.PrimeNumbers
open import Setoids.Setoids
open import Setoids.Orders
open import Functions
open import Fields.FieldOfFractions
open import Fields.FieldOfFractionsOrder
open import Rings.IntegralDomains
open import Rings.Lemmas
open import Sets.EquivalenceRelations
module Numbers.RationalsLemmas where
triangleInequality : {a b : } (absQ (a +Q b)) ≤Q ((absQ a) +Q (absQ b))
triangleInequality {a} {b} with SetoidTotalOrder.totality TotalOrder 0Q a
triangleInequality {a} {b} | inl (inl 0<a) with SetoidTotalOrder.totality TotalOrder 0Q b
triangleInequality {a} {b} | inl (inl 0<a) | inl (inl 0<b) with SetoidTotalOrder.totality TotalOrder 0Q (a +Q b)
triangleInequality {a} {b} | inl (inl 0<a) | inl (inl 0<b) | inl (inl 0<a+b) = inr (reflexive {a +Q b})
where
open Equivalence (Setoid.eq (fieldOfFractionsSetoid IntDom))
triangleInequality {a} {b} | inl (inl 0<a) | inl (inl 0<b) | inl (inr a+b<0) = exFalso (exFalso (SetoidPartialOrder.irreflexive (fieldOfFractionsOrder IntDom OrderedRing) {a +Q b} (SetoidPartialOrder.transitive (fieldOfFractionsOrder IntDom OrderedRing) {a +Q b} {0Q} {a +Q b} a+b<0 (SetoidPartialOrder.wellDefined (fieldOfFractionsOrder IntDom OrderedRing) {0Q +Q 0Q} {0Q} {a +Q b} {a +Q b} (symmetric {0Q} {0Q +Q 0Q} (Group.identRight (Ring.additiveGroup Ring) {0Q})) (reflexive {a +Q b}) (ringAddInequalities Ordered {0Q} {a} {0Q} {b} 0<a 0<b)))))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Equivalence eq
triangleInequality {a} {b} | inl (inl 0<a) | inl (inl 0<b) | inr 0=a+b = exFalso (SetoidPartialOrder.irreflexive (fieldOfFractionsOrder IntDom OrderedRing) {0Q} (SetoidPartialOrder.wellDefined (fieldOfFractionsOrder IntDom OrderedRing) {0Q +Q 0Q} {0Q} {a +Q b} {0Q} (identRight {0Q}) (symmetric {0Q} {a +Q b} 0=a+b) (ringAddInequalities Ordered {0Q} {a} {0Q} {b} 0<a 0<b)))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Equivalence eq
triangleInequality {a} {b} | inl (inl 0<a) | inl (inr b<0) with SetoidTotalOrder.totality TotalOrder 0Q (a +Q b)
triangleInequality {a} {b} | inl (inl 0<a) | inl (inr b<0) | inl (inl 0<a+b) = inl (SetoidPartialOrder.wellDefined (fieldOfFractionsOrder IntDom OrderedRing) {b +Q a} {a +Q b} {inverse b +Q a} {a +Q inverse b} (Ring.groupIsAbelian Ring {b} {a}) (Ring.groupIsAbelian Ring {inverse b} {a}) (OrderedRing.orderRespectsAddition Ordered {b} {inverse b} (SetoidPartialOrder.transitive (fieldOfFractionsOrder IntDom OrderedRing) {b} {0Q} {inverse b} b<0 (ringMinusFlipsOrder'' Ordered {b} b<0)) a))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Equivalence eq
triangleInequality {a} {b} | inl (inl 0<a) | inl (inr b<0) | inl (inr a+b<0) = inl (SetoidPartialOrder.wellDefined (fieldOfFractionsOrder IntDom OrderedRing) {inverse a +Q inverse b} {inverse (a +Q b)} {a +Q inverse b} {a +Q inverse b} (transitive {inverse a +Q inverse b} {inverse b +Q inverse a} {inverse (a +Q b)} (Ring.groupIsAbelian Ring {inverse a} {inverse b}) (symmetric {inverse (a +Q b)} {inverse b +Q inverse a} (invContravariant (Ring.additiveGroup Ring) {a} {b}))) (reflexive {a +Q inverse b}) (OrderedRing.orderRespectsAddition Ordered {inverse a} {a} (SetoidPartialOrder.transitive (fieldOfFractionsOrder IntDom OrderedRing) {inverse a} {0Q} {a} (ringMinusFlipsOrder Ordered {a} 0<a) 0<a) (inverse b)))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Equivalence eq
triangleInequality {a} {b} | inl (inl 0<a) | inl (inr b<0) | inr 0=a+b = inl (SetoidPartialOrder.transitive (fieldOfFractionsOrder IntDom OrderedRing) {0Q} {a} {a +Q (inverse b)} 0<a (SetoidPartialOrder.wellDefined (fieldOfFractionsOrder IntDom OrderedRing) {0Q +Q a} {a} {inverse b +Q a} {a +Q inverse b} (identLeft {a}) (Ring.groupIsAbelian Ring {inverse b} {a}) (OrderedRing.orderRespectsAddition Ordered {0Q} {inverse b} (ringMinusFlipsOrder'' Ordered {b} b<0) a)))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Equivalence eq
triangleInequality {a} {b} | inl (inl 0<a) | inr 0=b with SetoidTotalOrder.totality TotalOrder 0Q (a +Q b)
triangleInequality {a} {b} | inl (inl 0<a) | inr 0=b | inl (inl 0<a+b) = inr (+WellDefined {a} {b} {a} {0Q} (reflexive {a}) (symmetric {0Q} {b} 0=b))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Equivalence eq
triangleInequality {a} {b} | inl (inl 0<a) | inr 0=b | inl (inr a+b<0) = exFalso (SetoidPartialOrder.irreflexive (fieldOfFractionsOrder IntDom OrderedRing) {a +Q b} (SetoidPartialOrder.transitive (fieldOfFractionsOrder IntDom OrderedRing) {a +Q b} {0Q} {a +Q b} a+b<0 (SetoidPartialOrder.wellDefined (fieldOfFractionsOrder IntDom OrderedRing) {0Q} {0Q} {a} {a +Q b} (reflexive {0Q}) (transitive {a} {a +Q 0Q} {a +Q b} (symmetric {a +Q 0Q} {a} (identRight {a})) (+WellDefined {a} {0Q} {a} {b} (reflexive {a}) 0=b)) 0<a)))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Equivalence eq
triangleInequality {a} {b} | inl (inl 0<a) | inr 0=b | inr 0=a+b = exFalso (SetoidPartialOrder.irreflexive (fieldOfFractionsOrder IntDom OrderedRing) {a +Q b} (SetoidPartialOrder.wellDefined (fieldOfFractionsOrder IntDom OrderedRing) {0Q} {a +Q b} {a} {a +Q b} 0=a+b (transitive {a} {a +Q 0Q} {a +Q b} (symmetric {a +Q 0Q} {a} (identRight {a})) (+WellDefined {a} {0Q} {a} {b} (reflexive {a}) 0=b)) 0<a))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Equivalence eq
triangleInequality {a} {b} | inl (inr a<0) with SetoidTotalOrder.totality TotalOrder 0Q b
triangleInequality {a} {b} | inl (inr a<0) | inl (inl 0<b) with SetoidTotalOrder.totality TotalOrder 0Q (a +Q b)
triangleInequality {a} {b} | inl (inr a<0) | inl (inl 0<b) | inl (inl 0<a+b) = inl (OrderedRing.orderRespectsAddition Ordered {a} {inverse a} (SetoidPartialOrder.transitive (fieldOfFractionsOrder IntDom OrderedRing) {a} {0Q} {inverse a} a<0 (ringMinusFlipsOrder'' Ordered {a} a<0)) b)
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Equivalence eq
triangleInequality {a} {b} | inl (inr a<0) | inl (inl 0<b) | inl (inr a+b<0) = inl (SetoidPartialOrder.wellDefined (fieldOfFractionsOrder IntDom OrderedRing) {inverse a +Q inverse b} {inverse (a +Q b)} {inverse a +Q b} {inverse a +Q b} (transitive {inverse a +Q inverse b} {inverse b +Q inverse a} {inverse (a +Q b)} (Ring.groupIsAbelian Ring {inverse a} {inverse b}) (symmetric {inverse (a +Q b)} {inverse b +Q inverse a} (invContravariant (Ring.additiveGroup Ring) {a} {b}))) (reflexive {inverse a +Q b}) blah)
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Equivalence eq
blah : (inverse a +Q inverse b) <Q (inverse a +Q b)
blah = SetoidPartialOrder.wellDefined (fieldOfFractionsOrder IntDom OrderedRing) {inverse b +Q inverse a} {inverse a +Q inverse b} {b +Q inverse a} {inverse a +Q b} (Ring.groupIsAbelian Ring {inverse b} {inverse a}) (Ring.groupIsAbelian Ring {b} {inverse a}) (OrderedRing.orderRespectsAddition Ordered {inverse b} {b} (SetoidPartialOrder.transitive (fieldOfFractionsOrder IntDom OrderedRing) {inverse b} {0Q} {b} (ringMinusFlipsOrder Ordered {b} 0<b) 0<b) (inverse a))
triangleInequality {a} {b} | inl (inr a<0) | inl (inl 0<b) | inr 0=a+b = inl (SetoidPartialOrder.transitive (fieldOfFractionsOrder IntDom OrderedRing) {0Q} {b} {inverse a +Q b} 0<b (SetoidPartialOrder.wellDefined (fieldOfFractionsOrder IntDom OrderedRing) {b +Q 0Q} {b} {b +Q inverse a} {inverse a +Q b} (identRight {b}) (Ring.groupIsAbelian Ring {b} {inverse a}) (SetoidPartialOrder.wellDefined (fieldOfFractionsOrder IntDom OrderedRing) {0Q +Q b} {b +Q 0Q} {inverse a +Q b} {b +Q inverse a} (Ring.groupIsAbelian Ring {0Q} {b}) (Ring.groupIsAbelian Ring {inverse a} {b}) (OrderedRing.orderRespectsAddition Ordered {0Q} {inverse a} (ringMinusFlipsOrder'' Ordered {a} a<0) b))))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Equivalence eq
triangleInequality {a} {b} | inl (inr a<0) | inl (inr b<0) with SetoidTotalOrder.totality TotalOrder 0Q (a +Q b)
triangleInequality {a} {b} | inl (inr a<0) | inl (inr b<0) | inl (inl 0<a+b) = exFalso (SetoidPartialOrder.irreflexive (fieldOfFractionsOrder IntDom OrderedRing) {a +Q b} (SetoidPartialOrder.transitive (fieldOfFractionsOrder IntDom OrderedRing) {a +Q b} {0Q} {a +Q b} (SetoidPartialOrder.wellDefined (fieldOfFractionsOrder IntDom OrderedRing) {a +Q b} {a +Q b} {0Q +Q 0Q} {0Q} (reflexive {a +Q b}) (identRight {0Q}) (ringAddInequalities Ordered {a} {0Q} {b} {0Q} a<0 b<0)) 0<a+b))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Equivalence eq
triangleInequality {a} {b} | inl (inr a<0) | inl (inr b<0) | inl (inr a+b<0) = inr (transitive {inverse (fieldOfFractionsPlus IntDom a b)} {fieldOfFractionsPlus IntDom (inverse b) (inverse a)} {fieldOfFractionsPlus IntDom (inverse a) (inverse b)} (invContravariant (Ring.additiveGroup Ring) {a} {b}) (Ring.groupIsAbelian Ring {inverse b} {inverse a}))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Equivalence eq
triangleInequality {a} {b} | inl (inr a<0) | inl (inr b<0) | inr 0=a+b = exFalso (SetoidPartialOrder.irreflexive (fieldOfFractionsOrder IntDom OrderedRing) {0Q} (SetoidPartialOrder.wellDefined (fieldOfFractionsOrder IntDom OrderedRing) {a +Q b} {0Q} {0Q} {0Q} (symmetric {0Q} {a +Q b} 0=a+b) (reflexive {0Q}) (SetoidPartialOrder.wellDefined (fieldOfFractionsOrder IntDom OrderedRing) {a +Q b} {a +Q b} {0Q +Q 0Q} {0Q} (reflexive {a +Q b}) (identLeft {0Q}) (ringAddInequalities Ordered {a} {0Q} {b} {0Q} a<0 b<0))))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Equivalence eq
triangleInequality {a} {b} | inl (inr a<0) | inr 0=b with SetoidTotalOrder.totality TotalOrder 0Q (a +Q b)
triangleInequality {a} {b} | inl (inr a<0) | inr 0=b | inl (inl 0<a+b) = exFalso (SetoidPartialOrder.irreflexive (fieldOfFractionsOrder IntDom OrderedRing) {a} (SetoidPartialOrder.transitive (fieldOfFractionsOrder IntDom OrderedRing) {a} {0Q} {a} a<0 (SetoidPartialOrder.wellDefined (fieldOfFractionsOrder IntDom OrderedRing) {0Q} {0Q} {a +Q b} {a} (reflexive {0Q}) (transitive {a +Q b} {a +Q 0Q} {a} (+WellDefined {a} {b} {a} {0Q} (reflexive {a}) (symmetric {0Q} {b} 0=b)) (identRight {a})) 0<a+b)))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Equivalence eq
triangleInequality {a} {b} | inl (inr a<0) | inr 0=b | inl (inr a+b<0) = inr (transitive {inverse (a +Q b)} {(inverse b) +Q (inverse a)} {(inverse a) +Q 0Q} (invContravariant (Ring.additiveGroup Ring) {a} {b}) (transitive {inverse b +Q inverse a} {inverse a +Q inverse b} {inverse a +Q 0Q} (Ring.groupIsAbelian Ring {inverse b} {inverse a}) (+WellDefined {inverse a} {inverse b} {inverse a} {0Q} (reflexive {inverse a}) (transitive {inverse b} {inverse 0Q} {0Q} (inverseWellDefined (Ring.additiveGroup Ring) {b} {0Q} (symmetric {0Q} {b} 0=b)) (symmetric {0Q} {inverse 0Q} (invIdentity (Ring.additiveGroup Ring)))))))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Equivalence eq
triangleInequality {a} {b} | inl (inr a<0) | inr 0=b | inr 0=a+b = exFalso (SetoidPartialOrder.irreflexive (fieldOfFractionsOrder IntDom OrderedRing) {0Q} (SetoidPartialOrder.wellDefined (fieldOfFractionsOrder IntDom OrderedRing) {a} {0Q} {0Q} {0Q} (transitive {a} {a +Q b} {0Q} (transitive {a} {a +Q 0Q} {a +Q b} (symmetric {a +Q 0Q} {a} (identRight {a})) (+WellDefined {a} {0Q} {a} {b} (reflexive {a}) 0=b)) (symmetric {0Q} {a +Q b} 0=a+b)) (reflexive {0Q}) a<0))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Equivalence eq
triangleInequality {a} {b} | inr 0=a with SetoidTotalOrder.totality TotalOrder 0Q b
triangleInequality {a} {b} | inr 0=a | inl (inl 0<b) with SetoidTotalOrder.totality TotalOrder 0Q (a +Q b)
triangleInequality {a} {b} | inr 0=a | inl (inl 0<b) | inl (inl 0<a+b) = inr (Group.+WellDefined (Ring.additiveGroup Ring) {a} {b} {0Q} {b} (symmetric {0Q} {a} 0=a) (reflexive {b}))
where
open Setoid (fieldOfFractionsSetoid IntDom)
open Equivalence eq
triangleInequality {a} {b} | inr 0=a | inl (inl 0<b) | inl (inr a+b<0) = exFalso (SetoidPartialOrder.irreflexive (fieldOfFractionsOrder IntDom OrderedRing) {a +Q b} (SetoidPartialOrder.transitive (fieldOfFractionsOrder IntDom OrderedRing) {a +Q b} {0Q} {a +Q b} a+b<0 (SetoidPartialOrder.wellDefined (fieldOfFractionsOrder IntDom OrderedRing) {0Q} {0Q} {b} {a +Q b} (reflexive {0Q}) (transitive {b} {0Q +Q b} {a +Q b} (symmetric {0Q +Q b} {b} (Group.identLeft (Ring.additiveGroup Ring) {b})) (Group.+WellDefined (Ring.additiveGroup Ring) {0Q} {b} {a} {b} 0=a (reflexive {b}))) 0<b)))
where
open Setoid (fieldOfFractionsSetoid IntDom)
open Equivalence eq
triangleInequality {a} {b} | inr 0=a | inl (inl 0<b) | inr 0=a+b = exFalso (SetoidPartialOrder.irreflexive (fieldOfFractionsOrder IntDom OrderedRing) {b} (SetoidPartialOrder.wellDefined (fieldOfFractionsOrder IntDom OrderedRing) {0Q} {b} {b} {b} (transitive {0Q} {a +Q b} {b} 0=a+b (transitive {a +Q b} {0Q +Q b} {b} (+WellDefined {a} {b} {0Q} {b} (symmetric {0Q} {a} 0=a) (reflexive {b})) (identLeft {b}))) (reflexive {b}) 0<b))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Equivalence eq
triangleInequality {a} {b} | inr 0=a | inl (inr b<0) with SetoidTotalOrder.totality TotalOrder 0Q (a +Q b)
triangleInequality {a} {b} | inr 0=a | inl (inr b<0) | inl (inl 0<a+b) = exFalso (SetoidPartialOrder.irreflexive (fieldOfFractionsOrder IntDom OrderedRing) {b} (SetoidPartialOrder.transitive (fieldOfFractionsOrder IntDom OrderedRing) {b} {0Q} {b} b<0 (SetoidPartialOrder.wellDefined (fieldOfFractionsOrder IntDom OrderedRing) {0Q} {0Q} {a +Q b} {b} (reflexive {0Q}) (transitive {a +Q b} {0Q +Q b} {b} (+WellDefined {a} {b} {0Q} {b} (symmetric {0Q} {a} 0=a) (reflexive {b})) (identLeft {b})) 0<a+b)))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Equivalence eq
triangleInequality {a} {b} | inr 0=a | inl (inr b<0) | inl (inr a+b<0) = inr (transitive {inverse (a +Q b)} {inverse b +Q inverse a} {0Q +Q inverse b} (invContravariant (Ring.additiveGroup Ring) {a} {b}) (transitive {inverse b +Q inverse a} {inverse a +Q inverse b} {0Q +Q inverse b} (Ring.groupIsAbelian Ring {inverse b} {inverse a}) (+WellDefined {inverse a} {inverse b} {0Q} {inverse b} (transitive {inverse a} {inverse 0Q} {0Q} (symmetric {inverse 0Q} {inverse a} (inverseWellDefined (Ring.additiveGroup Ring) {0Q} {a} 0=a)) (invIdentity (Ring.additiveGroup Ring))) (reflexive {inverse b}))))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Equivalence eq
triangleInequality {a} {b} | inr 0=a | inl (inr b<0) | inr 0=a+b = exFalso (SetoidPartialOrder.irreflexive (fieldOfFractionsOrder IntDom OrderedRing) {b} (SetoidPartialOrder.wellDefined (fieldOfFractionsOrder IntDom OrderedRing) {b} {b} {0Q} {b} (reflexive {b}) (transitive {0Q} {a +Q b} {b} 0=a+b (transitive {a +Q b} {0Q +Q b} {b} (+WellDefined {a} {b} {0Q} {b} (symmetric {0Q} {a} 0=a) (reflexive {b})) (identLeft {b}))) b<0))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Equivalence eq
triangleInequality {a} {b} | inr 0=a | inr 0=b with SetoidTotalOrder.totality TotalOrder 0Q (a +Q b)
triangleInequality {a} {b} | inr 0=a | inr 0=b | inl (inl 0<a+b) = exFalso (SetoidPartialOrder.irreflexive (fieldOfFractionsOrder IntDom OrderedRing) {0Q} (SetoidPartialOrder.wellDefined (fieldOfFractionsOrder IntDom OrderedRing) {0Q} {0Q} {a +Q b} {0Q} (reflexive {0Q}) (transitive {a +Q b} {0Q +Q 0Q} {0Q} (+WellDefined {a} {b} {0Q} {0Q} (symmetric {0Q} {a} 0=a) (symmetric {0Q} {b} 0=b)) (identRight {0Q})) 0<a+b))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Equivalence eq
triangleInequality {a} {b} | inr 0=a | inr 0=b | inl (inr a+b<0) = exFalso (SetoidPartialOrder.irreflexive (fieldOfFractionsOrder IntDom OrderedRing) {0Q} (SetoidPartialOrder.wellDefined (fieldOfFractionsOrder IntDom OrderedRing) {a +Q b} {0Q} {0Q} {0Q} (transitive {a +Q b} {0Q +Q 0Q} {0Q} (+WellDefined {a} {b} {0Q} {0Q} (symmetric {0Q} {a} 0=a) (symmetric {0Q} {b} 0=b)) (identRight {0Q})) (reflexive {0Q}) a+b<0))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Equivalence eq
triangleInequality {a} {b} | inr 0=a | inr 0=b | inr 0=a+b = inr refl
absNegation : (a : ) ((absQ a) =Q (absQ (negateQ a)))
absNegation a with SetoidTotalOrder.totality TotalOrder 0Q a
absNegation a | inl (inl 0<a) with SetoidTotalOrder.totality TotalOrder 0Q (negateQ a)
absNegation a | inl (inl 0<a) | inl (inl 0<-a) = exFalso (SetoidPartialOrder.irreflexive (fieldOfFractionsOrder IntDom OrderedRing) {a} (SetoidPartialOrder.transitive (fieldOfFractionsOrder IntDom OrderedRing) {a} {0Q} {a} (ringMinusFlipsOrder''' Ordered {a} 0<-a) 0<a))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Equivalence eq
absNegation a | inl (inl 0<a) | inl (inr _) = symmetric {inverse (inverse a)} {a} (invTwice (Ring.additiveGroup Ring) a)
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Equivalence eq
absNegation a | inl (inl 0<a) | inr 0=-a = exFalso (SetoidPartialOrder.irreflexive (fieldOfFractionsOrder IntDom OrderedRing) {0Q} (SetoidPartialOrder.wellDefined (fieldOfFractionsOrder IntDom OrderedRing) {0Q} {0Q} {a} {0Q} (reflexive {0Q}) (transitive {a} {inverse 0Q} {0Q} (swapInv (Ring.additiveGroup Ring) {a} {0Q} (symmetric {0Q} {inverse a} 0=-a)) (invIdentity (Ring.additiveGroup Ring))) 0<a))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Equivalence eq
absNegation a | inl (inr a<0) with SetoidTotalOrder.totality TotalOrder 0Q (negateQ a)
absNegation a | inl (inr a<0) | inl (inl _) = Equivalence.reflexive (Setoid.eq (fieldOfFractionsSetoid IntDom)) {Group.inverse (Ring.additiveGroup Ring) a}
absNegation a | inl (inr a<0) | inl (inr -a<0) = exFalso (SetoidPartialOrder.irreflexive (fieldOfFractionsOrder IntDom OrderedRing) {0Q} (SetoidPartialOrder.transitive (fieldOfFractionsOrder IntDom OrderedRing) {0Q} {a} {0Q} (ringMinusFlipsOrder' Ordered {a} -a<0) a<0))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Equivalence eq
absNegation a | inl (inr a<0) | inr -a=0 = exFalso (SetoidPartialOrder.irreflexive (fieldOfFractionsOrder IntDom OrderedRing) {0Q} (SetoidPartialOrder.wellDefined (fieldOfFractionsOrder IntDom OrderedRing) {a} {0Q} {0Q} {0Q} (transitive {a} {inverse 0Q} {0Q} (swapInv (Ring.additiveGroup Ring) {a} {0Q} (symmetric {0Q} {inverse a} -a=0)) (invIdentity (Ring.additiveGroup Ring))) (reflexive {0Q}) a<0))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Equivalence eq
absNegation a | inr 0=a with SetoidTotalOrder.totality TotalOrder 0Q (negateQ a)
absNegation a | inr 0=a | inl (inl 0<-a) = exFalso (SetoidPartialOrder.irreflexive (fieldOfFractionsOrder IntDom OrderedRing) {0Q} (SetoidPartialOrder.wellDefined (fieldOfFractionsOrder IntDom OrderedRing) {0Q} {0Q} {inverse a} {0Q} (reflexive {0Q}) (transitive {inverse a} {inverse 0Q} {0Q} (symmetric {inverse 0Q} {inverse a} (inverseWellDefined (Ring.additiveGroup Ring) {0Q} {a} 0=a)) (invIdentity (Ring.additiveGroup Ring))) 0<-a))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Equivalence eq
absNegation a | inr 0=a | inl (inr -a<0) = exFalso (SetoidPartialOrder.irreflexive (fieldOfFractionsOrder IntDom OrderedRing) {0Q} (SetoidPartialOrder.wellDefined (fieldOfFractionsOrder IntDom OrderedRing) {inverse a} {0Q} {0Q} {0Q} (transitive {inverse a} {inverse 0Q} {0Q} (symmetric {inverse 0Q} {inverse a} (inverseWellDefined (Ring.additiveGroup Ring) {0Q} {a} 0=a)) (invIdentity (Ring.additiveGroup Ring))) (reflexive {0Q}) -a<0))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Equivalence eq
absNegation a | inr 0=a | inr _ = refl