Commit graph

908 commits

Author SHA1 Message Date
Leonardo de Moura
37fdac4d65 test(tests/lean/run/blast_cc_heq9): add new test 2016-01-13 22:10:15 -08:00
Daniel Selsam
7a005fb76b test(tests/lean/run/blast_vector_test): more tests 2016-01-13 22:03:47 -08:00
Leonardo de Moura
3f7122ce07 feat(library/blast/congruence_closure): more general congruence lemmas 2016-01-13 21:44:32 -08:00
Leonardo de Moura
912c5254de fix(tests/lean/run/cases_bug): adjust test to changes in the std lib 2016-01-13 16:37:33 -08:00
Leonardo de Moura
05c3ede683 feat(tests/lean/run/blast_vector_test): test ematch + cc at vectors 2016-01-13 16:35:21 -08:00
Leonardo de Moura
3643e79cb3 feat(library/blast/congruence_closure): improve the suppoer for subsingletons in the ematching procedure 2016-01-13 11:17:42 -08:00
Leonardo de Moura
8f7b533ca1 refactor(library): move 'cast' to init folder 2016-01-13 11:17:42 -08:00
Leonardo de Moura
081ad1212b test(tests/lean/run/blast_ematch_list): blast last_concat 2016-01-12 22:56:28 -08:00
Leonardo de Moura
12876ccc20 fix(library/blast/forward/ematch): ematch + subsingleton 2016-01-12 22:31:09 -08:00
Daniel Selsam
292f28e769 test(tests/lean/run/blast_tuple): more tests for blast + tuple 2016-01-11 17:37:44 -08:00
Leonardo de Moura
d736376a6f test(tests/lean/run/blast_cc_heq8): new congruence closure procedure can also handle subtypes without using a flattening preprocessing step 2016-01-11 16:50:03 -08:00
Leonardo de Moura
b40f0ffe8b fix(library/blast/forward/ematch): keep using ematching on implicit arguments
Ematching module should only ignore type classes (i.e., instance
implicit) and subsingletons (which includes propositions).
2016-01-11 15:40:51 -08:00
Leonardo de Moura
1c5418ac2e test(tests/lean/run): add example/test for blast + tuples 2016-01-11 12:17:14 -08:00
Leonardo de Moura
5edcccaeb0 feat(library/blast/forward/ematch): add support for the new hcongr lemmas in the ematching module 2016-01-11 11:56:36 -08:00
Leonardo de Moura
ddff37dd0f fix(library/blast/congruence_closure): bug when using blast.cc.heq and handling relation congruences 2016-01-10 19:28:55 -08:00
Leonardo de Moura
799317c43e fix(library/blast/congruence_closure): add missing eq => heq lifting 2016-01-10 18:03:35 -08:00
Leonardo de Moura
3a846a28a3 feat(library/blast/congruence_closure): support for subsingleton propagation 2016-01-10 17:24:12 -08:00
Leonardo de Moura
e9d24ec152 feat(library/blast/congruence_closure): create simpler congruence proofs when using blast.cc.heq 2016-01-10 15:11:31 -08:00
Leonardo de Moura
ea7da31bba feat(library/blast/congruence_closure): support for congruence lemmas that use heterogeneous equality 2016-01-10 13:45:40 -08:00
Leonardo de Moura
934f3b67ff feat(library/blast/congruence_closure): basic support for heterogeneous equality
We still have to process the general congruence lemmas.
2016-01-10 12:53:05 -08:00
Leonardo de Moura
b7be3ec6de test(tests/lean/run): add tests for heterogeneous congruence lemma generator 2016-01-09 16:18:39 -08:00
Leonardo de Moura
d3242a2068 refactor(library): rename heq.of_eq heq.to_eq auxiliary lemmas 2016-01-09 12:32:18 -08:00
Leonardo de Moura
27eea05da9 fix(library/blast/discr_tree): bug in the discrimination tree module 2016-01-06 17:30:44 -08:00
Leonardo de Moura
4e8ae94aba chore(tests/lean/run/blast_cc_noconfusion): make sure simp/subst are not used in the test 2016-01-06 17:30:31 -08:00
Leonardo de Moura
76cebb45f9 feat(library/blast/congruence_closure): add support for 'no_confusion' in the congruence closure module 2016-01-06 17:30:25 -08:00
Leonardo de Moura
cb02d1deae feat(library/blast/congruence_closure): add support for specialized congr lemmas in the congruence closure module 2016-01-06 17:30:20 -08:00
Leonardo de Moura
c9930d0a29 feat(library/blast/simplifier/simplifier): subsingleton normalization for application arguments and lambdas 2016-01-06 17:30:08 -08:00
Leonardo de Moura
f3b8aef24c feat(library/fun_info_manager,library/congr_lemma_manager,blast/simplifier): specialized congruence lemmas
We still need a lot of polishing.
2016-01-06 17:29:35 -08:00
Leonardo de Moura
ba392f504f feat(kernel/expr,library/blast/blast,frontends/lean/decl_cmds): add workaround for allowing users to use blast inside of recursive equations 2016-01-03 21:53:31 -08:00
Jeremy Avigad
a22346e411 fix(lean/tests/lean/run/new_obtain{3,4}): adapt tests to new notation for image 2016-01-03 18:52:25 -08:00
Leonardo de Moura
19ebedd480 feat(library/type_context): improve type_context get_level_core, add virtual method for checking types whenever a metavariable is assigned
We add an example where app_builder fails without these new features.
That is, app_builder fails to solve the unification problem.
2016-01-03 17:58:27 -08:00
Leonardo de Moura
66a722ff5a feat(library/unifier): remove "eager delta hack", use is_def_eq when delta-constraint does not have metavariables anymore
The "eager-delta hack" was added to minimize problems in the interaction
between coercions and delta-constraints.
2016-01-03 12:39:32 -08:00
Leonardo de Moura
d02ead320a feat(library/unifier): remove unifier.computation option 2016-01-03 11:00:16 -08:00
Leonardo de Moura
9935cbc3d7 feat(library/blast/blast): communicate assigned metavariables back to tactic framework
We need this feature to be able to solve (input) goals containing
metavariables using blast.
See new test for example.
2016-01-02 20:05:44 -08:00
Leonardo de Moura
56d9b6b0d3 fix(library/blast/blast): convert uref and mref back into tactic metavariables 2016-01-02 19:23:04 -08:00
Leonardo de Moura
17a2f1fe47 chore(tests/lean/run/blast_grind1): use 'core_grind'
Reason: we will change the semantics of 'grind'
2016-01-01 16:46:15 -08:00
Leonardo de Moura
54f2c0f254 feat(library/blast/forward): inst_simp should use the left-hand-side as a pattern (if none is provided by the user)
The motivation is to reduce the number of instances generated by ematching.

