Commit graph

5709 commits

Author SHA1 Message Date
Sebastian Ullrich
f247363305 feat(library/time_task): print cumulative times on --profile 2018-02-19 09:13:24 -08:00
Sebastian Ullrich
782af7e5d6 chore(library/vm/interaction_state): do not profile calls into Lean other than tactic execution
Otherwise, we produce a message for e.g. every single interactive tactic parameter
2018-02-19 09:13:24 -08:00
Leonardo de Moura
dbfcc65c60 fix(library/compiler/erase_irrelevant): erase_type 2018-02-19 07:55:43 -08:00
Leonardo de Moura
aa24c15e61 feat(library/vm): basic performance counters
@kha I have added a few performance counters.
I collect their values at each snapshot.
Right now, I am printing only the values in the last snapshot, but if we want
we can even display their progress over time.

Right now, I track the following information
- number of allocated closures
- number of allocated constructors/objects
- number of allocated big numbers
2018-02-16 14:37:11 -08:00
Leonardo de Moura
c35f2a2098 chore(library/io_state): avoid thread local storage 2018-02-16 12:12:50 -08:00
Leonardo de Moura
96fab5172f perf(library/compiler): apply lambda lifting after erase trivial structures
cc @kha
2018-02-15 16:55:27 -08:00
Leonardo de Moura
a115a1538b chore(library/vm/vm_io): style 2018-02-15 16:25:17 -08:00
Leonardo de Moura
1c9648a12d chore(library): remove dead constants 2018-02-15 16:17:43 -08:00
Leonardo de Moura
ac13f8b0f9 feat(library/system/io): add random number generator support in the io monad
@aqjune @nunoplopes: See new tests at tests/lean/run/random.lean

We have two actions in `io`. By default, `io` uses the C++
random number generator, but we can force it to use a `std_gen` with
the action `set_rand_gen`.

def rand (lo : nat := std_range.1) (hi : nat := std_range.2) : io nat
def set_rand_gen : std_gen → io unit
2018-02-15 16:12:08 -08:00
Nuno Lopes
7b45d28e77 chore(unicode): use utf8 chars directly in strings 2018-02-13 10:42:08 -08:00
Nuno Lopes
977e11f9be fix(warnings): fix warnings on VS. its now /W2 clean 2018-02-13 10:42:08 -08:00
Leonardo de Moura
96e02613fc fix(library/compiler/simp_inductive): erase trivial structure bug 2018-02-11 11:43:05 -08:00
Leonardo de Moura
30cfcc0fa6 fix(library/compiler/inliner): missing reduction 2018-02-11 09:28:42 -08:00
Leonardo de Moura
3771748b4c chore(library/native): remove dead code
The deleted code was not finished, and we are going to add a new IR
and compiler.
2018-02-07 17:29:25 -08:00
Nuno Lopes
d01e2d7ae8 fix(msvc): change previous MSVC workaround to change the code less 2018-02-06 10:11:10 -08:00
Nuno Lopes
9c756e24d3 fix(crash) due to calling isalpha with signed char in get_indentatnion() 2018-02-06 10:11:10 -08:00
Nuno Lopes
36f19f1d6e fix(msvc): fix a few more compilation errors 2018-02-06 10:11:10 -08:00
Nuno Lopes
aeaa19ac44 fix(style): use static_cast 2018-02-06 10:11:10 -08:00
Nuno Lopes
46cfd33a1b fix(build): attempt to fix linux buildbots 2018-02-06 10:11:10 -08:00
Nuno Lopes
50bc3b0314 fix(msvc): fix compilation of vm_io.cpp 2018-02-06 10:11:10 -08:00
Nuno Lopes
c1a768b7a7 fix(msvc): further work on MSVC port
only 7 files left
2018-02-06 10:11:10 -08:00
Nuno Lopes
ac6a16ddba feat(msvc): further work on MSVC compatibility 2018-02-06 10:11:09 -08:00
Sebastian Ullrich
fe2e95def3 fix(library/module_mgr): Revert "feat(library/module_mgr): save .olean files of non-dirty .lean files in server mode"
This reverts commit 18c2e3739a.
The change introduced a bug where a .olean file may have been saved even if
the corresponding module had produced errors during processing, as long as these
errors were not part of the current region of interest.
2018-02-05 14:36:27 +01:00
Sebastian Ullrich
6ab13a433d chore(library/type_context): should not have an implicit constructor, copy constructor, or assignment operator 2018-02-02 08:58:53 -08:00
Sebastian Ullrich
dc5e50e7f0 feat(frontends/lean/structure_cmd): hide out_param in projections 2018-02-02 08:58:52 -08:00
Sebastian Ullrich
3f497b8d8e fix(library/constructions/projection): out_params should always be implicit in projections 2018-02-02 08:58:52 -08:00
Leonardo de Moura
884e5a6d2c chore(library/compiler): remove obsolete optimization step
This optimization became obsolete after commit cd8c154bcd
2018-02-02 08:39:39 -08:00
Leonardo de Moura
dbeafaaeed chore(library/compiler/util): remove dead code 2018-02-02 08:34:14 -08:00
Leonardo de Moura
a6a1f7d874 chore(library/type_context): remove dead code from type_context 2018-02-02 08:30:01 -08:00
Leonardo de Moura
ffc04fd7df fix(library/tactic/smt): add temporary hack to workaround revert-all issue 2018-02-01 19:25:16 -08:00
Leonardo de Moura
a75b0d8eeb doc(library/local_context): document bug in the m_instance_fingerprint management 2018-02-01 18:03:46 -08:00
Leonardo de Moura
6060b75e62 fix(library/local_context): propagate m_instance_fingerprint 2018-02-01 17:46:31 -08:00
Leonardo de Moura
ec1a490a15 chore(*): annotate candidates for thread local cache reset 2018-02-01 14:59:37 -08:00
Leonardo de Moura
73b97084f7 chore(library/tactic): ac_manager ==> ac_manager_old
We will build the new one in `library/`
2018-02-01 12:39:43 -08:00
Leonardo de Moura
77767d5cb0 doc(library/tactic/ac_tactics): document another problem with ac_tactics module 2018-02-01 12:20:41 -08:00
Leonardo de Moura
e6a98ffe9c feat(library/type_context): improve unifier first-order approximation
@kha We can now solve unification constraints of the form

         ?m unit =?= itactic

