{-# OPTIONS --cubical --no-import-sorts #-}
module Bundles where
open import Agda.Primitive renaming (_⊔_ to ℓ-max; lsuc to ℓ-suc; lzero to ℓ-zero)
private
variable
ℓ ℓ' ℓ'' : Level
open import Cubical.Foundations.Everything renaming (_⁻¹ to _⁻¹ᵖ; assoc to ∙-assoc)
open import Cubical.Structures.CommRing
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)
open import Cubical.Foundations.Function
open import Cubical.Structures.Ring
open import Function.Base using (_∋_)
open import Function.Base using (it)
open import Utils
open import MoreLogic
open MoreLogic.Reasoning
open MoreLogic.Properties
open import MoreAlgebra
open MoreAlgebra.Definitions
open MoreAlgebra.Consequences
module ClassicalFieldModule where
record IsClassicalField {F : Type ℓ}
(0f : F) (1f : F) (_+_ : F → F → F) (_·_ : F → F → F) (-_ : F → F) (_⁻¹ᶠ : (x : F) → {{¬(x ≡ 0f)}} → F) : Type ℓ where
constructor isclassicalfield
field
isCommRing : IsCommRing 0f 1f _+_ _·_ -_
·-rinv : (x : F) → (p : ¬(x ≡ 0f)) → x · (_⁻¹ᶠ x {{p}}) ≡ 1f
·-linv : (x : F) → (p : ¬(x ≡ 0f)) → (_⁻¹ᶠ x {{p}}) · x ≡ 1f
open IsCommRing {0r = 0f} {1r = 1f} isCommRing public
record ClassicalField : Type (ℓ-suc ℓ) where
field
Carrier : Type ℓ
0f : Carrier
1f : Carrier
_+_ : Carrier → Carrier → Carrier
_·_ : Carrier → Carrier → Carrier
-_ : Carrier → Carrier
_⁻¹ᶠ : (x : Carrier) → {{¬(x ≡ 0f)}} → Carrier
isClassicalField : IsClassicalField 0f 1f _+_ _·_ -_ _⁻¹ᶠ
infix 9 _⁻¹ᶠ
infix 8 -_
infixl 7 _·_
infixl 6 _+_
open IsClassicalField isClassicalField public
record IsConstructiveField {F : Type ℓ}
(0f : F) (1f : F) (_+_ : F → F → F) (_·_ : F → F → F) (-_ : F → F) (_#_ : Rel F F ℓ') (_⁻¹ᶠ : (x : F) → {{x # 0f}} → F) : Type (ℓ-max ℓ ℓ') where
constructor isconstructivefield
field
isCommRing : IsCommRing 0f 1f _+_ _·_ -_
·-rinv : ∀ x → (p : x # 0f) → x · (_⁻¹ᶠ x {{p}}) ≡ 1f
·-linv : ∀ x → (p : x # 0f) → (_⁻¹ᶠ x {{p}}) · x ≡ 1f
·-inv-back : ∀ x y → (x · y ≡ 1f) → x # 0f × y # 0f
#-tight : ∀ x y → ¬(x # y) → x ≡ y
+-#-extensional : ∀ w x y z → (w + x) # (y + z) → (w # y) ⊎ (x # z)
isApartnessRel : IsApartnessRel _#_
open IsCommRing {0r = 0f} {1r = 1f} isCommRing public
open IsApartnessRel isApartnessRel public
renaming
( isIrrefl to #-irrefl
; isSym to #-sym
; isCotrans to #-cotrans )
record ConstructiveField : Type (ℓ-suc (ℓ-max ℓ ℓ')) where
constructor constructivefield
field
Carrier : Type ℓ
0f : Carrier
1f : Carrier
_+_ : Carrier → Carrier → Carrier
_·_ : Carrier → Carrier → Carrier
-_ : Carrier → Carrier
_#_ : Rel Carrier Carrier ℓ'
_⁻¹ᶠ : (x : Carrier) → {{x # 0f}} → Carrier
isConstructiveField : IsConstructiveField 0f 1f _+_ _·_ -_ _#_ _⁻¹ᶠ
infix 9 _⁻¹ᶠ
infixl 7 _·_
infix 6 -_
infixl 5 _+_
infixl 4 _#_
open IsConstructiveField isConstructiveField public
record IsLattice {A : Type ℓ}
(_≤_ : Rel A A ℓ') (min max : A → A → A) : Type (ℓ-max ℓ ℓ') where
constructor islattice
field
isPartialOrder : IsPartialOrder _≤_
glb : ∀ x y z → z ≤ min x y → z ≤ x × z ≤ y
glb-back : ∀ x y z → z ≤ x × z ≤ y → z ≤ min x y
lub : ∀ x y z → max x y ≤ z → x ≤ z × y ≤ z
lub-back : ∀ x y z → x ≤ z × y ≤ z → max x y ≤ z
open IsPartialOrder isPartialOrder public
renaming
( isRefl to ≤-refl
; isAntisym to ≤-antisym
; isTrans to ≤-trans )
record Lattice : Type (ℓ-suc (ℓ-max ℓ ℓ')) where
constructor lattice
field
Carrier : Type ℓ
_≤_ : Rel Carrier Carrier ℓ'
min max : Carrier → Carrier → Carrier
isLattice : IsLattice _≤_ min max
infixl 4 _≤_
open IsLattice isLattice public
record IsAlmostOrderedField {F : Type ℓ}
(0f 1f : F) (_+_ : F → F → F) (-_ : F → F) (_·_ min max : F → F → F) (_<_ _#_ _≤_ : Rel F F ℓ') (_⁻¹ᶠ : (x : F) → {{x # 0f}} → F) : Type (ℓ-max ℓ ℓ') where
field
isCommRing : IsCommRing 0f 1f _+_ _·_ -_
<-isStrictPartialOrder : IsStrictPartialOrder _<_
·-rinv : (x : F) → (p : x # 0f) → x · (_⁻¹ᶠ x {{p}}) ≡ 1f
·-linv : (x : F) → (p : x # 0f) → (_⁻¹ᶠ x {{p}}) · x ≡ 1f
·-inv-back : (x y : F) → (x · y ≡ 1f) → x # 0f × y # 0f
<-isLattice : IsLattice _≤_ min max
open IsCommRing {0r = 0f} {1r = 1f} isCommRing public
open IsStrictPartialOrder <-isStrictPartialOrder public
renaming
( isIrrefl to <-irrefl
; isTrans to <-trans
; isCotrans to <-cotrans )
open IsLattice <-isLattice public
record AlmostOrderedField : Type (ℓ-suc (ℓ-max ℓ ℓ')) where
constructor orderedfield
field
Carrier : Type ℓ
0f 1f : Carrier
_+_ : Carrier → Carrier → Carrier
-_ : Carrier → Carrier
_·_ : Carrier → Carrier → Carrier
min max : Carrier → Carrier → Carrier
_<_ : Rel Carrier Carrier ℓ'
<-isProp : ∀ x y → isProp (x < y)
_#_ = _#'_ {_<_ = _<_}
_≤_ = _≤'_ {_<_ = _<_}
field
_⁻¹ᶠ : (x : Carrier) → {{x # 0f}} → Carrier
isAlmostOrderedField : IsAlmostOrderedField 0f 1f _+_ -_ _·_ min max _<_ _#_ _≤_ _⁻¹ᶠ
infix 9 _⁻¹ᶠ
infixl 7 _·_
infix 6 -_
infixl 5 _+_
infixl 4 _#_
infixl 4 _≤_
infixl 4 _<_
open IsAlmostOrderedField isAlmostOrderedField public
#-isProp : ∀ x y → isProp (x # y)
#-isProp = #-from-<-isProp _<_ <-isStrictPartialOrder <-isProp
record IsOrderedField {F : Type ℓ}
(0f 1f : F) (_+_ : F → F → F) (-_ : F → F) (_·_ min max : F → F → F) (_<_ _#_ _≤_ : Rel F F ℓ') (_⁻¹ᶠ : (x : F) → {{x # 0f}} → F) : Type (ℓ-max ℓ ℓ') where
constructor isorderedfield
field
isAlmostOrderedField : IsAlmostOrderedField 0f 1f _+_ -_ _·_ min max _<_ _#_ _≤_ _⁻¹ᶠ
+-<-extensional : ∀ w x y z → (x + y) < (z + w) → (x < z) ⊎ (y < w)
·-preserves-< : ∀ x y z → 0f < z → x < y → (x · z) < (y · z)
open IsAlmostOrderedField isAlmostOrderedField public
record OrderedField : Type (ℓ-suc (ℓ-max ℓ ℓ')) where
constructor orderedfield
field
Carrier : Type ℓ
0f 1f : Carrier
_+_ : Carrier → Carrier → Carrier
-_ : Carrier → Carrier
_·_ : Carrier → Carrier → Carrier
min max : Carrier → Carrier → Carrier
_<_ : Rel Carrier Carrier ℓ'
<-isProp : ∀ x y → isProp (x < y)
_#_ = _#'_ {_<_ = _<_}
_≤_ = _≤'_ {_<_ = _<_}
field
_⁻¹ᶠ : (x : Carrier) → {{x # 0f}} → Carrier
isOrderedField : IsOrderedField 0f 1f _+_ -_ _·_ min max _<_ _#_ _≤_ _⁻¹ᶠ
infix 9 _⁻¹ᶠ
infixl 7 _·_
infix 6 -_
infixl 5 _+_
infixl 4 _#_
infixl 4 _≤_
infixl 4 _<_
open IsOrderedField isOrderedField public
abstract
+-preserves-< : ∀ a b x → a < b → a + x < b + x
+-preserves-< a b x a<b = (
a < b ⇒⟨ transport (λ i → sym (fst (+-identity a)) i < sym (fst (+-identity b)) i) ⟩
a + 0f < b + 0f ⇒⟨ transport (λ i → a + sym (+-rinv x) i < b + sym (+-rinv x) i) ⟩
a + (x - x) < b + (x - x) ⇒⟨ transport (λ i → +-assoc a x (- x) i < +-assoc b x (- x) i) ⟩
(a + x) - x < (b + x) - x ⇒⟨ +-<-extensional (- x) (a + x) (- x) (b + x) ⟩
(a + x < b + x) ⊎ (- x < - x) ⇒⟨ (λ{ (inl a+x<b+x) → a+x<b+x
; (inr -x<-x ) → ⊥-elim {A = λ _ → (a + x < b + x)} (<-irrefl (- x) -x<-x) }) ⟩
a + x < b + x ◼) a<b
≤-isPreorder : IsPreorder _≤_
≤-isPreorder = ≤-isPreorder' {_<_ = _<_} {<-isStrictPartialOrder}
record IsRingMor
{ℓ ℓ'}
(F : Ring {ℓ}) (G : Ring {ℓ'})
(f : (Ring.Carrier F) → (Ring.Carrier G)) : Type (ℓ-max ℓ ℓ')
where
module F = Ring F
module G = Ring G
field
preserves-+ : ∀ a b → f (a F.+ b) ≡ f a G.+ f b
preserves-· : ∀ a b → f (a F.· b) ≡ f a G.· f b
perserves-1 : f F.1r ≡ G.1r
record IsOrderedFieldMor
{ℓ ℓ' ℓₚ ℓₚ'}
(F : OrderedField {ℓ} {ℓₚ}) (G : OrderedField {ℓ'} {ℓₚ'})
(f : (OrderedField.Carrier F) → (OrderedField.Carrier G)) : Type (ℓ-max (ℓ-max ℓ ℓ') (ℓ-max ℓₚ ℓₚ'))
where
module F = OrderedField F
module G = OrderedField G
field
isRingMor : IsRingMor (record {F}) (record {G}) f
reflects-< : ∀ x y → f x G.< f y → x F.< y
record OrderedFieldMor {ℓ ℓ' ℓₚ ℓₚ'} (F : OrderedField {ℓ} {ℓₚ}) (G : OrderedField {ℓ'} {ℓₚ'}) : Type (ℓ-max (ℓ-max ℓ ℓ') (ℓ-max ℓₚ ℓₚ')) where
constructor orderedfieldmor
module F = OrderedField F
module G = OrderedField G
field
fun : F.Carrier → G.Carrier
isOrderedFieldMor : IsOrderedFieldMor F G fun