Leonardo de Moura
833c587fa3
feat: add generate, newSubgoal, tryResolve, and simpler table
...
TODO: `resume`
2019-12-02 19:00:43 -08:00
Leonardo de Moura
3eabda1c4d
feat: add withMCtx
2019-12-02 12:48:34 -08:00
Leonardo de Moura
028531ba9b
chore: M => SynthM
2019-12-02 11:41:44 -08:00
Leonardo de Moura
798001af75
refactor: do not save/restore cache at withNewMCtxDepth
2019-12-02 11:17:20 -08:00
Leonardo de Moura
770649ce1d
refactor: do not save/restore cache at "telescope" methods
...
@kha @dselsam FYI
The original motivation for saving/restoring the cache was not
correctness, but cache size management. When we go inside a binder
using the telescope methods, we extend the local context with new fresh
free variables, execute the action `k` using the new extended local
context, and then restore it. Any cached result containing these
fresh variables is dead after executing `k`. So, `savingCache` here
could be viewed as a "checkpoint". However, it also removes any
cached entry that does not contain the new fresh variables.
I found this inconvenient in practice, and it is the wrong choice
in a few cases. Example: we have a `forall` expr (aka arrow), and use a
telescope to go inside, and then invoke TC. If the telescope uses
`savingCache`, we lose the cached TC instance witness. This is
wasteful since the witness often doesn't even depend on the new fresh
free variables created by the telescope.
Thus, this commit removes the `savingCache` occurrences from
the "telescope" methods. Users may still manually use it if
they think it is appropriate. That is, they can write
```lean
savingCache $ forallTelescope e $ fun xs body => <code>
```
if they really want to discard any new cache entry created while
executing `<code>`.
2019-12-02 11:11:49 -08:00
Leonardo de Moura
00a5860ce6
feat: add withMVarContext
...
cc @dselsam @kha
2019-12-02 10:50:00 -08:00
Leonardo de Moura
76d146b879
refactor: simplify SynthInstance.M
2019-12-02 10:36:57 -08:00
Leonardo de Moura
14de4e6965
feat: add trySynthInstance
2019-12-01 18:52:31 -08:00
Leonardo de Moura
f85ac7b5dc
feat: add isLevelDefEqStuck exception
2019-12-01 18:42:33 -08:00
Leonardo de Moura
7e34cb4474
feat: add SynthInstance.lean
...
It is the first step to integrate the new type class procedure intro
`MetaM`. It implements the main entry point where we preprocess the
instance, check cache, invoke main function, process replacements, and
cache result.
2019-12-01 18:32:48 -08:00
Leonardo de Moura
5682c6e33b
feat: add hasAssignableMVar
2019-12-01 18:32:48 -08:00
Leonardo de Moura
a55841aa68
chore: simplify synthInstance cache
...
Make sure it handle the common cases efficiently.
2019-12-01 18:32:48 -08:00
Leonardo de Moura
99840f6212
chore: move abbreviation
2019-12-01 18:32:48 -08:00
Leonardo de Moura
2867cd627b
feat: add tryOpt
2019-12-01 18:32:48 -08:00
Leonardo de Moura
00b991baf6
feat: add openAbstractMVarsResult
2019-12-01 18:32:48 -08:00
Leonardo de Moura
27bf6c8229
chore: refine synthInstance cache
2019-12-01 18:32:48 -08:00
Leonardo de Moura
11d829eccd
feat: add lambdaMetaTelescope
...
We need it because `abstractMVars` use lambdas
2019-12-01 18:32:48 -08:00
Leonardo de Moura
e73b5e3c88
chore: SynthInstanceAnswer ==> SynthInstance.Answer
2019-12-01 18:32:48 -08:00
Leonardo de Moura
3bc5e144a2
feat: add synthInstance cache
2019-12-01 18:32:48 -08:00
Leonardo de Moura
e82ca1456e
chore: user lambda instead of forall to store result
...
Reason: ensure the resulting expression is type correct.
2019-12-01 18:32:48 -08:00
Leonardo de Moura
f701683388
chore: add abbreviations MVarId and FVarId
2019-11-28 08:18:06 -08:00
Leonardo de Moura
f8fb195719
feat: cache local instances at metavariable declarations
2019-11-28 05:57:46 -08:00
Leonardo de Moura
2733a5bebd
chore: remove unnecessary method
2019-11-28 05:40:03 -08:00
Leonardo de Moura
deacb03802
feat: add isReadOnlyExprMVar
2019-11-28 05:34:12 -08:00
Leonardo de Moura
be9dab41ad
fix: abstractMVars
2019-11-27 10:53:25 -08:00
Leonardo de Moura
b1f9b7cd4d
feat: add AbstractMVars
2019-11-27 09:45:40 -08:00
Leonardo de Moura
005d03fc3d
feat: remove ignoreImplict workaround
2019-11-27 06:54:55 -08:00
Leonardo de Moura
e99f8a9d22
chore: naming convention
...
suffix `?` should only be used for functions/methods returning `Bool`.
2019-11-27 05:50:31 -08:00
Leonardo de Moura
42fcf6e6e8
feat: add parameter ignoreImplicit
2019-11-26 17:56:07 -08:00
Leonardo de Moura
9a160a197a
fix: addGlobalInstance
2019-11-26 17:19:03 -08:00
Leonardo de Moura
81278c1509
feat: add instanceExtension
...
Use discrimination trees indexing type class instances.
2019-11-26 17:01:36 -08:00
Leonardo de Moura
55ab0f29e9
feat: break insert into two steps
...
Only the first step `Expr -> Array Key` requires the `MetaM` monad.
Motivation: we can save `(Array Key, Expr)` into .olean files, and
import modules without using `MetaM`.
2019-11-26 17:01:36 -08:00
Leonardo de Moura
f9376fe04b
feat: add withNewMCtxDepth
2019-11-26 17:01:36 -08:00
Leonardo de Moura
1f815ac521
feat: add forallMetaTelescope
2019-11-26 17:01:36 -08:00
Leonardo de Moura
4162eb1e08
fix: typo
2019-11-25 15:53:08 -08:00
Leonardo de Moura
856fb0c000
feat: use isProofQuick to implement isDefEqProofIrrel
2019-11-25 08:42:23 -08:00
Leonardo de Moura
292603f8bb
chore: remove ParamInfo.proof field
...
It is an approximation because of dependent types.
Moreover, the new `isProofQuick` should make `isProof` much cheaper.
2019-11-25 08:42:23 -08:00
Leonardo de Moura
ec0eed582e
chore: use isProof
2019-11-25 08:42:23 -08:00
Leonardo de Moura
120778585d
feat: add isProofQuick
2019-11-25 08:42:23 -08:00
Leonardo de Moura
0592dae46f
chore: rename confusing field name ParamInfo.prop ==> ParamInfo.proof
...
The type of the parameter is a proposition, but the parameter itself
is a proof.
2019-11-25 08:42:23 -08:00
Leonardo de Moura
882db55d11
feat: add reduce
2019-11-25 08:42:23 -08:00
Leonardo de Moura
0a7504a71a
feat: add isType and isProof
2019-11-25 08:42:23 -08:00
Leonardo de Moura
9a4facac29
feat: simplify Key.lt
2019-11-24 08:59:38 -08:00
Leonardo de Moura
6af26ede2b
fix: typo
2019-11-24 08:37:43 -08:00
Leonardo de Moura
0350c488d5
refactor: add Key.arity and simplify
2019-11-24 08:35:31 -08:00
Leonardo de Moura
e81f38c116
doc: add comment about representation
2019-11-24 08:17:44 -08:00
Leonardo de Moura
5842366416
feat: add DiscrTree.getUnify
2019-11-24 08:15:10 -08:00
Leonardo de Moura
c5afa18469
feat: add DiscrTree.getMatch
2019-11-24 07:56:57 -08:00
Leonardo de Moura
63a2466a03
fix: typo
2019-11-24 07:48:19 -08:00
Leonardo de Moura
2afb60cc07
fix: typo
2019-11-24 06:59:52 -08:00