Leonardo de Moura
0b7d987699
feat(frontends/lean, library/init/lean): opaque constants
...
@kha I have added support for opaque constants to the old C++ frontend,
and made sure the new frontend can still parse `library/init/core.lean`.
The kernel should enforce that opaque constants are really opaque, and
the following example should fail
```
constant x : nat := 0
theorem foo : x = 0 := rfl
```
If it doesn't, it is a bug.
Here are some remaining issues:
1- `environment.mk_empty` is currently an axiom because we cannot create
an inhabitant of an opaque type. A possible solution is to use
`option environment` instead of `environment`.
2- There is no support for opaque constants in the new
frontend. However, I modified it to handle axioms, and fixed the literal
values with decl_cmd_kind. I tried to mark some of my changes with
comments, but it is probably much easier for you to just check the
commit change list.
3- I did not add any support for automatically constructing `e`
at `constant x : t := e`. I think we can do this later
after we replace the old frontend with the new one. BTW, it took only a
few minutes to provide the inhabitants manually.
2019-03-15 17:41:44 -07:00
Leonardo de Moura
ecdb9d6df0
feat(library/init, frontends/lean): add abbreviation for abbreviation
2019-03-15 16:01:25 -07:00
Sebastian Ullrich
234e4d1e8a
refactor(library/init/lean/elaborator): replace coroutines with explicit state
2019-03-08 15:23:01 +01:00
Sebastian Ullrich
a823157338
fix(library/init/lean/expander): fix let expansion again
...
Last bug in core.lean!
2019-01-22 11:16:00 +01:00
Sebastian Ullrich
099354eb5f
fix(library/init/lean/expander): expansion of parameterized let
2019-01-21 22:07:10 +01:00
Sebastian Ullrich
88534abccd
fix(library/init/lean/expander): tuple element order
2019-01-20 16:41:46 +01:00
Sebastian Ullrich
a23df570fc
fix(library/init/lean/elaborator): match
2019-01-17 19:57:00 +01:00
Sebastian Ullrich
8cc35b854b
feat(library/init/lean/{expander,elaborator}): variable(s)
2019-01-17 17:06:52 +01:00
Sebastian Ullrich
a6d5af7387
feat(library/init/lean/expander): expand class and class inductive
2019-01-16 19:12:40 +01:00
Sebastian Ullrich
ca058a6d8e
chore(library/init/lean/expander): simplify constant normalization
2019-01-16 19:12:40 +01:00
Sebastian Ullrich
dce62fc190
fix(library/init/lean/expander): structural substitution instead of abstraction-application when applying notations
2019-01-16 19:12:40 +01:00
Sebastian Ullrich
7aa06338c9
feat(frontends/lean/vm_elaborator): implement inductive
2019-01-14 14:49:40 +01:00
Sebastian Ullrich
fec4502e0f
feat(library/init/lean/parser/term): parse and expand sorry
2019-01-07 22:19:47 +01:00
Sebastian Ullrich
2b5f19677d
feat(frontends/lean/vm_elaborator): elaborate #check
2019-01-07 22:19:47 +01:00
Sebastian Ullrich
38df819817
fix(library/init/lean/expander): all identifiers in terms should be ident_univs
2019-01-01 23:59:23 +01:00
Sebastian Ullrich
fce5c5bd36
perf(library/init/lean/position): add file_map cache for position conversion
2018-12-20 15:32:46 +01:00
Sebastian Ullrich
0911d16bc3
feat(library/init/lean): compute and show error positions
2018-12-20 14:28:18 +01:00
Sebastian Ullrich
90458de7d0
feat(library/init/lean/expander): normalize type signatures of constants
2018-12-19 15:04:48 +01:00
Sebastian Ullrich
0cf88598d2
feat(library/init/lean/parser/declaration): stricter grammar for universe parameters and non-optional declaration types
2018-12-19 14:41:17 +01:00
Sebastian Ullrich
4f7be93e87
feat(library/init/lean): remove support for section aliases
2018-12-18 17:04:04 +01:00
Sebastian Ullrich
0a63d39247
refactor(library/init/lean): syntax.mk_app'/mk_app ~> syntax.mk_app/mk_capp
2018-12-14 17:37:37 +01:00
Sebastian Ullrich
306da89551
feat(library/init/lean/expander): expand universe( variable)s to multiple universe( variable) commands
2018-12-07 10:31:14 +01:00
Sebastian Ullrich
e7a6746b6a
refactor(library/init/lean): share error function between expander and elaborator
2018-12-06 17:03:01 +01:00
Sebastian Ullrich
9c9e642210
feat(library/init/lean/elaborator): universe operators, subtype
2018-12-06 13:23:12 +01:00
Sebastian Ullrich
4b3995fac3
refactor(library/init/lean/parser/term): factor out opt_type parser
2018-12-06 13:23:12 +01:00
Sebastian Ullrich
143ac0e58a
feat(library/init/lean/expander): also normalize bracketed binders in e.g. declarations
2018-12-06 13:23:12 +01:00
Sebastian Ullrich
c3f8e219c0
feat(library/init/lean/expander): preresolve global references (not actually used anywhere yet)
2018-11-27 18:02:51 +01:00
Sebastian Ullrich
d9dc4edd31
refactor(library/init/lean/parser/combinators): improve sep_by view
2018-11-27 17:11:14 +01:00
Sebastian Ullrich
ba0feb5daa
chore(library/init/lean/expander): comments, minor refactoring
2018-11-27 16:35:20 +01:00
Sebastian Ullrich
89b67a0367
fix(library/init/lean/expander): mk_notation_transformer: reverse substitution list
2018-11-23 17:36:34 +01:00
Sebastian Ullrich
5043a6b9b3
feat(library/init/lean/{expander,elaborator}): show, let, choice
2018-11-22 17:25:46 +01:00
Sebastian Ullrich
7003fb6447
feat(library/init/lean/expander): command-level notations
2018-11-21 18:13:38 +01:00
Sebastian Ullrich
fd121f03bd
feat(library/init/lean/expander): make set of transformers configurable
2018-11-21 18:13:38 +01:00
Sebastian Ullrich
d1098534b2
feat(library/init/lean/expander): arrow, if
2018-11-21 18:13:38 +01:00
Sebastian Ullrich
cc93a2eb89
feat(library/init/lean/expander): extend "simple binders" to pi, expand pi
2018-11-21 18:13:38 +01:00
Sebastian Ullrich
a4b9cc83b8
feat(library/init/lean/{expander,elaborator}): progress
2018-11-21 18:13:38 +01:00
Sebastian Ullrich
222fff8862
refactor(library/init/lean/elaborator): introduce simple lambda binder
2018-11-21 18:13:38 +01:00
Sebastian Ullrich
8763e66f30
feat(library/init/lean/expander): allow macros not to unfold
2018-11-19 18:47:17 +01:00
Sebastian Ullrich
c8eaee74b4
feat(frontends/lean,library/init/lean/parser/combinators): add node_longest_choice! macro
2018-11-19 18:02:28 +01:00
Sebastian Ullrich
4ec98a4595
feat(library/init/lean/expander): unfold lambdas into normal form
2018-11-19 17:27:01 +01:00
Sebastian Ullrich
9e8dfbad79
perf(library/init/lean/parser): reintroduce separate syntax.ident constructor with much simpler and more efficient encoding
2018-11-18 16:55:04 +01:00
Sebastian Ullrich
54b330ea66
feat(library/init/lean/expander): recursive, hygienic expansion
...
Not optimized yet. Some performance numbers:
352ms 11.0% 75ms 2.4% expand_core
339ms 10.6% 58ms 1.8% list.mmap._main._at._private.1829070809.expand_core
52ms 1.6% 38ms 1.2% lean.parser.syntax.flip_scopes
2018-11-12 13:15:14 +01:00
Sebastian Ullrich
090c4c0ce7
feat(library/init/lean/syntax): add lazily propagated macro scopes to syntax_node
2018-11-06 16:46:50 +01:00
Sebastian Ullrich
8c27f0aac6
refactor(frontends/lean/elaborator,library/init/lean): finish no_kind refactoring
2018-11-04 20:24:40 +01:00
Sebastian Ullrich
eff43fab08
chore(library/init/lean/expander): comment
2018-10-13 08:11:36 -07:00
Sebastian Ullrich
758d258210
fix(library/init/lean/parser/term): rename term.ident to ident_univs to remove confusion with ident
...
`protected` didn't do anything here
2018-10-13 08:11:36 -07:00
Sebastian Ullrich
959948b901
feat(library/init/lean): even more core.lean progress
2018-10-03 16:00:08 -07:00
Sebastian Ullrich
5274be8c3e
feat(library/init/lean/elaborator): local notation
...
Implemented by treating the parser cfg as a cache that can be recreated from the
elaborator state after e.g. a scope has ended
2018-10-03 16:00:08 -07:00
Sebastian Ullrich
097b7be14f
refactor(library/init/lean/parser/token): change raw view type to option syntax_atom and create raw_str to give some raw parsers view defaults
2018-10-02 14:55:28 -07:00
Sebastian Ullrich
71fd8a59b4
feat(library/init/lean/parser/notation): simple term language for precedences
2018-10-02 14:55:28 -07:00