For example, given

   inv_inv:  forall a, (a⁻¹)⁻¹ = a

the new heuristic uses ((a⁻¹)⁻¹) as the pattern.
This matches the intuition that inv_inv should be used a simplification
rule.

The default pattern inference procedure would use (a⁻¹). This is bad
because it generates an infinite chain of instances whenever there is a
term (a⁻¹) in the proof state.
By using (a⁻¹), we get
   (a⁻¹)⁻¹ = a
Now that we have (a⁻¹)⁻¹, we can match again and generate
   ((a⁻¹)⁻¹)⁻¹ = a⁻¹
and so on
2015-12-31 20:20:39 -08:00
Leonardo de Moura
b117a10f82 refactor(library/blast/simplifier): use priority_queue to store simp/congr lemmas, use name convention used at forward/backward lemmas, normalize lemmas when blast starts, cache get_simp_lemmas 2015-12-28 17:52:57 -08:00
Leonardo de Moura
c8b9c98eb6 refactor(library/blast/backward): use priority_queue, make sure head is normalized when building index 2015-12-28 12:26:06 -08:00
Leonardo de Moura
f177082c3b refactor(*): normalize metaclass names
@avigad and @fpvandoorn, I changed the metaclasses names. They
were not uniform:
- The plural was used in some cases (e.g., [coercions]).
- In other cases a cryptic name was used (e.g., [brs]).

Now, I tried to use the attribute name as the metaclass name whenever
possible. For example, we write

   definition foo [coercion] ...
   definition bla [forward] ...

and

  open [coercion] nat
  open [forward] nat

It is easier to remember and is uniform.
2015-12-28 10:39:15 -08:00
Leonardo de Moura
96bec8b4f9 fix(frontends/lean/builtin_cmds): allow token and metaclass to have the same name 2015-12-28 09:57:45 -08:00
Leonardo de Moura
fe66e2aa4a fix(tests/lean): subtype notation is not in the top-level anymore 2015-12-28 09:04:11 -08:00
Leonardo de Moura
2502039a5c fix(frontends/lean/parser): tactic notation that may take numerical parameters 2015-12-17 11:27:31 -08:00
Leonardo de Moura
73b28c91a6 fix(library/type_context): local constant management bug 2015-12-15 18:49:26 -08:00
Leonardo de Moura
1387cdfa0f feat(library/type_context): add eta-expansion to type_context 2015-12-15 17:24:53 -08:00
Leonardo de Moura
10273bf176 feat(library/blast/forward/pattern): improve pattern inference heuristic 2015-12-15 12:55:43 -08:00
Sebastian Ullrich
2185ee7e95 feat(library/tactic): make let tactic transparent, introduce new opaque note tactic
The new let tactic is semantically equivalent to let terms, while `note`
preserves its old opaque behavior.
2015-12-14 10:14:02 -08:00
Leonardo de Moura
193a9d8cde refactor(library/norm_num): avoid manual constant name initialization
@rlewis1988 We group all Lean constants used in the C++ code at
src/library/constants.txt

Jeremy and Floris check this file before renaming constants in the
library. So, they can quickly decide whether C++ code will be affected
or not.

We also have a python script for initializing the C++ name objects.
To use the script:
   - go to src/library
   - execute
       python ../../script/gen_constants_cpp.py constants.txt

It will create the boring initialization and finalization code, and
declare a procedure get_<id>_name() for each constant in the file constants.txt.

I also move the norm_num1.lean to the set of unit tests that are
executed whenever we push a commit to the main branch.

I found an assertion violation at line 606. Could you take a look?

Best,
Leo
2015-12-13 21:38:59 -08:00
Leonardo de Moura
e3a35ba4fd feat(frontends/lean): add 'with_attributes' tactical
closes #494
2015-12-13 18:27:44 -08:00
Leonardo de Moura
727a4f5a3a feat(library/tactic/intros_tactic): use '_' to say that some names are irrelevant in the intro tactic
See #695
2015-12-13 16:47:31 -08:00