Commit graph

4860 commits

Author SHA1 Message Date
Leonardo de Moura
496189feed feat(kernel/default_converter): cache failures for (f t =?= f s) heuristic
See item 4 at
https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/lean-discuss/oJXwW5wT2Ds/d1Dgr8B-pE0J

See also
https://github.com/leanprover/lean/pull/659
2015-06-08 10:41:30 -07:00
Leonardo de Moura
0e099b5fd8 feat(library/tactic/rewrite_tactic): apply beta&eta reduction before rewriting steps, add option 'rewrite.beta_eta' (default true) to control new feature. 2015-06-06 20:43:52 -07:00
Leonardo de Moura
1cbace9df6 feat(library/tactic/congruence_tactic): add congruence lemma generator
The generated congruence theorems ignore arguments that are subsingleton types.
2015-06-05 22:00:10 -07:00
Leonardo de Moura
d0d3f9bb41 refactor(kernel,library,frontends/lean): add helper functions, and cleanup collect_locals 2015-06-05 17:29:36 -07:00
Leonardo de Moura
c76d92284f feat(library/pp_options): add 'pp.all' option 2015-06-05 08:41:46 -07:00
Leonardo de Moura
4d52d4c790 fix(library/init/quot): prove quot.exact 2015-06-05 08:04:55 -07:00
Floris van Doorn
ff41886a32 feat(nat/bquant): give instances for quantification bounded with le
also add theorems c_iff_c to logic/connectives, where c is a connective
2015-06-04 20:14:13 -04:00
Floris van Doorn
ff01774fd7 renaming(hit): rename type_quotient to quotient, and quotient to set_quotient
This renaming is because type_quotient is a nonstandard name.  I've had a discussion with Egbert
Rijke, Steve Awodey and Dan Licata, and the consensus for a better name was 'quotient'.  I had to
make changes in src/kernel/hits/hits.cpp, I renamed g_type_quotient* by g_hit_quotient* (to avoid
name clash the standard library quotient, although I don't know whether that name clash would
matter).
2015-06-04 20:14:13 -04:00
Leonardo de Moura
134740182d fix(frontends/lean): fixes #652 2015-06-03 21:53:51 -07:00
Leonardo de Moura
c8ad1874a2 fix(library/util): compilation error in debug mode 2015-06-03 17:39:03 -07:00
Leonardo de Moura
68688ecdf6 fix(library/tactic/subst_tactic): in the standard mode, use dependent elimination in the subst tactic (when needed)
Before this commit, the subst tactic was producing an type incorrect
result when dependent elimination was needed (see new test for an example).
2015-06-03 17:36:04 -07:00
Leonardo de Moura
dce86b3a84 feat(library/init/logic): add 'eq.drec' (in standard Lean) with a signature very similar to eq.rec in the HoTT library 2015-06-03 17:29:26 -07:00
Leonardo de Moura
cfb102cbd1 fix(emacs/lean-mode): disable electric-indent-mode
closes #636
2015-06-01 22:42:57 -07:00
Leonardo de Moura
b2f8d2000c fix(library/simplifier/rewrite_rule_set): avoid compiler specific behavior 2015-06-01 22:23:34 -07:00
Leonardo de Moura
d6997300f1 fix(library/private): use environment fingerprint to compute private decls "unique" identifier
fixes #648
2015-06-01 22:21:31 -07:00
Leonardo de Moura
4ace996057 fix(library/simplifier): bug in is_permutation_ceqv 2015-06-01 18:07:31 -07:00
Leonardo de Moura
0fbc944cdd feat(frontends/lean): add '[rewrite]' attribute 2015-06-01 17:58:24 -07:00
Leonardo de Moura
d547698a56 refactor(library,library/tactic): move class_instance_synth to library
This module will be needed by the simplifier
2015-06-01 16:30:40 -07:00
Leonardo de Moura
8a89588079 refactor(library,library/tactic): move auxiliary procedures from tactic to library 2015-06-01 16:19:55 -07:00
Leonardo de Moura
b6fde68012 feat(frontends/lean/decl_cmds): avoid funny names when displaying error messages for "examples" 2015-06-01 15:35:28 -07:00
Leonardo de Moura
b62e6bb133 feat(library/simplifier): add rewrite rule sets 2015-06-01 15:15:57 -07:00
Leonardo de Moura
780d313686 fix(library/annotation): add missing == and hash methods for annotation class
We have multiple annotations. The default == and hash methods were
ignoring that.
2015-06-01 11:27:46 -07:00
Leonardo de Moura
55608c9b9f fix(frontends/lean/pp): bug in pp arrow 2015-05-31 17:21:37 -07:00
Leonardo de Moura
ca110012d8 feat(library/tactic): automate "generalize-intro-induction/cases" idiom
closes #645
2015-05-30 21:57:28 -07:00
Leonardo de Moura
e5a82ef516 feat(frontends/lean): add option for disabling "coercion lifting" 2015-05-30 17:07:42 -07:00
Leonardo de Moura
6f6848968d feat(frontends/lean/coercion_elaborator): "coercion lifting" for backtracking case
closes #252
2015-05-30 16:44:26 -07:00
Leonardo de Moura
ea9c810fca feat(frontends/lean/coercion_elaborator): implement "coercion lifting"
closes #644
2015-05-30 14:45:14 -07:00
Leonardo de Moura
6d2f37857d feat(frontends/lean/builtin_cmds): add 'print [reducible]', 'print [irreducible]' and 'print [quasireducible]' commands 2015-05-29 16:47:29 -07:00
Leonardo de Moura
7a0e198147 feat(kernel,frontends/lean/builtin_cmds): allow kernel extensions to report their builtin constants 2015-05-29 16:28:16 -07:00
Leonardo de Moura
c07d14e94a fix(library/tactic/rewrite_tactic): incorrect assertion 2015-05-29 15:59:03 -07:00
Leonardo de Moura
0ceedbe69e fix(library/normalize): fixes #640 2015-05-29 15:58:59 -07:00
Leonardo de Moura
f48cdccd20 fix(frontends/lean/pp): abbreviation with parameters
closes #639
2015-05-29 15:13:31 -07:00
Leonardo de Moura
a071012346 fix(frontends/lean/pp,library/head_map): handle 'as_atomic' annotation
This commit fixes local notation that contains parameters

