Theorem: CategoryTheory.Under.mapPushoutAdj_counit_app
File: Mathlib/CategoryTheory/Adjunction/Over.lean

Proof steps:
state_before: C : Type u
inst✝¹ : Category.{v, u} C
X✝ : C
inst✝ : HasPushouts C
X Y : C
f : X ⟶ Y
x : Under X
y : Under Y
u : (pushout f).obj x ⟶ y
⊢ x.hom ≫ pushout.inl x.hom f ≫ u.right = ((map f).obj y).hom
state_after: C : Type u
inst✝¹ : Category.{v, u} C
X✝ : C
inst✝ : HasPushouts C
X Y : C
f : X ⟶ Y
x : Under X
y : Under Y
u : (pushout f).obj x ⟶ y
⊢ x.hom ≫ pushout.inl x.hom f ≫ u.right = f ≫ y.hom
tactic: simp only [map_obj_hom]
state_before: C : Type u
inst✝¹ : Category.{v, u} C
X✝ : C
inst✝ : HasPushouts C
X Y : C
f : X ⟶ Y
x : Under X
y : Under Y
u : (pushout f).obj x ⟶ y
⊢ x.hom ≫ pushout.inl x.hom f ≫ u.right = f ≫ y.hom
state_after: C : Type u
inst✝¹ : Category.{v, u} C
X✝ : C
inst✝ : HasPushouts C
X Y : C
f : X ⟶ Y
x : Under X
y : Under Y
u : (pushout f).obj x ⟶ y
⊢ x.hom ≫ pushout.inl x.hom f ≫ u.right = f ≫ ((pushout f).obj x).hom ≫ u.right
tactic: rw [← Under.w u]
state_before: C : Type u
inst✝¹ : Category.{v, u} C
X✝ : C
inst✝ : HasPushouts C
X Y : C
f : X ⟶ Y
x : Under X
y : Under Y
u : (pushout f).obj x ⟶ y
⊢ x.hom ≫ pushout.inl x.hom f ≫ u.right = f ≫ ((pushout f).obj x).hom ≫ u.right
state_after: C : Type u
inst✝¹ : Category.{v, u} C
X✝ : C
inst✝ : HasPushouts C
X Y : C
f : X ⟶ Y
x : Under X
y : Under Y
u : (pushout f).obj x ⟶ y
⊢ x.hom ≫ pushout.inl x.hom f ≫ u.right = f ≫ pushout.inr x.hom f ≫ u.right
tactic: simp only [Functor.const_obj_obj, map_obj_right, Functor.id_obj, pushout_obj, mk_right,
          mk_hom]
state_before: C : Type u
inst✝¹ : Category.{v, u} C
X✝ : C
inst✝ : HasPushouts C
X Y : C
f : X ⟶ Y
x : Under X
y : Under Y
u : (pushout f).obj x ⟶ y
⊢ x.hom ≫ pushout.inl x.hom f ≫ u.right = f ≫ pushout.inr x.hom f ≫ u.right
state_after: no goals
tactic: rw [← assoc, ← assoc, pushout.condition]
state_before: C : Type u
inst✝¹ : Category.{v, u} C
X✝ : C
inst✝ : HasPushouts C
X Y : C
f : X ⟶ Y
x : Under X
y : Under Y
v : x ⟶ (map f).obj y
⊢ x.hom ≫ v.right = f ≫ y.hom
state_after: no goals
tactic: simp
state_before: C : Type u
inst✝¹ : Category.{v, u} C
X✝ : C
inst✝ : HasPushouts C
X Y : C
f : X ⟶ Y
x : Under X
y : Under Y
u : (pushout f).obj x ⟶ y
⊢ (fun v => homMk (pushout.desc v.right y.hom ⋯) ⋯) ((fun u => homMk (pushout.inl x.hom f ≫ u.right) ⋯) u) = u
state_after: case h
C : Type u
inst✝¹ : Category.{v, u} C
X✝ : C
inst✝ : HasPushouts C
X Y : C
f : X ⟶ Y
x : Under X
y : Under Y
u : (pushout f).obj x ⟶ y
⊢ ((fun v => homMk (pushout.desc v.right y.hom ⋯) ⋯) ((fun u => homMk (pushout.inl x.hom f ≫ u.right) ⋯) u)).right =
    u.right
tactic: ext
state_before: case h
C : Type u
inst✝¹ : Category.{v, u} C
X✝ : C
inst✝ : HasPushouts C
X Y : C
f : X ⟶ Y
x : Under X
y : Under Y
u : (pushout f).obj x ⟶ y
⊢ ((fun v => homMk (pushout.desc v.right y.hom ⋯) ⋯) ((fun u => homMk (pushout.inl x.hom f ≫ u.right) ⋯) u)).right =
    u.right
state_after: case h
C : Type u
inst✝¹ : Category.{v, u} C
X✝ : C
inst✝ : HasPushouts C
X Y : C
f : X ⟶ Y
x : Under X
y : Under Y
u : (pushout f).obj x ⟶ y
⊢ pushout.desc (pushout.inl x.hom f ≫ u.right) y.hom ⋯ = u.right
tactic: dsimp
state_before: case h
C : Type u
inst✝¹ : Category.{v, u} C
X✝ : C
inst✝ : HasPushouts C
X Y : C
f : X ⟶ Y
x : Under X
y : Under Y
u : (pushout f).obj x ⟶ y
⊢ pushout.desc (pushout.inl x.hom f ≫ u.right) y.hom ⋯ = u.right
state_after: case h.h₀
C : Type u
inst✝¹ : Category.{v, u} C
X✝ : C
inst✝ : HasPushouts C
X Y : C
f : X ⟶ Y
x : Under X
y : Under Y
u : (pushout f).obj x ⟶ y
⊢ pushout.inl x.hom f ≫ pushout.desc (pushout.inl x.hom f ≫ u.right) y.hom ⋯ = pushout.inl x.hom f ≫ u.right

case h.h₁
C : Type u
inst✝¹ : Category.{v, u} C
X✝ : C
inst✝ : HasPushouts C
X Y : C
f : X ⟶ Y
x : Under X
y : Under Y
u : (pushout f).obj x ⟶ y
⊢ pushout.inr x.hom f ≫ pushout.desc (pushout.inl x.hom f ≫ u.right) y.hom ⋯ = pushout.inr x.hom f ≫ u.right
tactic: ext
state_before: C : Type u
inst✝¹ : Category.{v, u} C
X✝ : C
inst✝ : HasPushouts C
X Y : C
f : X ⟶ Y
x : Under X
y : Under Y
⊢ Function.RightInverse (fun v => homMk (pushout.desc v.right y.hom ⋯) ⋯) fun u =>
    homMk (pushout.inl x.hom f ≫ u.right) ⋯
state_after: no goals
tactic: aesop_cat