{-# OPTIONS --cubical --no-import-sorts #-}
module Number.Bundles2 where
open import Agda.Primitive renaming (_⊔_ to ℓ-max; lsuc to ℓ-suc; lzero to ℓ-zero)
open import Cubical.Foundations.Everything renaming (_⁻¹ to _⁻¹ᵖ; assoc to ∙-assoc)
open import Cubical.Relation.Nullary.Base
open import Cubical.Relation.Binary.Base
open import Cubical.Data.Sum.Base renaming (_⊎_ to infixr 4 _⊎_)
open import Cubical.Data.Sigma.Base renaming (_×_ to infixr 4 _×_)
open import Cubical.Data.Empty renaming (elim to ⊥-elim; ⊥ to ⊥⊥)
open import Cubical.Foundations.Logic renaming (¬_ to ¬ᵖ_; inl to inlᵖ; inr to inrᵖ)
open import Function.Base using (it; _∋_)
open import Cubical.HITs.PropositionalTruncation
open import Utils using (!_; !!_)
open import MoreLogic.Reasoning
open import MoreLogic.Definitions
open import MoreLogic.Properties
open import MorePropAlgebra.Definitions hiding (_≤''_)
open import MorePropAlgebra.Consequences
open import Number.Structures2
record LinearlyOrderedCommSemiring {ℓ ℓ'} : Type (ℓ-suc (ℓ-max ℓ ℓ')) where
constructor linearlyorderedcommsemiring
field
Carrier : Type ℓ
0f 1f : Carrier
_+_ : Carrier → Carrier → Carrier
_·_ : Carrier → Carrier → Carrier
min max : Carrier → Carrier → Carrier
_<_ : hPropRel Carrier Carrier ℓ'
is-LinearlyOrderedCommSemiring : [ isLinearlyOrderedCommSemiring 0f 1f _+_ _·_ _<_ min max ]
infixl 7 _·_
infixl 5 _+_
infixl 4 _<_
open IsLinearlyOrderedCommSemiring is-LinearlyOrderedCommSemiring public
record LinearlyOrderedCommRing {ℓ ℓ'} : Type (ℓ-suc (ℓ-max ℓ ℓ')) where
constructor linearlyorderedcommring
field
Carrier : Type ℓ
0f 1f : Carrier
_+_ : Carrier → Carrier → Carrier
-_ : Carrier → Carrier
_·_ : Carrier → Carrier → Carrier
min max : Carrier → Carrier → Carrier
_<_ : hPropRel Carrier Carrier ℓ'
is-LinearlyOrderedCommRing : [ isLinearlyOrderedCommRing 0f 1f _+_ _·_ -_ _<_ min max ]
infixl 7 _·_
infix 6 -_
infixl 5 _+_
infixl 4 _<_
open IsLinearlyOrderedCommRing is-LinearlyOrderedCommRing public
record LinearlyOrderedField {ℓ ℓ'} : Type (ℓ-suc (ℓ-max ℓ ℓ')) where
constructor linearlyorderedfield
field
Carrier : Type ℓ
0f 1f : Carrier
_+_ : Carrier → Carrier → Carrier
-_ : Carrier → Carrier
_·_ : Carrier → Carrier → Carrier
min max : Carrier → Carrier → Carrier
_<_ : hPropRel Carrier Carrier ℓ'
is-LinearlyOrderedField : [ isLinearlyOrderedField 0f 1f _+_ _·_ -_ _<_ min max ]
infixl 7 _·_
infix 6 -_
infixl 5 _+_
infixl 4 _<_
open IsLinearlyOrderedField is-LinearlyOrderedField public
record CompletePartiallyOrderedFieldWithSqrt {ℓ ℓ' : Level} : Type (ℓ-suc (ℓ-max ℓ ℓ')) where
field
Carrier : Type ℓ
is-set : isSet Carrier
0f : Carrier
1f : Carrier
_<_ : hPropRel Carrier Carrier ℓ'
min : Carrier → Carrier → Carrier
max : Carrier → Carrier → Carrier
_+_ : Carrier → Carrier → Carrier
_·_ : Carrier → Carrier → Carrier
-_ : Carrier → Carrier
<-irrefl : [ isIrrefl _<_ ]
<-trans : [ isTrans _<_ ]
<-cotrans : [ isCotrans _<_ ]
_-_ : Carrier → Carrier → Carrier
a - b = a + (- b)
<-asym : [ isAsym _<_ ]
<-asym = irrefl+trans⇒asym _<_ <-irrefl <-trans
_#_ : hPropRel Carrier Carrier ℓ'
x # y = [ <-asym x y ] (x < y) ⊎ᵖ (y < x)
field
#-tight : [ isTightˢ''' _#_ is-set ]
_≤_ : hPropRel Carrier Carrier ℓ'
x ≤ y = ¬ᵖ(y < x)
_>_ = flip _<_
_≥_ = flip _≤_
≤-refl : [ isRefl _≤_ ]
≤-refl = <-irrefl
≤-trans : [ isTrans _≤_ ]
≤-trans = <-cotrans⇒≤-trans _<_ <-cotrans
≤-antisym : [ isAntisymˢ _≤_ is-set ]
≤-antisym = fst (isTightˢ'''⇔isAntisymˢ _<_ is-set <-asym) #-tight
abs : Carrier → Carrier
abs x = max x (- x)
field
sqrt : (x : Carrier) → {{ ! [ 0f ≤ x ] }} → Carrier
0≤sqrt : ∀ x → {{ p : ! [ 0f ≤ x ] }} → [ 0f ≤ sqrt x {{p}} ]
0≤x² : ∀ x → [ 0f ≤ (x · x) ]
instance _ = λ {x} → !! 0≤x² x
field
·-uniqueness : ∀ x y → {{ p₁ : ! [ 0f ≤ x ] }} → {{ p₂ : ! [ 0f ≤ y ] }} → x · x ≡ y · y → x ≡ y
sqrt-existence : ∀ x → {{ p : ! [ 0f ≤ x ] }} → sqrt x {{p}} · sqrt x {{p}} ≡ x
sqrt-preserves-· : ∀ x y → {{ p₁ : ! [ 0f ≤ x ] }} → {{ p₁ : ! [ 0f ≤ y ] }} → {{ p₁ : ! [ 0f ≤ x · y ] }} → sqrt (x · y) ≡ sqrt x · sqrt y
sqrt0≡0 : {{ p : ! [ 0f ≤ 0f ] }} → sqrt 0f {{p}} ≡ 0f
sqrt1≡1 : {{ p : ! [ 0f ≤ 1f ] }} → sqrt 1f {{p}} ≡ 1f
sqrt-test : (x y z : Carrier) → [ 0f ≤ x ] → [ 0f ≤ y ] → Carrier
sqrt-test x y z 0≤x 0≤y = let instance _ = !! 0≤x
instance _ = !! 0≤y
in (sqrt x) + (sqrt y) + (sqrt (z · z))
field
_⁻¹ : (x : Carrier) → {{p : [ x # 0f ]}} → Carrier
_/_ : (x y : Carrier) → {{p : [ y # 0f ]}} → Carrier
(x / y) {{p}} = x · (y ⁻¹) {{p}}
infix 9 _⁻¹
infixl 7 _·_
infixl 7 _/_
infix 6 -_
infix 5 _-_
infixl 5 _+_
infixl 4 _#_
infixl 4 _≤_
infixl 4 _<_
open import MorePropAlgebra.Bridges1999
module _
{ℝℓ ℝℓ' : Level}
(ℝbundle : CompletePartiallyOrderedFieldWithSqrt {ℝℓ} {ℝℓ'})
where
module ℝ = CompletePartiallyOrderedFieldWithSqrt ℝbundle
open ℝ using () renaming (Carrier to ℝ; is-set to is-setʳ; _≤_ to _≤ʳ_; 0f to 0ʳ; 1f to 1ʳ; _+_ to _+ʳ_; _·_ to _·ʳ_; -_ to -ʳ_; _-_ to _-ʳ_)
module EuclideanTwoProductOfCompletePartiallyOrderedFieldWithSqrt where
Carrier : Type ℝℓ
Carrier = ℝ × ℝ
re im : Carrier → ℝ
re = fst
im = snd
0f : Carrier
0f = 0ʳ , 0ʳ
1f : Carrier
1f = 1ʳ , 0ʳ
_+_ : Carrier → Carrier → Carrier
(ar , ai) + (br , bi) = (ar +ʳ br) , (ai +ʳ bi)
_·_ : Carrier → Carrier → Carrier
(ar , ai) · (br , bi) = (ar ·ʳ br -ʳ ai ·ʳ bi) , (ar ·ʳ bi +ʳ br ·ʳ ai)
-_ : Carrier → Carrier
- (ar , ai) = (-ʳ ar , -ʳ ai)
is-set : isSet Carrier
is-set = isSetΣ ℝ.is-set (λ _ → ℝ.is-set)
record ApartnessRingWithAbsIntoCompletePartiallyOrderedFieldWithSqrt {ℓ ℓ' : Level} : Type (ℓ-suc (ℓ-max (ℓ-max ℓ ℓ') (ℓ-max ℝℓ ℝℓ'))) where
field
Carrier : Type ℓ
0f : Carrier
1f : Carrier
_+_ : Carrier → Carrier → Carrier
_·_ : Carrier → Carrier → Carrier
-_ : Carrier → Carrier
_#_ : hPropRel Carrier Carrier ℓ'
abs : Carrier → ℝ
record ApartnessGroupWithAbsIntoCompletePartiallyOrderedFieldWithSqrt {ℓ ℓ' : Level} : Type (ℓ-suc (ℓ-max (ℓ-max ℓ ℓ') (ℓ-max ℝℓ ℝℓ'))) where
field
Carrier : Type ℓ
1f : Carrier
_·_ : Carrier → Carrier → Carrier
_⁻¹ : Carrier → Carrier
_#_ : hPropRel Carrier Carrier ℓ'
abs : Carrier → ℝ
record CompleteApartnessFieldWithAbsIntoCompletePartiallyOrderedFieldWithSqrt {ℓ ℓ' : Level} : Type (ℓ-suc (ℓ-max (ℓ-max ℓ ℓ') (ℓ-max ℝℓ ℝℓ'))) where
field
Carrier : Type ℓ
0f : Carrier
1f : Carrier
_+_ : Carrier → Carrier → Carrier
_·_ : Carrier → Carrier → Carrier
-_ : Carrier → Carrier
_#_ : hPropRel Carrier Carrier ℓ'
_⁻¹ : (x : Carrier) → {{p : [ x # 0f ]}} → Carrier
abs : Carrier → ℝ
is-set : isSet Carrier
is-abs : [ isAbs is-set 0f _+_ _·_ is-setʳ 0ʳ _+ʳ_ _·ʳ_ _≤ʳ_ abs ]