Commit graph

14072 commits

Author SHA1 Message Date
Leonardo de Moura
f28def6c5e feat: add Meta.ppExpr 2020-09-10 17:27:14 -07:00
Leonardo de Moura
f871c7b552 feat: trace! macro in the new frontend 2020-09-10 15:18:20 -07:00
Leonardo de Moura
264ce93bc8 chore: simplify elabEval
`TermElab` is now on top of `IO`
2020-09-10 15:03:45 -07:00
Leonardo de Moura
40777c203b feat: add MonadEnv helper methods 2020-09-10 14:58:22 -07:00
Leonardo de Moura
22bdab67ff feat: expand sorry 2020-09-10 14:58:14 -07:00
Leonardo de Moura
ba4fdce508 feat: expand helper macros 2020-09-10 14:25:07 -07:00
Leonardo de Moura
d77dc5efb8 feat: add helper syntax 2020-09-10 13:31:45 -07:00
Leonardo de Moura
61bd10997a feat: add coercions for the new frontend 2020-09-10 13:24:13 -07:00
Leonardo de Moura
6b7088e71a fix: too restrictive condition 2020-09-10 11:20:09 -07:00
Leonardo de Moura
232fe8cadd doc: document parser trick 2020-09-10 11:20:09 -07:00
Leonardo de Moura
20152c1192 chore: change by precedence
@Kha it now uses the same precedence of `fun`.
The main motivation is to allow us to write `@by { ... }` instead of
`@(by { ... })`.

BTW, I am considering disabling implicit lambdas for `by ...` expressions.
It is automatically "intro"ducing the implicit variables without
giving an opportunity for users to pick their names.
2020-09-10 11:17:42 -07:00
Leonardo de Moura
b136c519e2 fix: scope and improve error message 2020-09-09 16:44:43 -07:00
Leonardo de Moura
02fc447b04 fix: error message 2020-09-09 16:42:41 -07:00
Leonardo de Moura
20bc004c70 feat: improve subst tactic 2020-09-09 16:20:15 -07:00
Leonardo de Moura
83410083a8 fix: do not generate code for noncomputable definitions 2020-09-09 15:28:41 -07:00
Leonardo de Moura
c78d0cf1f8 feat: use | position for reporting dependent-match elimination errors 2020-09-09 14:07:23 -07:00
Leonardo de Moura
854cc3418e feat: improve error message for dependent-match elimination failures
@Kha This is a first attempt to improve the error message for examples
like the one Andrew Kent posted on Zulip.
I created a simpler example using "vectors".
2020-09-09 13:43:06 -07:00
Leonardo de Moura
1215333e0f chore: use simpMacroScopes at ppGoal 2020-09-09 10:40:38 -07:00
Leonardo de Moura
c9f4f858b1 feat: ellipsis in constructor application patterns
Given
```
inductive Foo
| mk₁ (x y z w : Nat)
| mk₂ (x y z w : Nat)
```
We can now write
```
def Foo.z : Foo → Nat
| mk₁ (z := z) .. => z
| mk₂ (z := z) .. => z
```
instead of
```
def Foo.z : Foo → Nat
| mk₁ _ _ z _ => z
| mk₂ _ _ z _ => z
```

cc @Kha
2020-09-09 10:21:06 -07:00
Leonardo de Moura
b24d1c2d90 feat: add .. syntax for pattern applications 2020-09-09 09:55:29 -07:00
Leonardo de Moura
276e6a55ba feat: improve collectPatternVars
Add support for `@` and named parameters.
Fix how ctor fields are processed.
2020-09-09 09:52:25 -07:00
Leonardo de Moura
4cb3d5faa4 chore: remove workaround 2020-09-09 06:44:36 -07:00
Leonardo de Moura
34291e2151 feat: add Name.simpMacroScopes
@Kha We currently have a few macros that create binder names
such as `x`. These macros rely on the hygienic framework. This part is
great. Before this commit we were simply erasing the macro
scopes when creating the actual binders at `Expr.lean`.
The result produced expressions that were hard to debug.
For example, consider the following scenario

1- Macro creates a few binder names using ``x <- `(x)``
2- We create a lambda expression `t` with these binder names.
3- Then, we use `lambdaTelescope t fun xs body => ...`
   Now, if we trace `xs` and `body`, we get `#[x, x, ... x]` and
   we can't distinguish the different `x`s in `body`.
   So, it is really hard to debug anything using the traces.

