Commit graph

4729 commits

Author SHA1 Message Date
Leonardo de Moura
ab481d7e7b chore(library/init/meta): remove unnecessary primitives 2018-06-05 16:13:22 -07:00
Leonardo de Moura
0119926022 fix(kernel/expr): constructor order 2018-06-05 15:56:51 -07:00
Leonardo de Moura
45202eca16 chore(library/init/meta): cleanup 2018-06-05 15:32:59 -07:00
Leonardo de Moura
330c9afbc0 feat(library/metavar_context): store user_name at metavar_decl 2018-06-05 14:29:55 -07:00
Leonardo de Moura
fc8aa30f0f chore(library/pp_options): remove dead option 2018-06-05 14:27:04 -07:00
Leonardo de Moura
6472cb0579 chore(kernel/abstract_type_context): rename has_local_pp_name 2018-06-05 14:26:31 -07:00
Leonardo de Moura
8ae42417eb fix(library/compiler/vm_compiler): missing case 2018-06-05 11:07:38 -07:00
Leonardo de Moura
0dd25b0a24 refactor(util,library): move subscripted_name_set to library 2018-06-05 08:06:32 -07:00
Leonardo de Moura
ff3a3177c3 chore(library/local_context): get_pp_name => get_user_name 2018-06-04 16:08:28 -07:00
Leonardo de Moura
de48d49b53 feat(kernel): preparing for adding new inductive datatype module 2018-06-01 14:47:49 -07:00
Leonardo de Moura
ac0352b584 refactor(kernel): remove quotitent normalizer extension
The `quot` type is now implemented in the kernel.
We will do the same thing for inductives.
We will not support normalizer extensions anymore in Lean4.
It doesn't make sense since we settled with 2 extensions: quotients and
inductives. Moreover, any new extension would require substantial
changes (e.g., code generator).
The normalizer_extension feature was useful when we were experimenting
with different kernel flavors.
2018-06-01 10:52:17 -07:00
Leonardo de Moura
722974e8c7 feat(kernel): add option to skip type checking at add_meta 2018-05-31 17:27:55 -07:00
Leonardo de Moura
9a671d7c7d chore(library/compiler): delete rec_fn_macro 2018-05-31 17:11:25 -07:00
Leonardo de Moura
b95e710e8c feat(library/compiler, library/equations_compiler): avoid rec_fn_macro in the equation and bytecode compilers 2018-05-31 17:08:12 -07:00
Leonardo de Moura
eab962bbc6 feat(kernel): add add_meta 2018-05-31 15:40:50 -07:00
Leonardo de Moura
cab6b39c76 refactor(library): remove sorry checking
We have to revise how we do this.
2018-05-31 15:20:39 -07:00
Leonardo de Moura
112d1da8d0 refactor(library/module): no need to store trust lvl in declarations
We are going to delete macros. So, we don't need to store trust_lvl information.
2018-05-31 14:55:18 -07:00
Leonardo de Moura
3c1ccc9b74 refactor(kernel): use m_meta instead of m_trusted 2018-05-31 11:18:00 -07:00
Leonardo de Moura
e80765daca fix(library/export_decl): bug at export_decl_modification::perform
The `perform` method was adding the modification to the environment
where it was being applied.
2018-05-31 09:16:46 -07:00
Leonardo de Moura
80545832f4 chore(library): remove user attributes 2018-05-31 09:10:41 -07:00
Leonardo de Moura
d3272ca1c5 refactor(frontends/lean,library/tactic/kabstract): remove add_key_equivalence command
This command was never used in the Lean3 corelib and mathlib.
It is safe to assume it is not needed.
2018-05-30 14:10:03 -07:00
Leonardo de Moura
d707a27c2b chore(library/class): unnecessary dependency 2018-05-30 14:05:21 -07:00
Leonardo de Moura
843cd9bacb chore(library/compiler/rec_fn_macro): remove dead code 2018-05-30 13:16:34 -07:00
Leonardo de Moura
2ddb9d1598 refactor(library): remove delayed_abstraction macro
We replace them with a new kind of (delayed) assignment at `metavar_context`
```
mvar := (lctx, locals, v)
```
where `lctx` is a local context, `locals` is a list of local
constants, and `v` is an expression.
When all metavariables in `v` are assigned, this assignment is replaced with
```
mvar := Fun(locals, v)
```
2018-05-30 10:04:04 -07:00
Leonardo de Moura
c9a6f98454 chore(library/sorry): style 2018-05-29 22:27:03 -07:00
Leonardo de Moura
7842036aba feat(library/type_context): avoid delayed_abstractions when creating binders lambda/pi/let
This is the first step to eliminate the delayed_abstraction macro.
2018-05-29 16:37:33 -07:00
Leonardo de Moura
0b1525b58e fix(library/type_context): is_quick_class bug
It was returning false for expressions such as `let x := 10 in has_add nat`.
2018-05-29 15:12:44 -07:00
Leonardo de Moura
978ef203b9 fix(frontends/lean/elaborator): the is_def_eq test must be performed in the right local context 2018-05-29 13:35:01 -07:00
Leonardo de Moura
1332fbabd6 feat(library,frontends): remove sorry macro
Lean4 will not have macros.
2018-05-24 14:00:30 -07:00
Leonardo de Moura
75c63ec921 refactor(*): list<name> ==> obj_list<name> 2018-05-23 15:48:43 -07:00
Leonardo de Moura
4af1f31877 feat(util, kernel): add obj_list wrapper for Lean list objects, and use it to implement list of universe levels 2018-05-23 14:48:22 -07:00
Leonardo de Moura
306c300226 refactor(kernel/level): implement level on top of object 2018-05-23 09:54:46 -07:00
Leonardo de Moura
b2f3d3f456 chore(*): remove redundant code 2018-05-22 16:46:04 -07:00
Leonardo de Moura
160b7e8847 refactor(library/init/meta/expr): local_const will have only one field
In Lean3, we supported two kinds of local constant:
context-less (inherited from Lean2) and context-based (type,
binder-info and pretty printing name are stored in the context).
The context-less was used in the kernel and a few modules we kept when
we moved from Lean2 to Lean3. Even if we keep the hybrind
representation, we should not expose the context-less to users.
2018-05-21 15:36:09 -07:00
Leonardo de Moura
92ff42776c chore(library/tactic): remove match_tactic 2018-05-20 17:33:31 -07:00
Leonardo de Moura
4de9b8c177 chore(library/vm): rename constants 2018-05-20 12:30:15 -07:00
Leonardo de Moura
d92679f969 refactor(*): replace name with lean.name 2018-05-20 09:42:44 -07:00
Leonardo de Moura
a52b418452 refactor(*): mk sure old name has same shape of new lean.name type 2018-05-20 08:48:48 -07:00
Leonardo de Moura
2ebf8ab8f1 chore(*): unnecessary #includes 2018-05-18 13:19:22 -07:00
Leonardo de Moura
1bc7c0812c chore(kernel,library): remove task from the kernel and library 2018-05-18 09:06:03 -07:00
Leonardo de Moura
8ee2f4fea1 feat(*): basic runtime string support 2018-05-14 16:52:55 -07:00
Leonardo de Moura
0556412f8d refactor(*): add runtime folder
@kha The runtime folder includes what is needed to link a
standalone Lean program. It is still contains some unnecessary files.
We will be able to remove them after we release Lean4.
2018-05-14 14:23:56 -07:00
Leonardo de Moura
f8cedb33e7 fix(library/type_context): bug introduced at d85c30fde1 2018-05-09 10:18:53 -07:00
Leonardo de Moura
d85c30fde1 perf(library/init/data): mark usize, uint16, uint32 and uint64 as [irreducible]
Without these annotations, Lean will timeout when trying to synthesize
the type class instance `decidable_eq uint32`. The type class resolution
problem will produce the unification problem:
```
decidable (@eq uint32 a b) =?= decidable (@eq usize ?x ?y)
```
which Lean tries to solve by assigning `?x := a`.
During the assignment, the types of `?x` and `a` are unified with "full
force". Thus, we get the constraint
```
usize_sz =?= uint32_sz
```
which will take forever to be solved when peforming the computation in
unary arithmetic.

