Commit graph

4217 commits

Author SHA1 Message Date
Gabriel Ebner
34d5c0f769 fix(library/mt_task_queue): work around non-recursive lock 2017-06-06 19:57:04 +02:00
Leonardo de Moura
559211d284 perf(library/local_context): fix performance bottleneck at local_const
This is one of the performance problems at issue #1646.
The method `local_context::erase_user_name(local_decl const & d)` was
inefficient when there are many locals with the same user facing name.
For size 7 in the example described at issue #1646, the average size of the
declaration list was 400. Here are the runtimes for size 7

Before: 19.021 secs
After:  16.433 secs

There are more performance issues.
2017-06-06 10:01:08 -07:00
Leonardo de Moura
544817cf15 fix(library/vm/interaction_state_imp): add scope_vm_state
This is needed when the expression to be compiled is too simple.
2017-06-05 19:22:13 -07:00
Gabriel Ebner
1e7e440951 fix(library/module_mgr): actually cancel invalidated tasks 2017-06-05 19:36:09 +02:00
Leonardo de Moura
cd624dda75 fix(library/tactic/exact_tactic): make sure exact/refine tactics check for cycles when assigning metavariables
fixes #1638
2017-06-04 15:10:42 -07:00
Leonardo de Moura
02c82ac41a fix(library/tactic/tactic_state): make sure mk_unify_exception is not compiler implementation dependent 2017-06-04 13:29:59 -07:00
Leonardo de Moura
e22ccb4d1f feat(library/tactic/tactic_state): improve error message for unify and is_def_eq tactics
closes #1639
2017-06-03 19:52:22 -07:00
Gabriel Ebner
910d63d314 refactor(util/compiler_hints): move LEAN_UNLIKELY macro out of vm code 2017-06-03 15:44:22 +02:00
Leonardo de Moura
a1dc121eee feat(library/init/meta/environment): add environment.fingerprint API 2017-06-02 16:52:40 -07:00
Leonardo de Moura
c59543bde8 feat(library/init/meta/tactic): add sleep tactic for debugging purposes
We are going to use it to simulate the issue described at issue #1601
2017-06-02 15:38:08 -07:00
Leonardo de Moura
92a72b238b feat(library/tactic): add tactic::ref
They can be used to store user state in the tactic_state object.

@Armael @jroesch: The new file tests/lean/run/tactic_ref.lean contains a few examples.
2017-06-02 15:19:03 -07:00
Leonardo de Moura
a8173c8194 feat(library/init): heterogeneous andthen type class, and tactic.seq_focus implementation 2017-06-02 10:38:27 -07:00
Leonardo de Moura
d8f03082b7 chore(library/type_context): style 2017-06-01 13:47:10 -07:00
Leonardo de Moura
9c79b361dc fix(library/type_context): non deterministic failure at bitwise.lean
We were getting the following error non deterministically:

```
library/init/data/nat/bitwise.lean:131:6: error: exact tactic failed, type mismatch, given expression has type
  z = f ff 0 z
but is expected to have type
  eq.rec z e = f ff 0 (binary_rec f z 0)
state:
C : ℕ → Sort u,
f : Π (b : bool) (n : ℕ), C n → C (bit b n),
z : C 0,
h : f ff 0 z = z,
b : bool,
n : ℕ,
b0 : bit b n = 0,
bf : bodd 0 = b,
n0 : shiftr 0 1 = n,
e : 0 = bit ff 0
⊢ eq.rec z e = f ff 0 (binary_rec f z 0)
```