This commit adds `Name.simpMacroScopes` for simplying "macro scoped"
names. Example: given `x._@.Init.Data.List.Basic._hyg.2.5`, it
produces `x.2.5`. I exported this function, and used it in the old
pretty printer.

I have considered modifying `lambdaTelescope` to make sure it creates
unused names. I think this option is bad because it introduces
overhead, and in a few places we want to preserve the binder names.

I have also considered replacing the `let x := x.eraseMacroScopes` at
`Expr.lean` with `let x := x.simpMacroScopes`. I think this option is
bad since we are destroying scoping information and will not be able
to distiguish which variables have macro scopes when processing
tactics.

Anyway, the solution in this commit is good for this week, but we
should discuss a more permanent solution next week.
2020-09-08 18:22:44 -07:00
Leonardo de Moura
2e11053eb5 fix: matchAlt macros should not consume implicit arguments
As in Lean3, the following example is a valid definition

```
def head : {α : Type} → List α → Option α
| _, a::as => some a
| _, _     => none
```
2020-09-08 17:31:57 -07:00
Leonardo de Moura
96ffd206ca feat: add findRecArg 2020-09-08 17:25:35 -07:00
Leonardo de Moura
ea2e86afba feat: add Array.allDiff 2020-09-08 16:16:14 -07:00
Leonardo de Moura
77f8fe0e41 fix: mkLetRecClosureFor 2020-09-08 15:14:46 -07:00
Leonardo de Moura
fc1e4cb533 feat: add Array.isPrefixOf 2020-09-08 14:40:43 -07:00
Leonardo de Moura
603f2dee73 fix: unnecessary get! 2020-09-08 13:15:57 -07:00
Leonardo de Moura
ecda364985 feat: add Expr.forEach 2020-09-08 13:03:53 -07:00
Leonardo de Moura
9151fef49d feat: abstract proofs occurring in binders 2020-09-08 12:29:35 -07:00
Leonardo de Moura
0a853b2c44 feat: abstract nested proofs in definitions 2020-09-08 11:59:26 -07:00
Leonardo de Moura
296981319c feat: add abstractNestedProofs 2020-09-08 11:48:28 -07:00
Leonardo de Moura
2e335bf802 feat: ensure MonadCacheT does not implement MonadState 2020-09-08 11:33:12 -07:00
Leonardo de Moura
9a69ab568e feat: add mkAuxName for MonadEnv 2020-09-08 10:56:31 -07:00
Leonardo de Moura
ebe2cf272e feat: add MonadCacheT 2020-09-08 10:48:47 -07:00
Leonardo de Moura
b52713ef8f refactor: split PreDefinition.lean into smaller files 2020-09-08 08:23:41 -07:00
Leonardo de Moura
fc0be5e391 feat: improve error message position when definition type is metavar 2020-09-07 17:16:44 -07:00
Leonardo de Moura
0ec284db24 feat: check for unassigned metavars before recursion elimination 2020-09-07 17:11:10 -07:00
Leonardo de Moura
18a9cb9b43 feat: improve error message position for binders with implicit types 2020-09-07 17:02:43 -07:00
Leonardo de Moura
cf944e32cf chore: add back support for Lean3 mixfix/reserve syntax
We have tests that rely on them :(
2020-09-07 16:40:12 -07:00
Leonardo de Moura
1bc9b5c119 feat: expand ! and ¬ syntax 2020-09-07 16:35:28 -07:00
Leonardo de Moura
b6079e12b8 feat: expand macros infix, infixl, infixr, prefix, and postfix 2020-09-07 16:35:25 -07:00
Leonardo de Moura
804ebcec16 feat: adjust mixfix syntax 2020-09-07 15:55:02 -07:00
Leonardo de Moura
aed9b16dc8 feat: add MatcherInfo extension 2020-09-07 15:08:21 -07:00
Leonardo de Moura
fded18d114 chore: mkElim ==> mkMatcher 2020-09-07 14:33:39 -07:00
Leonardo de Moura
43b593a888 feat: check for nonsensical declaration modifiers combinations 2020-09-07 12:36:58 -07:00
Leonardo de Moura
91363bae19 feat: improve resolveLVal 2020-09-07 12:25:43 -07:00
Leonardo de Moura
7809fe0b01 fix: def+match macro 2020-09-07 11:34:53 -07:00
Leonardo de Moura
a12bc273bb refactor: src/Lean/Meta/EqnCompiler ==> src/Lean/Meta/Match 2020-09-07 11:09:48 -07:00