This repository contains a small project in progress to generate recursors for inductive types.
named_api/
generating recursors using an API to handle DeBruijn variablesrecursors_named/
outdated folder, generating recursors fully using named variables
api_debruijn
an api to deal with debruijn indices inspired from work by Weituo Dai and Yannick Forester
uniform_parameters.v
computes uniform parameters and converts gather relevant information- basic
- nesting
strictly_positive_uniform_parameters
computes strictly positive uniform parameters that one is allowed to nest on- basic
- nesting
custom_parametricty_rec_call.v
generates the rec call for the custom parametricitycustom_parametricty.v
generates the custom parametricity of an inductive type as an inductivefundamental_theorem.v
generates the type and term of the associated custom fundamental theorem
commons.v
functions building terms common to many filesrecursor_rec_call
computes rec call, if any, both for types and termsrecursor.v
generates the type and term of the recursors. It handles:- basics + functions types in args
- parameters
- indices
- mutual
- non uniform parameters
- LetIn in args
- rec call needing reduction (including let in)
- nesting (provided plugins)
- relevance
- universe constrains
functoriality.v
generates the type and term of the functoriality lemma
unit_tests.v
provide a testing functions with different mode of testingnesting_param.v
types used for nesting with their custom param and fundamental theoremt01_basic_types
: basic inductive types likebool
/nat
etc...t02_uniform_param_types
: inductive types with uniform parameters likelist
t03_indexed_param_types
: inductive types with indices likevec
t04_mutual_types
: basic mutual inductive types likeeven
andodd
t05_non_uniform_param_types
: inductive types with non uniform parameters likenu_list
:t06_nested_types
: nested inductive types likeRoseTree
t07_let_types
: inductive types withlet in
in the type of the constructorst08_metacoq_types
: inductive types from MetaCoqt11_strpos_uparams
: inductive types with non-strictly positive parameters
naming.v
naming functions and scheme for the named definitioncommons.v
functions building terms common to many filespreprocess_parameters.v
computes uniform parameters and converts gather relevant informationpreprocess_debruijn_to_named.v
fully names the debruijn variables present in the interfacepostprocess_named_to_debruijn.v
converts a named term to one defined using debruijn variablesgenerate_rec_call
computes rec call, if any, both for types and termsgenerate_types.v
generates the types that are used for the term and type of the recursorgenerate_rec_type.v
generates the type of the recursor of a mutual inductive type given a fully named mdecl. It handles:- basics
- basics + functions types in args
- parameters
- indices
- mutual
- non uniform parameters
- ad hoc nesting (all type uparams + nice enough)
- nesting
- LetIn in args
- rec call needing reduction (including let in)
- relevance
- universe constrains
- sort poly
generate_rec_term.v
generates the type of the recursor of a mutual inductive type given a fully named mdecl. It handles:- basics
- basics + functions types in args
- parameters
- indices
- mutual
- non uniform parameters
- ad hoc nesting (all type uparams + nice enough + no fct)
- nesting
- LetIn in args
- rec call needing reduction (including let in)
- relevance
- universe constrains
- sort poly