File: Mathlib/Tactic/CategoryTheory/BicategoryCoherence.lean

full_name: Mathlib.Tactic.BicategoryCoherence.LiftHom
code: /-- A typeclass carrying a choice of lift of a 1-morphism from `B` to `FreeBicategory B`. -/
class LiftHom {a b : B} (f : a ⟶ b) where
  /-- A lift of a morphism to the free bicategory.
  This should only exist for "structural" morphisms. -/
  lift : of.obj a ⟶ of.obj b
goal: Type (max u v)

full_name: Mathlib.Tactic.BicategoryCoherence.LiftHom.lift
code: /-- A typeclass carrying a choice of lift of a 1-morphism from `B` to `FreeBicategory B`. -/
class LiftHom {a b : B} (f : a ⟶ b) where
  /-- A lift of a morphism to the free bicategory.
  This should only exist for "structural" morphisms. -/
  lift : of.obj a ⟶ of.obj b
goal: CategoryTheory.FreeBicategory.of.obj a ⟶ CategoryTheory.FreeBicategory.of.obj b

full_name: Mathlib.Tactic.BicategoryCoherence.liftHomId
code: instance liftHomId : LiftHom (𝟙 a) 
goal: Mathlib.Tactic.BicategoryCoherence.LiftHom (𝟙 a)

full_name: Mathlib.Tactic.BicategoryCoherence.liftHomComp
code: instance liftHomComp (f : a ⟶ b) (g : b ⟶ c) [LiftHom f] [LiftHom g] : LiftHom (f ≫ g) 
goal: Mathlib.Tactic.BicategoryCoherence.LiftHom (f ≫ g)

full_name: Mathlib.Tactic.BicategoryCoherence.liftHomOf
code: instance (priority := 100) liftHomOf (f : a ⟶ b) : LiftHom f 
goal: Mathlib.Tactic.BicategoryCoherence.LiftHom f

full_name: Mathlib.Tactic.BicategoryCoherence.LiftHom₂
code: /-- A typeclass carrying a choice of lift of a 2-morphism from `B` to `FreeBicategory B`. -/
class LiftHom₂ {f g : a ⟶ b} [LiftHom f] [LiftHom g] (η : f ⟶ g) where
  /-- A lift of a 2-morphism to the free bicategory.
  This should only exist for "structural" 2-morphisms. -/
  lift : LiftHom.lift f ⟶ LiftHom.lift g
goal: Type (max u v)

full_name: Mathlib.Tactic.BicategoryCoherence.LiftHom₂.lift
code: /-- A typeclass carrying a choice of lift of a 2-morphism from `B` to `FreeBicategory B`. -/
class LiftHom₂ {f g : a ⟶ b} [LiftHom f] [LiftHom g] (η : f ⟶ g) where
  /-- A lift of a 2-morphism to the free bicategory.
  This should only exist for "structural" 2-morphisms. -/
  lift : LiftHom.lift f ⟶ LiftHom.lift g
goal: Mathlib.Tactic.BicategoryCoherence.LiftHom.lift f ⟶ Mathlib.Tactic.BicategoryCoherence.LiftHom.lift g

full_name: Mathlib.Tactic.BicategoryCoherence.liftHom₂Id
code: instance liftHom₂Id (f : a ⟶ b) [LiftHom f] : LiftHom₂ (𝟙 f) 
goal: Mathlib.Tactic.BicategoryCoherence.LiftHom₂ (𝟙 f)

full_name: Mathlib.Tactic.BicategoryCoherence.liftHom₂LeftUnitorHom
code: instance liftHom₂LeftUnitorHom (f : a ⟶ b) [LiftHom f] : LiftHom₂ (λ_ f).hom 
goal: Mathlib.Tactic.BicategoryCoherence.LiftHom₂ (λ_ f).hom

full_name: Mathlib.Tactic.BicategoryCoherence.liftHom₂LeftUnitorInv
code: instance liftHom₂LeftUnitorInv (f : a ⟶ b) [LiftHom f] : LiftHom₂ (λ_ f).inv 
goal: Mathlib.Tactic.BicategoryCoherence.LiftHom₂ (λ_ f).inv

full_name: Mathlib.Tactic.BicategoryCoherence.liftHom₂RightUnitorHom
code: instance liftHom₂RightUnitorHom (f : a ⟶ b) [LiftHom f] : LiftHom₂ (ρ_ f).hom 
goal: Mathlib.Tactic.BicategoryCoherence.LiftHom₂ (ρ_ f).hom

full_name: Mathlib.Tactic.BicategoryCoherence.liftHom₂RightUnitorInv
code: instance liftHom₂RightUnitorInv (f : a ⟶ b) [LiftHom f] : LiftHom₂ (ρ_ f).inv 
goal: Mathlib.Tactic.BicategoryCoherence.LiftHom₂ (ρ_ f).inv

full_name: Mathlib.Tactic.BicategoryCoherence.liftHom₂AssociatorHom
code: instance liftHom₂AssociatorHom (f : a ⟶ b) (g : b ⟶ c) (h : c ⟶ d) [LiftHom f] [LiftHom g]
    [LiftHom h] : LiftHom₂ (α_ f g h).hom 
goal: Mathlib.Tactic.BicategoryCoherence.LiftHom₂ (α_ f g h).hom

full_name: Mathlib.Tactic.BicategoryCoherence.liftHom₂AssociatorInv
code: instance liftHom₂AssociatorInv (f : a ⟶ b) (g : b ⟶ c) (h : c ⟶ d) [LiftHom f] [LiftHom g]
    [LiftHom h] : LiftHom₂ (α_ f g h).inv 
