Commit graph

2962 commits

Author SHA1 Message Date
Leonardo de Moura
77b160a5a8 chore: use mkFreshUserName at generalizeTelescope 2020-10-31 19:19:17 -07:00
Leonardo de Moura
f856849f8f test: tactic framework 2020-10-30 18:01:20 -07:00
Leonardo de Moura
060535679f test: let rec in tactic mode
@Kha: I added support for using `let rec` in tactic mode.
2020-10-30 14:58:17 -07:00
Leonardo de Moura
486d8457fa test: tactic framework 2020-10-29 20:42:34 -07:00
Leonardo de Moura
84de2e4a5b test: add injection notation test 2020-10-29 20:41:33 -07:00
Leonardo de Moura
278883a5d6 feat: improve tryLiftAndCoe 2020-10-29 12:46:04 -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
5fed774461 chore: HasRepr ==> Repr 2020-10-27 16:15:10 -07:00
Leonardo de Moura
10c32fcf94 chore: HasToString => ToString 2020-10-27 16:11:48 -07:00
Leonardo de Moura
592b73daf6 feat: expand suffices macro 2020-10-27 13:05:13 -07:00
Leonardo de Moura
573ca7dcad chore: remove workarounds 2020-10-27 13:05:13 -07:00
Leonardo de Moura
633578cfaf chore: use StateRefT macro 2020-10-27 13:05:12 -07:00
Leonardo de Moura
c979d81934 refactor: add polymorphic methods for updating/querying reducibility status 2020-10-26 17:07:28 -07: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
40f99327e9 fix: missing withMainMVarContext 2020-10-26 11:35:54 -07:00
Leonardo de Moura
7e244686e9 chore: remove old notation 2020-10-26 09:16:51 -07:00
Leonardo de Moura
db9e390b4d chore: remove new_frontend from tests 2020-10-25 09:16:38 -07:00
Leonardo de Moura
fa101444b4 chore: fix tests 2020-10-25 09:11:13 -07:00
Leonardo de Moura
575db3bb3b fix: improve structure/inductive commands universe level inference and validation
chore: cleanup
2020-10-25 05:46:51 -07:00
Leonardo de Moura
a4c69ec32c chore: fix tests 2020-10-24 16:46:21 -07:00
Leonardo de Moura
0af4b6fb6f chore: remove hack that produces big search space 2020-10-24 07:21:06 -07:00
Leonardo de Moura
21587ff19b chore: move tests to new frontend 2020-10-23 16:18:52 -07:00
Leonardo de Moura
8cb1ff206c chore: move tests to new frontend 2020-10-23 14:07:26 -07:00
Leonardo de Moura
40578d6d24 test: add explicit motive test 2020-10-23 06:00:51 -07:00
Leonardo de Moura
a7116b44c1 test: add new subst tests 2020-10-23 05:39:25 -07:00
Leonardo de Moura
474f9a3695 chore: fix tests 2020-10-22 17:46:15 -07:00
Leonardo de Moura
7c0b55ec6a chore: fix tests 2020-10-22 17:34:30 -07:00
Leonardo de Moura
de0eb8035f chore: fix test 2020-10-22 16:58:12 -07:00
Leonardo de Moura
85c955d77f feat: improve notation 2020-10-22 10:35:45 -07:00
Leonardo de Moura
34945dfc1c feat: elaborate notation 2020-10-22 10:20:23 -07:00
Leonardo de Moura
2041277cae fix: field default value with implicit type 2020-10-22 07:02:40 -07:00
Leonardo de Moura
6ca1768957 fix: optional := in the structure command 2020-10-22 04:39:20 -07:00
Sebastian Ullrich
4e74e36331 feat: run initializers on import
Also, refuse to evaluate an `[init]` decl in the same module (since we don't know whether the initialization is
backtrackable) and always use native symbol of a `[builtinInit]` decl
2020-10-22 11:59:55 +02:00
Leonardo de Moura
ea829b75c0 chore: remove coercions for old frontend 2020-10-21 17:37:35 -07:00
Leonardo de Moura
3e9c5e1653 chore: move to new frontend 2020-10-21 08:43:47 -07:00
Leonardo de Moura
35cf2f3d9f feat: use withSynthesize when elaborating the type of a type ascription 2020-10-20 15:12:54 -07:00
Leonardo de Moura
a052446414 feat: simplify decide! and nativeDecide! macros 2020-10-20 15:08:16 -07:00
Leonardo de Moura
fac2849e50 feat: forIn for PersistentArray 2020-10-20 09:33:50 -07:00
Leonardo de Moura
702ceb7a3f fix: return optional result
cc @Kha
2020-10-20 09:33:50 -07:00
Leonardo de Moura
c7efb1d37d fix: do notation else if
The following `do` block
```lean
if c_1 then
  action_1
else
  if cond_2 then
    action_2
  action_3
```
was being being parsed as
```lean
if c_1 then
  action_1
else if cond_2 then
  action_2
action_3
```

cc @Kha
2020-10-19 14:29:31 -07:00
Leonardo de Moura
437f4670ed fix: expand doIf notation before lifting nested methods 2020-10-19 11:32:51 -07:00
Leonardo de Moura
e54a207986 refactor: provide Options to lean_eval_const
add `ImportM` monad for `addImportedFn`

cc @Kha
2020-10-19 10:21:38 -07:00
Leonardo de Moura
7bfa39ae45 fix: for .. in .. do notation and universe constraints
We use `MProd` instead of `Prod` to group values when expanding the
`do` notation. `MProd` is a universe monomorphic product.
The motivation is to generate simpler universe constraints in code
that was not written by the user but generated by the `do` macro.
Note that we are not really restricting the macro power since the
`HasBind.bind` combinator already forces values computed by monadic
actions to be in the same universe.

The new test cannot be compiled without this modication.
2020-10-18 18:05:00 -07:00
Leonardo de Moura
45e1300414 fix: nested structural recursion 2020-10-18 10:38:51 -07:00
Leonardo de Moura
762073a7cb chore: update stage0 2020-10-18 08:22:30 -07:00
Leonardo de Moura
f5a16bc8f0 fix: better support for constraints of the form ?m a =?= ?m b 2020-10-17 16:29:27 -07:00
Leonardo de Moura
b2bc2d2775 feat: improve field notation argument search
@Kha the new test may look exoteric, but it reflects an actual
instance in our code base, and the old frontend supports it.
Not sure whether we should keep it or not.
2020-10-16 14:32:03 -07:00
Leonardo de Moura
8735820b49 fix: anonymous constructor too restrictive
We should support (recursive) inductive datatypes that have only one
constructor. We use this feature in the current `src/Lean` code base.
2020-10-16 07:58:47 -07:00
Leonardo de Moura
63e982768a feat: expand nested dos 2020-10-15 17:11:50 -07:00
Leonardo de Moura
827625a377 perf: add temporary hack for performance issue
The compiler frontend implemented in C++ is eagerly inlining local
functions. The new test would take an absurd amount of time without
the new hack.
We remove this hack when we re-implement the compiler frontend in Lean.
2020-10-15 13:37:29 -07:00