Strict Constructions [dt-003E]
When giving a semantics to a call-by-name (or "lazy") language, the constructions \twoheadrightarrow for functions, \times for products and + for sums are exactly what we want. To properly capture call-by-value (or "strict") languages, however, we also need strict versions of these constructions.
ConstructionThe cpo of strict continuous functions [dt-003F]
The ordering and lubs are, mutatis mutandis, as with the non-strict Construction [dt-002L].
ConstructionSmash products of cpos [dt-003G]
The ordering and lubs are, mutatis mutandis, as with the non-strict Construction [dt-0021]. This operator is called a smash product because the two \bot values from A and B are "smashed" into one \bot value.
ConstructionSmash sums of cpos [dt-003H]
The ordering and lubs are, mutatis mutandis, as with the non-strict Construction [dt-0031]. This operator is called a smash sum because the two \bot values from A and B are "smashed" into one \bot value.
TheoremIsomorphisms with strict constructions [dt-003J]
The strict cpo constructions satisfy all the usual isomorphisms, including:
- (A \mathbin {\circ \hspace{-0.4em}\twoheadrightarrow } B) \times (A \mathbin {\circ \hspace{-0.4em}\twoheadrightarrow } C)\;\; \simeq \;\; A \mathbin {\circ \hspace{-0.4em}\twoheadrightarrow } (B\otimes C)
- (A \otimes B \mathbin {\circ \hspace{-0.4em}\twoheadrightarrow } C) \;\; \simeq \;\; A \mathbin {\circ \hspace{-0.4em}\twoheadrightarrow } (B \mathbin {\circ \hspace{-0.4em}\twoheadrightarrow } C)
- (A \mathbin {\circ \hspace{-0.4em}\twoheadrightarrow } C) \times (B \mathbin {\circ \hspace{-0.4em}\twoheadrightarrow } C)\;\; \simeq \;\; (A\oplus B) \mathbin {\circ \hspace{-0.4em}\twoheadrightarrow } C
DefinitionThe category \mathbf {Cpo_\bot } [dt-003I]
The category \mathbf {Cpo_\bot } is the category where the objects are cpos, the morphisms are strict continuous functions between these cpos, and composition and identity are as in \mathbf {Cpo}.
Upshot.
DefinitionThe lifting operator for cpos [dt-003K]
TheoremIsomorphisms with lifting [dt-003L]
With the lifting operator, we can relate the lazy constructions like product and sum with strict constructions like smash product and sum via isomorphism:
- A\twoheadrightarrow B \simeq A_\bot \mathbin {\circ \hspace{-0.4em}\twoheadrightarrow } B
- A + B \simeq A_\bot \oplus B_\bot
- (A \times B)_\bot \simeq A_\bot \otimes B_\bot