Documentation

Lean.Meta.Tactic.Cases

Equations
  • One or more equations did not get rendered due to their size.
def Lean.Meta.withNewEqs {α : Type} (targets targetsNew : Array Expr) (k : Array ExprArray ExprMetaM α) :
Equations
partial def Lean.Meta.withNewEqs.loop {α : Type} (targets targetsNew : Array Expr) (k : Array ExprArray ExprMetaM α) (i : Nat) (newEqs newRefls : Array Expr) :
def Lean.Meta.generalizeTargetsEq (mvarId : MVarId) (motiveType : Expr) (targets : Array Expr) :
Equations
  • One or more equations did not get rendered due to their size.

Given a metavariable mvarId representing the goal

Ctx |- T

and an expression e : I A j, where I A j is an inductive datatype where A are parameters, and j the indices. Generate the goal

Ctx, j' : J, h' : I A j' |- j == j' -> e == h' -> T

Remark: (j == j' -> e == h') is a "telescopic" equality. Remark: j is sequence of terms, and j' a sequence of free variables. The result contains the fields

If varName? is not none, it is used to name h'.

Equations
  • One or more equations did not get rendered due to their size.

Similar to generalizeTargets but customized for the casesOn motive. Given a metavariable mvarId representing the

Ctx, h : I A j, D |- T

where fvarId is hs id, and the type I A j is an inductive datatype where A are parameters, and j the indices. Generate the goal

Ctx, h : I A j, D, j' : J, h' : I A j' |- j == j' -> h == h' -> T

Remark: (j == j' -> h == h') is a "telescopic" equality. Remark: j is sequence of terms, and j' a sequence of free variables. The result contains the fields

Equations
partial def Lean.Meta.Cases.unifyEqs? (numEqs : Nat) (mvarId : MVarId) (subst : FVarSubst) (caseName? : Option Name := none) :
def Lean.Meta.Cases.cases (mvarId : MVarId) (majorFVarId : FVarId) (givenNames : Array AltVarNames := #[]) (useNatCasesAuxOn : Bool := false) :
Equations
  • One or more equations did not get rendered due to their size.
def Lean.MVarId.cases (mvarId : MVarId) (majorFVarId : FVarId) (givenNames : Array Meta.AltVarNames := #[]) (useNatCasesAuxOn : Bool := false) :

Apply casesOn using the free variable majorFVarId as the major premise (aka discriminant). givenNames contains user-facing names for each alternative.

  • useNatCasesAuxOn is a temporary hack for the rcases family of tactics. Do not use it, as it is subject to removal. It enables using Nat.casesAuxOn instead of Nat.casesOn, which causes case splits on n : Nat to be represented as 0 and n' + 1 rather than as Nat.zero and Nat.succ n'.
Equations

Keep applying cases on any hypothesis that satisfies p.

Equations
  • One or more equations did not get rendered due to their size.

Applies cases (recursively) to any hypothesis of the form h : p ∧ q.

Equations
  • One or more equations did not get rendered due to their size.

Applies cases to any hypothesis of the form h : r = s.

Equations
  • One or more equations did not get rendered due to their size.

Auxiliary structure for storing byCases tactic result.

Split the goal in two subgoals: one containing the hypothesis h : p and another containing h : ¬ p.

Equations
  • One or more equations did not get rendered due to their size.

Given dec : Decidable p, split the goal in two subgoals: one containing the hypothesis h : p and another containing h : ¬ p.

Equations
  • One or more equations did not get rendered due to their size.