Leonardo de Moura
90cab68332
feat: keep going if there are missing alternatives at induction/cases
2021-03-08 17:09:53 -08:00
Leonardo de Moura
5f5cc55d6a
feat: add helper method
2021-03-07 12:04:14 -08:00
Leonardo de Moura
b7019d913e
chore: remove unnecessary lifts and implicits
...
Use autobound and autolift features
2021-03-07 09:01:54 -08:00
Leonardo de Moura
061b9bf60f
feat: set_option in terms and tactics
...
closes #330
2021-03-06 16:43:10 -08:00
Leonardo de Moura
0ed3f08c1b
feat: open in terms and tatics
...
See #330
2021-03-06 15:33:00 -08:00
Leonardo de Moura
4bcfc5f9a6
feat: open parser for terms and tactics
2021-03-06 15:32:59 -08:00
Leonardo de Moura
3107473c9f
feat: add rename tactic
...
cc @Kha
2021-03-03 18:32:25 -08:00
Leonardo de Moura
6cdc6cb1d0
feat: add contradiction
2021-03-03 17:00:54 -08:00
Leonardo de Moura
d1d26e5ba6
fix: use try clear
2021-02-19 13:46:02 -08:00
Leonardo de Moura
6263141f7b
fix: preserve InfoTree when tactics fail
...
cc @Kha @Vtec234
2021-02-17 15:20:33 -08:00
Leonardo de Moura
64413e9d4a
chore: cleanup
2021-02-17 15:13:05 -08:00
Leonardo de Moura
873634be7e
feat: hierarchical InfoTree
2021-01-09 14:10:11 -08:00
Leonardo de Moura
43f258af3f
chore: cleanup
2021-01-05 17:23:50 -08:00
Leonardo de Moura
9a1116d918
chore: remove <or>, first subsumes it
2020-12-22 14:10:08 -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
Leonardo de Moura
298bdfdcde
fix: focus behavior
2020-12-22 14:10:06 -08:00
Leonardo de Moura
289ed6485d
feat: eval allGoals
2020-12-22 09:52:54 -08:00
Leonardo de Moura
b254aafea0
chore: remove workaround
2020-12-22 07:19:33 -08:00
Leonardo de Moura
7d1e493531
chore: reactivate tactic match and introMatch
2020-12-22 07:15:47 -08:00
Leonardo de Moura
f34bf82e0f
chore: move tactic parsers introMatch and match to Lean/Parser/Tactic
2020-12-22 07:11:06 -08:00
Leonardo de Moura
9a8de1774c
chore: minor cleanup
2020-12-17 17:30:23 -08:00
Sebastian Ullrich
f9dcbbddc4
refactor: remove optional leading pipe from match, use many1Indent instead of sepBy1
2020-12-16 18:27:05 +01:00
Leonardo de Moura
04a07c15b9
chore: use deriving Inhabited
2020-12-13 11:57:59 -08:00
Sebastian Ullrich
e6493755e9
chore: stdlib: match_syntax ~> match
2020-12-08 17:32:02 +01:00
Leonardo de Moura
ae5aa51712
chore: add explicit discard
2020-12-08 06:18:18 -08:00
Leonardo de Moura
9d304df757
feat: heterogeneous Append experiment
...
@Kha This one required a bunch of manual fixes. The main issue is that
before we added the string interpolation feature, we created
`MessageData`s using `++` and coercions. For example, given
`(e : Expr)`, we would write
```
let msg : MessageData := "type: " ++ e
```
and rely on the coercions `String -> MessageData` and
`Expr -> MessageData`, and the instance `Append MessageData`.
However, heterogeneous operators "block" the expected type propagation downwards.
This kind of code is obsolete now since we can write a more compact
version using string interpolation
```
let msg := m!"type: {e}"
```
2020-12-01 16:32:41 -08:00
Leonardo de Moura
0869f38de4
chore: update structure, class, inductive
2020-11-27 15:09:30 -08:00
Leonardo de Moura
d6f778bec4
refactor: arbitrary without explicit arguments
...
@Kha I was tired of writing `arbitrary _` :)
There 0 places in the stdlib where the type needs to be provided.
If in the future we need to specify the type we can use
`arbitrary (α := <type>)`
2020-11-25 09:07:38 -08:00
Leonardo de Moura
5adfd37dfd
feat: add auxiliary KVMap for storing extra information at Exception.internal
2020-11-20 09:49:00 -08:00
Leonardo de Moura
f67c93191f
feat: use |>.
2020-11-19 08:38:47 -08:00
Leonardo de Moura
22ff6bb125
chore: process indent' without underscore hack
2020-11-12 12:05:00 -08:00
Leonardo de Moura
2d2d39c78e
chore: use mut
2020-11-07 17:32:13 -08:00
Leonardo de Moura
81d6e065e7
chore: adjust files and tests
2020-11-07 17:32:12 -08:00
Leonardo de Moura
730b6aa3a3
feat: admit goal when case .. => .. fails
2020-11-03 17:20:53 -08:00
Leonardo de Moura
6466bbbaf9
feat: admit alternatives that failed
2020-11-03 17:20:53 -08:00
Leonardo de Moura
51e7aa8b75
fix: backtrack Term.State at TacticM
...
It contains references to metavariables that are declared in the
backtracked `MCtx`
2020-11-03 17:20:53 -08:00
Leonardo de Moura
27c495c198
fix: Tactic.orelse was using the wrong try ... catch ...
2020-11-03 17:20:53 -08:00
Leonardo de Moura
c88d0c8a8c
feat: populate builtinTacticSeqParser with tacticSeq
2020-11-03 17:20:52 -08:00
Leonardo de Moura
8c9f148e2f
chore: use new termFor, termReturn, termTry, and tryUnless
2020-10-31 19:19:18 -07:00
Leonardo de Moura
88fb6acae3
chore: remove clutter
2020-10-28 13:29:17 -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
633578cfaf
chore: use StateRefT macro
2020-10-27 13:05:12 -07:00
Leonardo de Moura
13c2a8ff51
chore: remove #lang lean4 header
2020-10-25 09:54:07 -07:00
Leonardo de Moura
d89f559683
chore: fix definitions
...
See commit before update stage0 for explanation.
2020-10-24 07:27:25 -07:00
Leonardo de Moura
02521397ac
refactor: rename MonadExceptOf.catch => MonadExceptOf.tryCatch
2020-10-22 17:27:15 -07:00
Leonardo de Moura
82ee2e361b
chore: cleanup
2020-10-21 18:43:47 -07:00
Leonardo de Moura
ef18b0ab49
chore: use [builtinInit]
2020-10-19 14:58:38 -07:00
Leonardo de Moura
b1e720e6cc
chore: use #lang lean4 instead of new_frontend
2020-10-15 15:40:56 -07:00
Leonardo de Moura
c1dccb8154
feat: stx[i] as notation for stx.getArg i
2020-10-13 15:48:39 -07:00