Commit graph

104 commits

Author SHA1 Message Date
Leonardo de Moura
0b92195ec8 feat: refine auto bound implicit feature 2022-04-21 10:17:15 -07:00
Leonardo de Moura
ea682830d1 refactor: change addTermInfo type 2022-04-08 15:01:57 -07:00
Leonardo de Moura
de2e2447d2 chore: style 2022-04-07 17:35:05 -07:00
Leonardo de Moura
dcb88d969a feat: improve auto implicit binder names in definitions/theorems 2022-04-07 14:46:59 -07:00
Leonardo de Moura
1107705525 fix: jump to definition inside recursive definitions was not working on VS Code
Remark: it was working on Emacs.
2022-04-06 14:27:49 -07:00
Leonardo de Moura
574927ab0d fix: jump to definition for recursive declarations 2022-04-06 13:01:16 -07:00
Leonardo de Moura
6631d92d7b fix: addAutoBoundImplicitsOld occurrences at MutualDef.lean and Structure.lean
This commit also fixes non-termination at `collectUnassignedMVars`
2022-03-25 09:07:59 -07:00
Leonardo de Moura
519b780164 doc: document InfoTree issue 2022-03-25 07:12:07 -07:00
Leonardo de Moura
5825eb394f refactor: move isOutParam to Expr.lean, rename consumeAutoOptParam => consumeTypeAnnotations 2022-03-10 07:37:41 -08:00
Leonardo de Moura
3f9c854194 feat: auto local implicit chaining 2022-03-05 17:30:15 -08:00
Leonardo de Moura
f7130d8e07 refactor: use CPS at addAutoBoundImplicits
We want to be able to declare new local variables there.
2022-03-05 16:24:33 -08:00
Leonardo de Moura
ad5099ec3c fix: mkLetRecClosureFor for nested let-recs
closes #1020
2022-02-16 12:44:02 -08:00
Leonardo de Moura
1f230c336b chore: style 2022-02-15 13:32:48 -08:00
Leonardo de Moura
12e2a79170 chore: fix codebase after removing auto pure 2022-02-03 18:08:14 -08:00
Leonardo de Moura
be4c86f780 chore: remove temporary workarounds 2022-01-17 17:03:15 -08:00
Leonardo de Moura
f8653a8cb7 chore: add temporary workaround 2022-01-17 16:58:39 -08:00
Leonardo de Moura
bac91b9b5b chore: remove arbitrary 2022-01-15 12:14:27 -08:00
Leonardo de Moura
cee8ad1b66 chore: fix codebase 2022-01-10 15:07:55 -08:00
Leonardo de Moura
929aafa4c8 fix: generate an error if declaration name clashes with variable name
closes #799
2022-01-10 12:08:11 -08:00
Leonardo de Moura
b2d26380f2 fix: remove auxiliary discriminant let-declarations 2022-01-07 15:03:19 -08:00
Leonardo de Moura
b6ef65d8fd fix: where structure instance parser
closes #753
2021-12-12 07:52:52 -08:00
Leonardo de Moura
a3361e7d86 fix: missing universe assignments made during TC resolution
closes #796
2021-12-12 07:07:13 -08:00
Leonardo de Moura
68bd55af32 chore: fix codebase 2021-12-10 13:12:09 -08:00
Sebastian Ullrich
77aed3a0b1 fix: add binder info nodes for parameter copies in body 2021-12-09 18:12:51 +01:00
Leonardo de Moura
23740778d4 refactor: termination hints 2021-10-03 18:09:35 -07:00
Leonardo de Moura
640fc964b6 feat: basic termination_by bookkeeping 2021-09-21 15:24:42 -07:00
Leonardo de Moura
445cc3085f refactor: avoid Name, MVarId, and FVarId confusion 2021-09-07 19:06:50 -07:00
Leonardo de Moura
75b8d9aa86 feat: add support for classes with a prefix of outParams at deriving ... 2021-09-03 11:33:09 -07:00
Leonardo de Moura
bbb74bfd9a feat: elaborate optional deriving after def 2021-09-03 10:22:17 -07:00
Leonardo de Moura
672849e302 feat: improve error message for constant a b c : Nat
see issue  #645
2021-08-26 08:26:33 -07:00
Leonardo de Moura
21c68a49e3 feat: elaborate nonrec modifier 2021-08-21 17:02:54 -07:00
Sebastian Ullrich
8420a33626 fix: do not leak nested definitions from example 2021-05-03 09:11:14 +02:00
Leonardo de Moura
a6888f72dd fix: instance + where + implicts issue
The following could not be elaborated.

