Commit graph

1784 commits

Author SHA1 Message Date
Leonardo de Moura
a1bc662eca dev(frontends/lean/parser): add local_context 2016-03-30 16:33:17 -07:00
Leonardo de Moura
e806700648 fix(frontends/lean/builtin_cmds): redeclare_aliases 2016-03-30 16:30:18 -07:00
Leonardo de Moura
06ef0ad7be refactor(frontends/lean): add local_level_decls
Remark: the template local_decls will be deleted in the future.
The instances local_expr_decls will be replace by local_context.
2016-03-30 15:47:32 -07:00
Leonardo de Moura
c4f25cf15b refactor(frontends/lean): rename elaborate methods 2016-03-30 15:05:24 -07:00
Leonardo de Moura
75549bafd7 refactor(frontends/lean/elaborator): rename elaborator to old_elaborator 2016-03-30 14:59:18 -07:00
Leonardo de Moura
3d238ee943 feat(frontends/lean/builtin_cmds): implement #unify using new type_context 2016-03-25 15:38:13 -07:00
Leonardo de Moura
c98f1bfd24 refactor(library): remove type_util module and implement get_num_args using abstract_type_context 2016-03-21 16:30:08 -07:00
Leonardo de Moura
8dde1489f9 refactor(library/util): isolate util procedures that depend on old_type_checker 2016-03-21 13:36:08 -07:00
Leonardo de Moura
487a1e7f89 refactor(kernel): remove extension_context
We replaced it with abstract_type_context
2016-03-19 15:15:39 -07:00
Leonardo de Moura
63d8a0ed45 refactor(kernel): move justification/constraint/metavar to library
These files will be eventually deleted
2016-03-19 14:39:15 -07:00
Leonardo de Moura
e7f1f409c4 refactor(kernel): simplify kernel type_checker
TODO: cleanup, move justification/metavar/constraints to library
2016-03-18 16:28:42 -07:00
Leonardo de Moura
d8079aa16a refactor(library): create copy of the kernel type_checker in library
Motivation: it will allow us to simplify the kernel type_checker and
make sure it implements the same API provided by type_context
2016-03-18 14:34:10 -07:00
Leonardo de Moura
c679c3a8d4 dev(kernel/abstract_type_context): extend abstract_type_context API 2016-03-08 11:40:36 -08:00
Leonardo de Moura
eaac6ba721 chore(library/type_context): rename default_type_context to legacy_type_context and move it to different file 2016-03-04 10:26:50 -08:00
Leonardo de Moura
9d0dfb8404 refactor(frontends/lean): remove calc_proof_elaborator 2016-03-03 17:22:45 -08:00
Leonardo de Moura
227b548341 refactor(frontends/lean/calc): no overloading in calc steps 2016-03-03 15:00:51 -08:00
Leonardo de Moura
2c70ca83a8 refactor(frontends/lean/calc): remove '{}' notation for eq.subst in calc mode 2016-03-03 14:18:20 -08:00
Leonardo de Moura
d84a20d68b remove(frontends/lean/server): FINDG command 2016-03-03 10:12:24 -08:00
Leonardo de Moura
22f3efc5be remove(frontends/lean): begin_end pre-tactics
This was never used
2016-03-03 10:02:09 -08:00
Daniel Selsam
c23528b5d8 feat(library/blast/blast): use defeq_simplifier to normalize 2016-03-01 13:44:33 -08:00
Leonardo de Moura
56d7fc4c23 refactor(*): cleanup replace_visitor subclasses, and make sure let-expressions are handled 2016-02-29 16:55:19 -08:00
Leonardo de Moura
3c878ecd01 feat(kernel): add let-expressions to the kernel
The frontend is still using the old "let-expression macros".
We will use the new let-expressions to implement the new tactic framework.
2016-02-29 16:40:17 -08:00
Leonardo de Moura
f55e456c84 chore(*): remove remaining references to by+ and begin+ 2016-02-29 13:59:06 -08:00
Leonardo de Moura
b7b4b6d838 chore(src/frontends/lean/builtin_exprs): remove unnecessary parameter 2016-02-29 13:57:18 -08:00
Leonardo de Moura
f54963bc3e refactor(library/tactic/expr_to_tactic): remove 'by_plus' support 2016-02-29 13:50:05 -08:00
Leonardo de Moura
fbe5188480 refactor(frontends/lean): remove 'by+' and 'begin+' tokens 2016-02-29 13:45:43 -08:00
Leonardo de Moura
bf60999ede fix(frontends/lean/builtin_exprs): 'using' expression 2016-02-29 13:23:39 -08:00
Leonardo de Moura
15c4bc92b9 refactor(frontends/lean/elaborator): we only need to track one context 2016-02-29 12:49:17 -08:00
Leonardo de Moura
2b1d734544 feat(kernel/expr): remove 'contextual' flag from binder_info 2016-02-29 12:41:43 -08:00
Leonardo de Moura
b41c65f549 feat(frontends/lean): remove '[visible]' annotation, remove 'is_visible' tracking 2016-02-29 12:31:23 -08:00
Leonardo de Moura
101cf1ec4c feat(frontends/lean): remove difference between 'have' and 'assert' 2016-02-29 11:28:20 -08:00
Leonardo de Moura
eee74ef1b4 refactor(frontends/lean/pp): use abstract_type_context instead of type_checker 2016-02-26 15:35:29 -08:00
Leonardo de Moura
7d61f640f6 refactor(*): add abstract_type_context class 2016-02-26 14:17:34 -08:00
Leonardo de Moura
5a4dd3f237 feat(library/reducible): remove [quasireducible] annotation 2016-02-25 17:42:44 -08:00
Leonardo de Moura
146edde5b3 feat(library/class): mark instances as quasireducible by default
quasireducible are also known as lazyreducible.

