Brendan Hart 2019-2020
\begin{code}
{-# OPTIONS --safe --without-K #-}
open import MLTT.Spartan
open import UF.FunExt
open import UF.PropTrunc
open import UF.Subsingletons
module PCF.Lambda.ScottModelOfContexts
(pt : propositional-truncations-exist)
(fe : ∀ {𝓤 𝓥} → funext 𝓤 𝓥)
(pe : propext 𝓤₀)
where
open PropositionalTruncation pt
open import DomainTheory.Basics.Dcpo pt fe 𝓤₀
open import DomainTheory.Basics.FunctionComposition pt fe 𝓤₀
open import DomainTheory.Basics.Pointed pt fe 𝓤₀
open import DomainTheory.Basics.Products pt fe
open import PCF.Lambda.AbstractSyntax pt
open import PCF.Lambda.ScottModelOfTypes pt fe pe
open import OrderedTypes.Poset fe
open import UF.Sets
open import UF.Subsingletons-Properties
open DcpoProductsGeneral 𝓤₀
open PosetAxioms
⊤ᵈᶜᵖᵒ : DCPO {𝓤₁} {𝓤₁}
⊤ᵈᶜᵖᵒ = 𝟙 , _⊑⟨⊤⟩_ , (s , p , (λ _ → ⋆) , t , a) , dc
where
_⊑⟨⊤⟩_ : 𝟙 {𝓤₁} → 𝟙 {𝓤₁} → 𝓤₁ ̇
x ⊑⟨⊤⟩ y = 𝟙
s : is-set 𝟙
s = props-are-sets 𝟙-is-prop
p : is-prop-valued {𝓤₁} {𝓤₁} {𝟙} (λ x y → 𝟙)
p _ _ ⋆ ⋆ = refl
r : is-reflexive _⊑⟨⊤⟩_
r _ = ⋆
t : is-transitive {𝓤₁} {𝓤₁} {𝟙} (λ x y → 𝟙)
t _ _ _ _ _ = ⋆
a : ∀ (x : 𝟙) y → x ⊑⟨⊤⟩ y → _ → x = y
a ⋆ ⋆ _ _ = refl
dc : is-directed-complete (λ x y → 𝟙)
dc _ _ _ = ⋆ , ((λ _ → ⋆) , (λ _ _ → ⋆))
⊤ᵈᶜᵖᵒ⊥ : DCPO⊥ {𝓤₁} {𝓤₁}
⊤ᵈᶜᵖᵒ⊥ = ⊤ᵈᶜᵖᵒ , (⋆ , (λ y → ⋆))
【_】 : {n : ℕ} (Γ : Context n) → DCPO⊥ {𝓤₁} {𝓤₁}
【 ⟨⟩ 】 = ⊤ᵈᶜᵖᵒ⊥
【 Γ ’ x 】 = 【 Γ 】 ×ᵈᶜᵖᵒ⊥ ⟦ x ⟧
extract : {n : ℕ} {σ : type} {Γ : Context n}
→ (x : Γ ∋ σ)
→ ⟨(【 Γ 】 ⁻)⟩ → ⟨(⟦ σ ⟧ ⁻)⟩
extract {n} {σ} {a} Z d = pr₂ d
extract {n} {σ₁} {Γ ’ σ} (S x) d = extract x (pr₁ d)
Γ₁⊑Γ₂→lookups-less : {n : ℕ} {Γ : Context n} {σ : type}
→ (x : ⟨(【 Γ 】 ⁻)⟩)
→ (y : ⟨(【 Γ 】 ⁻)⟩)
→ x ⊑⟨(【 Γ 】 ⁻)⟩ y
→ (z : Γ ∋ σ)
→ extract z x ⊑⟨(⟦ σ ⟧ ⁻)⟩ extract z y
Γ₁⊑Γ₂→lookups-less {.(succ _)} {Γ ’ σ} {.σ} x y e Z = pr₂ e
Γ₁⊑Γ₂→lookups-less {.(succ _)} {Γ ’ τ} {σ} x y e (S z) =
Γ₁⊑Γ₂→lookups-less (pr₁ x) (pr₁ y) (pr₁ e) z
∘-of-prₓ-is-continuous : {n : ℕ} {Γ : Context n} {σ : type} (x : Γ ∋ σ)
→ is-continuous (【 Γ 】 ⁻) (⟦ σ ⟧ ⁻) (extract x)
∘-of-prₓ-is-continuous {n} {Γ ’ σ} {σ} Z =
continuity-of-function (【 Γ ’ σ 】 ⁻) (⟦ σ ⟧ ⁻)
(pr₂-is-continuous (【 Γ 】 ⁻) (⟦ σ ⟧ ⁻))
∘-of-prₓ-is-continuous {n} {Γ ’ τ} {σ} (S x) =
continuity-of-function (【 Γ ’ τ 】 ⁻) (⟦ σ ⟧ ⁻)
([ (【 Γ ’ τ 】 ⁻) , (【 Γ 】 ⁻) , (⟦ σ ⟧ ⁻) ] (extract x) ,
∘-of-prₓ-is-continuous x ∘ᵈᶜᵖᵒ pr₁-is-continuous (【 Γ 】 ⁻) (⟦ τ ⟧ ⁻))
var-DCPO : {n : ℕ} {σ : type} (Γ : Context n) (x : Γ ∋ σ)
→ DCPO[ (【 Γ 】 ⁻) , (⟦ σ ⟧ ⁻) ]
var-DCPO {n} {σ} Γ x = extract x , c
where
c : is-continuous (【 Γ 】 ⁻) (⟦ σ ⟧ ⁻) (extract x)
c = ∘-of-prₓ-is-continuous x
var-DCPO⊥ : {n : ℕ} {σ : type} (Γ : Context n)
→ (x : Γ ∋ σ)→ DCPO⊥[ 【 Γ 】 , ⟦ σ ⟧ ]
var-DCPO⊥ Γ x = var-DCPO Γ x