Theorem: CategoryTheory.ActionCategory.uncurry_map
File: Mathlib/CategoryTheory/Action.lean

Proof steps:
state_before: M : Type u_1
inst✝⁴ : Monoid M
X : Type u
inst✝³ : MulAction M X
x✝ : X
G : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G X
H : Type u_3
inst✝ : Group H
F : G →* (X → H) ⋊[mulAutArrow] G
sane : ∀ (g : G), (F g).right = g
x : ActionCategory G X
⊢ { obj := fun x => (), map := fun {x b} f => (F ↑f).left b.back }.map (𝟙 x) =
    𝟙 ({ obj := fun x => (), map := fun {x b} f => (F ↑f).left b.back }.obj x)
state_after: M : Type u_1
inst✝⁴ : Monoid M
X : Type u
inst✝³ : MulAction M X
x✝ : X
G : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G X
H : Type u_3
inst✝ : Group H
F : G →* (X → H) ⋊[mulAutArrow] G
sane : ∀ (g : G), (F g).right = g
x : ActionCategory G X
⊢ (F 1).left x.back = 𝟙 ()
tactic: dsimp
state_before: M : Type u_1
inst✝⁴ : Monoid M
X : Type u
inst✝³ : MulAction M X
x✝ : X
G : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G X
H : Type u_3
inst✝ : Group H
F : G →* (X → H) ⋊[mulAutArrow] G
sane : ∀ (g : G), (F g).right = g
x : ActionCategory G X
⊢ (F 1).left x.back = 𝟙 ()
state_after: M : Type u_1
inst✝⁴ : Monoid M
X : Type u
inst✝³ : MulAction M X
x✝ : X
G : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G X
H : Type u_3
inst✝ : Group H
F : G →* (X → H) ⋊[mulAutArrow] G
sane : ∀ (g : G), (F g).right = g
x : ActionCategory G X
⊢ left 1 x.back = 𝟙 ()
tactic: rw [F.map_one]
state_before: M : Type u_1
inst✝⁴ : Monoid M
X : Type u
inst✝³ : MulAction M X
x✝ : X
G : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G X
H : Type u_3
inst✝ : Group H
F : G →* (X → H) ⋊[mulAutArrow] G
sane : ∀ (g : G), (F g).right = g
x : ActionCategory G X
⊢ left 1 x.back = 𝟙 ()
state_after: no goals
tactic: rfl
state_before: M : Type u_1
inst✝⁴ : Monoid M
X : Type u
inst✝³ : MulAction M X
x : X
G : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G X
H : Type u_3
inst✝ : Group H
F : G →* (X → H) ⋊[mulAutArrow] G
sane : ∀ (g : G), (F g).right = g
X✝ Y✝ Z✝ : ActionCategory G X
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
⊢ { obj := fun x => (), map := fun {x b} f => (F ↑f).left b.back }.map (f ≫ g) =
    { obj := fun x => (), map := fun {x b} f => (F ↑f).left b.back }.map f ≫
      { obj := fun x => (), map := fun {x b} f => (F ↑f).left b.back }.map g
state_after: case intro.intro.intro.intro.intro.intro
M : Type u_1
inst✝⁴ : Monoid M
X : Type u
inst✝³ : MulAction M X
x : X
G : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G X
H : Type u_3
inst✝ : Group H
F : G →* (X → H) ⋊[mulAutArrow] G
sane : ∀ (g : G), (F g).right = g
X✝ : ActionCategory G X
z : X
γ₁ : G
f : X✝ ⟶ ⟨(), γ₁⁻¹ • z⟩
⊢ { obj := fun x => (), map := fun {x b} f => (F ↑f).left b.back }.map (f ≫ eqToHom ⋯ ≫ homOfPair z γ₁ ≫ eqToHom ⋯) =
    { obj := fun x => (), map := fun {x b} f => (F ↑f).left b.back }.map f ≫
      { obj := fun x => (), map := fun {x b} f => (F ↑f).left b.back }.map (eqToHom ⋯ ≫ homOfPair z γ₁ ≫ eqToHom ⋯)