goal: Mathlib.Tactic.BicategoryCoherence.LiftHom₂ (α_ f g h).inv

full_name: Mathlib.Tactic.BicategoryCoherence.liftHom₂Comp
code: instance liftHom₂Comp {f g h : a ⟶ b} [LiftHom f] [LiftHom g] [LiftHom h] (η : f ⟶ g) (θ : g ⟶ h)
    [LiftHom₂ η] [LiftHom₂ θ] : LiftHom₂ (η ≫ θ) 
goal: Mathlib.Tactic.BicategoryCoherence.LiftHom₂ (η ≫ θ)

full_name: Mathlib.Tactic.BicategoryCoherence.liftHom₂WhiskerLeft
code: instance liftHom₂WhiskerLeft (f : a ⟶ b) [LiftHom f] {g h : b ⟶ c} (η : g ⟶ h) [LiftHom g]
    [LiftHom h] [LiftHom₂ η] : LiftHom₂ (f ◁ η) 
goal: Mathlib.Tactic.BicategoryCoherence.LiftHom₂ (f ◁ η)

full_name: Mathlib.Tactic.BicategoryCoherence.liftHom₂WhiskerRight
code: instance liftHom₂WhiskerRight {f g : a ⟶ b} (η : f ⟶ g) [LiftHom f] [LiftHom g] [LiftHom₂ η]
    {h : b ⟶ c} [LiftHom h] : LiftHom₂ (η ▷ h) 
goal: Mathlib.Tactic.BicategoryCoherence.LiftHom₂ (η ▷ h)

full_name: Mathlib.Tactic.BicategoryCoherence.exception
code: /-- Helper function for throwing exceptions. -/
def exception {α : Type} (g : MVarId) (msg : MessageData) : MetaM α 
goal: Lean.MetaM α

full_name: Mathlib.Tactic.BicategoryCoherence.exception'
code: /-- Helper function for throwing exceptions with respect to the main goal. -/
def exception' (msg : MessageData) : TacticM Unit 
goal: Lean.Elab.Tactic.TacticM Unit

full_name: Mathlib.Tactic.BicategoryCoherence.mkLiftMap₂LiftExpr
code: /-- Auxiliary definition for `bicategorical_coherence`. -/
-- We could construct this expression directly without using `elabTerm`,
-- but it would require preparing many implicit arguments by hand.
def mkLiftMap₂LiftExpr (e : Expr) : TermElabM Expr 
goal: Lean.Elab.TermElabM Lean.Expr

full_name: Mathlib.Tactic.BicategoryCoherence.bicategory_coherence
code: /-- Coherence tactic for bicategories. -/
def bicategory_coherence (g : MVarId) : TermElabM Unit 
goal: Lean.Elab.TermElabM Unit

full_name: Mathlib.Tactic.BicategoryCoherence.tacticBicategory_coherence
code: /-- Coherence tactic for bicategories.
Use `pure_coherence` instead, which is a frontend to this one. -/
elab "bicategory_coherence" : tactic => do bicategory_coherence (← getMainGoal)
goal: Lean.ParserDescr

full_name: Mathlib.Tactic.BicategoryCoherence._aux_Mathlib_Tactic_CategoryTheory_BicategoryCoherence___elabRules_Mathlib_Tactic_BicategoryCoherence_tacticBicategory_coherence_1
code: /-- Coherence tactic for bicategories.
Use `pure_coherence` instead, which is a frontend to this one. -/
elab "bicategory_coherence" : tactic => do bicategory_coherence (← getMainGoal)
goal: Lean.Elab.Tactic.Tactic

full_name: Mathlib.Tactic.BicategoryCoherence.whisker_simps
code: /--
Simp lemmas for rewriting a 2-morphism into a normal form.
-/
syntax (name := whisker_simps) "whisker_simps" (config)? : tactic
goal: Lean.ParserDescr

full_name: Mathlib.Tactic.BicategoryCoherence._aux_Mathlib_Tactic_CategoryTheory_BicategoryCoherence___elabRules_Mathlib_Tactic_BicategoryCoherence_whisker_simps_1
code: @[inherit_doc whisker_simps]
elab_rules : tactic
| `(tactic| whisker_simps $[$cfg]?) => do
  evalTactic (← `(tactic|
    simp $[$cfg]? only [Category.assoc,
      Bicategory.comp_whiskerLeft, Bicategory.id_whiskerLeft,
      Bicategory.whiskerRight_comp, Bicategory.whiskerRight_id,
      Bicategory.whiskerLeft_comp, Bicategory.whiskerLeft_id,
      Bicategory.comp_whiskerRight, Bicategory.id_whiskerRight, Bicategory.whisker_assoc]
    ))
goal: Lean.Elab.Tactic.Tactic

full_name: Mathlib.Tactic.BicategoryCoherence.assoc_liftHom₂
code: /-- Auxiliary simp lemma for the `coherence` tactic:
this move brackets to the left in order to expose a maximal prefix
built out of unitors and associators.
-/
@[nolint unusedArguments]
theorem assoc_liftHom₂ {f g h i : a ⟶ b} [LiftHom f] [LiftHom g] [LiftHom h]
    (η : f ⟶ g) (θ : g ⟶ h) (ι : h ⟶ i) [LiftHom₂ η] [LiftHom₂ θ] : η ≫ θ ≫ ι = (η ≫ θ) ≫ ι 
goal: η ≫ θ ≫ ι = (η ≫ θ) ≫ ι