There is a lot of work to be done.
We still need to revise blast, and add a normalizer for type class
instances. This commit worksaround that by eagerly unfolding
quasireducible.
2016-02-25 12:11:29 -08:00
Leonardo de Moura
2a294bcc17 fix(frontends/lean/elaborator): fixes #996 2016-02-22 17:03:14 -08:00
Leonardo de Moura
96f391dda2 feat(library/definitional/projection,frontends/lean/structure_cmd): creating inductive predicates using structure command 2016-02-22 16:09:44 -08:00
Daniel Selsam
d521063dfb feat(library/defeq_simplifier): new simplifier that uses only definitional equalities 2016-02-22 11:01:36 -08:00
Leonardo de Moura
20f70035dd fix(frontends/lean/util): fixes #1007 2016-02-22 10:54:55 -08:00
Daniel Selsam
bb4b8da582 feat(library/unification_hint): basic handling of user-supplied unification hints 2016-02-12 11:48:51 -08:00
Leonardo de Moura
632d4fae36 chore(library): rename local_context to old_local_context 2016-02-11 18:15:16 -08:00
Leonardo de Moura
c9e9fee76a refactor(*): remove name_generator and use simpler mk_fresh_name 2016-02-11 18:05:57 -08:00
Leonardo de Moura
9cbda49297 chore(frontends/lean): remove script blocks 2016-02-11 17:26:44 -08:00
Leonardo de Moura
f67181baf3 chore(*): remove support for Lua 2016-02-11 17:17:55 -08:00
Leonardo de Moura
04eaf184a9 feat(frontends/lean,library/unifier): checkpoints at have-expressions
@avigad, @fpvandoorn, @rlewis1988, @dselsam

This commit modifies how have-expressions are elaborated.
Now, to process

     have H : <type>, from <proof>,
     <rest>

we first process the constraints in <type> and <proof> simultaneously.
After all these constraints are solved, the elaborator performs
a Prolog-like cut, and process the constraints in <rest>.

So, all overloads, type classes and coercions in <type> and <proof> are solved
before we start processing <rest>. Moreover, while processing <rest>, we
cannot backtrack to <type> and <proof> anymore.

I fixed all affected proofs in the standard and HoTT libraries in
previous commits pushed today and yesterday. I think most affected proofs were not using a good
style and/or were easy to fix. Here is a common pattern that does not
work anymore.

   structure has_scalar [class] (F V : Type) :=
   (smul : F → V → V)

   infixl ` • `:73 := has_scalar.smul

   proposition smul_zero (a : R) : a • (0 : M) = 0 :=
   have a • 0 + a • 0 = a • 0 + 0, by rewrite [-smul_left_distrib, *add_zero],
   !add.left_cancel this

The `have` doesn't work because Lean can't figure out the type of 0 before
it starts processing `!add.left_cancel this`. This is easy to fix, we just have to
annotate one of the `0`s in the `have`:

   proposition smul_zero (a : R) : a • (0 : M) = 0 :=
   have a • (0:M) + a • 0 = a • 0 + 0, by rewrite [-smul_left_distrib, *add_zero],
   !add.left_cancel this

BTW, all tactics are still being executed after all constraints are solved.
We may change that in the future. I didn't want to execute
the tactics at <proof> before <rest> because of universe
meta-variables. In Lean, unassigned universe meta-variables become
parameters. Moreover, we perform this conversion *before*
we start processing tactics. Reason: universe meta-variables
create many problems for tactics such as `rewrite`, `blast` and `simp`.

Finally, we can recover the previous behavior using the option

         set_option parser.checkpoint_have false
2016-02-04 19:01:19 -08:00
Leonardo de Moura
a08bc408c8 fix(frontends/lean/structure_cmd): fixes #967 2016-02-04 16:15:18 -08:00
Leonardo de Moura
31cc0ebb6a fix(frontends/lean/structure_cmd): fixes #968 2016-02-04 15:45:38 -08:00
Leonardo de Moura
496c84dac6 fix(frontends/lean/elaborator): fixes #982 2016-02-04 15:14:30 -08:00
Leonardo de Moura
0268f92eb4 fix(frontends/lean/elaborator): fixes #965 2016-02-04 13:41:21 -08:00
Leonardo de Moura
4821af8685 feat(frontends/lean/scanner): disallow superscripts in identifiers
See new test for motivating example.
2016-01-26 18:46:40 -08:00