feat(LambdaCalculus/Named/Untyped): Alpha equivalence equalities - #741
feat(LambdaCalculus/Named/Untyped): Alpha equivalence equalities#741chris-anto-froeschl wants to merge 21 commits into
Conversation
…operty helper lemmas, updates references.bib to include alpha equivalence definition sources
…d, introduces agreement sets
|
After the merge of #458, I took the liberty to refactor some operator-related properties into separate files. The current version therefore distinguishes between properties specific to swaps ( I am open to discussion as to whether this is indeed the most elegant split. A single, larger In general, however, most swap properties themselves depend on some On the other hand, collecting everything in |
|
Furthermore, I'm considering cleaning up some of the proofs introduced in #458. Let me know whether you'd prefer me to leave those for a separate PR to avoid adding unnecessary noise to this one. |
Formalizes the definitions and proofs from Roy L. Crole's paper Alpha equivalence equalities.
This PR currently contains the formalization of Theorem 4.1 and its prerequisites to keep the review manageable. The remaining results are intended as follow-up PRs.
Status: blocked-by-other-PR. This PR depends on the open Basics of named representation PR and currently targets an intermediate revision that will need rebasing once that PR is merged.
The overall structure closely follows the original paper to simplify cross-referencing between the formalization and the published proofs. Feedback on the organization of the files and the placement of helper definitions (e.g.
swapandpermute) is welcome.Files
AlphaEquivDefs.leanDefines the α-equivalence relations studied in the paper. The definition corresponding to Definition 3.1 reuses the α-equivalence relation introduced in #458 (
Basic.lean).AlphaEquivEquiv.leanFormalizes the main equivalence results between the different α-equivalence definitions.
SwapProperties.leanContains helper lemmas about swaps and permutations used throughout the proofs.
Notes
Early development used a custom implementation of
swap. This has since been replaced byEquiv.swapfromMathlib.Logic.Equiv.Basic. I think the current version should be preferred.AI usage
Aristotle was used during exploration of alternative definitions and auxiliary swap lemmas. The final proofs were substantially rewritten, manually verified, and checked against the original paper.