see issue #639
2015-05-29 14:51:28 -07:00
Leonardo de Moura
e6099583ad feat(frontends/lean/builtin_cmds): expand abbreviations in the 'check' command
see issue #639
2015-05-29 14:51:07 -07:00
Leonardo de Moura
3b7b268e40 fix(frontends/lean/pp): fixes #634
trying again...
2015-05-29 14:07:38 -07:00
Leonardo de Moura
7f12401ea7 fix(frontends/lean/elaborator): save type information for 'obtain' declarations 2015-05-29 10:16:12 -07:00
Leonardo de Moura
7342f342a9 fix(frontends/lean/pp): fixes #634 2015-05-28 19:43:49 -07:00
Leonardo de Moura
ae0bdaa836 chore(library,util): fix style 2015-05-27 16:46:58 -07:00
Leonardo de Moura
d95c064a29 feat(library/simplifier/ceqv): add to_ceqv procedure 2015-05-27 16:35:56 -07:00
Leonardo de Moura
85409a59d3 feat(library/tactic/rewrite_tactic): add xrewrite and krewrite tactic variants
closes #511
2015-05-27 16:32:43 -07:00
Leonardo de Moura
7d73f4f091 refactor(library,frontends/lean): simplify the creation of custom normalizers 2015-05-27 15:33:20 -07:00
Leonardo de Moura
dc6411b903 feat(library/inductive_unifier_plugin): restrict rule that was generating non-terminating behavior
see issue #632
2015-05-27 14:41:12 -07:00
Leonardo de Moura
47e5633498 feat(frontends/lean/calc_proof_elaborator): avoid unnecessary unfolding in the calc tactic 2015-05-27 12:07:39 -07:00
Leonardo de Moura
77f742ae8e feat(library/relation_manager): add auxiliary functions 2015-05-27 12:07:06 -07:00
Leonardo de Moura
4867dba175 fix(util/stackinfo): saving max stack size on OSX
see issue #628
2015-05-27 08:52:39 -07:00
Leonardo de Moura
ea43f3ea80 fix(frontends/lean/builtin_cmds): fixes #630 2015-05-26 22:19:42 -07:00
Floris van Doorn
c64d73aae4 feat(types.nat): prove that inequalities on nat are mere propositions
Also some small changes in various other locations
2015-05-26 21:37:01 -07:00
Floris van Doorn
8396c4c824 feat(lean-syntax): color abbreviations yellow 2015-05-26 21:37:01 -07:00
Leonardo de Moura
4d1b711247 feat(frontends/lean/elaborator): better error localization when running out of stack space and/or memory in begin-end tactic mode. 2015-05-26 20:09:15 -07:00
Soonho Kong
c4ec89ae6d fix(emacs/lean-flycheck.el): use -concat in lean-flycheck-command 2015-05-26 17:00:05 -04:00
Soonho Kong
1d25f9fa06 fix(emacs/lean-util.el): use f-join instead of lean-concat-paths 2015-05-26 17:00:05 -04:00
Soonho Kong
ce10d5ca08 fix(emacs/lean-flycheck.el): use flycheck-increment-error-columns instead of advice
Comment from @lunaryorn (flycheck author):

"Please don't use an advice to increment error columns. Flycheck has
:error-filters and there is even a built-in one exactly for your use
case: :error-filter flycheck-increment-error-columsn. Generally never
use advises at all in libraries or modes. They are for user
configuration, or as a very last resort only."
2015-05-26 17:00:05 -04:00
Soonho Kong
ac04b996ab fix(emacs/lean-flycheck.el): use flycheck-define-command-checker
Comment from @lunaryorn (flycheck author):

