lean4-htt/library/init
Leonardo de Moura a7d08d2f3d feat(kernel/inductive/inductive): dependent elimination for inductive predicates
In Lean4, we will not generate non dependent recursors for inductive
predicates. The main goal is to make the shape of the automatically
generated recursors more uniform. The non uniform representation is
leftover from Lean2. In Lean2, we wanted to support different kernels
with different features. For example: we could create proof relevant
kernels, no impredicative universe, etc.
Recall that, in a kernel with an impredicative Prop and no proof
irrelevance, inductive predicates without dependent elimination are
weaker that inductive predicates with dependent elimination.
When proof irrelevance is enabled, we can generate the dependent
recursor from the non dependent one. Actually, the module drec.cpp
generates the dependent recursor.
Now, we only support one kind of kernel, and it doesn't make sense
anymore to generate non dependent recursors for inductive predicates.
This would only produce an unnecessary asymmetry on the inductive
datatype module.

Remark: we had to create non dependent recursors to help the elaborator.
This can be avoid if we improve the elaborator. I will do that in the
new elaborator implemented in Lean.

Remark: equation lemmas are broken for definitions that pattern match on
nested inductive datatypes. The problem is the super messy
`prove_eq_rec_invertible_aux` function. This function will not be needed
after I finish the new inductive datatype support in the kernel.

cc @kha
2018-06-12 13:03:26 -07:00
..
control feat(init/lean/parser/parser): make a monad transformer 2018-06-04 12:57:23 +02:00
data feat(kernel/inductive/inductive): dependent elimination for inductive predicates 2018-06-12 13:03:26 -07:00
lean chore(library/equations_compiler/util): disable generation of equational lemmas 2018-06-12 13:03:25 -07:00
meta chore(library/init/meta/expr): remove elaborated : bool parameter from expr 2018-06-06 09:47:01 -07:00
coe.lean chore(library/init): remove prod micro module 2018-04-30 09:25:25 -07:00
core.lean feat(kernel/inductive/inductive): dependent elimination for inductive predicates 2018-06-12 13:03:26 -07:00
default.lean chore(library): remove user attributes 2018-05-31 09:10:41 -07:00
env_ext.lean doc(library/init/env_ext): document environment extensions in use 2018-05-30 14:28:49 -07:00
function.lean chore(library/init): remove funext and quot modules 2018-04-30 09:25:26 -07:00
init.md chore(*.md): fix/remove broken links 2016-02-23 10:11:24 -08:00
platform.lean feat(library/vm): add support for system.platform.nbits in the VM 2018-05-03 15:54:54 -07:00
util.lean refactor(library): has_to_string ==> has_repr 2017-06-18 18:29:19 -07:00
version.lean.in chore(leanpkg/lean_version): recognize nightlies as releases separate from master 2018-03-20 15:14:45 -07:00
wf.lean feat(kernel/inductive/inductive): dependent elimination for inductive predicates 2018-06-12 13:03:26 -07:00