feat(library/init/lean/elaborator): arrow, hole and sorry

This commit is contained in:
Leonardo de Moura 2019-08-13 15:14:31 -07:00
parent 68a93a358c
commit cbcf2a8a49
3 changed files with 24 additions and 2 deletions

View file

@ -406,6 +406,12 @@ namespace Elab
instance {α} : Inhabited (Elab α) :=
⟨fun _ => default _⟩
def mkFreshName : Elab Name :=
do s ← get;
let n := s.ngen.curr;
modify $ fun s => { ngen := s.ngen.next, .. s };
pure n
def getScope : Elab ElabScope :=
do s ← get; pure s.scopes.head

View file

@ -118,5 +118,18 @@ fun n => do
else
pure $ Expr.sort level
@[builtinPreTermElab «arrow»] def convertArrow : PreTermElab :=
fun n => do
id ← mkFreshName;
dom ← toPreTerm $ n.getArg 0;
rng ← toPreTerm $ n.getArg 2;
pure $ Expr.pi id BinderInfo.default dom rng
@[builtinPreTermElab «hole»] def convertHole : PreTermElab :=
fun _ => pure $ Expr.mvar Name.anonymous
@[builtinPreTermElab «sorry»] def convertSorry : PreTermElab :=
fun _ => pure $ Expr.app (Expr.const `sorryAx []) (Expr.mvar Name.anonymous)
end Elab
end Lean

View file

@ -16,8 +16,11 @@ namespace NameGenerator
instance : Inhabited NameGenerator := ⟨{}⟩
def next (g : NameGenerator) : Name × NameGenerator :=
(Name.mkNumeral g.namePrefix g.idx, { idx := g.idx + 1, .. g })
def curr (g : NameGenerator) : Name :=
Name.mkNumeral g.namePrefix g.idx
def next (g : NameGenerator) : NameGenerator :=
{ idx := g.idx + 1, .. g }
def mkChild (g : NameGenerator) : NameGenerator × NameGenerator :=
({ namePrefix := Name.mkNumeral g.namePrefix g.idx, idx := 1 },