"eval around flycheck-define-checker breaks byte compilation and
scoping. Please use flycheck-define-command-checker if you need to
create :command dynamically."
2015-05-26 17:00:05 -04:00
Leonardo de Moura
0502f46f9b fix(frontends/lean/scanner): another bug related to issue #626 2015-05-26 13:39:42 -07:00
Leonardo de Moura
ed01242bc1 chore(library/tactic/apply_tactic): remove dead code 2015-05-26 12:18:50 -07:00
Leonardo de Moura
25e41b9b09 fix(frontends/lean/scanner): fixes #626 2015-05-26 11:33:38 -07:00
Leonardo de Moura
7f0951b8e7 feat(library/tactic): improve assumption tactic performance 2015-05-25 20:22:37 -07:00
Leonardo de Moura
d0987eb3ac feat(library/tactic): add 'subtvars' tactic 2015-05-25 16:36:44 -07:00
Leonardo de Moura
ab58e538a4 feat(frontends/lean/elaborator): hide auxiliary 'match' hypothesis during elaboration 2015-05-25 15:24:56 -07:00
Leonardo de Moura
a3f23d5233 feat(library/tactic): add improved 'subst' tactic 2015-05-25 15:03:59 -07:00
Leonardo de Moura
24b35eefe6 chore(frontends/lean/elaborator): add assertion for sanity checking 2015-05-25 14:04:27 -07:00
Leonardo de Moura
f13ca3cd9a feat(library/tactic/contradiction_tactic): handle (h1 : p) and (h2 : not p) hypotheses in the contradiction tactic 2015-05-25 10:29:51 -07:00
Leonardo de Moura
88975927e6 fix(library/tactic/relation_tactics): beta-reduce goal before trying to extract head symbol 2015-05-24 18:56:35 -07:00
Leonardo de Moura
004ea80e65 fix(library/tactic/rewrite_tactic): apply beta reduction when selecting patterns 2015-05-24 18:44:30 -07:00
Leonardo de Moura
b83b0c0017 fix(library/tactic/induction_tactic): fixes #619 2015-05-21 18:22:07 -07:00
Leonardo de Moura
f830bf54c2 refactor(*): clarify name_generator ownership 2015-05-21 14:32:36 -07:00
Leonardo de Moura
a7ead5fc14 fix(library/relation_manager): typo 2015-05-21 14:12:28 -07:00
Leonardo de Moura
e3250f0ffd feat(library/simplifier): add conditional equivalence detection 2015-05-21 13:55:23 -07:00
Leonardo de Moura
907d017cbf feat(library/relation_manager): cache information about binary relations 2015-05-21 13:04:33 -07:00
Leonardo de Moura
c2faa0fe98 refactor(library): rename equivalence_manager to relation_manager 2015-05-21 12:25:02 -07:00
Leonardo de Moura
2b4233ee8e fix(library/tactic/induction_tactic): exception handling 2015-05-21 10:15:49 -07:00
Leonardo de Moura
6a87239a5d chore(kernel/justification): fix compilation warning 2015-05-21 10:13:44 -07:00
Leonardo de Moura
76e7f2e7d8 feat(kernel/justification): make sure the code does not depend on the argument order of evaluation generated by a compiler
see issue #618
2015-05-21 07:42:10 -07:00
Leonardo de Moura
89581cead7 fix(frontends/lean/parser): fixes #616 2015-05-20 23:33:41 -07:00
Leonardo de Moura
d6b72ef4d7 feat(library/tactic/induction_tactic): try available recursors until one works
closes #615
2015-05-20 23:23:05 -07:00
Leonardo de Moura
2164ba6f20 fix(library/tactic/induction_tactic): fixes #614 2015-05-20 23:14:11 -07:00
Leonardo de Moura
51d4644832 fix(library/tactic/induction_tactic): fixes #613 2015-05-20 22:26:50 -07:00
Leonardo de Moura
5508e4b132 feat(library/tactic/induction_tactic): type class inference for minor premises
closes #611
2015-05-20 20:48:33 -07:00
Leonardo de Moura
029f374a69 fix(library/tactic/induction_tactic): fixes #610 2015-05-20 20:28:02 -07:00
Leonardo de Moura
2d22bb8ea2 feat(frontends/lean/builtin_cmds): do not unfold proofs in the eval command
In the future, we should probably add an option for unfolding proofs.
2015-05-20 19:14:57 -07:00
Leonardo de Moura
d5da659be7 feat(frontends/lean/elaborator): include overload information in error messages 2015-05-20 17:21:27 -07:00
Leonardo de Moura
76c3757db7 feat(frontends/lean/elaborator): use custom normalizers for detecting whether there are coercions from/to a given type
closes #547
2015-05-20 16:12:12 -07:00
Leonardo de Moura
608984cd4c chore(frontends/lean/elaborator): cleanup ensure fun 2015-05-20 15:10:45 -07:00
Leonardo de Moura
af3f0088f4 feat(frontends/lean): add 'override' (notation) command 2015-05-20 11:42:16 -07:00
Leonardo de Moura
90ea4995f4 fix(emacs/lean-syntax): remove deprecated keywords 2015-05-19 18:34:14 -07:00
Leonardo de Moura
8ce992b077 feat(frontends/lean/builtin_exprs): allow 'obtain' to be used in tactic mode 2015-05-19 16:26:02 -07:00
Leonardo de Moura
c133d26505 feat(frontends/lean/builtin_exprs): change how 'show' is processed in tactics
Unresolved placeholders were not being reported
2015-05-19 16:23:50 -07:00
Leonardo de Moura
5f628d5080 feat(frontends/lean/builtin_exprs): allow 'calc' expressions to be used in tactic mode 2015-05-19 15:54:49 -07:00
Leonardo de Moura
3e87f09d78 feat(library/tactic/induction_tactic): add support for user-defined recursors that contain parameters that should be synthesized by type class resolution 2015-05-19 15:33:46 -07:00
Leonardo de Moura
78ee055de8 feat(library/tactic): add induction tactic with support for user defined recursors
closes #483
closes #492
2015-05-19 13:27:17 -07:00
Leonardo de Moura
5b1491bdbd feat(library/user_recursors): store number of arguments expected by recursor 2015-05-19 12:24:46 -07:00
Leonardo de Moura
1e4285cf41 fix(library/user_recursors): invalid recursor_info for builtin indexed families 2015-05-19 12:19:46 -07:00
Leonardo de Moura
6da2ba331f fix(library/user_recursors): memory access violation 2015-05-19 11:07:31 -07:00
Leonardo de Moura
4f12409c63 fix(library/unifier): assertion violation
This assertion violation was introduced when we added "projection
macros" to speedup the elaboration process.
2015-05-19 10:07:31 -07:00
Leonardo de Moura
937d6ac7b6 fix(frontends/lean/pp): print notation produces incorrect output
fixes #604
2015-05-19 09:57:13 -07:00
Leonardo de Moura
e1c2340db2 fix(frontends/lean): consistent behavior for protected declarations
see https://github.com/leanprover/lean/issues/604#issuecomment-103265608

