Commit graph

9360 commits

Author SHA1 Message Date
Leonardo de Moura
0ad5497462 refactor(library/io): make io easier to extend and use 2018-01-23 15:03:31 -08:00
Leonardo de Moura
cee73e8309 chore(util/lp): remove lp module
It has been moved to Z3.
2018-01-23 12:18:30 -08:00
matt rice
1538615e8c feat(util): allow some math alphanum symbol latin letter variations
Add the Script, Double-struck, and Fractur blocks from,
https://unicode.org/charts/PDF/U1D400.pdf
to is_letter_like() so they may be bound to variables.
2018-01-23 11:20:05 -08:00
Sebastian Ullrich
3a1ede2d73 refactor(leanpkg/config_vars): replace with core lib 2018-01-23 11:14:18 -08:00
Sebastian Ullrich
5c6d15c43d chore(CMakeLists): clean-olean: clean leanpkg as well 2018-01-23 11:14:18 -08:00
Sebastian Ullrich
18c2e3739a feat(library/module_mgr): save .olean files of non-dirty .lean files in server mode
Note, currently there is no way for a dirty file to become non-dirty again
2018-01-23 11:14:18 -08:00
Sebastian Ullrich
67fc899d0d feat(shell/server): sync: default "content" to file content
This mostly simplifies debugging and testing
2018-01-23 11:14:18 -08:00
Sebastian Ullrich
e8c057f1de refactor(library/module_mgr): simplify module loading code 2018-01-23 11:14:18 -08:00
Sebastian Ullrich
1ee945a31f fix(library): store and validate Lean version of .olean files
Fixes #1770
2018-01-23 11:14:18 -08:00
Leonardo de Moura
eef29f6a31 fix(build): cmake_policy(SET CMP0054 NEW) is only available on cmake >= 3.1
See: https://cmake.org/cmake/help/v3.1/policy/CMP0054.html
2018-01-22 18:10:54 -08:00
Nuno Lopes
0d820fa23d fix(build): fix Cygwin build 2018-01-22 18:07:04 -08:00
Leonardo de Moura
eff960d498 feat(library/ac_match): add AC match design notes 2018-01-22 18:04:23 -08:00
Leonardo de Moura
368f17d0b1 feat(library/tactic/simplify): add simp! 2018-01-16 17:29:24 -08:00
Leonardo de Moura
91b9e96582 feat(library/tactic/eqn_lemmas): store flag indicating whether a declaration has only simple equation lemmas or not 2018-01-16 16:55:05 -08:00
Leonardo de Moura
c195d7c2a1 feat(library/tactic/simp_tactic): improve mk_simp_attr
- An new simp attribute may depend on other existing attributes

- Add `[norm]` simp attribute. It is an extension of the default `[simp]` attribute.
  It should be used to add extra rules for normalizing goals.
  These extra rules are used to produce normal forms and/or reduce the
  number of constants used in a goal. Here is an example coming from a
  discussion with @kha. When working with monads, we may want to
  eliminate `<$>` by using the lemma `f <$> x = x >>= pure ∘ f`.
  This lemma is in the `[norm]` simp set, but it is not in `[simp]`
2018-01-16 16:47:30 -08:00
Sebastian Ullrich
f3b0cb936f feat(util/lean_path): detect all instances of ambiguous imports 2018-01-15 09:58:19 +01:00
Leonardo de Moura
cebde17bec feat(library/tactic/simplify): simp reduces c a_1 ... a_n = c b_1 ... b_n into a_1 = b_1 /\ ... /\ a_n = b_n 2018-01-12 18:18:56 -08:00
Leonardo de Moura
9eb22cd548 feat(library/constructions/injective): automatically generate auxiliary lemma *.inj_eq for constructors
We are going to use these lemmas in the simplifier.
2018-01-12 16:41:12 -08:00
Leonardo de Moura
5bad6d5372 feat(library/init/meta/tactic): subst supports heterogeneous equalities that are actually homogeneous 2018-01-12 14:32:49 -08:00
Leonardo de Moura
1437d7209a feat(library/tactic/simplify): add support for generalized inductive datatypes 2018-01-12 11:51:49 -08:00
Leonardo de Moura
4bd314f7bd feat(library/tactic/simplify): simp reduces c_1 ... = c_2 ... to false 2018-01-12 11:30:45 -08:00
Leonardo de Moura
c5df94ed17 feat(library/tactic): add support for auto params at simp tactic 2018-01-11 16:47:22 -08:00
Leonardo de Moura
5a320e260a refactor(library/tactic): code duplication 2018-01-11 14:12:15 -08:00
Leonardo de Moura
3b0e23e1f0 fix(library/equations_compiler/util): make sure untrusted macros are unfolded when creating auxiliary *._sunfold definitions 2018-01-11 12:45:42 -08:00
Leonardo de Moura
26da50ab0e feat(library/vm/vm_string): efficient iterator.extract
@kha I've added

   iterator.extract : iterator -> iterator -> option string

It returns `none` if the iterators are "incompatible".
If this function is inconvenient to use, we can change it and return the
empty string in these cases.

