Commit graph

186 commits

Author SHA1 Message Date
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