closes #609
2015-05-18 22:35:18 -07:00
Leonardo de Moura
d8bd3c21b5 feat(frontends/lean/builtin_cmds): display "protected" for protected declarations in the print command 2015-05-18 17:19:34 -07:00
Leonardo de Moura
c53b96c8d3 feat(frontends/lean): print all options for overloaded identifier
closes #608
2015-05-18 17:14:17 -07:00
Floris van Doorn
2144036cdb feat(hott.circle): prove that the fundamental group of the circle is equal to the integers, as groups
Also many minor fixes at various places
2015-05-18 15:59:55 -07:00
Leonardo de Moura
19361f0196 feat(library/unifier): do not fire type class resolution as last resort when type contains metavariables
see discussion at #604
2015-05-18 15:45:23 -07:00
Leonardo de Moura
1fbc85f6df fix(util/list_fn): add missing file
fixes #606
2015-05-18 15:16:29 -07:00
Leonardo de Moura
c61c049152 feat(library/user_recursors): generalize acceptable use-defined recursors
see issue #492
2015-05-18 14:21:10 -07:00
Leonardo de Moura
62082c72a8 fix(library/user_recursors): remove unnecessary restriction on minor premises of user-defined recursors
see issue #492
2015-05-18 10:09:11 -07:00
Leonardo de Moura
830d0ce1a7 fix(library/user_recursors): make sure homotopy.rec_on is recognized as a valid user-defined recursor
see issue #492
2015-05-18 09:57:50 -07:00
Leonardo de Moura
b1ece388a6 feat(frontends/lean,library/tactic/induction_tactic): improve induction tactic notation, expand induction tactic implementation 2015-05-18 09:25:07 -07:00
Leonardo de Moura
4256984803 fix(library/tactic/inversion_tactic): incorrect check 2015-05-18 09:16:07 -07:00
Leonardo de Moura
d41bff8c43 feat(library): add helper function 2015-05-18 09:16:07 -07:00
Leonardo de Moura
84faef5d5d feat(library/tactic/rewrite_tactic): rewrite tactic with 'iff' lemmas 2015-05-14 18:27:13 -07:00
Leonardo de Moura
1dedd2829c fix(library/match): bug in higher-order matcher 2015-05-14 18:27:10 -07:00
Leonardo de Moura
7f8afcf04b fix(frontends/lean/builtin_exprs): bug in 'using' expressions 2015-05-14 17:17:48 -07:00
Sebastian Ullrich
77c20e99ff feat(library/tactic/inversion_tactic): consistent orientation of generated equalities
Generated equalities in proof irrelevant environments were inverted
compared with the documentation and the proof relevant case, which
resulted in newly generated local vars replacing equivalent old ones
instead of the other way around.
2015-05-14 23:32:54 +02:00
Leonardo de Moura
cbcaf5a48e fix(frontends/lean/scanner): block comments
fixes #600
2015-05-13 22:14:28 -07:00
Leonardo de Moura
163577c23a fix(library/normalize): fixes #599 2015-05-13 18:36:16 -07:00
Leonardo de Moura
51a30892a1 chore(examples/ex): move example to library 2015-05-13 17:07:10 -07:00
Leonardo de Moura
e0b39079eb test(tests/lean/extra): add test for issue #597 2015-05-13 15:34:34 -07:00
Leonardo de Moura
ed388b00f1 fix(frontends/lean/builtin_cmds): issue #597 2015-05-13 15:34:34 -07:00
Leonardo de Moura
11fbee269b fix(frontends/lean/parser): must save state of name_generator in parser snapshot
To provide typing and auto-completion information, we create a
background process by starting lean with the option --server.
In "server" mode, we create snapshots of the parser state.
The idea is to be able to quickly reprocess a file when the user makes a
modification. This commit fixes a bug in the snapshot operation.
It was not saving in the snapshots the unique name generator used by the parser.
By creating a fresh name generator, we may accidentally
assign the same internal name to two different constants.
This bug triggered the crash described in issue #593.

This commit fixes the test in the comment
https://github.com/leanprover/lean/issues/593#issuecomment-101768484

This commit also adds a smaller version of the problem to the test suite
2015-05-13 12:28:23 -07:00
Leonardo de Moura
d0582b2537 fix(library/user_recursors): warning 2015-05-13 10:04:38 -07:00
Leonardo de Moura
dd5b221d32 fix(library/user_recursors): warning message 2015-05-13 09:42:32 -07:00
Leonardo de Moura
065a1f7501 feat(library/tactic): add 'induction' tactic skeleton 2015-05-12 20:21:25 -07:00
Leonardo de Moura
2014a4a672 chore(script/gen_tokens_cpp): mark automatically generated global variables as static 2015-05-12 17:15:31 -07:00
Leonardo de Moura
358afcf42c fix(script/gen_tokens_cpp): automatically generated header 2015-05-12 17:11:27 -07:00
Leonardo de Moura
c60f11ab05 refactor(frontends/lean): add script for automatically generating tokens.h and tokens.cpp 2015-05-12 17:07:08 -07:00
Leonardo de Moura
99084dce1c chore(library/user_recursors): fix style 2015-05-12 15:48:24 -07:00
Leonardo de Moura
f403ea984b feat(frontends/lean): add 'print [recursor]' command for debugging purposes 2015-05-12 15:48:24 -07:00
Leonardo de Moura
750f6d5a43 feat(library,frontends/lean): validate user defined recursors and add attribute to mark them
see issue #492

