File: .lake/packages/aesop/Aesop/Util/EqualUpToIds.lean

full_name: Aesop.initFn._@..lake.packages.aesop.Aesop.Util.EqualUpToIds._hyg.5
code: initialize registerTraceClass `Aesop.Util.EqualUpToIds
goal: IO Unit

full_name: Aesop.EqualUpToIdsM.Context.allowAssignmentDiff
code: structure Context where
  commonMCtx? : Option MetavarContext
  mctx₁ : MetavarContext
  mctx₂ : MetavarContext
  /-- Allow metavariables to be unassigned on one side of the comparison and
  assigned on the other. So when we compare two expressions and we encounter
  a metavariable `?x` in one of them and a subexpression `e` in the other (at
  the same position), we consider `?x` equal to `e`. -/
  -- TODO we should also allow ?P x₁ ... xₙ = e
  allowAssignmentDiff : Bool
goal: Bool

full_name: Aesop.EqualUpToIdsM.Context.commonMCtx?
code: structure Context where
  commonMCtx? : Option MetavarContext
  mctx₁ : MetavarContext
  mctx₂ : MetavarContext
  /-- Allow metavariables to be unassigned on one side of the comparison and
  assigned on the other. So when we compare two expressions and we encounter
  a metavariable `?x` in one of them and a subexpression `e` in the other (at
  the same position), we consider `?x` equal to `e`. -/
  -- TODO we should also allow ?P x₁ ... xₙ = e
  allowAssignmentDiff : Bool
goal: Option Lean.MetavarContext

full_name: Aesop.EqualUpToIdsM.Context.mctx₁
code: structure Context where
  commonMCtx? : Option MetavarContext
  mctx₁ : MetavarContext
  mctx₂ : MetavarContext
  /-- Allow metavariables to be unassigned on one side of the comparison and
  assigned on the other. So when we compare two expressions and we encounter
  a metavariable `?x` in one of them and a subexpression `e` in the other (at
  the same position), we consider `?x` equal to `e`. -/
  -- TODO we should also allow ?P x₁ ... xₙ = e
  allowAssignmentDiff : Bool
goal: Lean.MetavarContext

full_name: Aesop.EqualUpToIdsM.Context
code: structure Context where
  commonMCtx? : Option MetavarContext
  mctx₁ : MetavarContext
  mctx₂ : MetavarContext
  /-- Allow metavariables to be unassigned on one side of the comparison and
  assigned on the other. So when we compare two expressions and we encounter
  a metavariable `?x` in one of them and a subexpression `e` in the other (at
  the same position), we consider `?x` equal to `e`. -/
  -- TODO we should also allow ?P x₁ ... xₙ = e
  allowAssignmentDiff : Bool
goal: Type

full_name: Aesop.EqualUpToIdsM.Context.mctx₂
code: structure Context where
  commonMCtx? : Option MetavarContext
  mctx₁ : MetavarContext
  mctx₂ : MetavarContext
  /-- Allow metavariables to be unassigned on one side of the comparison and
  assigned on the other. So when we compare two expressions and we encounter
  a metavariable `?x` in one of them and a subexpression `e` in the other (at
  the same position), we consider `?x` equal to `e`. -/
  -- TODO we should also allow ?P x₁ ... xₙ = e
  allowAssignmentDiff : Bool
goal: Lean.MetavarContext

full_name: Aesop.EqualUpToIdsM.State.leftUnassignedMVarValues
code: structure State where
  equalMVarIds : HashMap MVarId MVarId := {}
  equalLMVarIds : HashMap LMVarId LMVarId := {}
  /-- A map from metavariables which are unassigned in the left goal
  to their corresponding expression in the right goal. Only used when
  `allowAssignmentDiff = true`. -/
  leftUnassignedMVarValues : HashMap MVarId Expr := {}
  /-- A map from metavariables which are unassigned in the right goal
  to their corresponding expression in the left goal. Only used when
  `allowAssignmentDiff = true`. -/
  rightUnassignedMVarValues : HashMap MVarId Expr := {}
goal: Lean.HashMap Lean.MVarId Lean.Expr

full_name: Aesop.EqualUpToIdsM.State
code: structure State where
  equalMVarIds : HashMap MVarId MVarId := {}
  equalLMVarIds : HashMap LMVarId LMVarId := {}
  /-- A map from metavariables which are unassigned in the left goal
  to their corresponding expression in the right goal. Only used when
  `allowAssignmentDiff = true`. -/
  leftUnassignedMVarValues : HashMap MVarId Expr := {}
  /-- A map from metavariables which are unassigned in the right goal
  to their corresponding expression in the left goal. Only used when
  `allowAssignmentDiff = true`. -/
  rightUnassignedMVarValues : HashMap MVarId Expr := {}
goal: Type

full_name: Aesop.EqualUpToIdsM.State.rightUnassignedMVarValues
code: structure State where
  equalMVarIds : HashMap MVarId MVarId := {}
  equalLMVarIds : HashMap LMVarId LMVarId := {}
  /-- A map from metavariables which are unassigned in the left goal
  to their corresponding expression in the right goal. Only used when
  `allowAssignmentDiff = true`. -/
  leftUnassignedMVarValues : HashMap MVarId Expr := {}
  /-- A map from metavariables which are unassigned in the right goal
  to their corresponding expression in the left goal. Only used when
  `allowAssignmentDiff = true`. -/
  rightUnassignedMVarValues : HashMap MVarId Expr := {}
goal: Lean.HashMap Lean.MVarId Lean.Expr

full_name: Aesop.EqualUpToIdsM.State.equalMVarIds
code: structure State where
  equalMVarIds : HashMap MVarId MVarId := {}
  equalLMVarIds : HashMap LMVarId LMVarId := {}
  /-- A map from metavariables which are unassigned in the left goal
  to their corresponding expression in the right goal. Only used when
  `allowAssignmentDiff = true`. -/
  leftUnassignedMVarValues : HashMap MVarId Expr := {}
  /-- A map from metavariables which are unassigned in the right goal
  to their corresponding expression in the left goal. Only used when
  `allowAssignmentDiff = true`. -/
  rightUnassignedMVarValues : HashMap MVarId Expr := {}
goal: Lean.HashMap Lean.MVarId Lean.MVarId

full_name: Aesop.EqualUpToIdsM.State.equalLMVarIds
code: structure State where
  equalMVarIds : HashMap MVarId MVarId := {}
  equalLMVarIds : HashMap LMVarId LMVarId := {}
  /-- A map from metavariables which are unassigned in the left goal
  to their corresponding expression in the right goal. Only used when
  `allowAssignmentDiff = true`. -/
  leftUnassignedMVarValues : HashMap MVarId Expr := {}
  /-- A map from metavariables which are unassigned in the right goal
  to their corresponding expression in the left goal. Only used when
  `allowAssignmentDiff = true`. -/
  rightUnassignedMVarValues : HashMap MVarId Expr := {}
goal: Lean.HashMap Lean.LMVarId Lean.LMVarId

full_name: Aesop.EqualUpToIdsM
code: abbrev EqualUpToIdsM 
goal: Type

full_name: Aesop.instMonadEqualUpToIdsM
code: @[inline, always_inline]
instance : Monad EqualUpToIdsM 
goal: Monad Aesop.EqualUpToIdsM

full_name: Aesop.EqualUpToIdsM.run'
code: protected def EqualUpToIdsM.run' (x : EqualUpToIdsM α)
    (commonMCtx? : Option MetavarContext) (mctx₁ mctx₂ : MetavarContext)
    (allowAssignmentDiff : Bool) :
    MetaM (α × EqualUpToIdsM.State) 
goal: Lean.MetaM (α × Aesop.EqualUpToIdsM.State)

full_name: Aesop.EqualUpToIdsM.run
code: protected def EqualUpToIdsM.run (x : EqualUpToIdsM α)
    (commonMCtx? : Option MetavarContext) (mctx₁ mctx₂ : MetavarContext)
    (allowAssignmentDiff : Bool) : MetaM α 
goal: Lean.MetaM α

full_name: Aesop.EqualUpToIds.readCommonMCtx?
code: def readCommonMCtx? : EqualUpToIdsM (Option MetavarContext) 
goal: Aesop.EqualUpToIdsM (Option Lean.MetavarContext)

full_name: Aesop.EqualUpToIds.readMCtx₁
code: def readMCtx₁ : EqualUpToIdsM MetavarContext 
goal: Aesop.EqualUpToIdsM Lean.MetavarContext

full_name: Aesop.EqualUpToIds.readMCtx₂
code: def readMCtx₂ : EqualUpToIdsM MetavarContext 
goal: Aesop.EqualUpToIdsM Lean.MetavarContext

full_name: Aesop.EqualUpToIds.readAllowAssignmentDiff
code: def readAllowAssignmentDiff : EqualUpToIdsM Bool 
goal: Aesop.EqualUpToIdsM Bool

full_name: Aesop.EqualUpToIds.equalCommonLMVars?
code: def equalCommonLMVars? (lmvarId₁ lmvarId₂ : LMVarId) :
    EqualUpToIdsM (Option Bool) 
goal: Aesop.EqualUpToIdsM (Option Bool)

full_name: Aesop.EqualUpToIds.equalCommonMVars?
code: def equalCommonMVars? (mvarId₁ mvarId₂ : MVarId) :
    EqualUpToIdsM (Option Bool) 
goal: Aesop.EqualUpToIdsM (Option Bool)

full_name: Aesop.EqualUpToIds.GoalContext.lctx₁
code: structure GoalContext where
  lctx₁ : LocalContext
  localInstances₁ : LocalInstances
  lctx₂ : LocalContext
  localInstances₂ : LocalInstances
  equalFVarIds : HashMap FVarId FVarId := {}
goal: Lean.LocalContext

full_name: Aesop.EqualUpToIds.GoalContext.equalFVarIds
code: structure GoalContext where
  lctx₁ : LocalContext
  localInstances₁ : LocalInstances
  lctx₂ : LocalContext
  localInstances₂ : LocalInstances
  equalFVarIds : HashMap FVarId FVarId := {}
goal: Lean.HashMap Lean.FVarId Lean.FVarId

full_name: Aesop.EqualUpToIds.GoalContext.lctx₂
code: structure GoalContext where
  lctx₁ : LocalContext
  localInstances₁ : LocalInstances
  lctx₂ : LocalContext
  localInstances₂ : LocalInstances
  equalFVarIds : HashMap FVarId FVarId := {}
goal: Lean.LocalContext

full_name: Aesop.EqualUpToIds.GoalContext.localInstances₂
code: structure GoalContext where
  lctx₁ : LocalContext
  localInstances₁ : LocalInstances
  lctx₂ : LocalContext
  localInstances₂ : LocalInstances
  equalFVarIds : HashMap FVarId FVarId := {}
goal: Lean.LocalInstances

full_name: Aesop.EqualUpToIds.GoalContext
code: structure GoalContext where
  lctx₁ : LocalContext
  localInstances₁ : LocalInstances
  lctx₂ : LocalContext
  localInstances₂ : LocalInstances
  equalFVarIds : HashMap FVarId FVarId := {}
goal: Type

full_name: Aesop.EqualUpToIds.GoalContext.localInstances₁
code: structure GoalContext where
  lctx₁ : LocalContext
  localInstances₁ : LocalInstances
  lctx₂ : LocalContext
  localInstances₂ : LocalInstances
  equalFVarIds : HashMap FVarId FVarId := {}
goal: Lean.LocalInstances

full_name: Aesop.EqualUpToIds.MVarValue.expr
code: inductive MVarValue where
  | mvarId (mvarId : MVarId)
  | expr (e : Expr)
  | delayedAssignment (da : DelayedMetavarAssignment)
goal: Aesop.EqualUpToIds.MVarValue

full_name: Aesop.EqualUpToIds.MVarValue.delayedAssignment
code: inductive MVarValue where
  | mvarId (mvarId : MVarId)
  | expr (e : Expr)
  | delayedAssignment (da : DelayedMetavarAssignment)
goal: Aesop.EqualUpToIds.MVarValue

full_name: Aesop.EqualUpToIds.MVarValue
code: inductive MVarValue where
  | mvarId (mvarId : MVarId)
  | expr (e : Expr)
  | delayedAssignment (da : DelayedMetavarAssignment)
goal: Type

full_name: Aesop.EqualUpToIds.MVarValue.mvarId
code: inductive MVarValue where
  | mvarId (mvarId : MVarId)
  | expr (e : Expr)
  | delayedAssignment (da : DelayedMetavarAssignment)
goal: Aesop.EqualUpToIds.MVarValue

full_name: _private.«.lake».packages.aesop.Aesop.Util.EqualUpToIds.0.Aesop.EqualUpToIds.Unsafe.namesEqualUpToMacroScopes
code: private def namesEqualUpToMacroScopes (n₁ n₂ : Name) : Bool 
goal: Bool

full_name: Aesop.EqualUpToIds.levelsEqualUpToIdsCore
code: @[implemented_by Unsafe.levelsEqualUpToIdsCore]
opaque levelsEqualUpToIdsCore (l₁ l₂ : Level) : EqualUpToIdsM Bool
goal: Aesop.EqualUpToIdsM Bool

full_name: _private.«.lake».packages.aesop.Aesop.Util.EqualUpToIds.0.Aesop.EqualUpToIds.lctxDecls
code: private def lctxDecls (lctx : LocalContext) : EqualUpToIdsM (Array LocalDecl) 
goal: Aesop.EqualUpToIdsM (Array Lean.LocalDecl)

full_name: Aesop.EqualUpToIds.exprsEqualUpToIdsCore
code: @[implemented_by Unsafe.exprsEqualUpToIdsCore]
opaque exprsEqualUpToIdsCore (e₁ e₂ : Expr) : ReaderT GoalContext EqualUpToIdsM Bool
goal: ReaderT Aesop.EqualUpToIds.GoalContext Aesop.EqualUpToIdsM Bool

full_name: Aesop.EqualUpToIds.unassignedMVarsEqualUpToIdsCore
code: @[implemented_by Unsafe.unassignedMVarsEqualUpToIdsCore]
opaque unassignedMVarsEqualUpToIdsCore (mvarId₁ mvarId₂ : MVarId) :
    EqualUpToIdsM Bool
goal: Aesop.EqualUpToIdsM Bool

full_name: Aesop.EqualUpToIds.tacticStatesEqualUpToIdsCore
code: def tacticStatesEqualUpToIdsCore (goals₁ goals₂ : Array MVarId) :
    EqualUpToIdsM Bool 
goal: Aesop.EqualUpToIdsM Bool

full_name: Aesop.exprsEqualUpToIds
code: def exprsEqualUpToIds (mctx₁ mctx₂ : MetavarContext)
    (lctx₁ lctx₂ : LocalContext)
    (localInstances₁ localInstances₂ : LocalInstances) (e₁ e₂ : Expr)
    (allowAssignmentDiff := false) : MetaM Bool 
goal: Lean.MetaM Bool

full_name: Aesop.exprsEqualUpToIds'
code: def exprsEqualUpToIds' (e₁ e₂ : Expr) (allowAssignmentDiff := false) :
    MetaM Bool 
goal: Lean.MetaM Bool

full_name: Aesop.unassignedMVarsEqualUptoIds
code: def unassignedMVarsEqualUptoIds (commonMCtx? : Option MetavarContext)
    (mctx₁ mctx₂ : MetavarContext) (mvarId₁ mvarId₂ : MVarId)
    (allowAssignmentDiff := false) : MetaM Bool 
goal: Lean.MetaM Bool

full_name: Aesop.unassignedMVarsEqualUptoIds'
code: def unassignedMVarsEqualUptoIds' (commonMCtx? : Option MetavarContext)
    (mctx₁ mctx₂ : MetavarContext) (mvarId₁ mvarId₂ : MVarId)
    (allowAssignmentDiff := false) :
    MetaM (Bool × EqualUpToIdsM.State) 
goal: Lean.MetaM (Bool × Aesop.EqualUpToIdsM.State)

full_name: Aesop.tacticStatesEqualUpToIds
code: def tacticStatesEqualUpToIds (commonMCtx? : Option MetavarContext)
    (mctx₁ mctx₂ : MetavarContext) (goals₁ goals₂ : Array MVarId)
    (allowAssignmentDiff := false) : MetaM Bool 
goal: Lean.MetaM Bool

full_name: Aesop.tacticStatesEqualUpToIds'
code: def tacticStatesEqualUpToIds' (commonMCtx? : Option MetavarContext)
    (mctx₁ mctx₂ : MetavarContext) (goals₁ goals₂ : Array MVarId)
    (allowAssignmentDiff := false) :
    MetaM (Bool × EqualUpToIdsM.State) 
goal: Lean.MetaM (Bool × Aesop.EqualUpToIdsM.State)