Add README
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
Yiyun Liu 2025-07-08 16:23:07 -04:00
parent fc9ef0c8c8
commit a284102b02

View file

@ -1,44 +1,113 @@
* Church Rosser, surjective pairing, and strong normalization * Mechanization of decidable type conversion with surjective pairing
[[https://woodpecker.electriclam.com/api/badges/3/status.svg]] [[https://woodpecker.electriclam.com/api/badges/3/status.svg]]
This repository contains a mechanized proof that the lambda calculus This repository contains a mechanized proof of decidable type
with beta and eta rules for functions and pairs is in fact confluent conversion for a dependent type theory with a cumulative universe
for the subset of terms that are "strongly $\beta$-normalizing". hierarchy, subtyping (contravariant on functions), natural numbers
with an induction principle, aud $\eta$-laws for functions and pairs.
Our notion of $\beta$-strong normalization, based on Abel's POPLMark Unlike existing mechanizations, our proof uses the confluence of
Reloaded survey, is inductively defined untyped $\beta\eta$-reduction for the inductively defined set of
and captures a strict subset of the usual notion of strong strongly-normalizing terms by Raamsdonk and Severi's paper [[https://pure.tue.nl/ws/portalfiles/portal/1867112/199520.pdf][On
normalization in the sense that ill-formed terms such as $\pi_1 normalisation]].
\lambda x . x$ are rejected.
* Joinability: A transitive equational relation We prove the correctness result syntactically using strong
The joinability relation $a \Leftrightarrow b$, which is true exactly normalization of well-typed terms and $\beta\eta$-confluence. The
when $\exists c, a \leadsto_{\beta\eta} c \wedge b logical predicate is untyped and minimal since we only need it to be
\leadsto_{\beta\eta} c$, is transitive on the set of strongly adequate to show normalization.
normalizing terms thanks to the Church-Rosser theorem proven in this
repository.
** Joinability and logical predicates ** Quick start
Inside a fresh =opam= switch, run the following commands to install
the required dependencies.
#+begin_src sh
opam update
opam install -y coq-hammer-tactics coq-equations coq-stdpp coq-autosubst-ocaml
eval $(opam env)
#+end_src
When building a logical predicate where adequacy ensures beta strong After the dependencies are installed, run the following command to
normalization, we can then show that two types $A \Leftrightarrow B$ validate the proof development. The =-j2= flag allows =make= to
share the same meaning if both are semantically well-formed. The validate up to 2 files in parallel. You can pass in a bigger number if
strong normalization constraint can be extracted from adequacy so we your CPU has more available cores.
have transitivity of $A \Leftrightarrow B$ available in the proof that #+begin_src sh
the logical predicate is functional over joinable terms. make -j2
#+end_src
** Joinability and typed equality The termination proof can be brittle because we expect the =inversion=
to produce the subproofs of the domain relation that make the termination checker happy.
For systems with a type-directed equality, the same joinability Here are the versions of the Rocq packages that are known to
relation can be used to model the equality. The fundamental theorem work.
for the judgmental equality would take the following form: $\vdash a - coq 8.20.1
\equiv b \in A$ implies $\vDash a, b \in A$ and $a \Leftrightarrow b$. - coq-stdpp 1.11.0
- coq-hammer-tactics 1.3.2
- coq-autosubst-ocaml 1.1
- coq-equations 1.3.1
Note that such a result does not immediately give us the decidability Note that if you don't plan to modify and regenerate the =syntax.v=
of type conversion because the algorithm of beta-eta normalization file from =syntax.sig= using =autosubst=, you can choose not to install =coq-autosubst-ocaml=.
may identify more terms when eta is not type-preserving. However, I However, you need to be careful not to accidentally run =make clean=,
believe Coquand's algorithm can be proven correct using the method which will delete the auto-generated syntax files.
described in [[https://www.researchgate.net/publication/226663076_Justifying_Algorithms_for_be-Conversion][Goguen 2005]]. We have all the ingredients needed:
- Strong normalization of beta (needed for the termination metric) ** Properties proven in the paper
- Church-Rosser for $\beta$-SN terms (the disciplined expansion of
Coquand's algorithm preserves both SN and typing) *** Section 2
- Lemma 2.1 (context regularity) :: [[file:./theories/structural.v][structural.v]], =wff_mutual=
- Lemma 2.2 (generation) :: [[file:./theories/structural.v][structural.v]], [[file:theories/admissible.v][admissible.v]], =*_Inv=
- Lemma 2.3 (weakening) :: [[file:./theories/structural.v][structural.v]], =renaming=
- Lemma 2.4 (substitution) :: [[file:./theories/structural.v][structural.v]], =substitution=
- Lemma 2.5 (subject reduction) :: [[file:theories/preservation.v][preservation.v]], =RRed_Eq=, =subject_reduction=
- Lemma 2.6 (regularity) :: [[file:./theories/structural.v][structural.v]], =regularity=
*** Section 3
- Lemma 3.1 :: [[file:theories/fp_red.v][fp_red.v]], =RRed.nf_imp=
- Lemma 3.3 :: [[file:theories/fp_red.v][fp_red.v]], =ERed.nf_preservation=
- Lemma 3.4 :: [[file:theories/fp_red.v][fp_red.v]], =LoReds.FromSN_mutual=
- Lemma 3.5 (no stuck terms) :: [[file:theories/fp_red.v][fp_red.v]], =SN_NoForbid.*_imp=
- Lemma 3.6 (sn renaming) :: [[file:theories/fp_red.v][fp_red.v]], =sn_renaming=
- Lemma 3.7 (sn antisubstitution) :: [[file:theories/fp_red.v][fp_red.v]], =sn_unmorphing=
- Lemma 3.8 (sn inversion) :: [[file:theories/fp_red.v][fp_red.v]], =SN_NoForbid.P_*Inv=
- Lemma 3.9 (sn preservation) :: [[file:theories/fp_red.v][fp_red.v]], =RERed.sn_preservation=,
=epar_sn_preservation=, =red_sn_preservation=
- Lemma 3.10 (nonelim and elim) :: [[file:theories/fp_red.v][fp_red.v]], =R_nonelim_nothf=, =R_elim_nonelim=
- Lemma 3.11 (restrictive-$\eta$ and normal form) :: [[file:theories/fp_red.v][fp_red.v]], =R_elim_nf=
- Lemma 3.12 ($\eta$-decomposition) :: [[file:theories/fp_red.v][fp_red.v]], =η_split=
- Lemma 3.13 ($\eta$-postponement) :: [[file:theories/fp_red.v][fp_red.v]], =eta_postponement=
- Corollary 3.1 (strengthened $\eta$-postponement) :: [[file:theories/fp_red.v][fp_red.v]], =eta_postponement_star'=
- Corollary 3.2 ($\eta$-postponement for normal forms) :: [[file:theories/fp_red.v][fp_red.v]], =standardization=
- Lemma 3.14 (confluence for $\beta$) :: [[file:theories/fp_red.v][fp_red.v]], =red_confluence=
- Lemma 3.15 (confluence for $\eta$) :: [[file:theories/fp_red.v][fp_red.v]], =ered_confluence=
- Theorem 3.1 (confluence for $\beta\eta$ :: [[file:theories/fp_red.v][fp_red.v]], =rered_confluence=
- Lemma 3.16 (transitivity of joinability) :: [[file:theories/fp_red.v][fp_red.v]], =DJoin.transitive=
- Lemma 3.17 (injectivity of joinability) :: [[file:theories/fp_red.v][fp_red.v]],
=DJoin.hne_app_inj=, =DJoin.hne_proj_inj=
- Lemma 3.18 (transitivity of one-step subtyping) :: [[file:theories/fp_red.v][fp_red.v]],
=Sub1.transitive=
- Lemma 3.19 (commutativity of one-step subtyping) :: [[file:theories/fp_red.v][fp_red.v]], =Sub1.commutativity0=
- Lemma 3.20 (one-step subtyping preserves sn) :: [[file:theories/fp_red.v][fp_red.v]], =Sub1.sn_preservation=
- Corollary 3.3 (transitivity of untyped subtyping) :: [[file:theories/fp_red.v][fp_red.v]], =Sub.transitive=
- Lemma 3.21 (noconfusion for untyped subtyping) :: [[file:theories/fp_red.v][fp_red.v]], =Sub.*_noconf=
- Lemma 3.22 (untyped injectivity of type constructors) :: [[file:theories/fp_red.v][fp_red.v]], =Sub.*_inj=
- Lemma 3.23 (adequacy) :: [[file:theories/logrel.v][logrel.v]], =adequacy=
- Lemma 3.24 (backward closure) :: [[file:theories/logrel.v][logrel.v]], =InterpUniv_back_clos=
- Lemma 3.25 (logical predicate cases) :: [[file:theories/logrel.v][logrel.v]], =InterpUniv_case=
- Lemma 3.26 (logical predicate is preserved by subtyping) ::
[[file:theories/logrel.v][logrel.v]], =InterpUniv_Sub0=
- Lemma 3.4 (logical predicate is preserved by subtyping) :: [[file:theories/logrel.v][logrel.v]], =InterpUniv_Sub0=
- Corollary 3.4 (logical predicate is functional) :: [[file:theories/logrel.v][logrel.v]], =InterpUniv_Functional=
- Lemma 3.27 (logical predicate is cumulative) :: [[file:theories/logrel.v][logrel.v]], =InterpUniv_cumulative=
- Lemma 3.28 (semantic weakening) :: [[file:theories/logrel.v][logrel.v]], =weakening_Sem=
- Lemma 3.29 (semantic substitution) :: [[file:theories/logrel.v][logrel.v]], =morphing_SemWt=
- Lemma 3.30 (structural rules for semantic well-formedness) :: [[file:theories/logrel.v][logrel.v]], =SemWff=
- Theorem 3.2 (fundamental theorem) :: [[file:theories/soundness.v][soundness.v]], =fundamental_theorem=
- Corollary 3.6 (completeness of reduce-and-compare) :: [[file:theories/soundness.v][soundness.v]], =synsub_to_usub=
*** Section 4
- Lemma 4.1 ($\Pi$-subtyping) :: [[file:theories/logrel.v][logrel.v]], =Sub_Bind_Inv{L,R}=
- Lemma 4.2 (univ-subtyping) :: [[file:theories/logrel.v][logrel.v]], =Sub_Univ_Inv{L,R}=
- Lemma 4.3 (soundness for algorithmic equality) :: [[file:theories/algorithmic.v][algorithmic.v]], =coqeq_sound_mutual=
- Lemma 4.4 (soundness for algorithmic subtyping) :: [[file:theories/algorithmic.v][algorithmic.v]], =coqleq_sound_mutual=
- Lemma 4.5 (metric implies domain) :: [[file:theories/algorithmic.v][algorithmic.v]], =sn_term_metric=
- Lemma 4.6 (termination of Coquand's algorithm) :: [[file:theories/executable.v][executable.v]], =check_sub=
- Lemma 4.7 (completeness of Coquand's algorithm) :: [[file:theories/algorithmic.v][algorithmic.v]], =coqeq_complete'=
- Lemma 4.8 (completeness of Coquand's algorithmic subtyping) :: [[file:theories/algorithmic.v][algorithmic.v]], =coqleq_complete'=
*** Section 5
- Proposition 5.1 :: [[file:theories/cosn.v][cosn.v]] =Safe_NoForbid=