\begin{code}
{-# OPTIONS --without-K #-}
module UsingSetoid.Space.CartesianClosedness where
open import Preliminaries.SetsAndFunctions
open import Preliminaries.NaturalNumber
open import Preliminaries.Sequence
open import Continuity.UniformContinuity
open import UsingSetoid.Setoid
open import UsingSetoid.Space.Coverage
open import UsingSetoid.Space.Space
\end{code}
\begin{code}
⒈Space : Space
⒈Space = E⒈ , P , c₀ , c₁ , c₂ , c₃
where
P : Subset (E-map-₂ℕ E⒈)
P p = ⒈
c₀ : ∀(x : ⒈) → E-λα E⒈ x ∈ P
c₀ _ = ⋆
c₁ : ∀ t → t ∈ C → ∀ p → p ∈ P → ⟨ E⒈ ⟩ p ◎ t ∈ P
c₁ _ _ _ _ = ⋆
c₂ : ∀ p → (Σ \(n : ℕ) → ∀(s : ₂Fin n) → ⟨ E⒈ ⟩ p ◎ Cons s ∈ P) → p ∈ P
c₂ _ _ = ⋆
c₃ : ∀ p q → p ∈ P → (∀ α → pr₁ p α ≡ pr₁ q α) → q ∈ P
c₃ _ _ _ _ = ⋆
continuous-unit : (A : Space) → Map A ⒈Space
continuous-unit A = E-unit {U A} , (λ p _ → ⋆)
\end{code}
\begin{code}
infixl 3 _⊗_
_⊗_ : Space → Space → Space
(X , P , pc₀ , pc₁ , pc₂ , pc₃) ⊗ (Y , Q , qc₀ , qc₁ , qc₂ , qc₃) =
(X ✻ Y , R , rc₀ , rc₁ , rc₂ , rc₃)
where
epr₁ : E-map (X ✻ Y) X
epr₁ = E-pr₁ X Y
epr₂ : E-map (X ✻ Y) Y
epr₂ = E-pr₂ X Y
R : Subset (E-map-₂ℕ (X ✻ Y))
R r = (⟨ X ✻ Y ∣ X ⟩ epr₁ ◎ r ∈ P) × (⟨ X ✻ Y ∣ Y ⟩ epr₂ ◎ r ∈ Q)
rc₀ : ∀ w → E-λα (X ✻ Y) w ∈ R
rc₀ (x , y) = c₀ , c₁
where
c₀ : E-λα X x ∈ P
c₀ = pc₀ x
c₁ : E-λα Y y ∈ Q
c₁ = qc₀ y
rc₁ : ∀ t → t ∈ C → ∀ r → r ∈ R → ⟨ X ✻ Y ⟩ r ◎ t ∈ R
rc₁ t uc r (rP , rQ) = c₀ , c₁
where
c₀ : ⟨ X ✻ Y ∣ X ⟩ epr₁ ◎ ⟨ X ✻ Y ⟩ r ◎ t ∈ P
c₀ = pc₁ t uc _ rP
c₁ : ⟨ X ✻ Y ∣ Y ⟩ epr₂ ◎ ⟨ X ✻ Y ⟩ r ◎ t ∈ Q
c₁ = qc₁ t uc _ rQ
rc₂ : ∀ r → (Σ \(n : ℕ) → ∀(s : ₂Fin n) → ⟨ X ✻ Y ⟩ r ◎ Cons s ∈ R) → r ∈ R
rc₂ r (n , prf) = c₀ , c₁
where
c₀ : ⟨ X ✻ Y ∣ X ⟩ epr₁ ◎ r ∈ P
c₀ = pc₂ _ (n , pr₁ ∘ prf)
c₁ : ⟨ X ✻ Y ∣ Y ⟩ epr₂ ◎ r ∈ Q
c₁ = qc₂ _ (n , pr₂ ∘ prf)
rc₃ : ∀ r r' → r ∈ R → (∀ α → E (X ✻ Y) (pr₁ r α) (pr₁ r' α)) → r' ∈ R
rc₃ r r' (rP , rQ) ex = c₀ , c₁
where
c₀ : ⟨ X ✻ Y ∣ X ⟩ epr₁ ◎ r' ∈ P
c₀ = pc₃ _ _ rP (pr₁ ∘ ex)
c₁ : ⟨ X ✻ Y ∣ Y ⟩ epr₂ ◎ r' ∈ Q
c₁ = qc₃ _ _ rQ (pr₂ ∘ ex)
\end{code}
\begin{code}
MapSetoid : Space → Space → Setoid
MapSetoid X Y = Map X Y , _≋_ , rc , sc , tc
where
_≈_ : G Y → G Y → Set
_≈_ = E (U Y)
_≋_ : Map X Y → Map X Y → Set
((f , _) , _) ≋ ((g , _) , _) = ∀ x → f x ≈ g x
rc : ∀ f → f ≋ f
rc ((f , _) , _) = λ x → Refl (U Y) (f x)
sc : ∀ f g → f ≋ g → g ≋ f
sc ((f , _) , _) ((g , _) , _) e = λ x → Sym (U Y) _ _ (e x)
tc : ∀ f₀ f₁ f₂ → f₀ ≋ f₁ → f₁ ≋ f₂ → f₀ ≋ f₂
tc ((f₀ , _) , _) ((f₁ , _) , _) ((f₂ , _) , _) e e' =
λ x → Trans (U Y) _ _ _ (e x) (e' x)
Exp : (X Y : Space) →
E-map-₂ℕ (MapSetoid X Y) → E-map-₂ℕ-₂ℕ → E-map-₂ℕ (U X)
→ E-map-₂ℕ (U Y)
Exp (X , _) (Y , _) (r , er) (t , et) (p , ep) = (q , eq)
where
_≈_ : U Y → U Y → Set
_≈_ = E Y
q : ₂ℕ → U Y
q α = pr₁ (pr₁ (r (t α))) (p α)
eq : ∀ α β → α ≣ β → q α ≈ q β
eq α β e = Trans Y _ _ _ claim₀ claim₁
where
claim₀ : pr₁ (pr₁ (r (t α))) (p α) ≈ pr₁ (pr₁ (r (t β))) (p α)
claim₀ = er (t α) (t β) (et α β e) (p α)
claim₁ : pr₁ (pr₁ (r (t β))) (p α) ≈ pr₁ (pr₁ (r (t β))) (p β)
claim₁ = pr₂ (pr₁ (r (t β))) (p α) (p β) (ep α β e)
infixr 3 _⇒_
_⇒_ : Space → Space → Space
X ⇒ Y = MapSetoid X Y , R , rc₀ , rc₁ , rc₂ , rc₃
where
_≈_ : G Y → G Y → Set
_≈_ = E (U Y)
_≋_ : Map X Y → Map X Y → Set
_≋_ = E (MapSetoid X Y)
exp : E-map-₂ℕ (MapSetoid X Y) → E-map-₂ℕ-₂ℕ → E-map-₂ℕ (U X)
→ E-map-₂ℕ (U Y)
exp = Exp X Y
R : Subset (E-map-₂ℕ (MapSetoid X Y))
R r = ∀ p → p ∈ Probe X → ∀ t → t ∈ C → exp r t p ∈ Probe Y
rc₀ : ∀ φ → E-λα (MapSetoid X Y) φ ∈ R
rc₀ (φ , cφ) p pX t uc = cond₃ Y _ _ (cφ p pX) (λ α → Refl (U Y) _)
rc₁ : ∀ t → t ∈ C → ∀ r → r ∈ R → ⟨ MapSetoid X Y ⟩ r ◎ t ∈ R
rc₁ t uc r rR p pX t' uc' = rR p pX (t ◎ t') (Lemma[◎-UC] t uc t' uc')
rc₂ : ∀ r → (Σ \(n : ℕ) → ∀(s : ₂Fin n) → ⟨ MapSetoid X Y ⟩ r ◎ Cons s ∈ R) → r ∈ R
rc₂ r (n , ps) p pX t uc = cond₂ Y _ (m , prf)
where
m : ℕ
m = pr₁ (Theorem[Coverage-axiom] n t uc)
prf : ∀(s : ₂Fin m) → ⟨ U Y ⟩ exp r t p ◎ Cons s ∈ Probe Y
prf s = cond₃ Y _ _ claim₄ claim₂
where
s' : ₂Fin n
s' = pr₁ (pr₂ (Theorem[Coverage-axiom] n t uc) s)
t' : E-map-₂ℕ-₂ℕ
t' = pr₁ (pr₂ (pr₂ (Theorem[Coverage-axiom] n t uc) s))
uc' : t' ∈ C
uc' = pr₁ (pr₂ (pr₂ (pr₂ (Theorem[Coverage-axiom] n t uc) s)))
claim₀ : ∀ α → cons s' (pr₁ t' α) ≣ pr₁ t (cons s α)
claim₀ α i = (pr₂ (pr₂ (pr₂ (pr₂ (Theorem[Coverage-axiom] n t uc) s))) α i)⁻¹
claim₁ : ∀ α → pr₁ r (cons s' (pr₁ t' α)) ≋ pr₁ r (pr₁ t (cons s α))
claim₁ α = pr₂ r _ _ (claim₀ α)
claim₂ : ∀ α → pr₁ (pr₁ (pr₁ r (cons s' (pr₁ t' α)))) (pr₁ p (cons s α))
≈ pr₁ (pr₁ (pr₁ r (pr₁ t (cons s α)))) (pr₁ p (cons s α))
claim₂ α = claim₁ α (pr₁ p (cons s α))
claim₃ : ⟨ U X ⟩ p ◎ Cons s ∈ Probe X
claim₃ = cond₁ X (Cons s) (Lemma[cons-UC] s) p pX
claim₄ : exp (⟨ MapSetoid X Y ⟩ r ◎ Cons s') t' (⟨ U X ⟩ p ◎ Cons s) ∈ Probe Y
claim₄ = ps s' _ claim₃ t' uc'
rc₃ : ∀ r r' → r ∈ R → (∀ α → E (MapSetoid X Y) (pr₁ r α) (pr₁ r' α)) → r' ∈ R
rc₃ r r' rR ex p pX t tC = cond₃ Y _ _ (rR p pX t tC) (λ α → ex (pr₁ t α) (pr₁ p α))
continuous-λ : (X Y Z : Space) → Map (X ⊗ Y) Z → Map X (Y ⇒ Z)
continuous-λ X Y Z ((f , ef) , cf) = (g , eg) , cg
where
_~_ = E (U X)
_≈_ = E (U Y)
_≋_ = E (U Z)
g : G X → G(Y ⇒ Z)
g x = (h , eh) , ch
where
h : G Y → G Z
h y = f(x , y)
eh : ∀ y y' → y ≈ y' → h y ≋ h y'
eh y y' ey = ef _ _ (Refl (U X) x , ey)
ch : continuous Y Z (h , eh)
ch (q , eq) qY = cf (r , er) rXY
where
r : ₂ℕ → G X × G Y
r α = (x , q α)
er : ∀ α α' → α ≣ α' → (x ~ x) × (q α ≈ q α')
er α α' eα = Refl (U X) x , eq α α' eα
rXY : (r , er) ∈ Probe (X ⊗ Y)
rXY = cond₀ X x , qY
eg : ∀ x x' → x ~ x' → ∀ y → f (x , y) ≋ f (x' , y)
eg x x' ex y = ef _ _ (ex , Refl (U Y) y)
cg : continuous X (Y ⇒ Z) (g , eg)
cg (p , ep) pX (q , eq) qY (t , et) uc = cond₃ Z _ _ claim (λ α → Refl (U Z) _)
where
r : ₂ℕ → G X × G Y
r α = (p(t α) , q α)
er : ∀ α α' → α ≣ α' → (p(t α) ~ p(t α')) × (q α ≈ q α')
er α α' eα = ep _ _ (et _ _ eα) , eq _ _ eα
rXY : (r , er) ∈ Probe (X ⊗ Y)
rXY = cond₁ X (t , et) uc (p , ep) pX , qY
claim : ⟨ U X ✻ U Y ∣ U Z ⟩ (f , ef) ◎ (r , er) ∈ Probe Z
claim = cf (r , er) rXY
continuous-app : (X Y Z : Space) → Map X (Y ⇒ Z) → Map X Y → Map X Z
continuous-app X Y Z (f , cf) (a , ca) = (FA , cfa)
where
_~_ = E (U X)
_≈_ = E (U Z)
fa : G X → G Z
fa x = pr₁ (pr₁ (pr₁ f x)) (pr₁ a x)
efa : ∀ x x' → x ~ x' → fa x ≈ fa x'
efa x x' ex = Trans (U Z) _ _ _ claim₀ claim₁
where
claim₀ : fa x ≈ pr₁ (pr₁ (pr₁ f x')) (pr₁ a x)
claim₀ = pr₂ f x x' ex (pr₁ a x)
claim₁ : pr₁ (pr₁ (pr₁ f x')) (pr₁ a x) ≈ fa x'
claim₁ = pr₂ (pr₁ (pr₁ f x')) (pr₁ a x) (pr₁ a x') (pr₂ a x x' ex)
FA : E-map (U X) (U Z)
FA = (fa , efa)
cfa : continuous X Z FA
cfa p pX = cf p pX (⟨ U X ∣ U Y ⟩ a ◎ p) (ca p pX) (E-id E₂ℕ) Lemma[id-UC]
\end{code}