Commit graph

286 commits

Author SHA1 Message Date
Leonardo de Moura
aebe1f4946 doc(library/init/meta/vm): document VM introspection API 2016-11-16 13:05:08 -08:00
Leonardo de Moura
91c8ff746f feat(cli_debugger): add commands for traversing stack frames 2016-11-16 12:37:18 -08:00
Leonardo de Moura
b8e904094c feat(cli_debugger): add breakpoints 2016-11-16 10:05:36 -08:00
Leonardo de Moura
8068f3e80a feat(library/tactic/vm_monitor): add vm.get_env action 2016-11-16 09:09:25 -08:00
Leonardo de Moura
0119fba594 feat(library/init/meta/name): add is_prefix_of 2016-11-16 09:08:58 -08:00
Leonardo de Moura
b0d6d171be feat(library/tactic/vm_monitor): add basic io support for VM monad 2016-11-15 18:42:14 -08:00
Leonardo de Moura
3628870121 feat(library/tactic/vm_monitor): extend VM introspection API 2016-11-15 15:05:46 -08:00
Leonardo de Moura
d5aa92eaeb feat(library/tactic/tactic_state): add vm_obj introspection 2016-11-14 21:58:34 -08:00
Leonardo de Moura
82aade5185 feat(library/tactic/vm_monitor): add vm_decl introspection 2016-11-14 18:04:53 -08:00
Leonardo de Moura
277ff818a1 feat(library/tactic/vm_monitor): add VM introspection API 2016-11-14 17:25:25 -08:00
Leonardo de Moura
fffe69fdf9 feat(library/vm,library/tactic/vm_monitor): use optionT to define vm monad 2016-11-14 16:13:56 -08:00
Leonardo de Moura
0fab2c6a83 feat(library/init/meta): add VM introspection API 2016-11-13 14:20:05 -08:00
Leonardo de Moura
fbca131976 fix(library/init/meta/congr_lemma): typo 2016-11-13 12:54:26 -08:00
Leonardo de Moura
40fca8efd4 feat(frontends/lean): add tactic.save_type_info, preserve pos info at translate 2016-11-10 11:51:05 -08:00
Leonardo de Moura
a7af70da2e feat(library/vm): add expr.copy_pos_info 2016-11-10 11:50:38 -08:00
Leonardo de Moura
2d86d88c92 feat(library/tactic/user_attribute): allow user to specify whether attribute is persistent or not 2016-11-05 11:46:04 -07:00
Leonardo de Moura
6173d95d18 feat(library/module,frontends/lean): store line/column number information 2016-11-02 16:55:21 -07:00
Leonardo de Moura
cea572a167 feat(library/module): store .olean file name for imported declarations 2016-11-02 15:37:33 -07:00
Leonardo de Moura
ea3adf4a7c feat(library/init/meta/tactic): universe polymorphic tactics 2016-10-25 03:42:55 +08:00
Leonardo de Moura
6edec4c4e9 feat(library/init/meta/converter): implement conversionals using ext_simplify_core 2016-10-19 17:23:32 -07:00
Leonardo de Moura
205d524409 refactor(library/tactic/simplify): delete old simplifier 2016-10-19 14:03:14 -07:00
Leonardo de Moura
053389b70b feat(library/init/meta/simp_tactic): add new simp primitives 2016-10-19 08:41:25 -07:00
Leonardo de Moura
bf7bae6eaf feat(library/init/meta/tactic): add beta/zeta tactics 2016-10-13 18:47:27 -07:00
Daniel Selsam
b4644acba4 fix(meta/mk_dec_eq_instance): handle indices and ginductives 2016-10-13 10:12:37 -07:00
Leonardo de Moura
45997a0ca8 chore(library/init/meta/simp_tactic): update documentation 2016-10-12 17:34:57 -07:00
Leonardo de Moura
ef23c591fc feat(library/init/meta): implement unfold tactics in Lean using new building blocks 2016-10-12 17:25:56 -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
e37207e8a9 feat(library/tactic): expose new dsimplify in Lean 2016-10-12 07:25:09 -07:00
Leonardo de Moura
d655310ecf feat(library/init/meta): rename rsimp* back to dsimp* 2016-10-11 16:37:08 -07:00
Sebastian Ullrich
b0e6c83ea9 feat(library/tactic): add back notation for by assumption 2016-10-11 14:17:18 -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
d747fcb17c refactor(library/tactic/simp_lemmas): new caching mechanism 2016-10-06 20:20:01 -07:00
Leonardo de Moura
0d74ad97a7 chore(library/init): definition => def 2016-10-06 16:04:12 -07:00
Leonardo de Moura
91076b06ad feat(library/init/meta/converter): add 'find_pattern' conversional 2016-10-05 19:22:17 -07:00
Leonardo de Moura
895a94d17e feat(library/init/meta/converter): match based conversions 2016-10-05 18:54:11 -07:00
Leonardo de Moura
68df31df67 feat(library/init/meta/converter): add adapter for applying propext automatically 2016-10-05 17:13:28 -07:00
Gabriel Ebner
6883720cc7 fix(library/init/meta/expr): consistently compare expressions 2016-10-05 15:17:02 -07:00
Leonardo de Moura
990c414b86 feat(library/init/meta/converter): add 'congr' and 'depthfirst' conversionals 2016-10-05 15:05:22 -07:00
Leonardo de Moura
a6808cfbad fix(library/init/meta/converter): fix conversion error message 2016-10-05 15:05:22 -07:00
Leonardo de Moura
4a9a637ddf feat(library/init/meta/converter): add 'funext' converter and 'conversion' tactic 2016-10-05 15:05:07 -07:00
Leonardo de Moura
a2bf24a916 feat(library/init/meta/relation_tactics): add tactic for retrieving lhs and rhs from an registered relation 2016-10-05 10:40:55 -07:00
Leonardo de Moura
7c6510f7de feat(library/init/meta/format): add 'format.indent' 2016-10-05 10:39:40 -07:00
Leonardo de Moura
c9af4f53c7 feat(library/init/meta/tactic): add solve_aux 2016-10-05 08:45:44 -07:00