···11+\taxon{Definition}
22+\title{Category}
33+\author{liamoc}
44+\p{A \em{category} #{C}consists of a collection of things (\em{objects}) and a collection of arrows between these things (\em{morphisms}). If there is a morphism #{A \xrightarrow{f} B} and a morphism #{B \xrightarrow{g} C}, we also have the composed morphism #{A \xrightarrow{g \circ f} C}. This composition operator must be [associative](dm-000F). Additionally each object #{X} has an \em{identity} morphism #{X \xrightarrow{\mathsf{id}_X} X}, such that for an arrow #{X \xrightarrow{a} Y}, #{a \circ \mathsf{id}_X = \mathsf{id}_Y \circ a = a}. }
+6
trees/dm-000H.tree
···11+\title{The [category](dm-000G) #{\mathbf{Set}}}
22+\author{liamoc}
33+\taxon{Example}
44+\p{
55+ The [category](dm-000G) #{\mathbf{Set}} is the [category](dm-000G) where the objects are (small) \em{sets}, the morphisms are functions between these sets, composition is function composition (#{(g \circ f)(x) \triangleq g(f(x))}) and identity is just the identity function #{\lambda x. x}.
66+}
+6
trees/dm-000I.tree
···11+\title{The [category](dm-000G) #{\mathbf{Rel}}}
22+\author{liamoc}
33+\taxon{Example}
44+\p{
55+ The [category](dm-000G) #{\mathbf{Rel}} is the [category](dm-000G) where the objects are (small) \em{sets}, the morphisms are \em{relations} between these sets, composition is relational composition: ##{g \circ f \triangleq \{ (a,b) \mid \exists i.\ (a,i) \in f \land (i,b) \in g \}} and identity is the diagonal relation (equality).
66+}
+11
trees/dm-000J.tree
···11+\title{Functor}
22+\author{liamoc}
33+\taxon{Definition}
44+\p{
55+A \em{functor} #{F} from a [category](dm-000G) #{\mathbf{C}} to a [category](dm-000G) #{\mathbf{D}} consists of an \em{object mapping} that maps objects of #{\mathbf{C}} to objects of #{\mathbf{D}}, and a \em{morphism mapping} that maps morphisms of #{\mathbf{C}} to morphisms of #{\mathbf{D}} such that:
66+\ul{
77+\li{For each #{A \xrightarrow{m} B} in #{\mathbf{C}}, we have a morphism #{F(A) \xrightarrow{F(m)} F(B)} in #{\mathbf{D}}.}
88+\li{ For each object #{A} in #{\mathbf{C}}, the equation #{F(\mathsf{id}_A) = \mathsf{id}_{F(A)}} holds in #{\mathbf{D}}. }
99+\li{ For a pair of morphism #{A \xrightarrow{f} B \xrightarrow{g} C} in #{\mathbf{C}}, the equation #{F (g \circ f) = F(g) \circ F(f)} holds in #{\mathbf{D}}. }
1010+}
1111+}
+6
trees/dm-000K.tree
···11+\title{The [category](dm-000G) #{\mathbf{Cat}}}
22+\author{liamoc}
33+\taxon{Example}
44+\p{
55+ The [category](dm-000G) #{\mathbf{Cat}} is the [category](dm-000G) where the objects are themselves (small) [categories](dm-000G), the morphisms are structure-preserving maps between these categories, i.e., [functors](dm-000J).
66+}
+14
trees/dm-000L.tree
···11+\import{dt-macros}
22+\author{liamoc}
33+\title{Commutative Diagrams}
44+\p{When working in a [category](dm-000G), we can state many theorems compactly using \em{commutative diagrams}, such as this diagram for products:
55+\figure{
66+\tex{\usepackage{tikz-cd}}{
77+ \begin{tikzcd}[row sep=large]
88+ & A \arrow[dl, "f",labels=above left]\arrow[dr,"g"]\arrow[d,"{\langle f, g \rangle}", dashed, labels=description] & \\
99+ B & B \times C \ar[l, "{\pi_0}",labels=below] \ar[r, "{\pi_1}",labels=below]& C
1010+ \end{tikzcd}
1111+ }
1212+}
1313+ In these diagrams, the objects are \em{vertices} in the diagram, and the morphisms are the \em{arrows} in the diagram (we typically omit identity morphisms and morphisms that are just compositions of other morphisms). Looking at the above diagram, we can equate the two paths from #{A} to #{B} and the two paths from #{A} to #{C}, and produce the equations #{\pi_0 \circ \langle f, g \rangle = f} and #{\pi_1 \circ \langle f, g \rangle = g}. We adopt the convention that dotted lines indicate uniqueness, meaning that, from the diagram above, we can also infer the law: ##{\pi_0 \circ h = f \land \pi_1 \circ h = g \implies h = \langle f , g \rangle}
1414+}
+10
trees/dt-001Z.tree
···1919\transclude{dt-0022}
2020\transclude{dt-0023}
2121\transclude{dt-0024}
2222+\p{These building blocks can be used to make many functions on [products](dt-0021) (thereby ensuring [continuity](dt-001J)):
2223}
2424+\transclude{dt-0025}
2525+\transclude{dt-0026}
2626+\transclude{dt-0027}
2727+\transclude{dt-0028}
2828+\transclude{dt-0029}
2929+\transclude{dt-002A}
3030+\transclude{dt-002C}
3131+}
3232+23332434
+42
trees/dt-0025.tree
···11+\import{dt-macros}
22+\import{table-macros}
33+\taxon{Definition}
44+\author{liamoc}
55+\title{The #{\mathit{swap}} function}
66+\table{
77+ \tr{
88+ \td{\tex{\usepackage{string-diagrams}}{\begin{tikzpicture}
99+ \node[box, box ports west = 2, box ports east = 2, minimum width=3cm, minimum height=3cm] (ZZ) at (-9cm,0) {};
1010+ \draw[thick] (ZZ.west.1) -- (ZZ.east.2);
1111+ \draw[thick] (ZZ.west.2) -- (ZZ.east.1);
1212+ \node[dot] at (ZZ.east.1) {};
1313+ \node[dot] at (ZZ.east.2) {};
1414+ \node[dot] at (ZZ.west.1) {};
1515+ \node[dot] at (ZZ.west.2) {};
1616+ \node at (-6.3cm,0) {\Large $=$};
1717+ \end{tikzpicture} }
1818+ \td{
1919+ \tex{\usepackage{string-diagrams}}{
2020+ \begin{tikzpicture}
2121+ \node[box, box ports west = 1, box ports east = 2, minimum width=3cm, minimum height=3cm] (A) {};
2222+ \node[dot] (ae) at ([yshift=-0.2cm]A.east.1) {};
2323+ \node[dot] (ae2) at ([yshift=0.2cm]A.east.2) {};
2424+ \node[dot] (aw) at ([yshift=0.15cm]A.west.1) {};
2525+ \node[dot] (aw2) at ([yshift=-0.15cm]A.west.1) {};
2626+ \node[dot] (X) at ([xshift=1cm,yshift=0.15cm]A.west.1) {};
2727+ \node[dot] (Y) at ([xshift=0.7cm,yshift=-0.15cm]A.west.1) {};
2828+ \node[box,thick, box ports west=2, box ports east=2] (f) at ([xshift=-1cm]A.east.1) {};
2929+ \node[box,thick, box ports west=2, box ports east=2] (g) at ([xshift=-1cm]A.east.2) {};
3030+ \wires[thick]{
3131+ f = { west.1 = X.north, west.2 = Y.north, east.2=ae.west},
3232+ g = { west.1 = X.south, west.2 = Y.south, east.1=ae2.west},
3333+ X = { west = aw.east },
3434+ Y = { west = aw2.east },
3535+ }{};
3636+ \draw[thick] (f.west.2) -- (f.east.2);
3737+ \draw[thick,-|] (f.west.1) -- ([xshift=0.4cm]f.west.1);
3838+ \draw[thick] (g.west.1) -- (g.east.1);
3939+ \draw[thick,-|] (g.west.2) -- ([xshift=0.4cm]g.west.2);
4040+ \end{tikzpicture}}}
4141+}\td{#{\begin{array}{l}\mathit{swap} : A \times B \rightarrow B \times A \\ \mathit{swap} = \langle \pi_1 , \pi_0 \rangle \end{array}}}
4242+}}
+53
trees/dt-0026.tree
···11+\import{dt-macros}
22+\import{table-macros}
33+\taxon{Definition}
44+\title{Product of functions}
55+\author{liamoc}
66+\p{Given #{f : A \rightarrow C} and #{g : B \rightarrow D}, we overload the #{\times} operator for [products](dm-0005) to denote the combined function #{f \times g : A \times B \rightarrow C \times D}, given below:}
77+\table{\tr{\td{
88+ \tex{\usepackage{string-diagrams}}{
99+ \begin{tikzpicture}
1010+ \node[box, box ports west = 2, box ports east = 2, minimum width=3cm, minimum height=3cm] (ZZ) at (-9cm,0) {};
1111+ \node[box,thick, box ports west=1, box ports east=1] (ff) at ([xshift=-1.5cm]ZZ.east.1) {f};
1212+ \node[box,thick, box ports west=1, box ports east=1] (gg) at ([xshift=-1.5cm]ZZ.east.2) {g};
1313+1414+ \draw[thick] (ZZ.east.1) -- (ff.east.1);
1515+ \draw[thick] (ZZ.east.2) -- (gg.east.1);
1616+ \draw[thick] (ZZ.west.1) -- (ff.west.1);
1717+ \draw[thick] (ZZ.west.2) -- (gg.west.1);
1818+ \node[dot] at (ZZ.east.1) {};
1919+ \node[dot] at (ZZ.east.2) {};
2020+ \node[dot] at (ZZ.west.1) {};
2121+ \node[dot] at (ZZ.west.2) {};
2222+ \node at (-6.3cm,0) {\Large $=$};
2323+ \end{tikzpicture}
2424+ }}\td{
2525+\tex{\usepackage{string-diagrams}}{
2626+ \begin{tikzpicture}
2727+ \node[box, box ports west = 1, box ports east = 2, minimum width=4cm, minimum height=3cm] (A) at (0.5cm,0) {};
2828+ \node[dot] (ae) at ([yshift=-0.0cm]A.east.1) {};
2929+ \node[dot] (ae2) at ([yshift=0.0cm]A.east.2) {};
3030+ \node[dot] (aw) at ([yshift=0.15cm]A.west.1) {};
3131+ \node[dot] (aw2) at ([yshift=-0.15cm]A.west.1) {};
3232+ \node[dot] (X) at ([xshift=1cm,yshift=0.15cm]A.west.1) {};
3333+ \node[dot] (Y) at ([xshift=0.7cm,yshift=-0.15cm]A.west.1) {};
3434+ \node[box,thick, box ports west=2, box ports east=2] (f) at ([xshift=-2cm]A.east.1) {};
3535+ \node[box,thick, box ports west=2, box ports east=2] (g) at ([xshift=-2cm]A.east.2) {};
3636+ \node[box,thick, box ports west=2, box ports east=1] (fff) at ([xshift=-0.75cm]A.east.1) {f};
3737+ \node[box,thick, box ports west=2, box ports east=1] (ggg) at ([xshift=-0.75cm]A.east.2) {g};
3838+ \wires[thick]{
3939+ f = { west.1 = X.north, west.2 = Y.north, east.1=fff.west.1},
4040+ g = { west.1 = X.south, west.2 = Y.south, east.2=ggg.west.2},
4141+ X = { west = aw.east },
4242+ Y = { west = aw2.east },
4343+ fff = { east = A.east.1 },
4444+ ggg = { east = A.east.2 },
4545+ }{};
4646+ \draw[thick] (f.west.1) -- (f.east.1);
4747+ \draw[thick,-|] (f.west.2) -- ([xshift=0.4cm]f.west.2);
4848+ \draw[thick] (g.west.2) -- (g.east.2);
4949+ \draw[thick,-|] (g.west.1) -- ([xshift=0.4cm]g.west.1);
5050+ \end{tikzpicture}
5151+ }}\td{
5252+\p{##{\begin{array}{l} f \times g : A \times B \rightarrow C \times D \\ f \times g = \langle f \circ \pi_0 , g \circ \pi_1 \rangle \end{array}}}
5353+}}}
+119
trees/dt-0027.tree
···11+\import{dt-macros}
22+\import{table-macros}
33+\title{Pictorial Properties}
44+\author{liamoc}
55+\p{The following properties of our [projection](dt-0020) and [split](dt-0023) functions follow from the pictorial reasoning we see on the right:}
66+\table{
77+\tr{\td{
88+ ##{\pi_0 \circ \langle f , g \rangle = f}}
99+ \td{\tex{\usepackage{string-diagrams}}{
1010+ \begin{tikzpicture}
1111+ \node[box, box ports west = 1, box ports east = 1, minimum width=3cm, minimum height=3cm] (ZZ) at (6cm,8cm) {};
1212+ \node[box, box ports west = 1, box ports east = 2, minimum width=4cm, minimum height=3cm] (A) at (0.5cm,8cm) {};
1313+ \node[dot] (ae) at ([yshift=-0.25cm]A.east.1) {};
1414+% \node[dot] (ae2) at ([yshift=0.25cm]A.east.2) {};
1515+ \node[dot] (aw) at ([yshift=0cm]A.west.1) {};
1616+ \node[dot] (aw2) at ([yshift=-0cm]A.west.1) {};
1717+ \node[dot] (X) at ([xshift=1cm]A.west.1) {};
1818+ \node[box,thick, box ports west=1, box ports east=1] (fff) at ([xshift=-2cm]A.east.1) { f };
1919+ \node[box,thick, box ports west=1, box ports east=1] (ggg) at ([xshift=-2cm]A.east.2) { g };
2020+ \node[box,thick, box ports west=2, box ports east=2, minimum height=2cm] (f) at ([xshift=3.25cm]A.west.1) {};
2121+% \node[box,thick, box ports west=2, box ports east=2] (g) at ([xshift=-0.75cm]A.east.2) {};
2222+ \wires[thick]{
2323+ fff = { west.1 = X.north, east.1=f.west.1},
2424+ ggg = { west.1 = X.south }, %$ east.2=g.west.2},
2525+ X = { west = aw.east, north = fff.west.1, south = ggg.west.1 },
2626+ fff = { east.1 = f.west.1 },
2727+ ggg = { east.1 = f.west.2 },
2828+ f = { east.1 = ae.west },
2929+% g = { east.2 = ae2.west },
3030+ }{};
3131+ \draw[thick] (f.west.1) -- (f.east.1);
3232+ \draw[thick,-|] (f.west.2) -- ([xshift=0.4cm]f.west.2);
3333+% \draw[thick] (g.west.2) -- (g.east.2);
3434+% \draw[thick,-|] (g.west.1) -- ([xshift=0.4cm]g.west.1);
3535+3636+ \node[box,thick, box ports west=1, box ports east=1] (ff) at ([xshift=-1.5cm]ZZ.east.1) {f};
3737+ \node at (3.35cm,8cm) {\Large $=$};
3838+ \draw[thick] (ZZ.east.1) -- (ff.east);
3939+ \draw[thick] (ZZ.west.1) -- (ff.west.1);
4040+ \node[dot] at (ZZ.east.1) {};
4141+ \node[dot] at (ZZ.west.1) {};
4242+\end{tikzpicture} }}}
4343+\tr{\td{
4444+ ##{\pi_1 \circ \langle f , g \rangle = g}}
4545+ \td{\tex{\usepackage{string-diagrams}}{
4646+ \begin{tikzpicture}
4747+ \node[box, box ports west = 1, box ports east = 1, minimum width=3cm, minimum height=3cm] (ZZ) at (6cm,4cm) {};
4848+ \node[box, box ports west = 1, box ports east = 2, minimum width=4cm, minimum height=3cm] (A) at (0.5cm,4cm) {};
4949+% \node[dot] (ae) at ([yshift=-0.25cm]A.east.1) {};
5050+ \node[dot] (ae2) at ([yshift=0.25cm]A.east.2) {};
5151+ \node[dot] (aw) at ([yshift=0cm]A.west.1) {};
5252+% \node[dot] (aw2) at ([yshift=-0cm]A.west.1) {};
5353+ \node[dot] (X) at ([xshift=1cm]A.west.1) {};
5454+ \node[box,thick, box ports west=1, box ports east=1] (fff) at ([xshift=-2cm]A.east.1) { f };
5555+ \node[box,thick, box ports west=1, box ports east=1] (ggg) at ([xshift=-2cm]A.east.2) { g };
5656+ \node[box,thick, box ports west=2, box ports east=2, minimum height=2cm] (f) at ([xshift=3.25cm]A.west.1) {};
5757+% \node[box,thick, box ports west=2, box ports east=2] (g) at ([xshift=-0.75cm]A.east.2) {};
5858+ \wires[thick]{
5959+ fff = { west.1 = X.north, east.1=f.west.1},
6060+ ggg = { west.1 = X.south }, %$ east.2=g.west.2},
6161+ X = { west = aw.east, north = fff.west.1, south = ggg.west.1 },
6262+ fff = { east.1 = f.west.1 },
6363+ ggg = { east.1 = f.west.2 },
6464+ f = { east.2 = ae2.west },
6565+% g = { east.2 = ae2.west },
6666+ }{};
6767+ \draw[thick] (f.west.2) -- (f.east.2);
6868+ \draw[thick,-|] (f.west.1) -- ([xshift=0.4cm]f.west.1);
6969+% \draw[thick] (g.west.2) -- (g.east.2);
7070+% \draw[thick,-|] (g.west.1) -- ([xshift=0.4cm]g.west.1);
7171+7272+ \node[box,thick, box ports west=1, box ports east=1] (ff) at ([xshift=-1.5cm]ZZ.east.1) {g};
7373+ \node at (3.35cm,4cm) {\Large $=$};
7474+ \draw[thick] (ZZ.east.1) -- (ff.east);
7575+ \draw[thick] (ZZ.west.1) -- (ff.west.1);
7676+ \node[dot] at (ZZ.east.1) {};
7777+ \node[dot] at (ZZ.west.1) {};
7878+ \end{tikzpicture}}}}
7979+ \tr{\td{
8080+ ##{\langle \pi_0 \circ h , \pi_1 \circ h \rangle = h}
8181+ }\td{
8282+ \tex{\usepackage{string-diagrams}}{
8383+ \begin{tikzpicture}
8484+ \node[box, box ports west = 1, box ports east = 1, minimum width=3cm, minimum height=3cm] (ZZ) at (6cm,0) {};
8585+ \node[box, box ports west = 1, box ports east = 2, minimum width=4cm, minimum height=3cm] (A) at (0.5cm,0) {};
8686+ \node[dot] (ae) at ([yshift=0.2cm]A.east.1) {};
8787+ \node[dot] (ae2) at ([yshift=-0.2cm]A.east.2) {};
8888+ \node[dot] (aw) at ([yshift=0cm]A.west.1) {};
8989+ \node[dot] (aw2) at ([yshift=-0cm]A.west.1) {};
9090+ \node[dot] (X) at ([xshift=1cm]A.west.1) {};
9191+ \node[box,thick, box ports west=1, box ports east=2] (fff) at ([xshift=-2cm]A.east.1) { h };
9292+ \node[box,thick, box ports west=1, box ports east=2] (ggg) at ([xshift=-2cm]A.east.2) { h };
9393+ \node[box,thick, box ports west=2, box ports east=2] (f) at ([xshift=-0.75cm]A.east.1) {};
9494+ \node[box,thick, box ports west=2, box ports east=2] (g) at ([xshift=-0.75cm]A.east.2) {};
9595+ \wires[thick]{
9696+ fff = { west.1 = X.north, east.1=f.west.1},
9797+ ggg = { west.1 = X.south, east.2=g.west.2},
9898+ X = { west = aw.east, north = fff.west.1, south = ggg.west.1 },
9999+ fff = { east.1 = f.west.1, east.2 = f.west.2 },
100100+ ggg = { east.1 = g.west.1, east.2 = g.west.2 },
101101+ f = { east.1 = ae.west },
102102+ g = { east.2 = ae2.west },
103103+ }{};
104104+ \draw[thick] (f.west.1) -- (f.east.1);
105105+ \draw[thick,-|] (f.west.2) -- ([xshift=0.4cm]f.west.2);
106106+ \draw[thick] (g.west.2) -- (g.east.2);
107107+ \draw[thick,-|] (g.west.1) -- ([xshift=0.4cm]g.west.1);
108108+109109+ \node[box,thick, box ports west=1, box ports east=2] (ff) at ([xshift=-1.5cm]ZZ.east.1) {h};
110110+ \node at (3.35cm,0) {\Large $=$};
111111+ \draw[thick] ([yshift=0.2cm]ZZ.east.1) -- (ff.east.1);
112112+ \draw[thick] ([yshift=-0.2cm]ZZ.east.1) -- (ff.east.2);
113113+ \draw[thick] (ZZ.west.1) -- (ff.west.1);
114114+ \node[dot] at ([yshift=0.2cm]ZZ.east.1) {};
115115+ \node[dot] at ([yshift=-0.2cm]ZZ.east.1) {};
116116+ \node[dot] at (ZZ.west.1) {};
117117+ \end{tikzpicture}
118118+ }}}
119119+}
+20
trees/dt-0028.tree
···11+\import{dt-macros}
22+\author{liamoc}
33+\taxon{Exercise}
44+\p{Prove that the three properties in \ref{dt-0027} are equivalent to the [universal property for products](dt-0029)}
55+##{(\pi_0 \circ h = f \land \pi_1 \circ h = g)\ \text{iff}\ h = \langle f , g \rangle}
66+\scope{
77+\put\transclude/toc{false}
88+\put\transclude/numbered{false}
99+\put\transclude/expanded{false}
1010+\subtree{
1111+\taxon{Solution}
1212+\p{ Showing in both directions:
1313+ \ol{
1414+ \li{ \em{The three properties follow from the universal property:}
1515+ The first two properties follow from the universal property where #{h} is set to #{\langle f , g \rangle}. The third property follows from the universal property where #{f} is set to #{\pi_0\circ h} and #{g} is set to #{\pi_1\circ h}.}
1616+\li{\em{The universal property follows from the universal property:}
1717+In the #{\Rightarrow} direction of the universal property follows from the third property, and the #{\Leftarrow} direction follows from the first two.
1818+}}}
1919+}
2020+}
+14
trees/dt-0029.tree
···11+\import{dt-macros}
22+\taxon{Definition}
33+\author{liamoc}
44+\title{Universal property for [cpo products](dt-0021)}
55+##{ (\pi_0 \circ h = f \land \pi_1 \circ h = g)\ \text{iff}\ h = \langle f , g \rangle}
66+\p{As [commuting diagram](dm-000L) on the [category](dm-000G) #{\mathbf{Cpo}}:}
77+\figure{
88+\tex{\usepackage{tikz-cd}}{
99+ \begin{tikzcd}[row sep=large]
1010+ & A \arrow[dl, "f",labels=above left]\arrow[dr,"g"]\arrow[d,"{\langle f, g \rangle}", dashed, labels=description] & \\
1111+ B & B \times C \ar[l, "{\pi_0}",labels=below] \ar[r, "{\pi_1}",labels=below]& C
1212+ \end{tikzcd}
1313+ }
1414+}
···11+\title{The [category](dm-000G) #{\mathbf{Cpo}}}
22+\author{liamoc}
33+\taxon{Example}
44+\p{
55+ The [category](dm-000G) #{\mathbf{Cpo}} is the [category](dm-000G) where the objects are [cpos](dt-001D), the morphisms are [continuous functions](dt-001J) between these [cpos](dt-001D), composition is function composition (#{(g \circ f)(x) \triangleq g(f(x))}) and identity is just the identity function #{\lambda x. x}.
66+}
+15
trees/dt-002C.tree
···11+\title{Derived properties of [cpo products](dt-0021)}
22+\author{liamoc}
33+\p{
44+ The [universal property](dt-0029) is called such because \em{all} the familiar properties of [products](dt-0021) follow from it – thinking in pictures helps to see how (Indeed, the [universal property](dt-0029) \em{characterises} products up to isomorphism):}
55+\ol{
66+\li{ #{\pi_0 \circ (f \times g) = f \circ \pi_0}}
77+\li{ #{\pi_1 \circ (f \times g) = g \circ \pi_1}}
88+\li{ #{(f \times g) \circ \langle h , i \rangle = \langle f \circ h, g \circ i \rangle}}
99+\li{ #{\langle f , g \rangle \circ h = \langle f \circ h, g \circ h \rangle}}
1010+\li{ #{\mathsf{id}_A \times \mathsf{id}_B = \mathsf{id}_{A \times B} \quad (*)}}
1111+\li{ #{(f \circ g) \times (h \circ i) = (f \circ h) \times (g \circ i) \quad (**)}}
1212+}
1313+\p{
1414+These last two statements #{(*)} and #{(**)} show that #{\times} is a \em{bifunctor} on the [category #{\textbf{Cpo}}](dt-002B), i.e., a [functor](dm-000J) #{\textbf{Cpo} \times \textbf{Cpo} \rightarrow \textbf{Cpo}}.
1515+}