{-# OPTIONS --safe --warning=error --without-K --guardedness #-} open import Agda.Primitive using (Level; lzero; lsuc; _⊔_) open import Setoids.Setoids open import Rings.Definition open import Rings.Orders.Partial.Definition open import Rings.Orders.Total.Definition open import Groups.Definition open import Groups.Lemmas open import Fields.Fields open import Sets.EquivalenceRelations open import Sequences open import Setoids.Orders.Partial.Definition open import Setoids.Orders.Total.Definition open import Functions.Definition open import LogicalFormulae open import Numbers.Naturals.Semiring open import Numbers.Naturals.Order open import Numbers.Naturals.Order.Lemmas open import Semirings.Definition module Fields.CauchyCompletion.NearlyTotalOrder {m n o : _} {A : Set m} {S : Setoid {m} {n} A} {_+_ : A → A → A} {_*_ : A → A → A} {_<_ : Rel {m} {o} A} {pOrder : SetoidPartialOrder S _<_} {R : Ring S _+_ _*_} {pRing : PartiallyOrderedRing R pOrder} (order : TotallyOrderedRing pRing) (F : Field R) where open Setoid S open SetoidTotalOrder (TotallyOrderedRing.total order) open SetoidPartialOrder pOrder open Equivalence eq open PartiallyOrderedRing pRing open Ring R open Group additiveGroup open Field F open import Fields.Orders.Lemmas {F = F} {pRing} (record { oRing = order }) open import Setoids.Orders.Partial.Sequences pOrder open import Rings.InitialRing R open import Rings.Orders.Partial.Lemmas pRing open import Rings.Orders.Total.Lemmas order open import Rings.Orders.Total.Cauchy order open import Rings.Orders.Total.AbsoluteValue order open import Fields.Lemmas F open import Fields.CauchyCompletion.Definition order F open import Fields.CauchyCompletion.Setoid order F open import Fields.CauchyCompletion.Group order F open import Fields.CauchyCompletion.Addition order F open import Fields.CauchyCompletion.Approximation order F open import Fields.CauchyCompletion.Comparison order F open import Fields.CauchyCompletion.PartiallyOrderedRing order F open import Fields.Orders.Total.Lemmas {F = F} (record { oRing = order }) makeIncreasingLemma : (a : A) (s : Sequence A) → Sequence A Sequence.head (makeIncreasingLemma a s) with totality a (Sequence.head s) ... | inl (inl x) = Sequence.head s ... | inl (inr x) = a ... | inr x = a Sequence.tail (makeIncreasingLemma a s) = makeIncreasingLemma (Sequence.head (makeIncreasingLemma a s)) (Sequence.tail s) makeIncreasingLemmaIsIncreasing : (a : A) (s : Sequence A) → WeaklyIncreasing (makeIncreasingLemma a s) makeIncreasingLemmaIsIncreasing a s zero with totality a (Sequence.head s) makeIncreasingLemmaIsIncreasing a s zero | inl (inl x) with totality (Sequence.head s) (Sequence.head (Sequence.tail s)) makeIncreasingLemmaIsIncreasing a s zero | inl (inl x) | inl (inl y) = inl y makeIncreasingLemmaIsIncreasing a s zero | inl (inl x) | inl (inr y) = inr reflexive makeIncreasingLemmaIsIncreasing a s zero | inl (inl x) | inr y = inr reflexive makeIncreasingLemmaIsIncreasing a s zero | inl (inr x) with totality a (Sequence.head (Sequence.tail s)) ... | inl (inl y) = inl y ... | inl (inr y) = inr reflexive ... | inr y = inr reflexive makeIncreasingLemmaIsIncreasing a s zero | inr x with totality a (Sequence.head (Sequence.tail s)) ... | inl (inl y) = inl y ... | inl (inr y) = inr reflexive ... | inr y = inr reflexive makeIncreasingLemmaIsIncreasing a s (succ m) = makeIncreasingLemmaIsIncreasing (Sequence.head (makeIncreasingLemma a s)) (Sequence.tail s) m makeIncreasing : Sequence A → Sequence A Sequence.head (makeIncreasing x) = Sequence.head x Sequence.tail (makeIncreasing x) = makeIncreasingLemma (Sequence.head x) (Sequence.tail x) makeIncreasingIsIncreasing : (a : Sequence A) → WeaklyIncreasing (makeIncreasing a) makeIncreasingIsIncreasing a zero with totality (Sequence.head a) (Sequence.head (Sequence.tail a)) ... | inl (inl x) = inl x ... | inl (inr x) = inr reflexive ... | inr x = inr reflexive makeIncreasingIsIncreasing a (succ m) = makeIncreasingLemmaIsIncreasing _ _ m approximateIncreasingSeqRaw : CauchyCompletion → Sequence A approximateIncreasingSeqRaw a = funcToSequence f where f : ℕ → A f n with allInvertible (fromN (succ n)) λ n=0 → irreflexive (