Triangle inequality on the rationals (#20)

This commit is contained in:
Patrick Stevens
2019-01-18 13:00:15 +00:00
committed by GitHub
parent 20b31da82d
commit 9cccd51cbf
6 changed files with 356 additions and 22 deletions

View File

@@ -24,3 +24,12 @@ module Groups.GroupsLemmas where
open Group G
open Equivalence eq
open Symmetric symmetricEq
swapInv : {a b : _} {A : Set a} {_+_ : A A A} {S : Setoid {a} {b} A} (G : Group S _+_) {x y : A} Setoid.__ S (Group.inverse G x) y Setoid.__ S x (Group.inverse G y)
swapInv {S = S} G {x} {y} -x=y = transitive (symmetric (invInv G)) (inverseWellDefined G -x=y)
where
open Setoid S
open Group G
open Equivalence eq
open Symmetric symmetricEq
open Transitive transitiveEq

View File

@@ -4,10 +4,12 @@ open import LogicalFormulae
open import Numbers.Naturals
open import Numbers.Integers
open import Groups.Groups
open import Groups.GroupDefinition
open import Rings.RingDefinition
open import Fields.Fields
open import PrimeNumbers
open import Setoids.Setoids
open import Setoids.Orders
open import Functions
open import Fields.FieldOfFractions
open import Fields.FieldOfFractionsOrder
@@ -26,8 +28,41 @@ module Numbers.Rationals where
Ring : Ring (fieldOfFractionsSetoid IntDom) _+Q_ _*Q_
Ring = fieldOfFractionsRing IntDom
0Q :
0Q = Ring.0R Ring
Field : Field Ring
Field = fieldOfFractions IntDom
_<Q_ : Set
_<Q_ = fieldOfFractionsComparison IntDom OrderedRing
_=Q_ : Set
a =Q b = Setoid.__ (fieldOfFractionsSetoid IntDom) a b
reflQ : {x : } (x =Q x)
reflQ {x} = Reflexive.reflexive (Equivalence.reflexiveEq (Setoid.eq (fieldOfFractionsSetoid IntDom))) {x}
_≤Q_ : Set
a ≤Q b = (a <Q b) || (a =Q b)
negateQ :
negateQ a = Group.inverse (Ring.additiveGroup Ring) a
_-Q_ :
a -Q b = a +Q negateQ b
PartialOrder : SetoidPartialOrder (fieldOfFractionsSetoid IntDom) (fieldOfFractionsComparison IntDom OrderedRing)
PartialOrder = fieldOfFractionsOrder IntDom OrderedRing
TotalOrder : SetoidTotalOrder (fieldOfFractionsOrder IntDom OrderedRing)
TotalOrder = fieldOfFractionsTotalOrder 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
Ordered : OrderedRing Ring (fieldOfFractionsTotalOrder IntDom OrderedRing)
Ordered = fieldOfFractionsOrderedRing IntDom OrderedRing

View File

@@ -0,0 +1,271 @@
{-# OPTIONS --safe --warning=error #-}
open import LogicalFormulae
open import Numbers.Naturals
open import Numbers.Integers
open import Numbers.Rationals
open import Groups.Groups
open import Groups.GroupsLemmas
open import Groups.GroupDefinition
open import Rings.RingDefinition
open import Fields.Fields
open import 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.RingLemmas
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 Reflexive (Equivalence.reflexiveEq (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.multIdentRight (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 Symmetric (Equivalence.symmetricEq eq)
open Reflexive (Equivalence.reflexiveEq eq)
open Transitive (Equivalence.transitiveEq 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} (multIdentRight {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 Symmetric (Equivalence.symmetricEq eq)
open Reflexive (Equivalence.reflexiveEq eq)
open Transitive (Equivalence.transitiveEq 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 Symmetric (Equivalence.symmetricEq eq)
open Reflexive (Equivalence.reflexiveEq eq)
open Transitive (Equivalence.transitiveEq 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 Symmetric (Equivalence.symmetricEq eq)
open Reflexive (Equivalence.reflexiveEq eq)
open Transitive (Equivalence.transitiveEq 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} (multIdentLeft {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 Symmetric (Equivalence.symmetricEq eq)
open Reflexive (Equivalence.reflexiveEq eq)
open Transitive (Equivalence.transitiveEq 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 Symmetric (Equivalence.symmetricEq eq)
open Reflexive (Equivalence.reflexiveEq eq)
open Transitive (Equivalence.transitiveEq 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} (multIdentRight {a})) (wellDefined {a} {0Q} {a} {b} (reflexive {a}) 0=b)) 0<a)))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Symmetric (Equivalence.symmetricEq eq)
open Reflexive (Equivalence.reflexiveEq eq)
open Transitive (Equivalence.transitiveEq 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} (multIdentRight {a})) (wellDefined {a} {0Q} {a} {b} (reflexive {a}) 0=b)) 0<a))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Symmetric (Equivalence.symmetricEq eq)
open Reflexive (Equivalence.reflexiveEq eq)
open Transitive (Equivalence.transitiveEq 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 Symmetric (Equivalence.symmetricEq eq)
open Reflexive (Equivalence.reflexiveEq eq)
open Transitive (Equivalence.transitiveEq 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 Symmetric (Equivalence.symmetricEq eq)
open Reflexive (Equivalence.reflexiveEq eq)
open Transitive (Equivalence.transitiveEq 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} (multIdentRight {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 Symmetric (Equivalence.symmetricEq eq)
open Reflexive (Equivalence.reflexiveEq eq)
open Transitive (Equivalence.transitiveEq 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}) (multIdentRight {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 Symmetric (Equivalence.symmetricEq eq)
open Reflexive (Equivalence.reflexiveEq eq)
open Transitive (Equivalence.transitiveEq 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 Symmetric (Equivalence.symmetricEq eq)
open Reflexive (Equivalence.reflexiveEq eq)
open Transitive (Equivalence.transitiveEq 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}) (multIdentLeft {0Q}) (ringAddInequalities Ordered {a} {0Q} {b} {0Q} a<0 b<0))))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Symmetric (Equivalence.symmetricEq eq)
open Reflexive (Equivalence.reflexiveEq eq)
open Transitive (Equivalence.transitiveEq 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)) (multIdentRight {a})) 0<a+b)))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Symmetric (Equivalence.symmetricEq eq)
open Reflexive (Equivalence.reflexiveEq eq)
open Transitive (Equivalence.transitiveEq 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 Symmetric (Equivalence.symmetricEq eq)
open Reflexive (Equivalence.reflexiveEq eq)
open Transitive (Equivalence.transitiveEq 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} (multIdentRight {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 Symmetric (Equivalence.symmetricEq eq)
open Reflexive (Equivalence.reflexiveEq eq)
open Transitive (Equivalence.transitiveEq 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 Symmetric (Equivalence.symmetricEq eq)
open Reflexive (Equivalence.reflexiveEq 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.multIdentLeft (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 Symmetric (Equivalence.symmetricEq eq)
open Reflexive (Equivalence.reflexiveEq eq)
open Transitive (Equivalence.transitiveEq 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})) (multIdentLeft {b}))) (reflexive {b}) 0<b))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Symmetric (Equivalence.symmetricEq eq)
open Reflexive (Equivalence.reflexiveEq eq)
open Transitive (Equivalence.transitiveEq 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})) (multIdentLeft {b})) 0<a+b)))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Symmetric (Equivalence.symmetricEq eq)
open Reflexive (Equivalence.reflexiveEq eq)
open Transitive (Equivalence.transitiveEq 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 Symmetric (Equivalence.symmetricEq eq)
open Reflexive (Equivalence.reflexiveEq eq)
open Transitive (Equivalence.transitiveEq 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})) (multIdentLeft {b}))) b<0))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Symmetric (Equivalence.symmetricEq eq)
open Reflexive (Equivalence.reflexiveEq eq)
open Transitive (Equivalence.transitiveEq 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)) (multIdentRight {0Q})) 0<a+b))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Symmetric (Equivalence.symmetricEq eq)
open Reflexive (Equivalence.reflexiveEq eq)
open Transitive (Equivalence.transitiveEq 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)) (multIdentRight {0Q})) (reflexive {0Q}) a+b<0))
where
open Group (Ring.additiveGroup Ring)
open Setoid (fieldOfFractionsSetoid IntDom)
open Symmetric (Equivalence.symmetricEq eq)
open Reflexive (Equivalence.reflexiveEq eq)
open Transitive (Equivalence.transitiveEq 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 Symmetric (Equivalence.symmetricEq eq)
open Reflexive (Equivalence.reflexiveEq eq)
open Transitive (Equivalence.transitiveEq 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 Symmetric (Equivalence.symmetricEq eq)
open Reflexive (Equivalence.reflexiveEq eq)
open Transitive (Equivalence.transitiveEq 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 Symmetric (Equivalence.symmetricEq eq)
open Reflexive (Equivalence.reflexiveEq eq)
open Transitive (Equivalence.transitiveEq eq)
absNegation a | inl (inr a<0) with SetoidTotalOrder.totality TotalOrder 0Q (negateQ a)
absNegation a | inl (inr a<0) | inl (inl _) = Reflexive.reflexive (Equivalence.reflexiveEq (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 Symmetric (Equivalence.symmetricEq eq)
open Reflexive (Equivalence.reflexiveEq eq)
open Transitive (Equivalence.transitiveEq 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 Symmetric (Equivalence.symmetricEq eq)
open Reflexive (Equivalence.reflexiveEq eq)
open Transitive (Equivalence.transitiveEq 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 Symmetric (Equivalence.symmetricEq eq)
open Reflexive (Equivalence.reflexiveEq eq)
open Transitive (Equivalence.transitiveEq 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 Symmetric (Equivalence.symmetricEq eq)
open Reflexive (Equivalence.reflexiveEq eq)
open Transitive (Equivalence.transitiveEq eq)
absNegation a | inr 0=a | inr _ = refl

View File

@@ -1,32 +1,39 @@
{-# OPTIONS --safe --warning=error #-}
open import Fields
open import Rings
open import Fields.Fields
open import Functions
open import Orders
open import LogicalFormulae
open import Rationals
open import Naturals
open import Numbers.Rationals
open import Numbers.RationalsLemmas
open import Numbers.Naturals
open import Setoids.Setoids
open import Setoids.Orders
open import Agda.Primitive using (Level; lzero; lsuc; _⊔_)
module Reals where
record Subset {m n : _} (A : Set m) (B : Set n) : Set (m n) where
field
inj : A B
injInj : Injection inj
--record RealField {n : _} {A : Set n} {R : Ring A} {F : Field R} : Set _ where
-- field
-- orderedField : OrderedField F
-- open OrderedField orderedField
-- open TotalOrder ord
-- open Ring R
-- field
-- complete : {c : _} {C : Set c} → (S : Subset C A) → (upperBound : A) → ({s : C} → (Subset.inj S s) < upperBound) → Sg A (λ lub → ({s : C} → (Subset.inj S s) < lub) && ({s : C} → (Subset.inj S s) < upperBound → (Subset.inj S s) < lub))
record Real : Set where
module Numbers.Reals where
record : Set where
field
f :
converges : {ε : } Sg (λ x {y : } x <N y (f x) +Q (f y) <Q ε)
converges : {ε : } Sg (λ x {y : } x <N y (absQ ((f x) -Q (f y))) <Q ε)
_+R_ :
.f (record { f = a ; converges = conA } +R record { f = b ; converges = conB }) n = (a n) +Q (b n)
.converges (record { f = a ; converges = conA } +R record { f = b ; converges = conB }) {e} = {!absQ (a x +Q b x)!}
negateR :
.f (negateR record { f = f ; converges = converges }) n = negateQ (f n)
.converges (negateR record { f = f ; converges = converges }) {e} with converges {e}
... | n , pr = n , λ {y} x<y SetoidPartialOrder.wellDefined PartialOrder {absQ ((f n) -Q (f y))} {absQ ((negateQ (f n)) -Q (negateQ (f y)))} {e} {e} {!!} {!reflQ e!} (pr {y} x<y)
_-R_ :
a -R b = a +R (negateR b)
_*R_ :
.f (record { f = a ; converges = conA } *R record { f = b ; converges = conB }) n = (a n) *Q (b n)
.converges (record { f = a ; converges = conA } *R record { f = b ; converges = conB}) {e} = {!!}
realsSetoid : Setoid
(realsSetoid Setoid. record { f = a ; converges = convA }) record { f = b ; converges = convB } = {!!}
Setoid.eq realsSetoid = {!!}

View File

@@ -61,3 +61,9 @@ module Rings.RingDefinition where
-- ringHom : RingHom R S f
-- bijective : Bijection f
abs : {a b c : _} {A : Set a} {S : Setoid {a} {b} A} {_+_ : A A A} {_*_ : A A A} {_<_ : Rel {_} {c} A} {pOrder : SetoidPartialOrder S _<_} (R : Ring S _+_ _*_) (order : SetoidTotalOrder pOrder) (x : A) A
abs R order x with SetoidTotalOrder.totality order (Ring.0R R) x
... | inl (inl 0<x) = x
... | inl (inr x<0) = Group.inverse (Ring.additiveGroup R) x
... | inr 0=x = Ring.0R R

View File

@@ -88,6 +88,12 @@ module Rings.RingLemmas where
open Reflexive (Equivalence.reflexiveEq (Setoid.eq S))
open Symmetric (Equivalence.symmetricEq (Setoid.eq S))
ringMinusFlipsOrder'' : {a b c : _} {A : Set a} {S : Setoid {a} {b} A} {_+_ : A A A} {_*_ : A A A} {R : Ring S _+_ _*_} {_<_ : Rel {_} {c} A} {pOrder : SetoidPartialOrder S _<_} {tOrder : SetoidTotalOrder pOrder} (oRing : OrderedRing R tOrder) {x : A} x < (Ring.0R R) (Ring.0R R) < Group.inverse (Ring.additiveGroup R) x
ringMinusFlipsOrder'' {S = S} {R = R} {pOrder = pOrder} oRing {x} x<0 = ringMinusFlipsOrder' oRing (SetoidPartialOrder.wellDefined pOrder {x} {Group.inverse (Ring.additiveGroup R) (Group.inverse (Ring.additiveGroup R) x)} {Ring.0R R} {Ring.0R R} (Symmetric.symmetric (Equivalence.symmetricEq (Setoid.eq S)) (invInv (Ring.additiveGroup R))) (Reflexive.reflexive (Equivalence.reflexiveEq (Setoid.eq S))) x<0)
ringMinusFlipsOrder''' : {a b c : _} {A : Set a} {S : Setoid {a} {b} A} {_+_ : A A A} {_*_ : A A A} {R : Ring S _+_ _*_} {_<_ : Rel {_} {c} A} {pOrder : SetoidPartialOrder S _<_} {tOrder : SetoidTotalOrder pOrder} (oRing : OrderedRing R tOrder) {x : A} (Ring.0R R) < (Group.inverse (Ring.additiveGroup R) x) x < (Ring.0R R)
ringMinusFlipsOrder''' {S = S} {R = R} {pOrder = pOrder} oRing {x} 0<-x = SetoidPartialOrder.wellDefined pOrder (invInv (Ring.additiveGroup R)) (Reflexive.reflexive (Equivalence.reflexiveEq (Setoid.eq S))) (ringMinusFlipsOrder oRing 0<-x)
ringCanMultiplyByPositive : {a b c : _} {A : Set a} {S : Setoid {a} {b} A} {_+_ : A A A} {_*_ : A A A} {R : Ring S _+_ _*_} {_<_ : Rel {_} {c} A} {pOrder : SetoidPartialOrder S _<_} {tOrder : SetoidTotalOrder pOrder} (oRing : OrderedRing R tOrder) {x y c : A} (Ring.0R R) < c x < y (x * c) < (y * c)
ringCanMultiplyByPositive {S = S} {_+_ = _+_} {_*_ = _*_} {R = R} {_<_ = _<_} {pOrder = pOrder} {tOrder = tOrder} oRing {x} {y} {c} 0<c x<y = SetoidPartialOrder.wellDefined pOrder reflexive (Group.multIdentRight additiveGroup) q'
where