Support for termination_by
notation #
A single termination_by
clause
- ref : Lean.Syntax
- vars : Lean.TSyntaxArray [`ident, `Lean.Parser.Term.hole]
- body : Lean.Term
- synthetic : Bool
Instances For
Equations
- Lean.Elab.WF.instInhabitedTerminationBy = { default := { ref := default, vars := default, body := default, synthetic := default } }
Equations
- One or more equations did not get rendered due to their size.
Instances For
A complete set of termination_by
hints, as applicable to a single clique.
Instances For
A single decreasing_by
clause
- ref : Lean.Syntax
- tactic : Lean.TSyntax `Lean.Parser.Tactic.tacticSeq
Instances For
Equations
- Lean.Elab.WF.instInhabitedDecreasingBy = { default := { ref := default, tactic := default } }
The termination annotations for a single function.
For decreasing_by
, we store the whole decreasing_by tacticSeq
expression, as this
is what Term.runTactic
expects.
- ref : Lean.Syntax
- terminationBy?? : Option Lean.Syntax
- terminationBy? : Option Lean.Elab.WF.TerminationBy
- decreasingBy? : Option Lean.Elab.WF.DecreasingBy
- extraParams : Nat
Here we record the number of parameters past the
:
. It is set byTerminationHints.rememberExtraParams
and used as folows:- When we guess the termination argument in
GuessLex
and want to print it in surface-syntax compatible form. - If there are fewer variables in the
termination_by
annotation than there are extra parameters, we know which parameters they should apply to (TerminationBy.checkVars
).
- When we guess the termination argument in
Instances For
Equations
- One or more equations did not get rendered due to their size.
Equations
- Lean.Elab.WF.TerminationHints.none = { ref := Lean.Syntax.missing, terminationBy?? := none, terminationBy? := none, decreasingBy? := none, extraParams := 0 }
Instances For
Logs warnings when the TerminationHints
are present.
Equations
- One or more equations did not get rendered due to their size.
Instances For
True if any form of termination hint is present.
Equations
- Lean.Elab.WF.TerminationHints.isNotNone hints = (Option.isSome hints.terminationBy?? || Option.isSome hints.terminationBy? || Option.isSome hints.decreasingBy?)
Instances For
Remembers extraParams
for later use. Needs to happen early enough where we still know
how many parameters came from the function header (headerParams
).
Equations
- One or more equations did not get rendered due to their size.
Instances For
Checks that termination_by
binds at most as many variables are present in the outermost
lambda of value
, and throws appropriate errors.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Takes apart a Termination.suffix
syntax object
Equations
- One or more equations did not get rendered due to their size.