```lean
instance : MulComm Bool where
  mulComm := fun {a b} =>
    match a, b with
    | true, true   => rfl
    | true, false  => rfl
    | false, true  => rfl
    | false, false => rfl
```
2021-04-24 20:07:35 -07:00
Leonardo de Moura
390a476caf fix: incorrect use of unreachable! 2021-04-07 18:11:10 -07:00
Leonardo de Moura
7c8e27b044 chore: minor 2021-04-07 11:14:46 -07:00
Leonardo de Moura
c35f96ac82 feat: avoid bizarre error message for definition without body
@kha This is a temporary hack to avoid a incomprehensible error
message. I will try to tweak the parser error recovery in another
commit.
2021-03-31 17:05:34 -07:00
Leonardo de Moura
b899447817 refactor: move collectFVars to Meta 2021-03-26 19:16:21 -07:00
Leonardo de Moura
99cd4fa720 feat: refine auto bound implicit locals 2021-03-23 17:33:15 -07:00
Leonardo de Moura
be841a7cad chore: throwError! => throwError, throwErrorAt! => throwErrorAt
@Kha I marked the corresponding methods as `protected`.
I currently can't stand `throw_error`, and I am optimistic about
server highlighting feature you are working on :)
2021-03-11 11:59:45 -08:00
Leonardo de Moura
164577d94e chore: remove parser! and tparser!
The new macros are called "leading_parser` and `trailing_parser`.

cc @Kha
2021-03-11 09:36:58 -08:00
Leonardo de Moura
68143ca8ba chore: trace[...]! ==> trace[...]
@Kha I think this one is a good change, there is no real reason for
using the `!` suffix here.
2021-03-10 18:44:43 -08:00
Leonardo de Moura
be4cf605fd feat: improve error message
closes #331
2021-03-05 13:42:54 -08:00
Leonardo de Moura
0c1c6c0a73 feat: convert universe metavariables into parameters after elaborating theorem header
closes #318

Like Lean 3, we are doing it only for theorems.
@Kha, we talked about doing it for definitions too, it sounded like a
good idea, and it would make the system's behavior more uniform, but
unfortunately it creates too many problems. There are so many trivial
cases where it breaks. Here are some examples.

1- Definitions that take multiple bundled structures
```
def foo (s1 : Group) (s2 : CommRing) ...
```
They are universe polymorphic, and the different structures must be in
the same universe, but we don't know it when we elaborate the header,
that is, we need to elaborate the body.

An extreme case is `PUnit` occurring in the header. It is universe
polymorphic, but we only lear the constraints on this universe after
we elaborate the body.

2- All files containing unification hints broke.
Again, there are universe constraints on the header that we only learn
after we elaborate the body.

3- Many `CoeSort` and `CoeFun` examples broke.
Example:
```
structure Group :=
  (carrier : Type u) (mul : carrier → carrier → carrier) (one : carrier)

instance GroupToType : CoeSort Group (Type u) :=
  CoeSort.mk (fun g => g.carrier)
```
We would have to write
```
instance GroupToType : CoeSort Group.{u} (Type u) :=
  CoeSort.mk (fun g => g.carrier)
```
We would have to provide universe level parameters manually in this
kind of instance. I think it would be too annoying.
2021-02-25 16:53:58 -08:00
Leonardo de Moura
1b16f9b33c fix: make sure kernel checks examples
We discard the resulting environment for examples.

closes #309

cc @Kha
2021-02-25 13:34:27 -08:00
Leonardo de Moura
5a02c4facc chore: cleanup 2021-01-28 15:23:46 -08:00
Leonardo de Moura
ea0fda39bc chore: Declaration.lean naming convention
`Declaration.lean` was one of the first Lean 4 files, and was still
using an old naming convention.

cc @Kha
2021-01-20 17:07:02 -08:00
Leonardo de Moura
fdc0f906f4 feat: improve error message position for compiler errors 2021-01-12 17:10:11 -08:00
Leonardo de Moura
36008271ea feat: ensure no unassigned metavariables in the declaration header when type is explicitly provided 2021-01-11 16:40:14 -08:00
Leonardo de Moura
84f78edb31 feat: store declaration ranges 2021-01-11 12:50:11 -08:00
Leonardo de Moura
7dec568ef6 fix: missing withDeclName 2021-01-11 06:50:55 -08:00