tactic: obtain ⟨_, z, γ₁, rfl, rfl, rfl, rfl⟩ := ActionCategory.cases' g
state_before: case intro.intro.intro.intro.intro.intro
M : Type u_1
inst✝⁴ : Monoid M
X : Type u
inst✝³ : MulAction M X
x : X
G : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G X
H : Type u_3
inst✝ : Group H
F : G →* (X → H) ⋊[mulAutArrow] G
sane : ∀ (g : G), (F g).right = g
X✝ : ActionCategory G X
z : X
γ₁ : G
f : X✝ ⟶ ⟨(), γ₁⁻¹ • z⟩
⊢ { obj := fun x => (), map := fun {x b} f => (F ↑f).left b.back }.map (f ≫ eqToHom ⋯ ≫ homOfPair z γ₁ ≫ eqToHom ⋯) =
    { obj := fun x => (), map := fun {x b} f => (F ↑f).left b.back }.map f ≫
      { obj := fun x => (), map := fun {x b} f => (F ↑f).left b.back }.map (eqToHom ⋯ ≫ homOfPair z γ₁ ≫ eqToHom ⋯)
state_after: case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
M : Type u_1
inst✝⁴ : Monoid M
X : Type u
inst✝³ : MulAction M X
x : X
G : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G X
H : Type u_3
inst✝ : Group H
F : G →* (X → H) ⋊[mulAutArrow] G
sane : ∀ (g : G), (F g).right = g
z : X
γ₁ : G
y : X
γ₂ : G
hy : ⟨(), γ₁⁻¹ • z⟩ = ⟨(), y⟩
⊢ { obj := fun x => (), map := fun {x b} f => (F ↑f).left b.back }.map
      ((eqToHom ⋯ ≫ homOfPair y γ₂ ≫ eqToHom ⋯) ≫ eqToHom ⋯ ≫ homOfPair z γ₁ ≫ eqToHom ⋯) =
    { obj := fun x => (), map := fun {x b} f => (F ↑f).left b.back }.map (eqToHom ⋯ ≫ homOfPair y γ₂ ≫ eqToHom ⋯) ≫
      { obj := fun x => (), map := fun {x b} f => (F ↑f).left b.back }.map (eqToHom ⋯ ≫ homOfPair z γ₁ ≫ eqToHom ⋯)
tactic: obtain ⟨_, y, γ₂, rfl, hy, rfl, rfl⟩ := ActionCategory.cases' f
state_before: case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
M : Type u_1
inst✝⁴ : Monoid M
X : Type u
inst✝³ : MulAction M X
x : X
G : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G X
H : Type u_3
inst✝ : Group H
F : G →* (X → H) ⋊[mulAutArrow] G
sane : ∀ (g : G), (F g).right = g
z : X
γ₁ : G
y : X
γ₂ : G
hy : ⟨(), γ₁⁻¹ • z⟩ = ⟨(), y⟩
⊢ { obj := fun x => (), map := fun {x b} f => (F ↑f).left b.back }.map
      ((eqToHom ⋯ ≫ homOfPair y γ₂ ≫ eqToHom ⋯) ≫ eqToHom ⋯ ≫ homOfPair z γ₁ ≫ eqToHom ⋯) =
    { obj := fun x => (), map := fun {x b} f => (F ↑f).left b.back }.map (eqToHom ⋯ ≫ homOfPair y γ₂ ≫ eqToHom ⋯) ≫
      { obj := fun x => (), map := fun {x b} f => (F ↑f).left b.back }.map (eqToHom ⋯ ≫ homOfPair z γ₁ ≫ eqToHom ⋯)
