This commit is contained in:
Jonathan Chan 2025-04-21 16:53:41 -04:00
parent 6374d0a819
commit 392cced2a2
4 changed files with 32 additions and 25 deletions

View File

@ -1,4 +1,4 @@
@inproceedings{cbpv,
@inproceedings{cbpv-coq,
author = {Forster, Yannick and Sch\"{a}fer, Steven and Spies, Simon and Stark, Kathrin},
title = {{Call-by-push-value in Coq: operational, equational, and denotational theory}},
year = 2019,
@ -39,3 +39,10 @@
location = {Cascais, Portugal},
series = {CPP 2019}
}
@phdthesis{cbpv,
author = {Levy, Paul Blain},
school = {Queen Mary University of London},
title = {{Call-by-push-value}},
year = {2001}
}

View File

@ -44,8 +44,8 @@
\section{Introduction}
The goal of this project is to mechanize a proof of strong normalization for call-by-push-value (CBPV).
It follows work by Forster, Sch\"afer, Spies, and Stark \citep{cbpv} on mechanizing the metatheory of CBPV in Rocq,
The goal of this project is to mechanize a proof of strong normalization for call-by-push-value (CBPV) \citep{cbpv}.
It follows work by Forster, Sch\"afer, Spies, and Stark \citep{cbpv-coq} on mechanizing the metatheory of CBPV in Rocq,
but instead adapts the proof technique from POPLMark Reloaded \citep{poplmark}.
Both proofs, and mine, follow the same sequence of steps:
@ -150,19 +150,19 @@ The general recipe for defining these for CBPV is as follows:
whose head positions are strongly neutral,
while all other subterms are strongly normal.
\item Strongly normal values are constructors
whose subterms are strongly normal,
or strongly neutral values, \ie variables.
with strongly normal subterms
or strongly neutral values.
\item Strongly normal computations are constructors
whose subterms are strongly normal,
or strongly neutral computations,
or computations which reduce to strongly normal computations
with strongly normal subterms,
strongly neutral computations,
or computations that reduce to strongly normal computations
(backward closure).
\item Strong head reduction consists of $\beta$ reductions
for all eliminators around the corresponding constructors,
and congruent reductions in head positions.
\end{itemize}
Additionally, strong reduction requires premises asserting that
Additionally, head reduction requires premises asserting that
the subterms that may ``disappear'' after reduction be strongly normal
so that backward closure actually closes over strongly normal terms.
These subterms are the values that get substituted into a computation,
@ -261,7 +261,7 @@ However, I want to maximize the amount of mutual inductives used in this project
so we instead define the logical relation as an inductive binary relation
between the type and the set of terms of its interpretation,
denoted as $[[⟦A⟧ ↘ P]]$ and $[[⟦B⟧ ↘ P]]$ below.
I use set builder notation to define the sets and set membership,
I use set builder and set membership notation,
but they are implemented in the mechanization as functions
that take terms and return propositions and as function applications.
Here, the conjunctions ($\wedge$), disjunctions ($\vee$), equalities ($=$), implications ($\Rightarrow$),
@ -661,7 +661,7 @@ of the structure of both reductions.
Strong reduction of the head position eliminates the cases of $\beta$-reduction,
leaving the cases where the head position steps or the other position steps.
If the head position steps, we use \nameref{lem:commute}
to join the strong reduction and the single-step reduction together,
to join the strong head reduction and the single-step reduction together,
then use the first induction hypothesis.
Otherwise, we use the second induction hypothesis.
We need the last premise to step through either of the subterms,
@ -710,7 +710,7 @@ traditional strong normalization of well typed terms holds as a corollary.
The cases for the first three correspond to the admissible strongly normal rules,
using \nameref{lem:sound-sne} as needed,
except for the \rref*{SN-Red} case, which uses \nameref{lem:closure-sn}.
The cases for strong reduction hold by construction.
The cases for strong head reduction hold by construction.
\end{proof}
\begin{corollary}

BIN
cbpv.pdf (Stored with Git LFS)

Binary file not shown.

View File

@ -44,8 +44,8 @@
\section{Introduction}
The goal of this project is to mechanize a proof of strong normalization for call-by-push-value (CBPV).
It follows work by Forster, Sch\"afer, Spies, and Stark \citep{cbpv} on mechanizing the metatheory of CBPV in Rocq,
The goal of this project is to mechanize a proof of strong normalization for call-by-push-value (CBPV) \citep{cbpv}.
It follows work by Forster, Sch\"afer, Spies, and Stark \citep{cbpv-coq} on mechanizing the metatheory of CBPV in Rocq,
but instead adapts the proof technique from POPLMark Reloaded \citep{poplmark}.
Both proofs, and mine, follow the same sequence of steps:
@ -150,19 +150,19 @@ The general recipe for defining these for CBPV is as follows:
whose head positions are strongly neutral,
while all other subterms are strongly normal.
\item Strongly normal values are constructors
whose subterms are strongly normal,
or strongly neutral values, \ie variables.
with strongly normal subterms
or strongly neutral values.
\item Strongly normal computations are constructors
whose subterms are strongly normal,
or strongly neutral computations,
or computations which reduce to strongly normal computations
with strongly normal subterms,
strongly neutral computations,
or computations that reduce to strongly normal computations
(backward closure).
\item Strong head reduction consists of $\beta$ reductions
for all eliminators around the corresponding constructors,
and congruent reductions in head positions.
\end{itemize}
Additionally, strong reduction requires premises asserting that
Additionally, head reduction requires premises asserting that
the subterms that may ``disappear'' after reduction be strongly normal
so that backward closure actually closes over strongly normal terms.
These subterms are the values that get substituted into a computation,
@ -261,7 +261,7 @@ However, I want to maximize the amount of mutual inductives used in this project
so we instead define the logical relation as an inductive binary relation
between the type and the set of terms of its interpretation,
denoted as $ \mathopen{\llbracket} \ottnt{A} \mathclose{\rrbracket} \searrow \ottnt{P} $ and $ \mathopen{\llbracket} \ottnt{B} \mathclose{\rrbracket} \searrow \ottnt{P} $ below.
I use set builder notation to define the sets and set membership,
I use set builder and set membership notation,
but they are implemented in the mechanization as functions
that take terms and return propositions and as function applications.
Here, the conjunctions ($\wedge$), disjunctions ($\vee$), equalities ($=$), implications ($\Rightarrow$),
@ -661,7 +661,7 @@ of the structure of both reductions.
Strong reduction of the head position eliminates the cases of $\beta$-reduction,
leaving the cases where the head position steps or the other position steps.
If the head position steps, we use \nameref{lem:commute}
to join the strong reduction and the single-step reduction together,
to join the strong head reduction and the single-step reduction together,
then use the first induction hypothesis.
Otherwise, we use the second induction hypothesis.
We need the last premise to step through either of the subterms,
@ -710,7 +710,7 @@ traditional strong normalization of well typed terms holds as a corollary.
The cases for the first three correspond to the admissible strongly normal rules,
using \nameref{lem:sound-sne} as needed,
except for the \rref*{SN-Red} case, which uses \nameref{lem:closure-sn}.
The cases for strong reduction hold by construction.
The cases for strong head reduction hold by construction.
\end{proof}
\begin{corollary}