Remark: this commit also makes sure that `type_context` will not unfold
irreducible definitions when trying to unify/match the types.

The new test `type_class_performance1.lean` exposes the problem fixed
by this commit.
2018-05-07 18:07:04 -07:00
Leonardo de Moura
3079d2d007 feat(library/init/lean/name): add hashable instance 2018-05-06 07:49:17 -07:00
Leonardo de Moura
162f817fa3 feat(library/init/data/hashable): add builtin string hash 2018-05-06 07:28:05 -07:00
Leonardo de Moura
ff7e691d66 feat(library/vm): add support for system.platform.nbits in the VM 2018-05-03 15:54:54 -07:00
Leonardo de Moura
acade175b6 feat(library/init/data/array): store dimension in the array
The array dimension is now stored inside the array.
The main motivation is that it reflects the actual runtime implementation.
We need to store the array size to be able to GC it.
So, it feels silly to have the array size stored in each array object,
but we cannot use this information.
For example, in the `hashmap` we implemented the bucket array using
`array`, and we store the `size` of the array.
Same for the Lean3 `buffer` object.
The `buffer` object doesn't even need to exist.
The actual `array` implementation is the `buffer`
2018-05-03 15:43:03 -07:00
Leonardo de Moura
dde79a8783 fix(library/vm/vm_io): compilation warning 2018-05-03 10:30:39 -07:00
Leonardo de Moura
48ba4370d5 feat(library/system/io): implement io using string instead of char_buffer 2018-05-02 17:31:51 -07:00