Commit graph

79 commits

Author SHA1 Message Date
Leonardo de Moura
90a79a0b06 chore: remove command universes
Now, `universe` may declare many universes. The goal is to make it
consistent with the `variable` command
2021-06-29 17:01:07 -07:00
Sebastian Ullrich
a02c6fd3eb chore: adapt stdlib & tests 2021-05-20 15:17:36 -07:00
Leonardo de Moura
7627458aac chore: fix tests
We are not using the `!` suffix anymore for keywords.
2021-03-12 15:10:50 -08:00
Sebastian Ullrich
8a02dfec4f feat: subsume variables under variable
/cc @leodemoura
2021-01-22 14:36:05 +01: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
800b4af15d test: indentation 2020-12-22 14:53:03 -08:00
Leonardo de Moura
839017fdae feat: add macro tactical solve 2020-12-22 14:36:20 -08:00
Leonardo de Moura
832c7412d6 feat: add first tactical
@Kha It has a few advantages over `<or>` (`<|>`).
- It is not an infix operator.
- It takes tactic sequences instead of tactics as arguments

For example, we can write
```
  first
    | apply h1; assumption
    | exact y; exact h3; assumption
```
or
```
first apply h1; assumption | exact y; exact h3; assumption
```
instead of
```
(apply h1; assumption) <|> (exact y; exact h3; assumption)
```
2020-12-22 14:10:07 -08:00
Leonardo de Moura
69d83ecb86 chore: make sure term and tactic parsers have disjoint infix operators 2020-12-22 14:10:07 -08:00
Sebastian Ullrich
756d7643f0 chore: rename syntaxMaxDepth option for consistency and discoverability
/cc @leodemoura
2020-12-21 16:25:01 +01:00
Leonardo de Moura
ffefd8db36 chore: remove weird syntax sugar from macro command
Before this commit,
```
macro term x:term : term => `($x)
```
would generate the notation
```
syntax "term" term : term
```
2020-12-10 08:09:47 -08:00
Leonardo de Moura
61dfe2b1db fix: letDecl
use `simpleBinderWithoutType` at `declSig` and `optDeclSig`
2020-11-12 16:22:57 -08:00
Leonardo de Moura
cae6aa95dc feat: support simpleBinder at letDecl 2020-11-12 13:25:38 -08:00
Leonardo de Moura
7e8a7e6660 feat: elaborate fun/forall binder extensions 2020-11-09 19:00:40 -08:00
Leonardo de Moura
7cbee83a8a feat: add try tactic 2020-11-03 17:20:52 -08:00
Leonardo de Moura
aafa09ddcd chore: fix test 2020-11-03 17:20:52 -08:00
Leonardo de Moura
f9194737f0 chore: fix tests 2020-10-31 19:19:18 -07:00
Leonardo de Moura
898a08a0c1 chore: avoid Has prefix in type classes
closes #203
2020-10-27 18:29:19 -07:00
Leonardo de Moura
db9e390b4d chore: remove new_frontend from tests 2020-10-25 09:16:38 -07:00
Leonardo de Moura
8cb1ff206c chore: move tests to new frontend 2020-10-23 14:07:26 -07:00
Leonardo de Moura
653f1406d6 chore: remove workaround 2020-10-06 08:28:41 -07:00
Leonardo de Moura
e635196f32 chore: fix test
I added a temporary workaround. I will remove it later.
2020-10-06 08:28:13 -07:00
Leonardo de Moura
c10e92b348 chore: add temporary workarounds 2020-09-30 07:05:46 -07:00
Leonardo de Moura
4fae8588fd test: optional ';' 2020-09-28 17:11:00 -07:00
Leonardo de Moura
e10edde5cd feat: optional ; in terms 2020-09-28 17:10:59 -07:00
Leonardo de Moura
d4c1432574 fix: tacticSeqBracketed 2020-09-28 17:10:59 -07:00
Leonardo de Moura
2755972447 fix: missing checkColGt and tests 2020-09-28 17:10:59 -07:00
Leonardo de Moura
75814c2d21 chore: fix tests 2020-09-15 11:11:05 -07:00
Leonardo de Moura
634f063631 feat: finish commit "using indentation" 2020-09-14 16:40:52 -07:00
Leonardo de Moura
a6b19cd4af feat: expand show-by and have-by macros 2020-09-14 15:08:28 -07:00
Leonardo de Moura
fc4ab139b5 feat: indented by
@Kha This one is not as useful as the indented `do`. When writing
interactive proofs I like the error message at the `}` showing the
resulting tactic state. We can simulate it using a `skip` in the end of the sequence :)
We remove the `skip` when the proof is done. Note that, the last `;`
is usually not part of the `by`. Example:
```lean
theorem ex (x y z : Nat) : y = z → y = x → x = z :=
fun _ _ =>
  have x = y by apply Eq.symm; assumption; -- <<< the last `;` is part of the `have`
  Eq.trans this (by assumption)
