logrel-coq-cpp24

Browsing the sources

Here is a rough description of the content of every file.

Utilities and AST

File Description
[Utils] Basic generically useful definitions, notations, tactics…
[BasicAst] Definitions preceding those of the AST of terms: sorts, binder annotations…
[AutoSubst/] Abstract syntax tree, renamings, substitutions and many lemmas, generated using the [autosubst-ocaml] opam package.
[AutoSubst/Extra] Extra instances, notations and tactics to better handle the boilerplate generated by AutoSubst.
[Notations] Notations used throughout the development. It can be used as an index for notations!
[NormalForms] Definition of normal and neutral forms, and properties.
File Description
[Context] Definition of contexts and operations on them.
[Weakening] Definition of a well-formed weakening, and some properties.
[UntypedReduction] Definiton and basic properties of untyped reduction, used to define algorithmic typing.
[GenericTyping] A generic notion of typing, used to define the logical relation, to be instantiated three times: once with the fully declarative version, once with the mixed declarative and algorithmic one, and once with the fully algorithmic one.

Declarative typing and its properties

File Description
[DeclarativeTyping] Defines the theory’s typing rules in a declarative fashion, the current definition has a single universe as well as product types and eta-conversion for functions.
[DeclarativeInstance] Proof that declarative typing is an instance of generic typing.

Logical relation and its properties

File Description
[LogicalRelation] Contains the logical relation’s (LR) definition.
[Induction] Defines the induction principles over LR. Because of universe constraints, LR needs two induction principles, one for each type levels.
[Escape] Contains a proof of the escape lemma for LR
[ShapeView] Technique to avoid considering non-diagonal cases for two reducibly convertible types.
[Reflexivity] Reflexivity of the logical relation.
[Irrelevance] Irrelevance of the logical relation: two reducibly convertible types decode to equivalent predicates. Symmetry is a direct corollary.

Algorithmic typing and its properties

File Description
[AlgorithmicTyping] Definition of the second notion of typing: algorithmic typing (and algorithmic conversion together with it).
[LogRelConsequences] Consequences of the logical relation on declarative typing necessary to establish properties of algorithmic typing.
[BundledAlgorithmicTyping] Algorithmic typing bundled with its pre-conditions, and a tailored induction principle showing invariant preservation in the “algorithm”.
[AlgorithmicConvProperties] Properties of algorithmic conversion, in order to derive the second instance of generic typing, consisting of declarative typing and algorithmic conversion.
[AlgorithmicTypingProperties] Derive the third instance of generic typing, consisting entierly of algorithmic notions.

Miscellaneous

File Description
[Positivity.v] and [Positivity.agda] Showcase the difference between Coq and Agda’s positivity checkers.

[Utils] [BasicAst] [Context] [AutoSubst/] [AutoSubst/Extra] [Notations] [Automation] [NormalForms] [UntypedReduction] [GenericTyping] [DeclarativeTyping] [Properties] [DeclarativeInstance] [LogicalRelation] [Induction] [Escape] [Reflexivity] [Irrelevance] [ShapeView] [Positivity.v] [Weakening] [AlgorithmicTyping] [AlgorithmicConvProperties] [AlgorithmicTypingProperties] [LogRelConsequences] [BundledAlgorithmicTyping]