The user-defined recursors will also be used to implement the blast tactic
2015-05-12 15:48:01 -07:00
Leonardo de Moura
b6fff9fbe1 chore(tests/library/blast/union_find): fix style 2015-05-12 06:24:58 -07:00
Leonardo de Moura
fa70930ef4 feat(library/blast): add union-find datastructure 2015-05-11 16:19:51 -07:00
Leonardo de Moura
9649d540c0 fix(library/tactic/rewrite_tactic.cpp): memory leak 2015-05-11 16:19:17 -07:00
Leonardo de Moura
3d8586088b fix(frontends/lean/elaborator): problem with 'calc' proofs discussed at issue #592 2015-05-11 13:22:39 -07:00
Leonardo de Moura
4905233eb2 fix(CMakeLists.txt): warning on OSX 2015-05-11 12:55:52 -07:00
Jeremy Avigad
95dae11670 feat(src/emacs/lean-input.el): add abbreviations 'mem', 'subeq', etc. 2015-05-11 09:03:56 -07:00
Leonardo de Moura
c5fb3ec6d0 fix(library/definitional/equations): fixes #541
This commit allows recursive applications to have less or more arguments
than the equation left-hand-side.
We add two tests
   - 541a.lean  recursive call with more arguments
   - 542b.lean  recursive call with less arguments
2015-05-10 20:37:44 -07:00
Leonardo de Moura
207e8e86da fix(library/definitional/equations): do not clear eliminated hypotheses when invoking 'cases' tactic from definitional package 2015-05-10 11:08:02 -07:00
Leonardo de Moura
299fd5c919 feat(frontends/lean/pp): pp inaccessible patterns 2015-05-10 11:08:02 -07:00
Leonardo de Moura
e9c8de7bdf feat(frontends/lean): remove unnecessary option 2015-05-09 11:49:55 -07:00
Leonardo de Moura
bd28396be0 feat(kernel): transparent theorems
closes #576
2015-05-09 11:42:29 -07:00
Leonardo de Moura
f63c2d9393 feat(kernel/inductive/inductive): for datatypes that support K, we should try K before normalizing the major premise 2015-05-09 11:23:10 -07:00
Leonardo de Moura
d217655a62 fix(kernel/quotient/quotient): bug in reduction rule for quot.ind 2015-05-09 09:07:03 -07:00
Leonardo de Moura
4e35afedcc feat(frontends/lean): rename 'wait' to 'reveal'
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
2015-05-08 20:54:16 -07:00
Leonardo de Moura
f8e2f68ce0 feat(frontends/lean): add 'wait' command
This commit also fixes several problems with -j option (parallel
compilation). The .olean files were not missing data when -j was used

see issue #576
2015-05-08 20:05:21 -07:00
Leonardo de Moura
e6566e5814 fix(frontends/lean/parser): incorrect error message 2015-05-08 18:13:44 -07:00
Leonardo de Moura
e59456c19f feat(frontends/lean): remove 'opaque' keyword
see issue #576
2015-05-08 16:45:13 -07:00
Leonardo de Moura
cf7e60e5a6 refactor(kernel): remove "opaque" field from kernel declarations
see issue #576
2015-05-08 16:06:16 -07:00
Leonardo de Moura
6c958a25e7 refactor(library/tactic/expr_to_tactic): make sure builtin tactics don't need to be marked opaque
This modification is needed since we will remove opaque definitions from
the kernel.

see issue #576
2015-05-08 16:06:16 -07:00
Leonardo de Moura
57ea660963 refactor(*): start process for eliminating of opaque definitions from the kernel
see issue #576
2015-05-08 16:06:04 -07:00
Leonardo de Moura
061e26157e fix(kernel,library): make sure macros check relevant arguments when kernel is performing full type checking 2015-05-08 12:41:23 -07:00
Leonardo de Moura
72663e8a06 feat(library/tactic/rewrite_tactic): take hypotheses into account when checking rewrite step 2015-05-08 11:34:50 -07:00
Leonardo de Moura
12bad8794b feat(frontends/lean/pp): use 'assert' instead of 'have ... [visible]' 2015-05-08 10:02:15 -07:00
Jeremy Avigad
9beb70b292 feat(src/emacs/lean-input.el): add 'empty' as abbreviation for emptyset 2015-05-08 20:04:55 +10:00
Leonardo de Moura
0b57f7d00a refactor(library/tactic): refine interface between tactic and proof-term modes
Some constraints were being lost with the previous interface.
This is why we had a workaround in fintype.lean.

We can also remove some hacks we have used in the past.
2015-05-07 18:02:51 -07:00
Leonardo de Moura
12b818b7d3 fix(library/util): "empty" is not universe polymorphic anymore 2015-05-07 16:43:58 -07:00
Floris van Doorn
20e62c9623 fix(lean-syntax): add all metaclasses and the state tactic to syntax 2015-05-07 16:39:03 -07:00
Leonardo de Moura
eb3a236119 fix(library/unifier): typo
fixes #588
2015-05-07 16:30:02 -07:00
Leonardo de Moura
88cd6e9a63 chore(library/unifier): remove dead code 2015-05-07 15:49:33 -07:00
Leonardo de Moura
45c8cdc626 fix(kernel/default_converter): discard constraints when optimization fails 2015-05-07 15:02:29 -07:00
Leonardo de Moura
f6a1d1c864 fix(frontends/lean/parser): fixes #584 2015-05-07 14:24:30 -07:00
Leonardo de Moura
aff9257c72 feat(frontends/lean): allow → to be used in calc proofs
see issue #586
2015-05-07 12:28:47 -07:00
Leonardo de Moura
b03266be70 feat(library/normalize,frontends/lean): rename '[unfold-m]' hint to '[constructor]', and allow it to be attached to constants
closes #587
2015-05-07 12:00:34 -07:00
Leonardo de Moura
5fdf140096 refactor(frontends/lean): simplify local_decls data-structure
This is the first step for fixing #584
2015-05-07 11:10:15 -07:00
Leonardo de Moura
ac24f19210 fix(library/tactic/rewrite_tactic): use relaxed type checker when processing rewrite "proof step"
That is, the restricted type checker should only be used in the
matching/unification step.