I'm not very confident this new extension will improve usuability
instead of creating new counter-intuitive behavior.
At least, in the process of implementing it, I fixed two bugs,
and removed a nasty hack that was being used in the unifier.
Thus, even if we disable this feature in the future, some good came out
of it.

Although, the new extension locally increases the number of constraints
that can be solved, it may prevent terms that could be elaborated before
from being elaborated. I am not too concerned at this point because
I could not construct a natural example. I encountered one case, but it
was due to a problem that I fixed in the previous commit.
I reconstruct it here for the record. Suppose we have a constraint

         ?m_1 ?m_2 =?= itactic

Without the fix from the previous commit, `itactic` would unfold too
`id_rhs Type (tactic unit)`, and the constrain would be solved as

         ?m_1 := (id_rhs Type)
         ?m_2 := (tactic unit)

It succeeds locally, but the elaboration fails later when it tries to
synthesize the type class `has_bind (id_rhs Type)`.
The previous fixes the problem by making sure `itactic` is unfolded to
`tactic unit` as expected. `id_rhs` is an auxiliary definition
used to implement smart unfolding. That being said, the user could in
principle define `itactic` as `@id Type (tactic unit)`, and the constraint

         ?m_1 ?m_2 =?= itactic

will be solved as

         ?m_1 := (@id Type)
         ?m_2 := (tactic unit)

which is not the solution we want.
2018-01-30 15:42:17 -08:00
Leonardo de Moura
8c1665aca0 fix(library/type_context): unfold_definition should remove auxiliary id_rhs marker even when smart unfolding is not used 2018-01-30 15:31:04 -08:00
Leonardo de Moura
815327fc93 fix(library/equations_compiler): bug at pull_nested_rec
closes #1917
2018-01-30 13:49:47 -08:00
Leonardo de Moura
105c838692 chore(library/type_context): remove hack from unifier
This commit removes a hack that forced first-order unification
to be used to solve unification constraints of the form

             ?m a =?= f ?x

during elaboration. The hack force first-order unification
even when `?m a` is a higher order pattern and a precise solution
exists.
Moreover, the example that motivated that hack is not applicable
anymore since the type class `has_mem` is now defined as:
```
class has_mem (α : out_param $ Type u) (γ : Type v) := (mem : α → γ → Prop)
```
instead of
```
class has_mem (α : Type u) (γ : Type u → Type v) := (mem : α → γ α → Prop)
```

cc @kha
2018-01-30 12:48:48 -08:00
Leonardo de Moura
fa6697ffa8 feat(frontends/lean/pp): add option pp.annotations for debugging purposes 2018-01-30 12:48:48 -08:00
Leonardo de Moura
28b8020995 fix(library/type_context): bug in the unifier
One of the approximations used was generating type incorrect terms.
2018-01-30 12:48:48 -08:00
Leonardo de Moura
39f1cc0bab test(tests/lean/run): add new tests exposing bug in the unifier
This commit also documents the problem at type_context.cpp, and
describes a potential solution.
2018-01-30 12:48:48 -08:00
Leonardo de Moura
aa1473a6c8 refactor(library/type_context): add process_assignment_fo_approx 2018-01-30 12:48:48 -08:00
Leonardo de Moura
1c61129d40 feat(library/init/meta/tactic): expose approx at unify and is_def_eq tactics 2018-01-25 22:27:18 -08:00
Leonardo de Moura
77ae133baa fix(library/type_context): preprocess_class
@kha This commit fixes the bug we discussed on slack.
I had to repair one of the tests. The broken test made me
realize that if we use the unbundled approach to define something like
`is_semiring`

```
class is_semiring (α : Type) (plus : α → α → α) (mul : α → α → α) (zero : out_param α) (one : out_param α) :=
...
```
Then, to retrieve a `is_semiring` instance, we need to know `α`, `plus`
and `mul`. This is problematic because we may be in a context where one
of them cannot be inferred. This would force user to manually provide
the missing (input) parameter. We are not considering the unbundled
approach for complex algebraic structures such as `semiring`, `ring` and
`field`, but I wanted to document this limitation here since we may face
it in other type classes.

I think it is a bad idea to add back `inout_param` and have both:
`inout_param` and `out_param`. The previous `inout_param` created
many instabilities and hard to diagnose failures.
2018-01-24 17:30:04 -08:00
Leonardo de Moura
b5e2e8ed92 doc(library/module): document the persistent set_option discussion
cc @kha
2018-01-24 17:12:40 -08:00
Leonardo de Moura
adae5b9fa1 chore(library/mpq_macro): delete mpq_macro 2018-01-24 15:24:28 -08:00
Leonardo de Moura
2ae080a6d2 doc(library): comment code that need to be refactored for AC matching and algebraic normalizer 2018-01-24 15:09:11 -08:00
Leonardo de Moura
5182b5a081 chore(library/tactic): remove unnecessary dependency 2018-01-24 13:35:47 -08:00
Leonardo de Moura
d4e1a4a50a chore(library/system/io): tactic.run_io ==> tactic.unsafe_run_io 2018-01-24 10:32:32 -08:00