Files
agdaproofs/Numbers/RationalsLemmas.agda
2019-08-18 14:57:41 +01:00

272 lines
26 KiB
Agda
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{-# OPTIONS --safe --warning=error #-}
open import LogicalFormulae
open import Numbers.Naturals.Naturals
open import Numbers.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 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
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