fixes #583
2015-05-07 09:57:23 -07:00
Leonardo de Moura
e0b7017435 feat(frontends/lean): make sure the proof state bit "report errors" is
set in the beginning of each begin-end element

see discussion at #583
2015-05-07 09:43:39 -07:00
Leonardo de Moura
5798ac43de fix(frontends/lean/structure_cmd): 'structure' command must set unfold-c attribute for auxiliary recursors
fixes #582
2015-05-07 09:09:07 -07:00
Leonardo de Moura
171530d5cc fix(frontends/lean/notation_cmd): fixes #585 2015-05-07 08:36:37 -07:00
Leonardo de Moura
16b7bc3922 fix(kernel/default_converter): broken optimization
we must also check the universe levels when applying the optimization for
constraints of the form:

            f.{l_1 ... l_k} a_1 ... a_n  =?= f.{l_1' ... l_k'} b_1 ... b_n

The optimization tries to avoid unfolding f if we can establish that
a_i is definitionally equal to b_i for each i in [1, n]

closes #581
2015-05-06 18:32:41 -07:00
Leonardo de Moura
e841852be4 feat(library/max_sharing): maximize sharing in universe level expressions 2015-05-06 14:26:12 -07:00
Leonardo de Moura
210cae7d6c fix(library/tactic): we must unfold untrusted macros when type checking intermediate results
Example: before this commit, the file librata/data/list/perm.lean would
not type check if the option -t 0 (trust level zero) was provided.
Reason: the intermediate term contained a macro, and macros are not
allowed at trust level zero.
2015-05-06 14:23:58 -07:00
Leonardo de Moura
b5619c2109 fix(library/export): remove workaround from 'export' procedure
The workaround was needed due to a bug in the max_sharing procedure
2015-05-06 14:00:57 -07:00
Leonardo de Moura
2ca16a099b fix(library/max_sharing): conflict with the kernel approximate caching 2015-05-06 13:57:36 -07:00
Leonardo de Moura
613281d622 fix(frontends/lean/builtin_exprs): bug in new 'obtain' expression 2015-05-06 10:01:24 -07:00
Leonardo de Moura
26c662accd feat(frontends/lean/builtin_exprs): improve new 'obtain' expression 2015-05-06 09:56:57 -07:00
Leonardo de Moura
4cdfc9ee84 feat(frontends/lean/pp): add pretty printing functions for debugging purposes 2015-05-06 07:50:56 -07:00
Leonardo de Moura
84deddcca9 feat(library/tactic/rewrite_tactic): apply 'reflexivity' tactic after 'rewrite' instead of hard coded solution 2015-05-05 20:23:49 -07:00
Leonardo de Moura
c7a20644c0 fix(library/tactic/rewrite_tactic): bug in rewrite tactic (HoTT mode)
closes #580
2015-05-05 19:25:15 -07:00
Leonardo de Moura
a4efefb6ff feat(library/tactic/rewrite_tactic): display type error message when
rewrite tactic fails
2015-05-05 19:23:41 -07:00
Leonardo de Moura
7cd444882c feat(frontends/lean): add 'begin+' and 'by+' that enter tactic mode with the whole context visible 2015-05-05 18:47:25 -07:00
Leonardo de Moura
616f49c2e4 feat(frontends/lean): improved 'obtains' expression 2015-05-05 18:30:16 -07:00
Leonardo de Moura
8aefcc182e feat(frontends/lean/parser): add 'parse_simple_binders' 2015-05-05 18:30:16 -07:00
Leonardo de Moura
c0c0490db3 feat(library/export): simplify format 2015-05-04 18:22:12 -07:00
Leonardo de Moura
701b0ae66f feat(library): export environment in textual format
closes #577
2015-05-04 18:05:00 -07:00
Leonardo de Moura
6571c47353 feat(library/normalize): add '[unfold-m]' hint
See issue #496
2015-05-04 14:23:04 -07:00
Leonardo de Moura
3c8c75470f fix(library/tactic/exact_tactic): do not report unassigned metavariables in the 'refine' tactic 2015-05-03 21:08:09 -07:00
Leonardo de Moura
87aaf373f4 fix(frontends/lean): fix '#' override notation on the left-hand-side of recursive equations (and match-expressions) 2015-05-03 21:08:09 -07:00
Leonardo de Moura
326048df54 feat(library/tactic/inversion_tactic): clear variables that have been eliminated by cases tactic
see discussion at:
https://groups.google.com/forum/#!topic/lean-discuss/oyzgIqdMyNc
2015-05-02 19:33:59 -07:00
Leonardo de Moura
441f1f9fe2 feat(frontends/lean): import error message for "unknown" tactics when parsing 2015-05-02 18:57:58 -07:00
Leonardo de Moura
118189eaac fix(frontends/lean/elaborator): bug in translation function
This commit fixes the bug reported in the lean discussion list:
https://groups.google.com/forum/#!topic/lean-discuss/oyzgIqdMyNc
2015-05-02 18:05:07 -07:00
Leonardo de Moura
e1dc18f6b6 fix(library/tactic/inversion_tactic): check whether eliminator can only eliminate to Prop
fixes #571
2015-05-02 17:48:08 -07:00
Leonardo de Moura
e379034b95 feat(library/tactic): improve 'assumption' tactic
- It uses the unifier in "conservative" mode
- It only affects the current goal

closes #570
2015-05-02 17:33:54 -07:00
Leonardo de Moura
8c107d6936 fix(frontends/lean/builtin_cmds): bug in export command
Cause: we have two different tokes to represent declarations: [decls] and [declarations]

