Commit graph

110 commits

Author SHA1 Message Date
Leonardo de Moura
b22192eee1 fix(library/equations_compiler/elim_match): fixes #1171
We should not use value-transition (based on if-then-else) when there
are dependencies.
2016-10-31 17:42:39 +08:00
Leonardo de Moura
64c3927e0b feat(library/equations_compiler/elim_match): report unused equations
closes #1162
2016-10-19 09:58:08 -07:00
Leonardo de Moura
e74cfa9db7 fix(library/equations_compiler/elim_match): bug at complete transition
It also updates the condition for triggering the inaccessible
transition. Before this commit, we would only perform this kind
of transition if *all* terms were marked inaccessible. Now,
we perform it if *some* are marked inaccessible. Reason:
when we perform the complete transition we don't have enought
information for deciding whether an argument should be marked as
inaccessible or not. If this decision creates confusion for users,
we may try to mark them with an "maybe-inaccessible" annotation, and
then enforce that the inaccessible transition is performed onlty if
*all* terms are marked as inaccessible or *maybe-inaccessible"
2016-10-19 09:10:19 -07:00
Leonardo de Moura
924b4d3bdc refactor(library, library/tactic): move simp_lemmas and eqn_lemmas to tactic folder
They were at src/library because we hoped we would be able to use them
in the type_context unifier. However, the plan did not work for several
reasons. We saved the partial implementation in the branch: https://github.com/leodemoura/lean/tree/type_context_with_refl_lemmas

Here are the problems:

1) We have to be able to rewrite even when the type context is already in tmp-mode.
   This is an issue because the tmp metavariables in the refl lemma clash with the ones created in the type context.

  Solution: implemented lift operation for idx metavariables, and custom
  match. This solution is not perfect since the lifting is extra overhead.

2) The term being "unfolded" may be stuck. Example:

      nat.add n (@one nat ?m)

  will not match the pattern

      nat.add ?x_0 (nat.succ ?x_1)

  because ?m is not assigned yet.
  We can assign it during the matching process because it is a regular metavariable and the matching is performed in
  tmp_mode.

  Possible workaround a) try to instanciate type class instances before we try the refl lemmas.
  This is a potential performance problem because the term can be arbitrarily big.
  The current heuristics we use to speed up the process do not work for the example above.

  Possible workaround b) allow regular metavariables be assigned by type class resolution even
  when we are in tmp-mode.

  We have not tried to implement any of these workarounds.

3) There are many more lazy-delta steps. Before this feature, when we unfold `nat.add a (succ ... (succ b) ...)`,
   we are done with delta-reduction. It is just iota and beta after that.
   However, with refl-lemmas, the term `nat.add a (succ ... (succ b) ...)` produces one lazy-delta step per succ.
   This produces nasty side-effects because of the
   The heuristic (f t =?= f s) ==> (t =?= s).

   Examples such as
       (fib 8) =?= 34
   will take a very long time because of this heuristic.

   Possible workaround: cache failures like we did in Lean2.
   However, failure are only easy to cache if there are no meta-variables.

4) The type context trace gets very confusing since we use is_def_eq for matching lhs while we are computing is_def_eq.
   Possible workaround: disable trace when trying refl_lemmas.

5) We must be able to temporarily disable the feature.
   Example: when proving a refl_lemma for a definition `f`, we may have
   to expand the nested definitions
   (e.g., for match-end blocks)

6) refl/simp lemmas were designed to rewrite elaborated terms.
   Using them during unification may produce a series of unexpected
   behaviors since terms usually contain many regular and universe meta-variables.

7) We need to define a notion of "refl stuck application".
   Right now, a metavar is stuck, a projection is stuck if the structure
   is stuck, a recursor is stuck is the major premise is stuck.
   An application (f ...) is refl-lemma stuck if f has refl-lemmas
   associated with it, AND metavariables occurring in arguments are
   preventing a refl-lemma from being applied.
2016-10-12 14:36:00 -07:00
Leonardo de Moura
ebd912d243 feat(library/eqn_lemmas): add map function name => equational lemmas 2016-10-09 11:48:55 -07:00
Leonardo de Moura
476684a284 refactor(library,library/tactic/defeq_simplifier): use simp_lemmas in the defeq_simplifier 2016-10-08 22:15:27 -07:00
Leonardo de Moura
1e93c2c235 refactor(library/rfl_lemmas): simplify 2016-10-06 16:49:20 -07:00
Leonardo de Moura
d0d75c0923 refactor(kernel): reduce number of configurations supported in the kernel
Now, eta and impredicativity are assumed to be always true.

