···11\import{dt-macros}
22\author{liamoc}
33-\taxon{Exercise}
44-\p{Prove that the #{+ : \mathbf{Cpo} \times \mathbf{Cpo} \rightarrow \mathbf{Cpo}} is a lawful [bifunctor](dm-000M), as a consequence of the [weak universal property](dt-003B).
55-\solnblock{
66-\p{TODO}
77-}
33+\taxon{Theorem}
44+\p{#{+ : \mathbf{Cpo} \times \mathbf{Cpo} \rightarrow \mathbf{Cpo}} is a lawful [bifunctor](dm-000M).
85}
+15
trees/dt/dt-003E.tree
···11+\import{dt-macros}
22+\author{liamoc}
33+\title{Strict Constructions}
44+\p{When giving a semantics to a call-by-name (or "lazy") language, the constructions [#{\contto} for functions](dt-002F), [#{\times} for products](dt-0021) and [#{+} for sums](dt-0031) are exactly what we want. To properly capture call-by-value (or "strict") languages, however, we also need [strict](dt-000K) versions of these constructions.}
55+\transclude{dt-003F}
66+\transclude{dt-003G}
77+\transclude{dt-003H}
88+\transclude{dt-003J}
99+\transclude{dt-003I}
1010+\upshotblock{
1111+ [[dt-003I]] has products, exponentials, \em{and sums} (as it doesn't suffer from the [problem](dt-0039) that #{\textbf{Cpo}} does).
1212+}
1313+\transclude{dt-003K}
1414+\transclude{dt-003L}
1515+
+6
trees/dt/dt-003F.tree
···11+\import{dt-macros}
22+\author{liamoc}
33+\taxon{Construction}
44+\title{The [cpo](dt-001D) of [strict](dt-000K) [continuous](dt-001J) functions}
55+##{A \strictto B = \Set{ f \in A \contto B \mid f(\bot) = \bot }}
66+\p{The [ordering](dm-0000) and [lubs](dt-0017) are, \em{mutatis mutandis}, as with the non-strict \ref{dt-002L}.}
+6
trees/dt/dt-003G.tree
···11+\import{dt-macros}
22+\author{liamoc}
33+\taxon{Construction}
44+\title{Smash products of [cpos](dt-001D)}
55+##{A \otimes B = \Set{ (a,b) \in A \times B \mid a \neq \bot \land b \neq \bot } \cup \Set{ \bot_{A\otimes B}}}
66+\p{The [ordering](dm-0000) and [lubs](dt-0017) are, \em{mutatis mutandis}, as with the non-strict \ref{dt-0021}. This operator is called a \em{smash product} because the two #{\bot} values from #{A} and #{B} are "smashed" into one #{\bot} value.}
+6
trees/dt/dt-003H.tree
···11+\import{dt-macros}
22+\author{liamoc}
33+\taxon{Construction}
44+\title{Smash sums of [cpos](dt-001D)}
55+##{A \oplus B = \Set{ (t,x) \in A + B \mid x \neq \bot } \cup \Set{ \bot_{A\oplus B} }}
66+\p{The [ordering](dm-0000) and [lubs](dt-0017) are, \em{mutatis mutandis}, as with the non-strict \ref{dt-0031}. This operator is called a \em{smash sum} because the two #{\bot} values from #{A} and #{B} are "smashed" into one #{\bot} value.}
+6
trees/dt/dt-003I.tree
···11+\title{The [category](dm-000G) #{\mathbf{Cpo_\bot}}}
22+\author{liamoc}
33+\taxon{Definition}
44+\p{
55+ The [category](dm-000G) #{\mathbf{Cpo_\bot}} is the [category](dm-000G) where the objects are [cpos](dt-001D), the morphisms are [\em{strict} continuous functions](dt-003F) between these [cpos](dt-001D), and composition and identity are [as in #{\mathbf{Cpo}}](dt-002B).
66+}
+12
trees/dt/dt-003J.tree
···11+\import{dt-macros}
22+\taxon{Theorem}
33+\title{Isomorphisms with strict constructions}
44+\author{liamoc}
55+\p{
66+The [strict cpo constructions](dt-003E) satisfy \em{all} the usual [isomorphisms](dt-002E), including:
77+\ul{
88+\li{ #{(A \strictto B) \times (A \strictto C)\;\; \simeq\;\; A \strictto (B\otimes C)}}
99+\li{ #{(A \otimes B \strictto C) \;\; \simeq\;\; A \strictto (B \strictto C)}}
1010+\li{ #{(A \strictto C) \times (B \strictto C)\;\; \simeq\;\; (A\oplus B) \strictto C}}
1111+}
1212+}
+9
trees/dt/dt-003K.tree
···11+\import{dt-macros}
22+\author{liamoc}
33+\title{The lifting operator for [cpos](dt-001D)}
44+\taxon{Definition}
55+\p{
66+ The \em{lifting operator} #{(\cdot)_\bot} adds a new #{\bot} value to a [cpo](dt-001D). That is, for a [cpo](dt-001D) #{X}:
77+ ##{ X_\bot = X \cup \Set{\bot} \quad \text{(where $\bot \notin X$)}}
88+ For all #{x \in X} (including #{\bot_X}), our new bottom value #{\bot \sqsubseteq x}.
99+}
+11
trees/dt/dt-003L.tree
···11+\import{dt-macros}
22+\author{liamoc}
33+\taxon{Theorem}
44+\title{Isomorphisms with lifting}
55+\p{With [the lifting operator](dt-003K), we can relate the lazy constructions like [product](dt-0021) and [sum](dt-0031) with [strict](dt-000K) constructions like [smash product](dt-003G) and [sum](dt-003H) via [isomorphism](dt-002E):
66+\ul{
77+\li{ #{A\contto B \simeq A_\bot \strictto B}}
88+\li{ #{A + B \;\; \simeq A_\bot \oplus B_\bot}}
99+\li{ #{(A \times B)_\bot \simeq A_\bot \otimes B_\bot } }
1010+}
1111+}