state_after: case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
M : Type u_1
inst✝⁴ : Monoid M
X : Type u
inst✝³ : MulAction M X
x : X
G : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G X
H : Type u_3
inst✝ : Group H
F : G →* (X → H) ⋊[mulAutArrow] G
sane : ∀ (g : G), (F g).right = g
z : X
γ₁ γ₂ : G
hy : ⟨(), γ₁⁻¹ • z⟩ = ⟨(), γ₁⁻¹ • z⟩
⊢ { obj := fun x => (), map := fun {x b} f => (F ↑f).left b.back }.map
      ((eqToHom ⋯ ≫ homOfPair (γ₁⁻¹ • z) γ₂ ≫ eqToHom ⋯) ≫ eqToHom ⋯ ≫ homOfPair z γ₁ ≫ eqToHom ⋯) =
    { obj := fun x => (), map := fun {x b} f => (F ↑f).left b.back }.map
        (eqToHom ⋯ ≫ homOfPair (γ₁⁻¹ • z) γ₂ ≫ eqToHom ⋯) ≫
      { obj := fun x => (), map := fun {x b} f => (F ↑f).left b.back }.map (eqToHom ⋯ ≫ homOfPair z γ₁ ≫ eqToHom ⋯)
tactic: obtain rfl : y = γ₁⁻¹ • z := congr_arg Sigma.snd hy.symm
state_before: case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
M : Type u_1
inst✝⁴ : Monoid M
X : Type u
inst✝³ : MulAction M X
x : X
G : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G X
H : Type u_3
inst✝ : Group H
F : G →* (X → H) ⋊[mulAutArrow] G
sane : ∀ (g : G), (F g).right = g
z : X
γ₁ γ₂ : G
hy : ⟨(), γ₁⁻¹ • z⟩ = ⟨(), γ₁⁻¹ • z⟩
⊢ { obj := fun x => (), map := fun {x b} f => (F ↑f).left b.back }.map
      ((eqToHom ⋯ ≫ homOfPair (γ₁⁻¹ • z) γ₂ ≫ eqToHom ⋯) ≫ eqToHom ⋯ ≫ homOfPair z γ₁ ≫ eqToHom ⋯) =
    { obj := fun x => (), map := fun {x b} f => (F ↑f).left b.back }.map
        (eqToHom ⋯ ≫ homOfPair (γ₁⁻¹ • z) γ₂ ≫ eqToHom ⋯) ≫
      { obj := fun x => (), map := fun {x b} f => (F ↑f).left b.back }.map (eqToHom ⋯ ≫ homOfPair z γ₁ ≫ eqToHom ⋯)
state_after: case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
M : Type u_1
inst✝⁴ : Monoid M
X : Type u
inst✝³ : MulAction M X
x : X
G : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G X
H : Type u_3
inst✝ : Group H
F : G →* (X → H) ⋊[mulAutArrow] G
sane : ∀ (g : G), (F g).right = g
z : X
γ₁ γ₂ : G
hy : ⟨(), γ₁⁻¹ • z⟩ = ⟨(), γ₁⁻¹ • z⟩
⊢ (F γ₁).left z * (γ₁ • (F γ₂).left) z = (F γ₂).left (γ₁⁻¹ • z) ≫ (F γ₁).left z
tactic: simp [sane]
state_before: case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
M : Type u_1
inst✝⁴ : Monoid M
X : Type u
inst✝³ : MulAction M X
x : X
G : Type u_2
inst✝² : Group G
inst✝¹ : MulAction G X
H : Type u_3
inst✝ : Group H
F : G →* (X → H) ⋊[mulAutArrow] G
sane : ∀ (g : G), (F g).right = g
z : X
γ₁ γ₂ : G
hy : ⟨(), γ₁⁻¹ • z⟩ = ⟨(), γ₁⁻¹ • z⟩
⊢ (F γ₁).left z * (γ₁ • (F γ₂).left) z = (F γ₂).left (γ₁⁻¹ • z) ≫ (F γ₁).left z
state_after: no goals
tactic: rfl