Motivation: the rest of the system assumes eta.
Regarding impredicativity, we decided to support only the standard library.
2016-09-27 17:07:01 -07:00
Leonardo de Moura
823357462e feat(library/equations_compiler/structural_rec): validation 2016-09-23 13:50:55 -07:00
Leonardo de Moura
9068dd9a88 chore(library/equations_compiler/equations): style 2016-09-23 10:05:18 -07:00
Leonardo de Moura
c8e13cd391 feat(frontends/lean): minimize errors being reported 2016-09-23 09:20:31 -07:00
Leonardo de Moura
5e5285ee67 refactor(library): rename pr1/pr2 ==> fst/snd 2016-09-21 09:48:39 -07:00
Leonardo de Moura
89f62edaf0 refactor(library): reduce dependecies on old code, simplify normalize module 2016-09-19 22:12:34 -07:00
Leonardo de Moura
c66dbf202b chore(library/equations_compiler): remove old equation compiler 2016-09-19 17:13:30 -07:00
Leonardo de Moura
9a967001be chore(library/equations_compiler/compiler): use exception until well_founded recursion support is implemented 2016-09-19 14:41:25 -07:00
Leonardo de Moura
9d9f2b2636 fix(library/equations_compiler/structural_rec): bug at check_arg_type 2016-09-18 18:36:20 -07:00
Leonardo de Moura
5df705ebe8 fix(library/equations_compiler/compiler): nested match-exprs in meta_definitions 2016-09-18 17:20:52 -07:00
Leonardo de Moura
194d1be0dd fix(library/equations_compiler/structural_rec): reflexive type support 2016-09-18 16:15:31 -07:00
Leonardo de Moura
6657876566 feat(library/equations_compiler): add support for meta_definitions 2016-09-18 10:52:38 -07:00
Leonardo de Moura
7fb407d2fd fix(library/equations_compiler/structural_rec): typo 2016-09-16 07:56:28 -07:00
Leonardo de Moura
2248dccfd4 feat(library/equations_compiler/elim_match): do not create auxiliary definition when compiling meta-definitions and/or lemmas 2016-09-12 12:54:01 -07:00
Leonardo de Moura
d43764b6fb refactor(library/tactic/defeq_simplifier): move defeq_simp_lemmas to library
This commit also renames them to "rfl_lemmas".
Reason: these lemmas will be used at type_context::is_def_eq and type_context::whnf
2016-09-12 10:36:11 -07:00
Leonardo de Moura
6ac64c7250 feat(library/equations_compiler/elim_match): make process_transport more robust 2016-09-11 16:21:15 -07:00
Leonardo de Moura
932d14241b chore(kernel): remove support for mutually inductive datatypes from the kernel 2016-09-10 17:39:17 -07:00
Leonardo de Moura
e6dd5242fc feat(library/equations_compiler): add option eqn_compiler.zeta 2016-09-10 14:00:16 -07:00
Leonardo de Moura
50ef0185d9 fix(library/equations_compiler/structural_rec): missing relaxed_whnf 2016-09-10 12:14:00 -07:00
Leonardo de Moura
96d27b6b8f fix(library/equations_compiler/elim_match): missing case for is_complete_transition 2016-09-10 12:13:31 -07:00
Leonardo de Moura
4df0c1fe93 feat(library/equations_compiler/compiler): do not use let-expresssions at pull_nested_rec_fn 2016-09-09 18:20:36 -07:00
Leonardo de Moura
c25ac7f54f feat(library/equations_compiler): pull nested recursive calls 2016-09-09 17:56:56 -07:00
Leonardo de Moura
1d5f0895d4 chore(library/equations_compiler/util): disable sanitizer by default 2016-09-09 17:53:13 -07:00
Leonardo de Moura
a0fb3eb2f9 feat(library/equations_compiler/equations): add helper function 2016-09-09 17:43:42 -07:00
Leonardo de Moura
15f3622cbb fix(library/equations_compiler/pack_domain): missing case 2016-09-09 13:39:51 -07:00
Leonardo de Moura
c1521b8416 feat(library/equations_compiler/elim_match): improve process_no_equation case 2016-09-09 12:40:16 -07:00
Leonardo de Moura
f64d1483e9 fix(library/equations_compiler/elim_match): avoid nontermination at process_no_equation 2016-09-09 09:00:57 -07:00
Leonardo de Moura
3857ae09f7 feat(library/equations_compiler/elim_match): add max number of steps 2016-09-09 08:48:34 -07:00
Leonardo de Moura
96fa8856bc feat(library/equations_compiler): add mk_nonrec 2016-09-08 14:09:05 -07:00
Leonardo de Moura
14d009ce92 refactor(library/equations_compiler): improve mk_equation_lemma 2016-09-08 11:50:58 -07:00
Leonardo de Moura
f4f92ed2d1 chore(library/equations_compiler/util): add comment 2016-09-08 10:28:30 -07:00
Leonardo de Moura
7d56382baa feat(library/equations_compiler/util): generate equation lemmas for equations using invertible functions 2016-09-07 17:57:10 -07:00
Leonardo de Moura
f7699d8719 fix(library/equations_compiler/elim_match): support dependent functions handling invertible functions 2016-09-07 16:04:08 -07:00
Leonardo de Moura
2f7a1a3579 feat(library/equations_compiler/elim_match): add support for invertible functions 2016-09-07 08:53:56 -07:00
Leonardo de Moura
bedb508a8f feat(library/equations_compiler): do not generate bytecode for lemmas 2016-09-06 15:14:47 -07:00
Leonardo de Moura
c9cee9a702 feat(library/equations_compiler): add flag indicating whether we are compiling a lemma or not 2016-09-06 15:09:54 -07:00
Leonardo de Moura
385a28a410 chore(library/equations_compiler/util): use nested_exception 2016-09-06 13:37:10 -07:00
Leonardo de Moura
01107f7aae feat(library/equations_compiler): generate bytecode for auxiliary definitions 2016-09-06 13:29:12 -07:00
Leonardo de Moura
ff9500d7f9 feat(library/exception): add nested_exception 2016-09-06 12:57:06 -07:00
Leonardo de Moura
d8caecff49 refactor(library/exception): avoid throw_generic_exception functions 2016-09-06 12:37:56 -07:00
Leonardo de Moura
a0b8766ffb refactor(library): merge exception modules 2016-09-06 09:12:26 -07:00
Leonardo de Moura
120bffce25 chore(library/equations_compiler/elim_match): add cases/induction tactic error message to trace 2016-09-04 17:33:26 -07:00
Leonardo de Moura
029766495b feat(library/equations_compiler/util): try to improve performance of lemma generation
There are still performance problems. Lemma generation is fine, but the
kernel is timing out when checking the lemma. We need to provide hints
to the kernel to avoid the performance problem.
2016-09-03 13:24:44 -07:00