Commit graph

1136 commits

Author SHA1 Message Date
Leonardo de Moura
b69cf7ef43 fix(library/tactic/rewrite_tactic): instantiate assign metavars before rewriting
fixes #1587
2017-05-18 10:57:03 -07:00
Leonardo de Moura
7d937dcfcb fix(library/tactic/simplify): instantiate assigned metavariables in the simplifier
This fixes a problem similar to the one described at #1587
2017-05-18 10:52:11 -07:00
Leonardo de Moura
0091cef9f2 feat(library/tactic): start algebraic normalizer 2017-05-15 21:46:19 -07:00
Leonardo de Moura
eddc5b0869 chore(kernel/environment): rename method 2017-05-15 14:18:16 -07:00
Daniel Selsam
d727abeefc chore(library/inductive_compiler/nested.cpp): prove all theorems in C++ 2017-05-04 16:34:32 -07:00
Leonardo de Moura
5cef84709f refactor(library): avoid auxiliary definitions such as add/mul/le/etc
See Section "Other goodies" at
https://github.com/leanprover/lean/wiki/Refactoring-structures

This commit also improves the support for projections in the
unifier/matcher.

Now, we consider the extra case-split for projections.
Given a projection `proj`, and the constraint `proj s =?= proj t`, we need to try first `s =?= t` and if it fails, then try to reduce.
This is needed in the standard library because we now have constraints such as:
```
@has_le.le ?A ?s ?a ?b  =?=  @has_le.le nat nat.has_add x y
```
If we reduce the right hand side, we get the unsolvable constraint
```
@has_le.le ?A ?s ?a ?b  =?=  nat.le x y
```
Before this change, the constraint was `@le ?A ?s ?a ?b  =?=  @le nat nat.has_add x y`, and we already perform a case-split in this case.
Moreover, projections were eagerly reduced whenever possible.
The extra case-split generates a performance problem in several tests. For example `fib 8 = 34` was timing out.
I worked around this issue by performing the case-split only when the constraint contains meta-variables.
There are also minor issues. Example. `<` is notation for `has_lt.lt`, but `>` is for `gt`.
2017-05-01 08:52:19 -07:00
Scott Morrison
41c648905e fix(library/tactic/smt/ematch.cpp) check if new_states is empty before pushing 2017-04-28 08:50:45 -07:00
Gabriel Ebner
3352c31029 fix(library/tactic/smt/ematch): fix compiler warning 2017-04-27 16:04:18 -07:00
Leonardo de Moura
cabb4350d9 feat(library): instances are not reducible by default anymore
Motivation: see "Other goodies" section at
https://github.com/leanprover/lean/wiki/Refactoring-structures

We had to add a new transparency mode: Instances at type_context.
In this mode, instances and reducible definitions are considered
transparent.

The new mode is used in the defeq_canonizer, code generator,
and sizeof lemma generation at inductive_compiler.

We also use the new mode in the unfold tactics.
2017-04-26 14:10:11 -07:00
Leonardo de Moura
e59fd2927a feat(library): process explicit arguments before implicit
Moreover, we process the implicit arguments using at least the Semireducible
transparency mode. The idea is to make sure to reduce counterintuitive
behavior in rw and simp where the user believes a lemma is applicable
but it does not work because the implicit part fails to unify.

The modification above fixes the simplifier issues found by @kha when proving the
monadic laws.

This commit also improves constraints of the form

          n =?= m

where n and m are big distinct numerals. The type_context fails quickly
for this kind of constraint even using transparency mode Semireducible.
We need this feature otherwise we timeout at

      @eq char a b =?= @eq unsigned ?x ?y

Recall that

       char     := fin char_sz
       unsigned := fin unsigned_sz
2017-04-25 17:16:06 -07:00
Leonardo de Moura
d0dede53f5 chore(library/tactic): make sure "pattern" is the first argument of is_def_eq 2017-04-25 09:59:04 -07:00
Sebastian Ullrich
e9a6c544af refactor(frontends/lean/{elaborator,structure_cmd}): compile structure inheritance to nested fields 2017-04-24 19:35:15 +02: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
a007c93280 feat(library/tactic/dsimplify): replace assigned metavariables 2017-04-02 12:49:29 -07:00
Leonardo de Moura
b42ae2cf54 fix(library/type_context): fixes #1500 2017-03-31 19:19:44 -07:00
Sebastian Ullrich
b2dfae8a67 chore(tests/lean/caching_user_attribute): fix flaky test 2017-03-30 06:04:00 +02:00
Jared Roesch
dc4086d0ed feat(library/vm/process): add basic process support 2017-03-28 18:08:06 -07:00
Leonardo de Moura
36c7d46c34 feat(library/tactic): add options trace.rewrite and trace.kabstract for debugging rewrite tactic
See #1480

@semorrison We can now use the following commands to trace the rewrite
tactic
```lean
set_option trace.rewrite true
set_option trace.kabstract true
```

