Equations
- One or more equations did not get rendered due to their size.
- all: Array Lean.MVarId → Lean.Elab.Tactic.Conv.PatternMatchState
The state corresponding to a
(occs := *)
pattern, which acts likeoccs := 1 2 ... n
wheren
is the total number of pattern matches.subgoals
is the list of subgoals for patterns already matched
- occs: Array (Nat × Lean.MVarId) → Nat → List (Nat × Nat) → Lean.Elab.Tactic.Conv.PatternMatchState
The state corresponding to a partially consumed
(occs := a₁ a₂ ...)
pattern.subgoals
is the list of subgoals for patterns already matched, along with their index in the original occs listidx
is the number of matches that have occurred so farremaining
is a list of(i, orig)
pairs representing matches we have not yet reached. We maintain the invariant thatidx :: remaining.map (·.1)
is sorted. The numberi
is the value in theoccs
list andorig
is its index in the list.
Is this pattern no longer interested in accepting matches?
Equations
- x.isDone = match x with | Lean.Elab.Tactic.Conv.PatternMatchState.all subgoals => false | Lean.Elab.Tactic.Conv.PatternMatchState.occs subgoals idx remaining => remaining.isEmpty
Is this pattern interested in accepting the next match?
Equations
- x.isReady = match x with | Lean.Elab.Tactic.Conv.PatternMatchState.all subgoals => true | Lean.Elab.Tactic.Conv.PatternMatchState.occs subgoals idx ((i, snd) :: tail) => idx == i | x => false
Assuming isReady
returned false, this advances to the next match.
Equations
- x.skip = match x with | Lean.Elab.Tactic.Conv.PatternMatchState.occs subgoals idx remaining => Lean.Elab.Tactic.Conv.PatternMatchState.occs subgoals (idx + 1) remaining | s => s
Assuming isReady
returned true, this adds the generated subgoal to the list
and advances to the next match.
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.