Leonardo de Moura
f5e34f0c02
chore(library): make sure replace_visitor behavior is not compiler dependent, and remove code duplication
2017-06-12 20:18:11 -07:00
Leonardo de Moura
d7e3bd794e
fix(library/equations_compiler): fixes #1663
2017-06-12 19:45:01 -07:00
Gabriel Ebner
9aeda60e2c
fix(library/equations_compiler/util): segfault
2017-06-01 16:58:00 +02:00
Leonardo de Moura
ac17270894
fix(*): more gcc 7 warnings
2017-05-31 17:29:30 -07:00
Leonardo de Moura
603bbe5987
fix(*): gcc 7 linking errors
2017-05-31 16:35:09 -07:00
Leonardo de Moura
d3298d518c
fix(library/equations_compiler/elim_match): whnf_pattern
2017-05-31 10:02:59 -07:00
Leonardo de Moura
72134a7bbd
feat(library/equations_compiler/wf_rec): provide recursive equations to rel_tac
...
rel_tac is a tactic used for synthesizing a well founded relation.
The default implementation just uses type class resolution.
More sophisticated strategies may need to access the set of recursive
equations. This commit addresses this need.
2017-05-30 16:55:37 -07:00
Leonardo de Moura
a31e3a95ae
feat(library/equations_compiler/wf_rec): improve error message for failed decreasing proofs
2017-05-26 13:55:29 -07:00
Leonardo de Moura
4bdb2da1b6
fix(library/equations_compiler): improve pull_nested_rec_fn, and make sure it communicates local propositions to the well founded recursion module
...
The bin_tree and num_consts examples can now be encoded more naturally.
2017-05-26 10:45:39 -07:00
Leonardo de Moura
438ce08748
feat(library/equations_compiler/util): cleanup equation rhs
...
The idea is to remove hints used to define a function by well founded
recursion. See new div_eqn.lean test for an example.
2017-05-25 13:09:13 -07:00
Leonardo de Moura
5583893991
fix(library/equations_compiler/wf_rec): avoid name collision between auxiliary lemmas produced in different modules
2017-05-24 17:50:39 -07:00
Leonardo de Moura
c396e4519a
fix(library/equations_compiler/util): missing case at prove_eq_rec_invertible
...
@dselsam You have used a function similar to prove_eq_rec_invertible in
the inductive compiler.
I'm wondering if this bug (missing case) may also occur in the inductive
compiler.
2017-05-24 14:34:54 -07:00
Leonardo de Moura
a1cfe0367b
fix(library/equations_compiler/pack_domain): nested recursive calls
2017-05-23 21:50:26 -07:00
Leonardo de Moura
e163b5c884
feat(library/init/meta/expr): binder_info.other ==> binder_info.aux_decl
2017-05-23 21:42:52 -07:00
Leonardo de Moura
290e7b9cff
feat(library/init): use Sort instead of Type for defining acc and well_founded
2017-05-23 16:40:45 -07:00
Leonardo de Moura
229b730c15
feat(library/equations_compiler): invoke tactics for building well founded relation, and proving recursive calls are "decreasing"
2017-05-23 16:04:55 -07:00
Leonardo de Moura
4fbb65d9f1
feat(frontends/lean,library/equations_compiler): store tactics for generating well founded relation and decreasing proofs
2017-05-23 15:00:29 -07:00
Gabriel Ebner
cb28f382a3
fix(library/equations_compiler/elim_match): handle partially applied constructors
2017-05-22 17:17:27 +02:00
Leonardo de Moura
3d088eea25
fix(library/equations_compiler): avoid name collision when pack_mutual is not used
2017-05-21 15:40:06 -07:00
Leonardo de Moura
9fb7e5c931
feat(library/equations_compiler): generate equational lemmas for auxiliary _main definitions
2017-05-21 15:21:28 -07:00
Leonardo de Moura
4e496b78d5
feat(library/equations_compiler): unpack auxiliary definition
...
We still need to unpack auxiliary lemmas, and propagate information in
the frontend.
2017-05-20 20:34:18 -07:00
Leonardo de Moura
f742d9c9d8
feat(library/equations_compiler/pack_domain): use psigma instead of sigma
2017-05-20 19:14:10 -07:00
Leonardo de Moura
fa863496da
feat(library/equations_compiler): prove equational lemmas for auxiliary definition
2017-05-20 16:38:32 -07:00
Leonardo de Moura
08560acf07
fix(library/equations_compiler): bugs in wf_rec
2017-05-20 13:26:49 -07:00
Leonardo de Moura
ab03a6af16
feat(library/equations_compiler/wf_rec): avoid unnecessary revert/intro's
2017-05-20 08:58:22 -07:00
Leonardo de Moura
789d4e148f
feat(library/equations_compiler): add pack_mutual
...
This step packs a collection of mutually recursive functions into a
single one. We use `psum` to combine the different domains, and
`psum.cases_on` to combine the codomains.
2017-05-18 15:29:51 -07:00
Leonardo de Moura
22d0dc197c
fix(library/equations_compiler/pack_domain): bug in pack_domain
2017-05-18 14:24:38 -07:00
Leonardo de Moura
737136e8fd
feat(library/equations_compiler/wf_rec): apply well_founded.fix
2017-05-17 16:44:53 -07:00
Leonardo de Moura
4982e23dca
feat(library/equations_compiler/wf_rec): eliminate recursive calls using functional
2017-05-17 15:56:53 -07:00
Leonardo de Moura
56823a22b7
feat(library/equations_compiler/wf_rec): use has_well_founded type class to generate default well founded relation when one is not provided
2017-05-17 14:37:21 -07:00
Leonardo de Moura
1c87319b58
feat(library/equations_compiler): add wf_rec skeleton
2017-05-17 12:47:52 -07:00
Leonardo de Moura
dea8a856dc
chore(library/equations_compiler/compiler): generate error when using well founded recursion in meta definitions
2017-05-17 12:24:47 -07:00
Gabriel Ebner
40bf75cbff
fix(library/equations_compiler/structural_rec): fix indices
2017-05-07 15:52:39 +02:00
Leonardo de Moura
cabb4350d9
feat(library): instances are not reducible by default anymore
...
Motivation: see "Other goodies" section at
https://github.com/leanprover/lean/wiki/Refactoring-structures
We had to add a new transparency mode: Instances at type_context.
In this mode, instances and reducible definitions are considered
transparent.
The new mode is used in the defeq_canonizer, code generator,
and sizeof lemma generation at inductive_compiler.
We also use the new mode in the unfold tactics.
2017-04-26 14:10:11 -07:00
Leonardo de Moura
b42ae2cf54
fix(library/type_context): fixes #1500
2017-03-31 19:19:44 -07:00
Leonardo de Moura
900c56be05
feat(frontends/lean,library/equations_compiler): abstract proofs in equations and regular definitions
2017-03-25 14:22:52 -07:00
Gabriel Ebner
677bf43da3
fix(library): fix various leaks
2017-03-23 09:00:59 +01:00
Leonardo de Moura
aa68d72fa5
fix(library/equations_compiler/elim_match): skip nonvar + inaccessible
2017-03-21 08:08:36 -07:00
Leonardo de Moura
740d42ea45
fix(library/tactic): we should preserve names when using the revert/do_something/intro idiom
2017-03-11 12:20:39 -08:00
Leonardo de Moura
1d71103f29
feat(library/tactic/cases_tactic): add support for generalized inductive datatypes at 'cases' tactic
2017-03-06 11:49:04 -08:00
Leonardo de Moura
931820c06d
chore(library/equations_compiler/structural_rec): update comment
2017-03-05 11:03:36 -08:00
Leonardo de Moura
959fa737eb
fix(library/equations_compiler/structural_rec): motive for brec_on
2017-03-05 09:50:38 -08:00
Leonardo de Moura
259d9271ab
fix(library/equations_compiler): use ginductive API
...
fixes #1334
2017-03-02 15:48:03 -08:00
Johannes Hölzl
f44cbb896c
fix(src/library/equations_compiler/elim_match): handle mixing of inaccessible terms and variables
2017-03-01 21:12:42 -08:00
Sebastian Ullrich
dd379e5b34
refactor(library/equations_compiler/elim_match): simplify is_complete_transition
2017-02-23 01:52:14 +01:00
Sebastian Ullrich
908a7bd9f3
feat(frontends/lean/parser): expr patterns
2017-02-23 01:52:13 +01:00
Sebastian Ullrich
3aa9e32c5f
fix(library/equations_compiler/elim_match): always prefer value transitions over complete transitions
2017-02-23 01:21:14 +01:00
Leonardo de Moura
6b76b65881
feat(library/equations_compiler/elim_match): change default max number of steps to 2048
2017-02-21 21:33:10 -08:00
Sebastian Ullrich
9d8c84713c
refactor(*): reduce exception context info from expr to pos_info
2017-02-17 13:45:57 +01:00
Leonardo de Moura
769220fa4e
fix(library/equations_compiler): structural recursion and partial equations
...
The equational compiler was failing to generate equational lemmas for
equations such as:
def f : nat → nat → nat
| (x+1) (y+1) := f (x+10) y
| _ _ := 1
It would fail when trying to prove the following equation:
forall x, f 0 x = 1
using a "refl" proof. This equation does not hold definitionally.
It is not blocked by the internal pattern matching based on the
cases_on recursor, but it is blocked by the outer most brec_on
used to implement structural recursion. The solution is to
"complete" the set of equations. So, the structural_rec
module will replace the equation above with
def f : nat → nat → nat
| (x+1) (y+1) := f (x+10) y
| _ 0 := 1
| _ (y+1) := 1
and then (as before)
def f : Pi (x y : nat), below y → nat
| (x+1) (y+1) F := F^.fst^.fst (x+10)
| _ 0 F := 1
| _ (y+1) F := 1
2017-02-16 14:51:31 -08:00