fixes #568
2015-05-02 16:01:25 -07:00
Leonardo de Moura
b39fe17dee feat(library/tactic): add 'transitiviy', 'reflexivity' and 'symmetry' tactics
closes #500
2015-05-02 15:48:25 -07:00
Leonardo de Moura
cd17618f4a refactor(library): replace 'calc_trans', 'calc_symm', 'calc_refl' and 'calc_subst' commands with attributes '[symm]', '[refl]', '[trans]' and '[subst]'
These attributes are used by the calc command.
They will also be used by tactics such as 'reflexivity', 'symmetry' and
'transitivity'.

See issue #500
2015-05-02 15:15:35 -07:00
Leonardo de Moura
415ca2b93f feat(library/tactic): add 'congruence' tactic
It is the f_equal described at issue #500.
2015-05-02 12:58:46 -07:00
Leonardo de Moura
2054d67483 chore(library/tactic/rewrite_tactic): fix style 2015-05-01 19:49:48 -07:00
Leonardo de Moura
9dc0388022 fix(library/tactic/rewrite_tactic): bug when rewriting hypotheses 2015-05-01 19:45:23 -07:00
Leonardo de Moura
ac8ba6a3cf feat(library/tactic): add 'subst' tactic
see issue #500
2015-05-01 19:31:24 -07:00
Leonardo de Moura
b0759f3986 fix(library/tactic/rewrite_tactic): bug when rewriting multiple hypotheses 2015-05-01 19:03:43 -07:00
Leonardo de Moura
de369a0a0a feat(library/tactic/injection_tactic): improve 'injection' tactic
see issue #500
2015-05-01 15:49:56 -07:00
Leonardo de Moura
9ba8b284a1 fix(library/tactic/apply_tactic): add eapply, and fix issue #361 2015-05-01 15:08:00 -07:00
Leonardo de Moura
ce5ef5a6cc feat(frontends/lean): improver parser for tactics of the form 'tac_name <expr> with <ids*>' 2015-05-01 13:06:11 -07:00
Leonardo de Moura
63eb155c7e feat(library/tactic): add 'injection' tactic
see issue #500
2015-05-01 12:45:21 -07:00
Leonardo de Moura
7e9f574ef3 fix(library/tactic/apply_tactic): use internally 'apply' instead of 'fapply' as the default "apply" tactic
This changes improves the 'constructor' tactic
2015-04-30 21:58:35 -07:00
Leonardo de Moura
2d9c950144 feat(library/tactic/constructor_tactic): allow 'constructor' tactic without index
see issue #500
2015-04-30 21:15:07 -07:00
Leonardo de Moura
15e52b06df fix(library/tactic/constructor_tactic): bug in constructor tactic
see example (constr_tac2.lean) in comment at issue #500
2015-04-30 20:18:24 -07:00
Leonardo de Moura
d18f9c7607 fix(library/tactic/constructor_tactic): use 1 (instead of 0) to reference the first constructor
see comment at issue #500
2015-04-30 20:08:00 -07:00
Leonardo de Moura
0b995c4fe3 fix(library/tactic/rewrite_tactic): relax reducibility constraints in some parts of the rewrite tactic
fixes #567
2015-04-30 18:22:58 -07:00
Leonardo de Moura
d152f38518 feat(library/tactic): add 'constructor', 'split', 'left', 'right' and 'existsi' tactics
see issue #500
2015-04-30 17:52:29 -07:00
Leonardo de Moura
1c6067bac2 feat(library/tactic): add 'exfalso' tactic
see issue #500
2015-04-30 15:43:07 -07:00
Leonardo de Moura
d546b019fb fix(library/tactic/rewrite_tactic): assertion violation when checking
dependencies at rewrite tactic
2015-04-30 15:41:57 -07:00
Leonardo de Moura
936e024128 fix(library/tactic/rewrite_tactic): bug in rewrite hypothesis in HoTT mode 2015-04-30 15:30:25 -07:00
Leonardo de Moura
9c8a63caec feat(library/tactic): add 'contradiction' tactic
see issue #500

Remark: this tactic also applies no_confusion to take care of a contradiction
2015-04-30 13:47:40 -07:00
Leonardo de Moura
3233008039 feat(library/tactic): allow user to name generalized term in the 'generalize' tactic
closes #421
2015-04-30 11:57:40 -07:00
Leonardo de Moura
3912bc24c8 feat(frontends/lean): nicer syntax for 'intros' 'reverts' and 'clears' 2015-04-30 11:00:39 -07:00
Soonho Kong
018cbe9447 fix(src/CMakeLists.txt): debian deps for static and non-static builds 2015-04-30 12:38:44 -04:00
Soonho Kong
e8d894473e feat(src/CMakeLists.txt): add cpack support for Debian package 2015-04-30 10:01:34 -04:00
Soonho Kong
c7f1e3737f fix(src/CMakeLists.txt): add -lpthread only if MULTI_THREAD is ON 2015-04-30 09:55:38 -04:00
Soonho Kong
7bae895c23 refactor(src/CMakeLists.txt): simplify conditions in if
There are many places where we do not need 'MATCHES "ON"' or 'MATCHES
"OFF"'. Reference: http://www.cmake.org/cmake/help/v3.0/command/if.html

~~~
if(<constant>)

