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}