Commit graph

89 commits

Author SHA1 Message Date
Leonardo de Moura
dac6eec556 feat(library/tactic): add hole_command bookkeeping 2017-06-13 21:12:29 -07:00
Leonardo de Moura
0091cef9f2 feat(library/tactic): start algebraic normalizer 2017-05-15 21:46:19 -07:00
Leonardo de Moura
210b7c8fb7 fix(library/tactic): fixes #1513
Implement rename tactic in Lean using revert/intro
2017-04-15 11:34:24 -07:00
Leonardo de Moura
b86494f0d4 feat(library/tactic): add destruct tactic that is similar to cases, but does not use revert/intro/clear
This tactic is useful for building more complex tactics using ematch and
cc because it does not invalidate cc_state nor ematch_state.
2016-12-30 17:05:24 -08:00
Leonardo de Moura
9c069a3eda refactor(library/tactic/congruence): rename directory to smt 2016-12-30 13:15:19 -08:00
Leonardo de Moura
d16a3df7a3 feat(library/tactic/congruence): initialization and pretty printing 2016-12-22 15:18:52 -08:00
Leonardo de Moura
060a554db1 feat(library/tactic): add norm_num_tactic 2016-12-17 16:48:40 -08:00
Leonardo de Moura
7232e3a076 feat(library/vm/vm): invoke debugger (aka vm_monitor) 2016-11-14 14:45:49 -08:00
Leonardo de Moura
aee951af9b chore(library/tactic): move simplifier to tactic folder 2016-10-16 16:25:14 -07:00
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
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
a796bda14e refactor(library/tactic): use new simp_lemmas module in the simplifier 2016-10-08 21:54:34 -07:00
Leonardo de Moura
7465529445 feat(library/tactic): 'eval_expr' tactic skeleton 2016-10-03 16:26:28 -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
19a6005f7e refactor(library): move user_attribute to tactic folder
It depends on tactic_state.
2016-08-26 09:28:42 -07:00
Leonardo de Moura
0d8213cf92 feat(library/tactic): add unfold tactic 2016-07-18 15:46:56 -04:00
Leonardo de Moura
579f643d1d refactor(library): move kabstract to tactic folder 2016-07-18 09:57:02 -04:00
Leonardo de Moura
7f0276f592 feat(library/tactic): add 'rewrite' tactic and variants 2016-07-17 16:08:11 -04:00
Leonardo de Moura
26177995c2 feat(library/tactic): add 'generalize' tactic 2016-07-16 15:41:32 -04:00
Leonardo de Moura
a5307a34bc feat(library/tactic): add 'cases' tactic skeleton 2016-07-12 14:05:03 -04:00
Leonardo de Moura
2ae516ebe0 refactor(library): move backward lemmas to tactic 2016-07-10 10:17:56 -07:00
Leonardo de Moura
dbbe070060 feat(library/tactic): add 'induction' tactic 2016-07-05 19:13:23 -07:00
Leonardo de Moura
945faefd78 feat(library/tactic): add 'flat_assoc' tactic 2016-07-03 21:27:05 +01:00
Leonardo de Moura
afffd31a7b feat(library/tactic): add match_pattern tactic 2016-06-27 14:26:31 +01:00
Daniel Selsam
e1bc0a68e6 refactor(simplifier): port skeleton to new tactic framework
Conflicts:
	library/init/meta/tactic.lean
	src/library/tactic/tactic_state.cpp
2016-06-24 15:20:40 -07:00
Leonardo de Moura
490a116baa refactor(library): remove abstract_expr and abstract_expr_manager modules 2016-06-24 15:16:57 -07:00
Leonardo de Moura
facdf99e86 feat(library): add abstract_hash 2016-06-23 14:25:29 -07:00
Leonardo de Moura
120c48b1b2 feat(library/tactic): expose congr_lemmas
This commit also adds several helper code, and fixes bugs in congr_lemma.cpp
2016-06-22 19:17:08 -07:00
Daniel Selsam
9327d85f6c chore(library/defeq_simplifier): move to new module inside library/tactic 2016-06-22 17:18:57 -07:00
Leonardo de Moura
61de427699 feat(library/init/meta/fun_info): expose fun_info 2016-06-22 14:00:00 -07:00
Leonardo de Moura
61a845c005 feat(library/tactic): add 'apply' tactic 2016-06-17 20:11:52 -07:00
Leonardo de Moura
c5f92f08b8 feat(library/tactic): add 'assert' tactic
Remark: the new assert tactic does have the problem described in issue #621
2016-06-17 14:42:28 -07:00
Leonardo de Moura
d0afe0aa99 feat(library/tactic): add 'change' tactic 2016-06-17 13:21:52 -07:00
Leonardo de Moura
c8c43a866b feat(library/tactic): implement assumption tactic in Lean 2016-06-17 09:06:35 -07:00
Leonardo de Moura
5b8ac6ba30 feat(library/tactic): add 'exact' tactic 2016-06-14 21:30:58 -07:00
Leonardo de Moura
cb9b5650b7 feat(library/tactic): add 'subst' tactic 2016-06-14 21:01:57 -07:00
Leonardo de Moura
9fad884dd8 feat(library/tactic): add tactic.mk_app for using app_builder 2016-06-14 17:13:10 -07:00
Leonardo de Moura
f86f8b040f feat(library/tactic): add 'by' annotation 2016-06-13 10:12:00 -07:00
Leonardo de Moura
125a80ad69 feat(library/tactic): add 'clear' tactic 2016-06-11 20:23:24 -07:00
Leonardo de Moura
6829c81f18 feat(library/tactic): add 'rename' tactic 2016-06-11 19:18:25 -07:00
Leonardo de Moura
62116f5b4b feat(library/tactic): add 'revert' tactic 2016-06-11 10:12:43 -07:00
Leonardo de Moura
0a6cc0ab5a feat(library/tactic): assumption tactic 2016-06-10 18:29:41 -07:00
Leonardo de Moura
e9ae5019ca feat(library/tactic): init intro tactic 2016-06-10 18:29:19 -07:00
Leonardo de Moura
cf073f5ed0 feat(library/tactic): add tactic_state 2016-06-08 15:12:22 -07:00
Leonardo de Moura
aeee79da2b chore(library): library/tactic => library/old_tactic 2016-06-06 16:38:27 -07:00
Leonardo de Moura
128d6cdec2 refactor(library/tactic): remove tactics whnf and beta 2016-03-21 11:48:36 -07:00
Rob Lewis
031831f101 feat(library/tactic): add replace tactic 2016-01-04 14:43:31 -05:00