Given iterators `it1` and `it2`, if they are sharing the same string
object in memory, then the cost is O(pos(it2) - pos(it1)).
If not, we have an extra O(N) step where we check whether the strings
being iterated by it1 and it2 are equal (`N` is the size of the strings).
In most applications, I believe the iterators will share the string
object.

I didn't test the code much. BTW, I found an unrelated bug at
vm_string.cpp. So, I'm not very confident this code is rock solid.
2018-01-10 13:27:28 -08:00
Leonardo de Moura
78708b4697 fix(library/vm/vm_string): bug at iterator.set_curr 2018-01-10 13:25:26 -08:00
Leonardo de Moura
8e172afdc1 fix(library/type_context): typo 2018-01-09 16:55:44 -08:00
Leonardo de Moura
60be2bf2aa feat(frontends/lean/builtin_cmds): use type_context to implement #reduce command 2018-01-09 16:42:52 -08:00
Leonardo de Moura
0c5c1a27c6 refactor(frontends/lean, library/equations_compiler): move smart unfolding auxiliary function generation to equations_compiler module 2018-01-09 16:27:36 -08:00
Leonardo de Moura
a55b641651 chore(library/type_context): add mk_smart_unfolding_name_for 2018-01-09 16:19:59 -08:00
Leonardo de Moura
7841314795 feat(library/type_context): add option type_context.smart_unfolding 2018-01-09 16:05:26 -08:00
Leonardo de Moura
a923f3e72d doc(library/type_context): remove refl lemma comment, and document smart unfolding 2018-01-09 15:48:06 -08:00
Leonardo de Moura
c2bd8626d7 fix(library/type_context): put back same_head_symbol heuristic
The timeout at qed_perf_bug test demonstrates why it is useful.
2018-01-09 15:31:33 -08:00
Leonardo de Moura
532fa735c6 chore(library/type_context): remove global 2018-01-09 15:25:30 -08:00
Leonardo de Moura
c60b594839 chore(library/type_context): remove unnecessary #include 2018-01-09 15:18:58 -08:00
Leonardo de Moura
6ab792733d feat(library/type_context): smart unfolding
closes #1794
2018-01-09 15:09:08 -08:00
Leonardo de Moura
bff40665b0 fix(library/aux_definition): make sure aux_definition level params are sorted
This modification guarantees that the order of universe parameters in a
declaration `f` is identical to the one in `f._meta_aux` (if it exists).
2018-01-09 13:12:23 -08:00
Leonardo de Moura
e0bdb10ab4 fix(library/type_context): clenaup whnf_head_pred
The code had a few leftovers from the old `whnf_pred` method.
We don't use `whnf_pred` anymore.
2018-01-08 11:31:03 -08:00
Leonardo de Moura
600a32d323 chore(library/equations_compiler/pack_mutual): _mutual should be a suffix instead of prefix 2018-01-08 10:43:34 -08:00
Leonardo de Moura
587540f11b feat(frontends/lean): add abbreviation command
This command is not just a cosmetic feature.
We need it to defined `id_rhs` before the tactic framework is defined.
We want `id_rhs` to be used in all definitions generated by the equation
compiler. Right now, it is only used in definitions defined after the
tactic framework.
2018-01-05 15:40:59 -08:00
Leonardo de Moura
d2ae028cbe chore(library/type_context): missing CACHE_CODE 2018-01-05 14:10:28 -08:00
Leonardo de Moura
b7de24715b fix(util/rbtree): make sure traversal methods do not crash if given function updates the tree
This is a fix for a nasty bug at `type_context::set_instance_fingerprint`.
This method traverses the local context `m_lctx` and invokes `is_class`
which may invoke `whnf`, and `whnf` may temporarily update the local
context. The local context is implemented using a `rb_tree`.
Note that the updates performed by `whnf` are temporary, but it
its representation in memory may be different.
2018-01-05 14:10:28 -08:00
Leonardo de Moura
43d7bac49b feat(library/init/meta): add support for new unify at rw tactic 2018-01-04 13:05:55 -08:00
Leonardo de Moura
040722c7e7 feat(library/init/meta): add unify config option to apply_cfg
This commit also fixes a problem in the `apply` tactic error messages.
2018-01-04 12:51:59 -08:00
Leonardo de Moura
e1b0b72bf0 chore(library/type_context): update design notes 2018-01-04 11:38:42 -08:00
Leonardo de Moura
22270d37cf feat(library/type_context): m_update => m_update_left/m_update_right 2018-01-03 13:49:42 -08:00
Leonardo de Moura
e9650d835d chore(library/type_context): cleanup metavar method names
This commit also fixes some corner case bugs at is_def_eq
2018-01-03 13:49:42 -08:00
Leonardo de Moura
8621be6335 fix(frontends/lean): closes #1898 2018-01-02 12:33:00 -08:00
Sebastian Ullrich
acf4b56cd4 fix(library/process): uses bash's convention for exit codes 2017-12-30 19:31:55 +01:00
Sebastian Ullrich
93c90a9f5c fix(library/process): flush stdout before forking 2017-12-30 19:31:55 +01:00