True if the constant is 1, ON, YES, TRUE, Y, or a non-zero number. False
if the constant is 0, OFF, NO, FALSE, N, IGNORE, NOTFOUND, the empty
string, or ends in the suffix -NOTFOUND. Named boolean constants are
case-insensitive. If the argument is not one of these constants, it is
treated as a variable.
~~~
2015-04-30 09:51:05 -04:00
Leonardo de Moura
c19ec664b8 feat(CMakeLists): add flag suggested by Soonho
closes #557
2015-04-29 16:34:14 -07:00
Leonardo de Moura
d6d30f12c6 feat(frontends/lean): add "polymorphic" print command
closes #524
2015-04-29 16:17:33 -07:00
Leonardo de Moura
1a28a3c36f feat(frontends/lean): add 'print inductive' command 2015-04-29 15:22:10 -07:00
Leonardo de Moura
dce7177382 feat(library/tactic/change_tactic): improve 'change' tactic
- Better error messages
- Try to solve unification constraints produced during is_def_eq test

addresses comment on issue #531
2015-04-29 13:31:09 -07:00
Leonardo de Moura
d055947243 feat(library/tactic/rewrite_tactic): ignore implicit argument when matching at rewrite tactic 2015-04-29 12:51:33 -07:00
Leonardo de Moura
182a8a542e feat(library/tactic/rewrite_tactic): store exception "what" message in rewrite trace 2015-04-29 12:46:41 -07:00
Leonardo de Moura
b790ca9806 fix(library/tactic/rewrite_tactic): type check rewriting steps
closes #550
2015-04-29 12:16:37 -07:00
Leonardo de Moura
91abba3c3d refactor(kernel): rename method 2015-04-29 11:46:27 -07:00
Leonardo de Moura
b98c109f73 fix(kernel/hits/hits): bug in reduction rule
closes #564
2015-04-29 10:01:46 -07:00
Leonardo de Moura
051615712c fix(kernel/quotient/quotient): bug in reduction rule 2015-04-29 10:01:17 -07:00
Leonardo de Moura
d2c7b5c319 feat(library/tactic): add 'let' tactic
closes #555
2015-04-28 17:24:43 -07:00
Leonardo de Moura
16f237f042 feat(kernel/inductive): remove problematic check
see discussion at issue #563

closes #563
2015-04-28 17:21:41 -07:00
Leonardo de Moura
1be72f1faa feat(frontends/lean): parse argument of unary tactis with rbp=0, tokens may have a different precedence in expression and tactic modes 2015-04-28 13:43:05 -07:00
Leonardo de Moura
4283111198 fix(frontends/lean): missing files 2015-04-28 10:55:04 -07:00
Leonardo de Moura
a23118d357 feat(frontends/lean): add tactic_notation command
This addresses the first part of issue #461

We still need support for tactic definitions
2015-04-27 17:46:13 -07:00
Leonardo de Moura
ca8943f45b feat(library,hott): remove rapply tactic 2015-04-27 15:06:16 -07:00
Leonardo de Moura
88023e9597 fix(shell/lean): missing 'break' 2015-04-27 14:23:01 -07:00
Leonardo de Moura
bdef7aaf40 feat(frontends/lean/pp): add check_system at pretty printer 2015-04-27 14:21:53 -07:00
Leonardo de Moura
a3c3a94a51 feat(util/sexpr/format): add check_system at formatter 2015-04-27 14:21:25 -07:00
Leonardo de Moura
d41e055d1c feat(frontends/lean/migrate_cmd): catch memory error in the migrate command 2015-04-27 12:58:11 -07:00
Leonardo de Moura
fee2b002fc fix(util/exception): typo in error message 2015-04-27 12:02:04 -07:00
Leonardo de Moura
dcc94dde82 refactor(kernel): rename may_reduce_later to is_stuck, and make is_stuck more precise
It now reflects the definition used in the elaboration paper.
2015-04-27 11:20:15 -07:00
Leonardo de Moura
68383d49de refactor(shell/lean): remove useless output
It was added for implementing the web version, and avoid the need to
simulate a file system in the web browser.
It turns out we decided to use a virtual file system.
2015-04-27 10:15:01 -07:00
Leonardo de Moura
9d01868361 feat(frontends/lean): use rewrite tactic to implement unfold (it has a unfold step)
closes #502
2015-04-24 17:23:12 -07:00
Leonardo de Moura
28404fe16d fix(library/tactic/rewrite_tactic): second problem reported at issue #548
closes #548
2015-04-24 16:49:32 -07:00
Leonardo de Moura
4148d6b8cc fix(library/tactic/rewrite_tactic): first two problems at issue #548 2015-04-24 16:07:00 -07:00
Leonardo de Moura
6134c8822a fix(frontends/lean/util): assertion violation
fixes #559
2015-04-24 15:09:23 -07:00
Leonardo de Moura
f723550d33 feat(frontends/lean/elaborator): decorates error message with free variables introduced by the left-hand-side of the equation
closes #528
2015-04-24 14:58:15 -07:00
Leonardo de Moura
4a157ee676 refactor(kernel/justification): create "wrapper" justification
It allows us to provide a different pretty printer.

This is a cleanup, and also helps to address issue #528
2015-04-24 14:49:32 -07:00
Leonardo de Moura
8241863abe feat(kernel/hits): add two builtin HITs: type_quotient and trunc 2015-04-23 15:32:31 -07:00
Soonho Kong
c1b23f29c9 doc(emacs/README.md): add debian case
[skip ci]
2015-04-23 15:05:08 -04:00
Leonardo de Moura
2613e7c444 fix(frontends/lean): bug when handling identifiers in tactics
This bug was reported by Jeremy in the Lean Google group:
https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/lean-discuss/ZKJ8WPPEVJA/n05x6rPRzvMJ
2015-04-22 16:03:22 -07:00
Floris van Doorn
d4a929febb feat(lean-input): add some notation 2015-04-22 13:06:11 -07:00
Floris van Doorn
ee4cba4e0b style(hott): a bit of cleanup 2015-04-22 13:06:11 -07:00