File: .lake/packages/aesop/Aesop/Util/Tactic/Unfold.lean

full_name: Aesop.mkUnfoldSimpContext
code: def mkUnfoldSimpContext : MetaM Simp.Context 
goal: Lean.MetaM Lean.Meta.Simp.Context

full_name: Aesop.unfoldManyCore
code: @[inline]
def unfoldManyCore (ctx : Simp.Context) (unfold? : Name → Option (Option Name))
    (e : Expr) : StateRefT (Array Name) MetaM Simp.Result 
goal: StateRefT' IO.RealWorld (Array Lean.Name) Lean.MetaM Lean.Meta.Simp.Result

full_name: Aesop.unfoldManyCore.pre
code: @[inline]
def unfoldManyCore (ctx : Simp.Context) (unfold? : Name → Option (Option Name))
    (e : Expr) : StateRefT (Array Name) MetaM Simp.Result 
goal: StateRefT' IO.RealWorld (Array Lean.Name) Lean.Meta.SimpM Lean.Meta.Simp.Step

full_name: Aesop.unfoldMany
code: def unfoldMany (unfold? : Name → Option (Option Name)) (e : Expr) :
    MetaM (Option (Expr × Array Name)) 
goal: Lean.MetaM (Option (Lean.Expr × Array Lean.Name))

full_name: Aesop.unfoldManyTarget
code: def unfoldManyTarget (unfold? : Name → Option (Option Name)) (goal : MVarId) :
    MetaM (Option (MVarId × Array Name)) 
goal: Lean.MetaM (Option (Lean.MVarId × Array Lean.Name))

full_name: Aesop.unfoldManyAt
code: def unfoldManyAt (unfold? : Name → Option (Option Name)) (goal : MVarId)
    (fvarId : FVarId) : MetaM (Option (MVarId × Array Name)) 
goal: Lean.MetaM (Option (Lean.MVarId × Array Lean.Name))

full_name: Aesop.unfoldManyStar
code: def unfoldManyStar (unfold? : Name → Option (Option Name)) (goal : MVarId) :
    MetaM (Option MVarId) 
goal: Lean.MetaM (Option Lean.MVarId)

full_name: _private.«.lake».packages.aesop.Aesop.Util.Tactic.Unfold.0.Aesop.mkToUnfold
code: private def mkToUnfold (ids : Array Ident) :
    MetaM (HashMap Name (Option Name)) 
goal: Lean.MetaM (Lean.HashMap Lean.Name (Option Lean.Name))

full_name: Aesop.tacticAesop_unfold_
code: elab "aesop_unfold " ids:ident+ : tactic => do
  let toUnfold ← mkToUnfold ids
  liftMetaTactic λ goal => do
    match ← unfoldManyTarget (toUnfold.find? ·) goal with
    | none => throwTacticEx `aesop_unfold goal "could not unfold any of the given constants"
    | some (goal, _) => return [goal]
goal: Lean.ParserDescr

full_name: Aesop.«_aux_.lake_packages_aesop_Aesop_Util_Tactic_Unfold___elabRules_Aesop_tacticAesop_unfold__1»
code: elab "aesop_unfold " ids:ident+ : tactic => do
  let toUnfold ← mkToUnfold ids
  liftMetaTactic λ goal => do
    match ← unfoldManyTarget (toUnfold.find? ·) goal with
    | none => throwTacticEx `aesop_unfold goal "could not unfold any of the given constants"
    | some (goal, _) => return [goal]
goal: Lean.Elab.Tactic.Tactic

full_name: Aesop.tacticAesop_unfold_At_
code: elab "aesop_unfold " ids:ident+ " at " hyps:ident+ : tactic => do
  let toUnfold ← mkToUnfold ids
  liftMetaTactic λ goal => do
    let mut goal := goal
    for hypId in hyps do
      let fvarId := (← getLocalDeclFromUserName hypId.getId).fvarId
      match ← unfoldManyAt (toUnfold.find? ·) goal fvarId with
      | none => throwTacticEx `aesop_unfold goal m!"could not unfold any of the given constants at hypothesis '{hypId}'"
      | some (goal', _) => goal := goal'
    return [goal]
goal: Lean.ParserDescr

full_name: Aesop.«_aux_.lake_packages_aesop_Aesop_Util_Tactic_Unfold___elabRules_Aesop_tacticAesop_unfold_At__1»
code: elab "aesop_unfold " ids:ident+ " at " hyps:ident+ : tactic => do
  let toUnfold ← mkToUnfold ids
  liftMetaTactic λ goal => do
    let mut goal := goal
    for hypId in hyps do
      let fvarId := (← getLocalDeclFromUserName hypId.getId).fvarId
      match ← unfoldManyAt (toUnfold.find? ·) goal fvarId with
      | none => throwTacticEx `aesop_unfold goal m!"could not unfold any of the given constants at hypothesis '{hypId}'"
      | some (goal', _) => goal := goal'
    return [goal]
goal: Lean.Elab.Tactic.Tactic