Leonardo de Moura
04dfd55f94
perf(kernel/expr): fix hash consing performance problem
...
The kernel support opportunistic hash consing.
At commit e63c79c81e we have enabled this feature during
tactic execution, and fixed performance problems in the Certigrad
project (by @dselsam).
However, this change produced unexpected performance problems in
other Lean files (example: @JasonGross example at issue #1646 was 10x
slower after the commit above).
After analyzing the performance logs, I conjecture the hash_consing
may produce a substantial performance overhead if the following property
doesn't hold.
- Let `cache` be the hash_consing cache, then for each `e` in `cache`,
all children of `e` are also in the `cache`.
If the property above is not true, we may have problem whenever
we add an expression `t` containing multiple copies of a big term `T`.
For example, support we insert `f T_1 T_2`, where `T_1` and `T_2` are
structurally equal but are not pointer equal. Then, if we try to insert
`f T_2 T_1`, we will have to compare the huge terms twice, and the
comparison will be proportional to the size of `T_i`.
This commit tries to address this performance problem by enforcing
the property above. This is not a perfect solution since we may keep
trying to create terms using big terms created before hash_consing
has been enabled. After this commit, the example at issue #1646
is only 1.4x slower. It didn't impact the standard library
compilation (memory nor time).
I'm using this commit is a temporary workaround. We should probably
remove the hash_consing support from the kernel, and implement it
in key places. For example, for Certigrad, we can control memory
consumption by using hash_consing only during `simp`,
`instantiate_mvars` and `elaborator` finalization procedure.
@gebner @kha Any ideas/suggestions for this hash_consing issue?
2017-06-23 12:41:35 -07:00
Leonardo de Moura
82db0f874a
fix(kernel/type_checker,library/type_context): add support for macros that cannot be expanded
...
Fixes #1650
2017-06-07 08:25:21 -07:00
Leonardo de Moura
e204a30685
fix(kernel/replace_fn): check if running out of stack space at replace_rec_fn
...
See #1646
2017-06-04 15:57:11 -07:00
Leonardo de Moura
4bdb2da1b6
fix(library/equations_compiler): improve pull_nested_rec_fn, and make sure it communicates local propositions to the well founded recursion module
...
The bin_tree and num_consts examples can now be encoded more naturally.
2017-05-26 10:45:39 -07:00
Leonardo de Moura
7ffd7fea3d
feat(kernel): store depth of composite terms and use it in the hash code computation
...
closes #1589
2017-05-25 16:51:02 -07:00
Sebastian Ullrich
491802409a
chore(*): remove unused macro_definition_cell::pp method
2017-05-24 09:51:23 +02:00
Leonardo de Moura
eddc5b0869
chore(kernel/environment): rename method
2017-05-15 14:18:16 -07:00
Sebastian Ullrich
42eb0c680e
feat(kernel/inductive,library/inductive_compiler): do not enforce positivity rule on meta inductives
2017-05-14 19:17:28 -07:00
Sebastian Ullrich
d968b9a1c8
fix(frontends/lean/structure_cmd): remove evil Pi overload that accidentally abstracted constants in structure decls
2017-04-26 14:22:36 -07:00
Sebastian Ullrich
3f87755a2a
fix(frontends/lean/pp): qualify constant shadowed by local
2017-03-31 09:40:49 -07:00
Sebastian Ullrich
b92af074c0
feat(kernel/pos_info_provider): add save_pos_info
...
Allows the elaborator to contribute new info locations
2017-03-31 09:40:48 -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
Gabriel Ebner
42288198db
fix(kernel/expr): disable caching by default
2017-03-23 08:57:56 +01:00
Gabriel Ebner
595cbb8fe9
refactor(*): task<T>, log_tree, cancellation_token
2017-03-23 08:57:52 +01:00
Leonardo de Moura
d37fd17725
fix(kernel/level): potential compiler specific behavior
2017-03-11 18:30:28 -08:00
Leonardo de Moura
b69e2006f5
chore(kernel/quotient/quotient): update comments
...
The comments were written before the Type => Sort change
2017-03-07 14:11:51 -08:00
Leonardo de Moura
544d5c67f4
feat(CMakeLists,kernel): add TRACK_LIVE_EXPRS=ON compilation option
2017-02-28 10:56:14 -08:00
Leonardo de Moura
7c57d23b46
feat(kernel): add compilation flags for disabling has_local optimization and abstraction cache
2017-02-21 19:46:31 -08:00
Leonardo de Moura
1c959f6790
feat(kernel): add compilation flag for disabling "free var range" optimization
2017-02-21 19:40:56 -08:00
diakopter
19606fd197
chore(util,kernel,library): clang warnings
2017-02-17 20:01:34 -08:00
Sebastian Ullrich
9d8c84713c
refactor(*): reduce exception context info from expr to pos_info
2017-02-17 13:45:57 +01:00
Sebastian Ullrich
e14eab2db8
chore(test/lean/interactive): do not test for exact source information
2017-02-17 13:45:56 +01:00
Gabriel Ebner
1437ee9599
fix(kernel/type_checker): disable expression caching in asynchronous proof checking
2017-02-16 07:44:12 -08:00
Leonardo de Moura
604cbf827a
chore(kernel/type_checker): remove dead code
2017-02-15 18:05:55 -08:00
Leonardo de Moura
3d603ec28e
feat(kernel,library,frontends/lean,api): remove global universe levels from kernel and APIs
2017-02-08 17:41:44 -08:00
Leonardo de Moura
715f0bdd8c
fix(kernel/expr): typo
...
closes #1350
2017-02-07 10:11:47 -08:00
Gabriel Ebner
f404e8a2be
feat(library/export,checker): add basic support for mixfix notation
2017-01-31 10:20:56 +01:00
Gabriel Ebner
22d6d6c843
chore(kernel/quotient/quotient): fix style
2017-01-31 10:20:55 +01:00
Gabriel Ebner
54820506e4
feat(library/export): export quotient initialization
2017-01-31 10:20:55 +01:00
Gabriel Ebner
2f07bf352c
refactor(library/standard_kernel): move standard kernel into kernel
2017-01-31 09:39:31 +01:00
Gabriel Ebner
50cfbc1fd5
fix(kernel/quotient/quotient): add missing import
2017-01-31 09:39:30 +01:00
Leonardo de Moura
5da8b205b9
feat(library/type_context, frontends/lean/elaborator): type classes with output parameters
2017-01-30 18:32:54 -08:00
Leonardo de Moura
4fe73d3f87
fix(frontends/lean/elaborator, kernel/error_msgs): (re-)activate distinguishing_pp_options
2017-01-30 11:54:00 -08:00
Leonardo de Moura
35224685a9
chore(kernel/quotient/quotient): remove leftover
2017-01-26 13:05:09 -08:00
Leonardo de Moura
0ba60e62d7
feat(kernel/quotient/quotient): make quotient module robust against users that define their own prelude's
...
Before this commit, an user could define their own prelude and change
the types of quot, quot.mk, quot.lift or quot.ind.
By doing that, they could prove false.
This commit prevents this kind of abuse.
It also modifies the definition of `quot` and avoids the `setoid`
dependency.
The previous `quot` type is now called `quotient`, and it is defined
using the new `quot` type provided by the kernel.
See discussion at #1330
2017-01-24 15:59:38 -08:00
Gabriel Ebner
1a6629ce3b
feat(frontends/lean/parser): keep list of tasks that have to succeed
2017-01-17 15:31:17 -08:00
Leonardo de Moura
1db1f8b229
feat(kernel/inductive/inductive): do not force recursive arguments to occur after non-recursive ones
2017-01-16 22:59:17 -08:00
Gabriel Ebner
bc09a53f71
feat(library/task_queue): add flag to prevent priority inversion
2017-01-05 18:09:28 -08:00
Gabriel Ebner
063130ee18
feat(kernel/environment): add function that checks whether all proofs are correct
2017-01-05 18:09:28 -08:00
Leonardo de Moura
9065cf0350
feat(library/tactic/congruence/theory_ac): add internalization, interface with congruence closure module, and trivial/simp/orient transitions
...
Still missing: superpose, collapse and compose transitions.
2016-12-28 21:35:16 -08:00
Leonardo de Moura
caf92bbcc0
feat(kernel/expr): compress expr_macro representation
2016-12-28 09:01:21 -08:00
Leonardo de Moura
b5c1b429e7
feat(library/tactic/ac_tactics): add ac_manager helper class
2016-12-27 17:57:56 -08:00
Leonardo de Moura
5572d7f3ec
perf(kernel,library/module): enable expr caching when deserializing .olean files
2016-12-16 18:33:46 -08:00
Gabriel Ebner
d89512b6fc
fix(util/task_queue): fix undefined behavior with null references
2016-12-15 09:48:57 -08:00
Gabriel Ebner
902df5d134
feat(shell/server,emacs): show list of currently running tasks
2016-12-12 12:40:40 -08:00
Gabriel Ebner
a972c13ce9
refactor(library/task_queue): move task queue to util
2016-12-12 10:01:34 -05:00
Gabriel Ebner
bc74a79ebd
refactor(library/message_buffer): extract definitions into extra header file
2016-12-12 08:56:15 -05:00
Gabriel Ebner
9eeb4390ea
fix(kernel/type_checker): fallback to immediate checking if task queue is not available
2016-12-12 08:45:56 -05:00
Leonardo de Moura
f96d35dc1c
fix(library/aux_definition,frontends/lean/definition_cmds): unfold macros at trust level 0
2016-12-05 13:08:12 -08:00
Leonardo de Moura
52ef17284a
fix(kernel/expr, kernel/level): if caching is enabled during finalization, these modules would register a finalizer after finalization of the main thread
...
The deleted lines were not really needed. They were added before we had
the thread finalization code.
2016-12-01 10:16:05 -08:00