Commit graph

816 commits

Author SHA1 Message Date
Leonardo de Moura
9320016b97 refactor(library/tactic): merge simp_lemmas and simp_lemmas_tactics 2016-10-12 14:49:54 -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
4f2db5702f feat(library/tactic/unfold_tactic): allow user to set transparency_mode at dunfold_expr 2016-10-12 14:07:50 -07:00
Leonardo de Moura
46eb7decde feat(library/tactic/unfold_tactic): add unfold_projection tactic 2016-10-12 13:43:32 -07:00
Leonardo de Moura
deb2bb92b2 feat(library/tactic/simp_lemmas_tactics): add dunfold_expr tactic based on equational lemmas 2016-10-12 13:18:10 -07:00
Leonardo de Moura
f66aec2309 feat(library/tactic/simp_lemmas_tactics): add simp_lemmas.drewrite 2016-10-12 09:01:47 -07:00
Leonardo de Moura
1a4ac3a102 fix(library/tactic/dsimplify): bugs and implement dsimp using new dsimplify 2016-10-12 08:33:40 -07:00
Leonardo de Moura
4e71013aa4 refactor(library/tactic/dsimplify): expose classes 2016-10-12 07:44:53 -07:00
Leonardo de Moura
e37207e8a9 feat(library/tactic): expose new dsimplify in Lean 2016-10-12 07:25:09 -07:00
Leonardo de Moura
239cd9c543 feat(library/tactic): start new defeq simplifier 2016-10-11 16:37:50 -07:00
Leonardo de Moura
d655310ecf feat(library/init/meta): rename rsimp* back to dsimp* 2016-10-11 16:37:08 -07:00
Leonardo de Moura
231c124be8 feat(library/init/meta): rename dsimp => rsimp, and add primitive tactic that takes an arbitrary simp_lemmas 2016-10-09 10:02:26 -07:00
Leonardo de Moura
a78e8fb11a refactor(library/tactic/simp_lemmas_tactics): consistent naming 2016-10-09 09:37:20 -07:00
Leonardo de Moura
df9a93c44d refactor(library/tactic/simp_lemmas_tactics): rename function 2016-10-09 09:00:15 -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
a796bda14e refactor(library/tactic): use new simp_lemmas module in the simplifier 2016-10-08 21:54:34 -07:00
Leonardo de Moura
531a437d1f chore(library/tactic/simplifier): remove dead code 2016-10-06 20:56:30 -07:00
Leonardo de Moura
3fbdb71f3e feat(library/tactic/simplifier): remove simp_extensions 2016-10-06 20:50:23 -07:00
Leonardo de Moura
d747fcb17c refactor(library/tactic/simp_lemmas): new caching mechanism 2016-10-06 20:20:01 -07:00
Leonardo de Moura
1e93c2c235 refactor(library/rfl_lemmas): simplify 2016-10-06 16:49:20 -07:00
Leonardo de Moura
7f30844348 feat(library/tactic/simplifier/simp_lemmas): add tactic for applying one simplification step form a simp_lemmas set 2016-10-04 19:51:33 -07:00
Leonardo de Moura
4516d1b046 feat(library/init/meta/attribute, library/tactic/user_attribute): make sure caching_user_attribute is in (Type 1) 2016-10-04 02:05:34 -07:00
Leonardo de Moura
bd4c77d414 fix(library/tactic/user_attribute): anonymous attribute names are now allowed 2016-10-04 01:11:33 -07:00
Gabriel Ebner
93cf15391c fix(library/tactic/simplifier/util): fix deserialization of flat macros 2016-10-03 22:20:15 -07:00
Leonardo de Moura
629cfa6ba1 feat(library/tactic/simplifier): disable broken theory_simplifiers 2016-10-03 22:06:44 -07:00
Leonardo de Moura
d549044d27 feat(library/init/meta,library/tactic/simplifier): user defined simp attributes 2016-10-03 21:39:17 -07:00
Leonardo de Moura
88c6177a4c fix(library/tactic/simplifier/simp_lemmas): incorrect binding 2016-10-03 20:46:22 -07:00
Leonardo de Moura
7be74a6c0c feat(library/init/meta/simp_tactic): add command for creating simp attributes 2016-10-03 20:38:15 -07:00
Leonardo de Moura
4a2946f5dd feat(library/tactic/eval): eval_expr for arbitrary expressions 2016-10-03 19:01:22 -07:00
Leonardo de Moura
e6fbbbbc2d feat(util/rb_map): add unsigned_map 2016-10-03 16:26:58 -07:00
Leonardo de Moura
7465529445 feat(library/tactic): 'eval_expr' tactic skeleton 2016-10-03 16:26:28 -07:00
Leonardo de Moura
ee9ba1e5cb feat(library/init/meta/simp_tactic): add tactic for adding universe polymorphic lemma to simp set 2016-10-03 14:41:36 -07:00
Leonardo de Moura
7c07d269f9 refactor(library/tactic/user_attribute): cache builder must be a tactic 2016-10-03 14:20:37 -07:00
Leonardo de Moura
7ab12ed57f feat(library/init/algebra): improve transport_to_additive (copy attributes) 2016-10-01 12:55:17 -07:00
Leonardo de Moura
c0022253a7 feat(frontends/lean/tactic_notation): allow lemmas to be removed 2016-09-30 19:53:51 -07:00
Leonardo de Moura
018d73ce84 feat(library/tactic/rewrite_tactic): improve error message 2016-09-28 21:17:57 -07:00
Leonardo de Moura
e5ba0d7733 chore(*): cleanup 2016-09-27 17:30:57 -07:00
Leonardo de Moura
d59410cc41 refactor(kernel): support only proof irrelevant mode 2016-09-27 17:18:52 -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
3c71d7eda2 feat(frontends/lean,library/tactic/tactic_state): improve error localization 2016-09-25 18:40:41 -07:00
Leonardo de Moura
8b132c758a feat(frontends/lean/begin_end_block): add basic auto-quotation 2016-09-25 17:03:12 -07:00
Leonardo de Moura
6a49b2e18b chore(library/vm,library/tactic): fix warnings produced by the new clang++ 2016-09-25 11:14:28 -07:00
Leonardo de Moura
5e5285ee67 refactor(library): rename pr1/pr2 ==> fst/snd 2016-09-21 09:48:39 -07:00
Leonardo de Moura
bbd10b99f7 chore(library): remove old type class resolution procedure 2016-09-19 21:22:02 -07:00
Gabriel Ebner
3ef9149902 feat(library/tactic/tactic_state): add get_unused_name 2016-09-19 16:38:03 -07:00
Gabriel Ebner
8d06a88840 feat(library/tactic/intro_tactic): use get_unused_name 2016-09-19 16:38:03 -07:00
Leonardo de Moura
0a6f571f07 fix(library/tactic/simplifier/simplifier): assertion 2016-09-19 11:29:03 -07:00
Daniel Selsam
52f87760d8 feat(src/library/inductive_compiler): support for nested inductive types 2016-09-16 12:50:59 -07:00
Leonardo de Moura
cf30d31024 fix(library/tactic/cases_tactic): missing case 2016-09-12 17:41:22 -07:00
Leonardo de Moura
d980aa3724 feat(library/rfl_lemmas): move rfl lemma rewrite procedure to library 2016-09-12 12:42:14 -07:00