constructed data things

This commit is contained in:
crumbtoo
2023-11-14 14:52:21 -07:00
parent 3c667d4c23
commit f578b16d06
3 changed files with 142 additions and 8 deletions

View File

@@ -1,7 +1,7 @@
The *Spineless Tagless G-Machine*
=================================
WIP. This will hopefully be expanded into a thorough explanation of the state
WIP. This will hopefully be expanded into a thorough walkthrough of the state
machine.
Evaluation is complete when a single \texttt{NNum} remains on the stack and the
@@ -65,8 +65,8 @@ Perform a unary operation :math:`o(n)` with internal :code:`Prim` constructor
& g
}
Perform a unary operation :math:`o(n)` with internal :code:`Prim` constructor
:code:`O` on an unevaluated argument.
Evaluate the argument of a unary operation with internal :code:`Prim`
constructor :code:`O`.
.. math::
\transrule
@@ -79,7 +79,7 @@ Perform a unary operation :math:`o(n)` with internal :code:`Prim` constructor
\end{bmatrix}
& g
}
{ b : \nillist
{ x : \nillist
& (f : a : \nillist) : d
& h
& g
@@ -124,3 +124,116 @@ Reduce a supercombinator and update the root with the :math:`\beta`-reduced form
\text{where } h' = \mathtt{instantiateU} \; e \; a_n \; h \; g
}
Perform a binary operation :math:`o(x,y)` associated with internal :code:`Prim`
constructor :code:`O` on two :code:`NNum` s both in normal form.
.. math::
\transrule
{ f : a_1 : a_2 : s
& d
& h
\begin{bmatrix}
f : \mathtt{NPrim} \; \mathtt{O} \\
a_1 : \mathtt{NAp} \; f \; (\mathtt{NNum} \; x) \\
a_2 : \mathtt{NAp} \; a_1 \; (\mathtt{NNum} \; y)
\end{bmatrix}
& g
}
{ a_2 : s
& d
& h
\begin{bmatrix}
a_2 : \mathtt{NNum} \; (o(x,y))
\end{bmatrix}
& g
}
In a conditional primitive, perform the reduction if the condition has been
evaluated as True (:code:`ConP 2 0`).
.. math::
\transrule
{ f : a_1 : a_2 : a_3 : s
& d
& h
\begin{bmatrix}
f : \mathtt{NPrim} \; \mathtt{IfP} \\
c : \mathtt{NPrim} \; (\mathtt{ConP} \; 2 \; 0) \\
a_1 : \mathtt{NAp} \; f \; c \\
a_2 : \mathtt{NAp} \; a_1 \; x \\
a_3 : \mathtt{NAp} \; a_2 \; y
\end{bmatrix}
& g
}
{ x : s
& d
& h
& g
}
In a conditional primitive, perform the reduction if the condition has been
evaluated as False (:code:`ConP 1 0`).
.. math::
\transrule
{ f : a_1 : a_2 : a_3 : s
& d
& h
\begin{bmatrix}
f : \mathtt{NPrim} \; \mathtt{IfP} \\
c : \mathtt{NPrim} \; (\mathtt{ConP} \; 1 \; 0) \\
a_1 : \mathtt{NAp} \; f \; c \\
a_2 : \mathtt{NAp} \; a_1 \; x \\
a_3 : \mathtt{NAp} \; a_2 \; y
\end{bmatrix}
& g
}
{ y : s
& d
& h
& g
}
In a conditional primitive, evaluate the condition.
.. math::
\transrule
{ f : a_1 : \nillist
& d
& h
\begin{bmatrix}
f : \mathtt{NPrim} \; \mathtt{IfP} \\
a_1 : \mathtt{NAp} \; f \; x
\end{bmatrix}
& g
}
{ x : \nillist
& (f : a_1 : \nillist) : d
& h
& g
}
Construct :code:`NData` out of a constructor and its arguments
.. math::
\transrule
{ c : a_1 : \ldots : a_n : \nillist
& d
& h
\begin{bmatrix}
c : \mathtt{NPrim} \; (\mathtt{ConP} \; t \; n) \\
a_1 : \mathtt{NAp} \; c \; x_1 \\
\vdots \\
a_n : \mathtt{NAp} \; a_{n-1} \; x_n
\end{bmatrix}
& g
}
{ a_n : \nillist
& d
& h
\begin{bmatrix}
a_n : \mathtt{NData} \; t \; [x_1, \ldots, x_n]
\end{bmatrix}
& g
}