Commit graph

84 commits

Author SHA1 Message Date
Leonardo de Moura
0e1f645b07 fix: fixes #450 2021-05-10 13:55:06 -07:00
Leonardo de Moura
73b7a754ee fix: let_fun with patterns 2021-05-06 15:11:22 -07:00
Leonardo de Moura
45bcf4a32c feat: check instance implicit binder annotations 2021-04-28 17:15:08 -07:00
Sebastian Ullrich
75e95f93a9 feat: improve let error locality 2021-04-27 16:38:46 -07:00
Sebastian Ullrich
9301e05a7e feat: double-quoted quotation semantics and basic precheck hooks 2021-04-27 16:38:37 -07:00
Sebastian Ullrich
e9441e4d45 refactor: iterative fun expansion as a macro 2021-04-27 16:38:37 -07:00
Leonardo de Moura
f47f605039 fix: remove incorrect test
It had two problems:
- It was preventing coercions from being applied.
- It was compromising error recovery. The body of the lambda was not
being elaborated when the exception was thrown.

The new error message is more verbose and potentially confusing, but
it is better than the one produced this morning.
2021-04-24 22:17:29 -07:00
Leonardo de Moura
10185d24dd feat: improve error message 2021-04-24 20:43:13 -07:00
Leonardo de Moura
132d6de78d fix: antipattern
We should never assume a `Syntax` node has a specific number of
children because the parser error recovery may produce partial
abstract syntax trees. We should use `stx[i]` instead because
`Syntax.getOp` returns `Syntax.missing` when `i` is out of bounds.
2021-04-07 10:26:05 -07:00
Leonardo de Moura
62590b3715 fix: code is reachable 2021-04-04 20:18:49 -07:00
Leonardo de Moura
9f9529467e chore: document recent modifications 2021-03-30 13:29:23 -07:00
Leonardo de Moura
4ec6804667 fix: issue at expandMatchAlts 2021-03-30 12:55:59 -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
5049d92968 chore: remove let! and let* notation 2021-03-11 10:42:50 -08:00
Leonardo de Moura
e7140959c4 chore: add elaborator for let_fun and let_delayed 2021-03-11 10:40:25 -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
c1231b1b43 fix: fixes #317
BTW, I had to add the auxiliary `loop` fuction to workaround a bug in the
old compiler C++ code.

cc @Kha
2021-02-22 11:09:19 -08:00
Leonardo de Moura
51699f3a5b feat: ensure binder names are atomic 2021-01-28 11:27:28 -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
Sebastian Ullrich
79107a2316 feat: copy & store whole ref range in SourceInfo 2021-01-20 16:48:50 +01:00
Leonardo de Moura
0672247ce8 chore: make comments VS Code friendly 2021-01-15 13:53:37 -08:00
Leonardo de Moura
fb52ec8ef5 feat: store binder information in the InfoTree
@Vtec234 I am storing the binder information using `TermInfo`.
If it helps, I can add a custom `Info` constructor.
Example: `| Info.ofBinderInfo (i : BinderInfo)`.
2021-01-14 12:19:21 -08:00
Sebastian Ullrich
13dbe9c7c2 chore: remove dead code 2021-01-08 18:55:21 +01:00
Leonardo de Moura
f0ac477d2e feat: add sanity checks 2021-01-01 18:31:28 -08:00
Sebastian Ullrich
cf73233dd2 refactor: use quotations & implicit token positions from getRef to clean up a bit 2020-12-21 17:32:36 +01:00
Sebastian Ullrich
29c2023410 fix: adapt to new matchAlt syntax 2020-12-16 18:52:56 +01:00
Sebastian Ullrich
f9dcbbddc4 refactor: remove optional leading pipe from match, use many1Indent instead of sepBy1 2020-12-16 18:27:05 +01:00
Sebastian Ullrich
d22d639fcb refactor: rename "antiquot scope" ~> "antiquot splice" 2020-12-16 17:44:20 +01:00
Sebastian Ullrich
9e06680541 chore: remove old antiquotations splice syntax 2020-12-12 14:57:14 +01:00
Sebastian Ullrich
e6493755e9 chore: stdlib: match_syntax ~> match 2020-12-08 17:32:02 +01:00
Sebastian Ullrich
c63b770a7c refactor: reduce dependencies on Lean.Elab.Quotation 2020-12-08 17:13:32 +01:00
Leonardo de Moura
ae5aa51712 chore: add explicit discard 2020-12-08 06:18:18 -08:00
Leonardo de Moura
7e4b7e1400 fix: getFunBinderIds 2020-12-07 12:15:55 -08:00
Leonardo de Moura
5a396a4872 feat: insert auto bound implicit arguments before explicitly provided ones
cc @Kha
2020-11-28 12:45:57 -08:00
Leonardo de Moura
4fc32d114f chore: "unbound implicit" => "auto bound implicit" 2020-11-28 12:45:57 -08:00
Leonardo de Moura
0869f38de4 chore: update structure, class, inductive 2020-11-27 15:09:30 -08:00
Leonardo de Moura
ac85650e0a feat: add optional where clause at declarations
closes #191

@Kha Note that it expands into a "let rec".
There are many other places where an optional `where`-clause is
useful. We can add them later. It is relatively easy to add support in
other places using the new helper functions
`expandWhereDeclsOpt` and `expandMatchAltsWhereDecls`
2020-11-23 12:04:51 -08:00
Leonardo de Moura
7496f4377f fix: issues with unbound implicit locals
This commit also add support for them in the `inductive` command.
2020-11-21 16:17:38 -08:00
Leonardo de Moura
3ff494832d chore: cleanup 2020-11-21 08:59:21 -08:00
Leonardo de Moura
f3779f1542 feat: add support for unbound implicit locals 2020-11-20 12:22:27 -08:00
Leonardo de Moura
7e8a7e6660 feat: elaborate fun/forall binder extensions 2020-11-09 19:00:40 -08:00
Leonardo de Moura
2d2d39c78e chore: use mut 2020-11-07 17:32:13 -08:00
Leonardo de Moura
d6418299c7 chore: naming convention 2020-10-27 13:05:13 -07:00
Sebastian Ullrich
78a8bc7b7e feat: adapt elaborator to preceding change 2020-10-27 16:50:58 +01:00
Leonardo de Moura
79609938a8 feat: allow universe constraints to be postponed longer
Before this commit, each `isDefEq u v` invocation would fail if there
were pending universe level constraints. This commit, moves the
postponed universe constraints back to the `MetaM` state.
It also adds the combinator
```lean
withoutPostponingUniverseConstraints x
```
which executes `x` and throws an error if there are pending universe
constraints. We use the combinator at `elabApp` and `elabBinders`.
Without this commit, we would fail to elaborate simple terms such as
```lean
  Functor.map Prod.fst (x s)
```
because after elaborating `Prod.fst` and trying to ensure its type
match the expected one, we would be stuck at the universe constraint:
```
  u =?= max u ?v
```

Another benefit of the new approach is better error messages. Instead
of getting a mysterious type mismatch constraint, we get a list of
universe contraints the system is stuck at.

cc @Kha
2020-10-26 15:50:05 -07:00
Leonardo de Moura
cffa3b0039 chore: cleanup 2020-10-26 07:42:08 -07:00
Leonardo de Moura
13c2a8ff51 chore: remove #lang lean4 header 2020-10-25 09:54:07 -07:00
Leonardo de Moura
1495f403a1 chore: use builtin_initialize instead of initialize at src/Lean 2020-10-19 15:17:02 -07:00