Commit graph

309 commits

Author SHA1 Message Date
Gabriel Ebner
7ff2a77d67 feat(library/vm/vm_task): expose task_result objects to VM 2016-11-29 11:12:43 -08:00
Gabriel Ebner
a8df381d20 feat(*): parallel compilation 2016-11-29 11:12:40 -08:00
Leonardo de Moura
94c882f4d5 feat(library/documentation, frontends/lean): add /-! -/ doc string module block 2016-11-27 12:23:53 -08:00
Leonardo de Moura
6978906a78 chore(frontends/lean): remove namespace documentation
We will add module level doc strings /-! -/
2016-11-27 11:57:03 -08:00
Leonardo de Moura
338a46c225 fix(library/documentation): do not store doc strings for namespaces and declarations in the same name_map 2016-11-26 09:41:07 -08:00
Leonardo de Moura
97dd2f34d5 feat(library,frontends/lean): add basic doc string support 2016-11-25 18:52:56 -08:00
Leonardo de Moura
25639f0b72 feat(library/init/meta): add 'pose' tactic 2016-11-24 13:48:16 -08:00
Leonardo de Moura
0554fd5997 fix(frontends/lean): name resolution at tactic execution time
This commit also adds a new tactic: tactic.resolve_name

closes #1201
2016-11-24 10:55:39 -08:00
Leonardo de Moura
a4f491a3ad feat(library/init/meta/interactive): add rename tactic to interactive mode 2016-11-24 09:54:55 -08:00
Leonardo de Moura
3b09865684 feat(library/init/meta/simp_tactic): add tactics for validating simp lemmas 2016-11-23 17:43:55 -08:00
Leonardo de Moura
21bad7cb97 feat(library/init/meta/comp_value_tactics): add support for char/string/fin at comp_val tactic 2016-11-23 13:19:54 -08:00
Leonardo de Moura
01bc4dfcd2 feat(library/init/meta/tactic): add dec_trivial notation 2016-11-23 11:42:57 -08:00
Leonardo de Moura
11ef0b14fd feat(library/data): add decidable_eq instances for bitvec and tuple 2016-11-23 11:09:24 -08:00
Leonardo de Moura
edaf03ae98 feat(library/init): add more lemmas and define ordered_ring 2016-11-22 20:50:21 -08:00
Leonardo de Moura
242ad1bd65 feat(library/init/meta/comp_value_tactics): add comp_val tactic for testing 2016-11-22 17:03:21 -08:00
Leonardo de Moura
88b2af3b65 feat(library/init/meta/interactive): add 'exfalso' 2016-11-21 11:41:11 -08:00
Leonardo de Moura
1e14e27cd0 feat(library/init/meta/interactive): add try/solve1 tactics to interactive mode 2016-11-18 16:17:37 -08:00
Leonardo de Moura
6b466114a4 fix(library/init/meta/interactive): resolve name at interactive unfold tactics 2016-11-18 16:14:03 -08:00
Leonardo de Moura
2844df2279 feat(library/init/meta/tactic): add tactic.opened_namespaces 2016-11-18 14:25:54 -08:00
Leonardo de Moura
6d06f8bf29 feat(library/init/meta/name): add name.append 2016-11-18 14:25:30 -08:00
Leonardo de Moura
bfae8f347b feat(library/init/meta/interactive): cases tactic takes arbitrary expressions 2016-11-18 12:51:53 -08:00
Leonardo de Moura
c816b80855 chore(*): don't use upper case letter for type variables, and camelCase for declarations 2016-11-17 14:54:08 -08:00
Leonardo de Moura
e5d69fef35 fix(library/init/meta/interactive): bug at mk_simp_set 2016-11-16 17:42:16 -08:00
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