Implementation of repeat'
and repeat1'
.
repeat'Core f
runs f
on all of the goals to produce a new list of goals,
then runs f
again on all of those goals, and repeats until f
fails on all remaining goals,
or until maxIters
total calls to f
have occurred.
Returns a boolean indicating whether f
succeeded at least once, and
all the remaining goals (i.e. those on which f
failed).
Instances For
Auxiliary for repeat'Core
. repeat'Core.go f maxIters progress goals stk acc
evaluates to
essentially acc.toList ++ repeat' f (goals::stk).join maxIters
: that is, acc
are goals we will
not revisit, and (goals::stk).join
is the accumulated todo list of subgoals.
Equations
- One or more equations did not get rendered due to their size.
- Lean.Meta.repeat'Core.go f x✝¹ x✝ [] [] x = pure (x✝, x)
- Lean.Meta.repeat'Core.go f x✝¹ x✝ [] (goals :: stk) x = Lean.Meta.repeat'Core.go f x✝¹ x✝ goals stk x
Instances For
repeat' f
runs f
on all of the goals to produce a new list of goals,
then runs f
again on all of those goals, and repeats until f
fails on all remaining goals,
or until maxIters
total calls to f
have occurred.
Always succeeds (returning the original goals if f
fails on all of them).
Equations
- Lean.Meta.repeat' f goals maxIters = Lean.Meta.repeat'Core f goals maxIters <&> fun (x : Bool × List Lean.MVarId) => x.snd
Instances For
repeat1' f
runs f
on all of the goals to produce a new list of goals,
then runs f
again on all of those goals, and repeats until f
fails on all remaining goals,
or until maxIters
total calls to f
have occurred.
Fails if f
does not succeed at least once.
Equations
- One or more equations did not get rendered due to their size.