{-# OPTIONS --safe --warning=error --without-K #-} open import Numbers.ClassicalReals.RealField open import LogicalFormulae open import Setoids.Subset open import Setoids.Setoids open import Setoids.Orders.Partial.Definition open import Sets.EquivalenceRelations open import Rings.Orders.Partial.Definition open import Rings.Definition open import Fields.Fields open import Groups.Definition open import Numbers.Naturals.Semiring open import Numbers.Naturals.Order open import Functions.Definition module Numbers.Intervals.Arithmetic {a b c : _} {A : Set a} {S : Setoid {a} {b} A} {_+_ _*_ : A → A → A} {_<_ : Rel {_} {c} A} {R : Ring S _+_ _*_} {pOrder : SetoidPartialOrder S _<_} (pRing : PartiallyOrderedRing R pOrder) where open import Numbers.Intervals.Definition pRing open import Rings.Orders.Partial.Lemmas pRing open Ring R open Group additiveGroup open PartiallyOrderedRing pRing open Setoid S open Equivalence eq open SetoidPartialOrder pOrder intervalSum : OpenInterval → OpenInterval → OpenInterval intervalSum record { minBound = a ; maxBound = b } record { minBound = c ; maxBound = d } = record { minBound = a + c ; maxBound = b + d } intervalConstantSum : OpenInterval → A → OpenInterval intervalConstantSum record { minBound = x ; maxBound = y } a = record { minBound = x + a ; maxBound = y + a } intervalSumContains : {a b : A} → {i j : OpenInterval} → isInInterval a i → isInInterval b j → isInInterval (a + b) (intervalSum i j) intervalSumContains (fst1 ,, snd1) (fst2 ,, snd2) = ringAddInequalities fst1 fst2 ,, ringAddInequalities snd1 snd2 intervalConstantProduct : OpenInterval → (a : A) → (0R < a) → OpenInterval intervalConstantProduct record { minBound = minBound ; maxBound = maxBound } a 0