When these options are used, Lean will pretty print the subterm selected
by the rewrite tactic. That is, the subterm that will be rewritten.
This option may help you diagnose what is going on.
2017-03-27 18:18:20 -07:00
Leonardo de Moura
09867fcfe0 fix(library/tactic/simplify): assertion violation 2017-03-27 18:04:57 -07:00
Leonardo de Moura
1cef8af1be feat(library/tactic/simplify): add eta := tt to simp 2017-03-27 17:38:40 -07:00
Leonardo de Moura
eea46610ea fix(library/tactic/simplify): missing projection reduction, add proj := tt to simp 2017-03-27 17:38:40 -07:00
Leonardo de Moura
b09968a37b feat(library/tactic/simplify): add beta := tt to simp 2017-03-27 17:38:31 -07:00
Leonardo de Moura
34f6a92e24 fix(library/tactic/simplify): simp default behavior should eliminate annotations 2017-03-27 15:10:47 -07:00
Sebastian Ullrich
a50398f837 fix(library/tactic/eval,kernel/kernel_exception): hide internal definition name on eval_expr type error 2017-03-27 13:42:08 -07:00
Sebastian Ullrich
83511bdae1 feat(library/tactic/elaborator_exception): show context of failed placeholders 2017-03-27 13:42:08 -07:00
Leonardo de Moura
8cf43e1b30 feat(library/tactic/tactic_state): add tactic.run_io 2017-03-23 18:17:53 -07:00
Gabriel Ebner
098d6f8f2a refactor(init/meta/tactic): remove report_errors argument from to_expr 2017-03-23 09:03:42 +01:00
Gabriel Ebner
677bf43da3 fix(library): fix various leaks 2017-03-23 09:00:59 +01:00
Gabriel Ebner
667d06108a chore(*): fix clang warnings 2017-03-23 09:00:58 +01:00
Leonardo de Moura
e6c5ba29d6 fix(library/message_builder): remove unnecessary field
see #1473
2017-03-22 08:23:29 -07:00
Leonardo de Moura
c541f90d5b fix(library/tactic/vm_monitor): compilation warning 2017-03-22 07:40:16 -07:00
Sebastian Ullrich
793f0baee8 feat(library/tactic/vm_monitor): use attribute for registering VM monitors 2017-03-22 07:34:27 -07:00
Leonardo de Moura
aa68d72fa5 fix(library/equations_compiler/elim_match): skip nonvar + inaccessible 2017-03-21 08:08:36 -07:00
Leonardo de Moura
3322adde1b fix(library/tactic/subst_tactic): fixes #1467 2017-03-17 19:54:35 -07:00
Leonardo de Moura
b803377d5e fix(library/tactic/smt/congruence_closure): relation used to implement congruence tables was not transitive 2017-03-17 16:04:41 -07:00
Leonardo de Moura
8ff176717c feat(library/tactic/smt/congruence_closure): add check_congr_keys assertions 2017-03-17 13:48:12 -07:00
Leonardo de Moura
37c69427b3 feat(library/tactic/smt/congruence_closure): make sure congruence closure module does not assign metavariables when using is_def_eq 2017-03-17 13:48:09 -07:00
Daniel Selsam
cddf5f081d fix(library/tactic/kabstract.cpp): only use replace_fn cache if replacing all occs 2017-03-15 19:40:52 -07:00
Sebastian Ullrich
e3b9190fe2 refactor(library/tactic/user_attribute): use attribute for registering attributes. naturally. 2017-03-15 14:06:34 -07:00
Leonardo de Moura
740d42ea45 fix(library/tactic): we should preserve names when using the revert/do_something/intro idiom 2017-03-11 12:20:39 -08:00
Daniel Selsam
538ac8d187 feat(inductive_compiler): generate injectivity lemmas 2017-03-10 22:27:18 -08:00
Leonardo de Moura
e875141322 feat(library/tactic/intro_tactic): make sure unused names are used if the user did not provide them 2017-03-09 16:03:18 -08:00
Leonardo de Moura
3e757d890a feat(library/tactic/intro_tactic): allow '_' in interactive mode as the anonymous name for intros, cases, induction 2017-03-09 15:42:36 -08:00
Leonardo de Moura
8979663164 feat(library/tactic/simplify): relax reducibility constraints when matching implicit arguments
Motivation: if the explicit part matches (what the user sees), then the implicit part must morally match too.
If it doesn't because of reducibility setting, the behavior is usually counterintuitive.
2017-03-08 20:08:54 -08:00
Leonardo de Moura
7a99d87cbd fix(library/tactic/ac_tactics): allow nested ac_app macros in perm_ac macro
fixes #1442
2017-03-08 13:46:49 -08:00
Leonardo de Moura
8530e39375 fix(library/tactic/smt/congruence_closure): fixes #1430
@dselsam I did not include your repro in the test suite because it will not work after we
enforce the `is_inner_ginductive_ir` check.
2017-03-07 17:13:29 -08:00
Leonardo de Moura
1d71103f29 feat(library/tactic/cases_tactic): add support for generalized inductive datatypes at 'cases' tactic 2017-03-06 11:49:04 -08:00
Leonardo de Moura
d50da0feb7 feat(library/tactic/induction_tactic): add support for ginductive in the induction tactic 2017-03-04 14:55:35 -08:00
Leonardo de Moura
c456bceafa feat(library/tactic/cases_tactic): remove m_dep_elim since we are now always using dependent eliminators 2017-03-04 14:35:42 -08:00
Leonardo de Moura
b74740648e fix(library/tactic): fixes #1414 2017-03-03 20:50:00 -08:00