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.ScottModelOfTerms (pt : propositional-truncations-exist) (fe : β {π€ π₯} β funext π€ π₯) (pe : propext π€β) where open PropositionalTruncation pt open import DomainTheory.Basics.Curry pt fe π€β open import DomainTheory.Basics.FunctionComposition pt fe π€β open import DomainTheory.Basics.LeastFixedPoint pt fe π€β open import DomainTheory.Basics.Miscelanea pt fe π€β open import DomainTheory.Basics.Pointed pt fe π€β open import DomainTheory.Basics.Products pt fe open import DomainTheory.Lifting.LiftingSet pt fe π€β pe open import Lifting.Construction π€β open import Lifting.Monad π€β hiding (ΞΌ) open import Naturals.Properties open import PCF.Lambda.AbstractSyntax pt open import PCF.Lambda.ScottModelOfContexts pt fe pe open import PCF.Lambda.ScottModelOfIfZero pt fe pe open import PCF.Lambda.ScottModelOfTypes pt fe pe open import UF.DiscreteAndSeparated open DcpoProductsGeneral π€β β¦_β§β : {n : β} {Ξ : Context n} {Ο : type} (t : PCF Ξ Ο) β DCPOβ₯[ γ Ξ γ , β¦ Ο β§ ] β¦ Zero {_} {Ξ} β§β = (Ξ» _ β Ξ· zero) , constant-functions-are-continuous (γ Ξ γ β») (β¦ ΞΉ β§ β») β¦ Succ {_} {Ξ} t β§β = [ γ Ξ γ , β¦ ΞΉ β§ , β¦ ΞΉ β§ ] (πΜ succ , πΜ-continuous β-is-set β-is-set succ) βα΅αΆα΅α΅β₯ β¦ t β§β β¦ Pred {_} {Ξ} t β§β = [ γ Ξ γ , β¦ ΞΉ β§ , β¦ ΞΉ β§ ] (πΜ pred , πΜ-continuous β-is-set β-is-set pred) βα΅αΆα΅α΅β₯ β¦ t β§β β¦ IfZero {_} {Ξ} t tβ tβ β§β = β¦ ifZeroβ¦Ξ Ξ β¦ tβ β§β β¦ tβ β§β β¦ t β§β β¦ Ζ {_} {Ξ} {Ο} {Ο} t β§β = curryα΅αΆα΅α΅β₯ γ Ξ γ β¦ Ο β§ β¦ Ο β§ β¦ t β§β β¦ _Β·_ {_} {Ξ} {Ο} {Ο} t tβ β§β = [ γ Ξ γ , ( β¦ Ο β Ο β§ Γα΅αΆα΅α΅β₯ β¦ Ο β§) , β¦ Ο β§ ] (evalβ₯ β¦ Ο β§ β¦ Ο β§) βα΅αΆα΅α΅β₯ (to-Γ-DCPOβ₯ γ Ξ γ β¦ Ο β Ο β§ β¦ Ο β§ β¦ t β§β β¦ tβ β§β) β¦ v {_} {Ξ} x β§β = var-DCPOβ₯ Ξ x β¦ Fix {_} {Ξ} {Ο} t β§β = [ γ Ξ γ , β¦ Ο β Ο β§ , β¦ Ο β§ ] (ΞΌ β¦ Ο β§) βα΅αΆα΅α΅β₯ β¦ t β§β \end{code}