File: .lake/packages/lean4/src/lean/Lean/Meta/Tactic/SplitIf.lean

full_name: Lean.Meta.SplitIf.initFn._@..lake.packages.lean4.src.lean.Lean.Meta.Tactic.SplitIf._hyg.5
code: builtin_initialize ext : LazyInitExtension MetaM Simp.Context ←
  registerLazyInitExtension do
    let mut s : SimpTheorems := {}
    s ← s.addConst ``if_pos
    s ← s.addConst ``if_neg
    s ← s.addConst ``dif_pos
    s ← s.addConst ``dif_neg
    return {
      simpTheorems  := #[s]
      congrTheorems := (← getSimpCongrTheorems)
      config        := { Simp.neutralConfig with dsimp := false }
    }
goal: IO (Lean.LazyInitExtension Lean.MetaM Lean.Meta.Simp.Context)

full_name: Lean.Meta.SplitIf.ext
code: builtin_initialize ext : LazyInitExtension MetaM Simp.Context ←
  registerLazyInitExtension do
    let mut s : SimpTheorems := {}
    s ← s.addConst ``if_pos
    s ← s.addConst ``if_neg
    s ← s.addConst ``dif_pos
    s ← s.addConst ``dif_neg
    return {
      simpTheorems  := #[s]
      congrTheorems := (← getSimpCongrTheorems)
      config        := { Simp.neutralConfig with dsimp := false }
    }
goal: Lean.LazyInitExtension Lean.MetaM Lean.Meta.Simp.Context

full_name: Lean.Meta.SplitIf.getSimpContext
code: /--
  Default `Simp.Context` for `simpIf` methods. It contains all congruence theorems, but
  just the rewriting rules for reducing `if` expressions. -/
def getSimpContext : MetaM Simp.Context 
goal: Lean.MetaM Lean.Meta.Simp.Context

full_name: _private.«.lake».packages.lean4.src.lean.Lean.Meta.Tactic.SplitIf.0.Lean.Meta.SplitIf.discharge?
code: /--
  Default `discharge?` function for `simpIf` methods.
  It only uses hypotheses from the local context that have `index < numIndices`.
  It is effective after a case-split.

  Remark: when `simp` goes inside binders it adds new local declarations to the
  local context. We don't want to use these local declarations since the cached result
  would depend on them (see issue #3229). `numIndices` is the size of the local
  context `decls` field before we start the simplifying the expression.

  Remark: this function is now private, and we should use `mkDischarge?`.
-/
private def discharge? (numIndices : Nat) (useDecide : Bool) : Simp.Discharge 
goal: Lean.Meta.Simp.Discharge

full_name: Lean.Meta.SplitIf.mkDischarge?
code: def mkDischarge? (useDecide := false) : MetaM Simp.Discharge 
goal: Lean.MetaM Lean.Meta.Simp.Discharge

full_name: _private.«.lake».packages.lean4.src.lean.Lean.Meta.Tactic.SplitIf.0.Lean.Meta.SplitIf.findIfToSplit?
code: /-- Return the condition and decidable instance of an `if` expression to case split. -/
private partial def findIfToSplit? (e : Expr) : Option (Expr × Expr) 
goal: Option (Lean.Expr × Lean.Expr)

full_name: Lean.Meta.SplitIf.splitIfAt?
code: def splitIfAt? (mvarId : MVarId) (e : Expr) (hName? : Option Name) : MetaM (Option (ByCasesSubgoal × ByCasesSubgoal)) 
goal: Lean.MetaM (Option (Lean.Meta.ByCasesSubgoal × Lean.Meta.ByCasesSubgoal))

full_name: Lean.Meta.simpIfTarget
code: def simpIfTarget (mvarId : MVarId) (useDecide := false) : MetaM MVarId 
goal: Lean.MetaM Lean.MVarId

full_name: Lean.Meta.simpIfLocalDecl
code: def simpIfLocalDecl (mvarId : MVarId) (fvarId : FVarId) : MetaM MVarId 
goal: Lean.MetaM Lean.MVarId

full_name: Lean.Meta.splitIfTarget?
code: def splitIfTarget? (mvarId : MVarId) (hName? : Option Name := none) : MetaM (Option (ByCasesSubgoal × ByCasesSubgoal)) 
goal: Lean.MetaM (Option (Lean.Meta.ByCasesSubgoal × Lean.Meta.ByCasesSubgoal))

full_name: Lean.Meta.splitIfLocalDecl?
code: def splitIfLocalDecl? (mvarId : MVarId) (fvarId : FVarId) (hName? : Option Name := none) : MetaM (Option (MVarId × MVarId)) 
goal: Lean.MetaM (Option (Lean.MVarId × Lean.MVarId))

full_name: Lean.Meta.initFn._@..lake.packages.lean4.src.lean.Lean.Meta.Tactic.SplitIf._hyg.1615
code: builtin_initialize registerTraceClass `Meta.Tactic.splitIf
goal: IO Unit