This error was happening because of the type_context.unfold_lemmas new
flag. The type context thread local cache must be flushed whenever the
value of type_context.unfold_lemmas has changed.
2017-06-01 13:39:12 -07:00
Leonardo de Moura
291b61555a chore(library/type_context): add flag for disabling cache at compilation time 2017-06-01 13:32:09 -07:00
Gabriel Ebner
9aeda60e2c fix(library/equations_compiler/util): segfault 2017-06-01 16:58:00 +02:00
Gabriel Ebner
04f9eb0b4f refactor(library/init/meta/expr): pure Lean implementation of reflected 2017-06-01 10:17:51 +02:00
Leonardo de Moura
8b0cca57d1 fix(library/noncomputable): fixes #1631
This commit fixes issue #1631. However, it is not a perfect solution.
This commit improves the predicate that checks whether a definition is
noncomputable or not. This predicate was implemented before we had
a code generator.
We should refactor the code and use the code generator to check
whether a definition is noncomputable or not. Otherwise, we will
keep finding mismatches between the predicate at noncomputable.cpp
and what the code generator implements.
2017-05-31 23:16:37 -07:00
Leonardo de Moura
42eeb445d4 fix(library): make sure `(t) does not evaluate t
See #1631
2017-05-31 22:03:15 -07:00
Leonardo de Moura
56215b36e8 fix(*): [[fallthrough]] ==> /* fall-thru */
Older gcc compilers generate a warning when the attribute is used.
I found out that GCC 7 will not produce a warning if comments
such as /* fall-thru */ or /* FALLTHRU */ are used instead of the
attribute [[fallthrough]]
2017-05-31 21:18:47 -07:00
Leonardo de Moura
24048c4258 fix(*): gcc 7 weird uninitialized warnings
I think most of them are incorrect.
I didn't find a workaround for the one at json.hpp.
So, I just disabled this warning at server.cpp
2017-05-31 18:05:03 -07:00
Leonardo de Moura
ac17270894 fix(*): more gcc 7 warnings 2017-05-31 17:29:30 -07:00
Leonardo de Moura
603bbe5987 fix(*): gcc 7 linking errors 2017-05-31 16:35:09 -07:00
Leonardo de Moura
919cf420ea fix(*): gcc 7 warnings 2017-05-31 16:35:09 -07:00
Leonardo de Moura
d3298d518c fix(library/equations_compiler/elim_match): whnf_pattern 2017-05-31 10:02:59 -07:00
Gabriel Ebner
b1e417805e fix(frontends/lean/scanner): do not treat 0xFF as end-of-file
Fixes #1624.  We just replace 0xFF by 0x00 when reading a new input
byte.  This shows up as an unexpected token error.
2017-05-31 16:54:04 +02:00
Sebastian Ullrich
b59e1b0a2e fix(library/eval_helper): evaluating under-applied functions 2017-05-31 16:18:17 +02:00
Sebastian Ullrich
834375a042 fix(library/eval_helper): evaluating tactics 2017-05-31 16:18:15 +02:00
Leonardo de Moura
72134a7bbd feat(library/equations_compiler/wf_rec): provide recursive equations to rel_tac
rel_tac is a tactic used for synthesizing a well founded relation.
The default implementation just uses type class resolution.
More sophisticated strategies may need to access the set of recursive
equations. This commit addresses this need.
2017-05-30 16:55:37 -07:00
Leonardo de Moura
d489955600 fix(library/vm/vm_nat): bitwise operators 2017-05-30 13:09:17 -07:00
Mario Carneiro
9d676776b5 feat(library/vm/vm_nat): implementations of bitwise ops 2017-05-30 12:47:44 -07:00
Gabriel Ebner
d5c7d078eb fix(library/type_context): check for stack overflow 2017-05-29 14:58:34 +02:00
Gabriel Ebner
5ab28548b8 fix(library/type_context): reduce whnf stack space 2017-05-29 14:58:28 +02:00
Leonardo de Moura
1ee1e01f8c feat(library/tactic/smt/congruence_closure): add builtin support for (@ne A a b)
This is needed when using cc in the standard tactic monad.

closes #1608
2017-05-26 17:06:22 -07:00
Leonardo de Moura
82e51ddad5 fix(library/constructions/injective): fixes #1609
@dselsam You have assumed that the left-hand-side (t) and
right-hand-side (s) of (t = s) and (t == s) are the last two arguments.
This is a reasonable assumption, and it is correct for eq, but it is
incorrect for heq.
The type of heq is
```
Π {α : Sort u_1}, α → Π {β : Sort u_1}, β → Prop
```
Do you recall other places where we may have made this assumption?
2017-05-26 16:39:38 -07:00
Leonardo de Moura
a31e3a95ae feat(library/equations_compiler/wf_rec): improve error message for failed decreasing proofs 2017-05-26 13:55:29 -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
62c24f9bb5 chore(*): remove pos_num and num from stdlib 2017-05-25 18:24:16 -07:00
Leonardo de Moura
438ce08748 feat(library/equations_compiler/util): cleanup equation rhs
The idea is to remove hints used to define a function by well founded
recursion. See new div_eqn.lean test for an example.
2017-05-25 13:09:13 -07:00
Leonardo de Moura
9b12559239 fix(library/tactic/dsimplify): fixes #1603 2017-05-25 11:21:06 -07:00
Leonardo de Moura
5583893991 fix(library/equations_compiler/wf_rec): avoid name collision between auxiliary lemmas produced in different modules 2017-05-24 17:50:39 -07:00
Leonardo de Moura
c396e4519a fix(library/equations_compiler/util): missing case at prove_eq_rec_invertible
@dselsam You have used a function similar to prove_eq_rec_invertible in
the inductive compiler.
I'm wondering if this bug (missing case) may also occur in the inductive
compiler.
2017-05-24 14:34:54 -07:00
Sebastian Ullrich
491802409a chore(*): remove unused macro_definition_cell::pp method 2017-05-24 09:51:23 +02:00
Leonardo de Moura
a1cfe0367b fix(library/equations_compiler/pack_domain): nested recursive calls 2017-05-23 21:50:26 -07:00
Leonardo de Moura
e163b5c884 feat(library/init/meta/expr): binder_info.other ==> binder_info.aux_decl 2017-05-23 21:42:52 -07:00
Leonardo de Moura
d8713acbdd fix(library/tactic/eqn_lemmas): fix get_eqn_lemmas_for 2017-05-23 20:39:27 -07:00
Leonardo de Moura
290e7b9cff feat(library/init): use Sort instead of Type for defining acc and well_founded 2017-05-23 16:40:45 -07:00
Leonardo de Moura
229b730c15 feat(library/equations_compiler): invoke tactics for building well founded relation, and proving recursive calls are "decreasing" 2017-05-23 16:04:55 -07:00
Leonardo de Moura
ca684102f6 refactor(library/tactic,frontends/lean): move tactic_evaluator to library/tactic 2017-05-23 15:30:31 -07:00
Leonardo de Moura
4fbb65d9f1 feat(frontends/lean,library/equations_compiler): store tactics for generating well founded relation and decreasing proofs 2017-05-23 15:00:29 -07:00