Leonardo de Moura
0268f92eb4
fix(frontends/lean/elaborator): fixes #965
2016-02-04 13:41:21 -08:00
Leonardo de Moura
42fbc63bb6
fix(library/tc_multigraph): avoid name collisions
...
@avigad, @fpvandoorn, @rlewis1988, @dselsam
I changed how transitive instances are named.
The motivation is to avoid a naming collision problem found by Daniel.
Before this commit, we were getting an error on the following file
tests/lean/run/collision_bug.lean.
Now, transitive instances contain the prefix "_trans_".
It makes it clear this is an internal definition and it should not be used
by users.
This change also demonstrates (again) how the `rewrite` tactic is
fragile. The problem is that the matching procedure used by it has
very little support for solving matching constraints that involving type
class instances. Eventually, we will need to reimplement `rewrite`
using the new unification procedure used in blast.
In the meantime, the workaround is to use `krewrite` (as usual).
2016-02-04 13:15:42 -08:00
Leonardo de Moura
587c263c28
feat(library/blast/forward/ematch): improve support for casts in the e-matcher
2016-01-29 11:38:43 -08:00
Leonardo de Moura
684995640a
fix(library/blast/unit/unit_propagate): memory access violation
2016-01-27 15:22:34 -08:00
Leonardo de Moura
fb95b71a5e
fix(library/blast/forward/pattern): bug in the pattern inference code
2016-01-27 13:39:19 -08:00
Leonardo de Moura
810ee9759c
fix(library/blast/backward/backward_action): add missing normalize at backward_action, and remove incorrect fix at discrimination tree
2016-01-26 20:35:57 -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
Leonardo de Moura
6f6672eaaa
fix(library/blast/discr_tree): ignore annotations in discrimination trees
2016-01-26 18:46:40 -08:00
Leonardo de Moura
d12067193b
fix(library/blast/forward/pattern): residue computation in the ematching module
2016-01-24 16:15:33 -08:00
Leonardo de Moura
38ab1cae9e
feat(library/blast/unit/unit_propagate): basic support for "dependent lemmas" at unit propagate
...
New test contains examples of "dependent lemmas"
2016-01-24 16:02:08 -08:00
Leonardo de Moura
297ef10611
fix(library/blast/congruence_closure): subsingleton propagation in the congruence closure module
...
We must normalize inferred type.
2016-01-24 14:55:28 -08:00
Leonardo de Moura
3d0ea4c9d1
feat(library/type_context): improve find_unsynth_metavar
2016-01-24 13:39:25 -08:00
Leonardo de Moura
19bfbe2df8
fix(library/blast/congruence_closure): uselist initialization (aka add_occurrence)
...
Make sure it matches the description in the paper.
2016-01-16 19:53:36 -08:00
Leonardo de Moura
1d04160a9b
fix(library/blast/congruence_closure): bug at eq_congr_key_cmp::operator()(eq_congr_key const & k1, eq_congr_key const & k2)
...
It was not implementing the condition described in our paper.
2016-01-16 19:33:24 -08:00
Daniel Selsam
a883101a3b
feat(library/blast/forward/ematch): basic support for heq classes
2016-01-15 21:38:16 -08:00
Leonardo de Moura
60861d7dea
chore(tests/lean/run/blast_cc_heq9): make sure that only congruence closure module is used
2016-01-13 22:13:04 -08:00
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
3ca785b0e7
refactor(library/fun_info_manager): remove dead code
2016-01-06 17:29:02 -08:00
Rob Lewis
031831f101
feat(library/tactic): add replace tactic
2016-01-04 14:43:31 -05: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
5feef27c2b
feat(frontends/lean/notation_cmd): relax restriction on user defined tokens
...
Before this commit, Lean would forbid new tokens containing '(' or ')'.
We relax this restriction. Now, we just forbid new tokens starting with '(' or ending with ')'.
2016-01-02 13:58:46 -08:00
Leonardo de Moura
befe41e8f5
fix(tests/lean): adjust tests
2016-01-02 12:51:20 -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
ac9d6c2021
refactor(library/data/bool): cleanup bool proofs and fix bxor definition
2016-01-01 13:52:42 -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
657b508cdf
fix(tests/lean/simplifier_light): adjust test
2015-12-17 22:42:31 -08:00
Leonardo de Moura
d81b2d0f29
feat(library/attribute_manager, frontends/lean/builtin_cmds): use attribute manager information when pretty print definitions
2015-12-17 21:16:31 -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
Leonardo de Moura
d4e49a8434
feat(library/tactic/intros_tactic): intro without argument should introduce a single variable
...
see #695
2015-12-13 16:28:39 -08:00
Leonardo de Moura
999f23cbc0
feat(kernel/expr_eq_fn): take names into account when CompareBinderInfo is true
...
This is the correct fix for the id declaration pretty printing
discrepancy reported by Daniel.
TODO: decide whether we need another eq-mode where names are ignored.
For example, in blast, it makes sense to increase sharing by ignoring
binder names.
2015-12-13 14:47:11 -08:00
Leonardo de Moura
ce622e9179
feat(frontends/lean): add auto-include for structures and inductive decls
2015-12-13 13:39:34 -08:00
Leonardo de Moura
20de22a8ad
feat(frontends/lean): automatically include anonymous instance implicit variables/parameters (whenever their parameters have been included)
2015-12-13 13:20:54 -08:00
Leonardo de Moura
b6bac2e542
chore(tests/lean/run): adjust tests
2015-12-13 12:23:44 -08:00
Leonardo de Moura
ef546c5c5b
refactor(library): use anonymous instance implicit arguments
2015-12-13 11:46:48 -08:00
Leonardo de Moura
b7de10a6d2
feat(library/trace): allow user to disable subclasses of a trace class
...
Example:
set_option trace.blast true -- enables trace.blast class and all subclasses
set_option trace.blast.action false -- disables the given subclass
Result: all blast classes are traced but blast.action
2015-12-11 11:03:16 -08:00
Leonardo de Moura
7f1800962a
feat(frontends/lean/pp): allow user to override pp.all setting
...
see #922
2015-12-11 10:40:48 -08:00
Leonardo de Moura
a35fd06a33
test(tests/lean/run/blast_simp4): add simp test
2015-12-11 10:23:58 -08:00
Leonardo de Moura
ac0bd539b0
feat(frontends/lean/notation_cmd): allow 'abstract ... end' to be used in notation declarations
...
helps #825
2015-12-11 09:55:27 -08:00
Daniel Selsam
2b1e7e7759
feat(frontends/lean/pp): all disables numerals
2015-12-10 23:31:40 -08:00
Leonardo de Moura
3057dde885
fix(library/class,library/coercion): fixes #852
2015-12-10 22:52:02 -08:00
Leonardo de Moura
cf61adc5d5
feat(frontends/lean): identifiers starting with '_' are now reserved
2015-12-10 22:32:03 -08:00
Leonardo de Moura
13f9d8dd6c
fix(tests/lean): move hott tests
2015-12-10 10:55:27 -08:00
Leonardo de Moura
7b29ee1666
fix(library/tactic/induction_tactic): fixes #892
2015-12-10 10:52:57 -08:00
Leonardo de Moura
8094ca1c70
fix(library/blast/backward): crash when pretty printing backward rule set
...
We make sure it doesn't depend on the blast state.
2015-12-10 10:38:53 -08:00
Leonardo de Moura
1abaa9eb71
fix(frontends/lean/parser): fixes #858
2015-12-10 10:31:14 -08:00
Leonardo de Moura
8b3cbb8fdd
fix(library/tactic/induction_tactic): apply substitution to hypothesis type (it may contain metavars)
...
closes #876
2015-12-10 10:11:55 -08:00
Leonardo de Moura
a507ac8594
test(tests/lean/interactive/findp): remove test that breaks whenever we revise init/logic.lean
...
closes #888
2015-12-10 10:11:55 -08:00
Leonardo de Moura
c9ff175cf4
fix(library/tactic/induction_tactic): fixes #893
2015-12-10 10:11:55 -08:00
Floris van Doorn
f495fa04c8
fix(tests): fix tests after port
2015-12-09 12:36:11 -08:00
Leonardo de Moura
50323e5b14
fix(tests/lean/run/simplifier1): option name
2015-12-09 12:30:20 -08:00
Leonardo de Moura
bed03272f5
fix(tests/lean/run/blast_cc1): option name
2015-12-09 12:23:00 -08:00
Leonardo de Moura
3f9549485f
feat(frontends/lean/parser): restore config options in the end of sections/namespaces
2015-12-09 11:24:37 -08:00
Leonardo de Moura
273f6fc04c
fix(tests/lean/run): new option names
2015-12-08 20:06:43 -08:00
Leonardo de Moura
b145a7332a
feat(library/blast/congruence_closure): use new tracing infrastructure
2015-12-08 15:18:21 -08:00
Leonardo de Moura
7da64a768f
refactor(library/type_context): with the new tracing infrastructure, type_context doesn't need an io_state
2015-12-08 14:58:08 -08:00