- id : Lean.Syntax
- type : Lean.Syntax
- bi : Lean.BinderInfo
Equations
- One or more equations did not get rendered due to their size.
Equations
- Lean.Elab.Term.addLocalVarInfo stx fvar = Lean.Elab.Term.addTermInfo' stx fvar none none Lean.Name.anonymous true
Like elabBinders, but also pass syntax node per binder.
elabBinders(Ex) automatically adds binder info nodes for the produced fvars, but storing the syntax nodes
might be necessary when later adding the same binders back to the local context so that info nodes can
manually be added for the new fvars; see MutualDef for an example.
Equations
- Lean.Elab.Term.elabBindersEx binders k = Lean.Elab.Term.universeConstraintsCheckpoint (if Array.isEmpty binders = true then k #[] else Lean.Elab.Term.elabBindersAux binders k)
Elaborate the given binders (i.e., Syntax objects for simpleBinder <|> bracketedBinder),
update the local context, set of local instances, reset instance chache (if needed), and then
execute k with the updated context.
The local context will only be included inside k.
For example, suppose you have binders [(a : α), (b : β a)], then the elaborator will
create two new free variables a and b, push these to the context and pass to k #[a,b].
Equations
- Lean.Elab.Term.elabBinders binders k = Lean.Elab.Term.elabBindersEx binders fun fvars => k (Array.map (fun a => a.snd) fvars)
Same as elabBinder with a single binder.
Equations
- Lean.Elab.Term.elabBinder binder x = Lean.Elab.Term.elabBinders #[binder] fun fvars => x (Array.getOp fvars 0)
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
The dependent arrow. (x : α) → β is equivalent to ∀ x : α, β, but we usually
reserve the latter for propositions. Also written as Π x : α, β (the "Pi-type")
in the literature.
Equations
- One or more equations did not get rendered due to their size.
Auxiliary function for expanding fun notation binders. Recall that fun parser is defined as
def funBinder : Parser := implicitBinder <|> instBinder <|> termParser maxPrec
leading_parser unicodeSymbol "λ" "fun" >> many1 funBinder >> "=>" >> termParser
to allow notation such as fun (a, b) => a + b, where (a, b) should be treated as a pattern.
The result is a pair (explicitBinders, newBody), where explicitBinders is syntax of the form
`(` ident `:` term `)`
which can be elaborated using elabBinders, and newBody is the updated body syntax.
We update the body syntax when expanding the pattern notation.
Example: fun (a, b) => a + b expands into fun _a_1 => match _a_1 with | (a, b) => a + b.
See local function processAsPattern at expandFunBindersAux.
The resulting Bool is true if a pattern was found. We use it "mark" a macro expansion.
Equations
- Lean.Elab.Term.expandFunBinders binders body = Lean.Elab.Term.expandFunBinders.loop binders body 0 #[]
- lctx : Lean.LocalContext
- localInsts : Lean.LocalInstances
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Equations
- Lean.Elab.Term.expandWhereDeclsOpt whereDeclsOpt body = if Lean.Syntax.isNone whereDeclsOpt = true then pure body else Lean.Elab.Term.expandWhereDecls (Lean.Syntax.getOp whereDeclsOpt 0) body
Expand matchAlts syntax into a full match-expression.
Example
| 0, true => alt_1 | i, _ => alt_2
expands into (for tactic == false)
fun x_1 x_2 => match @x_1, @x_2 with | 0, true => alt_1 | i, _ => alt_2
and (for tactic == true)
intro x_1; intro x_2; match @x_1, @x_2 with | 0, true => alt_1 | i, _ => alt_2
Remark: we add @ to make sure we don't consume implicit arguments, and to make the behavior consistent with fun.
Example:
inductive T : Type 1 :=
| mkT : (forall {a : Type}, a -> a) -> T
def makeT (f : forall {a : Type}, a -> a) : T :=
mkT f
def makeT' : (forall {a : Type}, a -> a) -> T
| f => mkT f
The two definitions should be elaborated without errors and be equivalent.
Equations
- One or more equations did not get rendered due to their size.
Equations
- Lean.Elab.Term.expandMatchAltsIntoMatchTactic ref matchAlts = Lean.withRef ref (Lean.Elab.Term.expandMatchAltsIntoMatchAux matchAlts true (Lean.Elab.Term.getMatchAltsNumPatterns matchAlts) #[])
Similar to expandMatchAltsIntoMatch, but supports an optional where clause.
Expand matchAltsWhereDecls into let rec + match-expression.
Example
```
| 0, true => ... f 0 ...
| i, _ => ... f i + g i ...
where
f x := g x + 1
g : Nat → Nat
| 0 => 1
| x+1 => f x
```
expands into
```
fux x_1 x_2 =>
let rec
f x := g x + 1,
g : Nat → Nat
| 0 => 1
| x+1 => f x
match x_1, x_2 with
| 0, true => ... f 0 ...
| i, _ => ... f i + g i ...
```
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
- id : Lean.Syntax
- binders : Array Lean.Syntax
- type : Lean.Syntax
- value : Lean.Syntax
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Equations
- Lean.Elab.Term.elabLetDecl stx expectedType? = Lean.Elab.Term.elabLetDeclCore stx expectedType? true false false
Equations
- Lean.Elab.Term.elabLetFunDecl stx expectedType? = Lean.Elab.Term.elabLetDeclCore stx expectedType? false false false
Equations
- Lean.Elab.Term.elabLetDelayedDecl stx expectedType? = Lean.Elab.Term.elabLetDeclCore stx expectedType? true true false
Equations
- Lean.Elab.Term.elabLetTmpDecl stx expectedType? = Lean.Elab.Term.elabLetDeclCore stx expectedType? true false true