```
2020-09-14 14:20:02 -07:00
Leonardo de Moura
bbc3bec53b chore: move more tests to new frontend 2020-09-11 16:28:57 -07:00
Leonardo de Moura
2f4340f63c feat: refine refine tactic
Now `refine stx` reports an error when there are natural unassigned
metavariables after we elaborate syntax `stx`. The idea is that only
synthetic holes `?<hole-name>` become new goals.
The tactic `refine! stx` implements the Lean3 behavior.
2020-08-30 16:14:38 -07:00
Leonardo de Moura
6f0e9452b2 chore: remove begin ... end syntax
We should use `by { ... }` from now on.

cc @Kha
2020-08-30 14:15:33 -07:00
Leonardo de Moura
b74741b741 chore: "begin ... end" ==> "by { ... }"
cc @Kha
2020-08-30 14:01:27 -07:00
Leonardo de Moura
02acdee9ce feat: disable implicit lambda insertion for fun containing {} or []
cc @Kha
2020-03-26 14:32:12 -07:00
Leonardo de Moura
b4b5f2736f feat: elaborate [] and {} binder annotations in lambda abstractions
We can simulate Lean3 behavior.
2020-03-26 14:20:39 -07:00
Leonardo de Moura
07ffa535fe refactor: decide whether to insert implicit lambdas AFTER macro expansion
cc @Kha
2020-03-26 13:53:15 -07:00
Leonardo de Moura
2b3bdbe0cf test: implicit lambdas + notation 2020-03-26 12:31:04 -07:00
Leonardo de Moura
e682c1c88f fix: make sure @ disable new syntax and macros too
cc @Kha
2020-03-26 12:14:55 -07:00
Leonardo de Moura
6625656940 refactor: remove support for fun {a : A} => ...
The semantics was weird. It seems Agda is also having problems with
it. Here is an example that demonstrates how weird the semantics is:

```lean
check (fun {β α} (a : α) (b : β) => (b, a) : {α : Type} → {β : Type} → (a : α) → (b : β) → β × α)

-- Same example using `def`
def f : {α : Type} → {β : Type} → α → β → β × α :=
fun {β : Type} {α : Type} (a : α) (b : β) => (b, a)
```

Both commands were being accepted before this commit. Note that it
flips `β` and `α`.

Here is an example that did not work before this commit and would
confuse users.

```lean
check
  let id := fun {α} (a : α) => a;
  id [id 1]
```

users would have to write

```lean
check
  let id {α} (a : α) := a;
  id [id 1]
```

@Kha The Delaborator.lean test broke and I "fixed" by removing the
`{}` from it, and copying `produced` over `expected`. Please make sure
it still makes sense.
2020-03-26 10:40:16 -07:00
Leonardo de Moura
93de4ce7b3 feat: elaborate by 2020-02-13 11:45:51 -08:00
Leonardo de Moura
263d22576b test: add new implicit lambda test 2020-02-12 13:47:54 -08:00
Leonardo de Moura
fc404af645 feat: solve ?m t =?= c even when constApprox is disabled 2020-02-12 13:21:56 -08:00
Leonardo de Moura
98c925ed7e feat: elaborate #check_failure 2020-02-12 11:55:02 -08:00
Leonardo de Moura
30e0ccd8c4 feat: implicit lambdas
It is still work in progress
2020-02-11 13:43:05 -08:00
Leonardo de Moura
03b5b7d562 feat: implicit lambdas 2020-02-11 09:59:46 -08:00
Leonardo de Moura
adb940e879 feat: new test 2020-02-11 09:34:45 -08:00
Leonardo de Moura
7085072590 feat: allow implicitBinder and instBinder at fun 2020-02-11 08:26:10 -08:00
Leonardo de Moura
352b720728 test: add clear failure test 2020-02-09 16:48:36 -08:00