Theorem: SetTheory.PGame.quot_mul_assoc
File: Mathlib/SetTheory/Game/Basic.lean

Proof steps:
state_before: x y z : PGame
xl xr : Type u_1
xL : xl → PGame
xR : xr → PGame
yl yr : Type u_1
yL : yl → PGame
yR : yr → PGame
zl zr : Type u_1
zL : zl → PGame
zR : zr → PGame
⊢ ⟦mk xl xr xL xR * mk yl yr yL yR * mk zl zr zL zR⟧ = ⟦mk xl xr xL xR * (mk yl yr yL yR * mk zl zr zL zR)⟧
state_after: x✝ y z : PGame
xl xr : Type u_1
xL : xl → PGame
xR : xr → PGame
yl yr : Type u_1
yL : yl → PGame
yR : yr → PGame
zl zr : Type u_1
zL : zl → PGame
zR : zr → PGame
x : PGame := mk xl xr xL xR
⊢ ⟦mk xl xr xL xR * mk yl yr yL yR * mk zl zr zL zR⟧ = ⟦mk xl xr xL xR * (mk yl yr yL yR * mk zl zr zL zR)⟧
tactic: let x := mk xl xr xL xR
state_before: x✝ y z : PGame
xl xr : Type u_1
xL : xl → PGame
xR : xr → PGame
yl yr : Type u_1
yL : yl → PGame
yR : yr → PGame
zl zr : Type u_1
zL : zl → PGame
zR : zr → PGame
x : PGame := mk xl xr xL xR
⊢ ⟦mk xl xr xL xR * mk yl yr yL yR * mk zl zr zL zR⟧ = ⟦mk xl xr xL xR * (mk yl yr yL yR * mk zl zr zL zR)⟧
state_after: x✝ y✝ z : PGame
xl xr : Type u_1
xL : xl → PGame
xR : xr → PGame
yl yr : Type u_1
yL : yl → PGame
yR : yr → PGame
zl zr : Type u_1
zL : zl → PGame
zR : zr → PGame
x : PGame := mk xl xr xL xR
y : PGame := mk yl yr yL yR
⊢ ⟦mk xl xr xL xR * mk yl yr yL yR * mk zl zr zL zR⟧ = ⟦mk xl xr xL xR * (mk yl yr yL yR * mk zl zr zL zR)⟧
tactic: let y := mk yl yr yL yR
state_before: x✝ y✝ z : PGame
xl xr : Type u_1
xL : xl → PGame
xR : xr → PGame
yl yr : Type u_1
yL : yl → PGame
yR : yr → PGame
zl zr : Type u_1
zL : zl → PGame
zR : zr → PGame
x : PGame := mk xl xr xL xR
y : PGame := mk yl yr yL yR
⊢ ⟦mk xl xr xL xR * mk yl yr yL yR * mk zl zr zL zR⟧ = ⟦mk xl xr xL xR * (mk yl yr yL yR * mk zl zr zL zR)⟧
state_after: x✝ y✝ z✝ : PGame
xl xr : Type u_1
xL : xl → PGame
xR : xr → PGame
yl yr : Type u_1
yL : yl → PGame
yR : yr → PGame
zl zr : Type u_1
zL : zl → PGame
zR : zr → PGame
x : PGame := mk xl xr xL xR
y : PGame := mk yl yr yL yR
z : PGame := mk zl zr zL zR
⊢ ⟦mk xl xr xL xR * mk yl yr yL yR * mk zl zr zL zR⟧ = ⟦mk xl xr xL xR * (mk yl yr yL yR * mk zl zr zL zR)⟧
tactic: let z := mk zl zr zL zR
state_before: x✝ y✝ z✝ : PGame
xl xr : Type u_1
xL : xl → PGame
xR : xr → PGame
yl yr : Type u_1
yL : yl → PGame
yR : yr → PGame
zl zr : Type u_1
zL : zl → PGame
zR : zr → PGame
x : PGame := mk xl xr xL xR
y : PGame := mk yl yr yL yR
z : PGame := mk zl zr zL zR
⊢ ⟦mk xl xr xL xR * mk yl yr yL yR * mk zl zr zL zR⟧ = ⟦mk xl xr xL xR * (mk yl yr yL yR * mk zl zr zL zR)⟧
state_after: case refine_1
x✝ y✝ z✝ : PGame
xl xr : Type u_1
xL : xl → PGame
xR : xr → PGame
yl yr : Type u_1
yL : yl → PGame
yR : yr → PGame
zl zr : Type u_1
zL : zl → PGame
zR : zr → PGame
x : PGame := mk xl xr xL xR
y : PGame := mk yl yr yL yR
z : PGame := mk zl zr zL zR
⊢ (mk xl xr xL xR * mk yl yr yL yR * mk zl zr zL zR).LeftMoves ≃
    (mk xl xr xL xR * (mk yl yr yL yR * mk zl zr zL zR)).LeftMoves

case refine_2
x✝ y✝ z✝ : PGame
xl xr : Type u_1
xL : xl → PGame
xR : xr → PGame
yl yr : Type u_1
yL : yl → PGame
yR : yr → PGame
zl zr : Type u_1
zL : zl → PGame
zR : zr → PGame
x : PGame := mk xl xr xL xR
y : PGame := mk yl yr yL yR
z : PGame := mk zl zr zL zR
⊢ (mk xl xr xL xR * mk yl yr yL yR * mk zl zr zL zR).RightMoves ≃
    (mk xl xr xL xR * (mk yl yr yL yR * mk zl zr zL zR)).RightMoves

case refine_3
x✝ y✝ z✝ : PGame
xl xr : Type u_1
xL : xl → PGame
xR : xr → PGame
yl yr : Type u_1
yL : yl → PGame
yR : yr → PGame
zl zr : Type u_1
zL : zl → PGame
zR : zr → PGame
x : PGame := mk xl xr xL xR
y : PGame := mk yl yr yL yR
z : PGame := mk zl zr zL zR
⊢ ∀ (i : (mk xl xr xL xR * mk yl yr yL yR * mk zl zr zL zR).LeftMoves),
    ⟦(mk xl xr xL xR * mk yl yr yL yR * mk zl zr zL zR).moveLeft i⟧ =
      ⟦(mk xl xr xL xR * (mk yl yr yL yR * mk zl zr zL zR)).moveLeft (?refine_1 i)⟧

case refine_4
x✝ y✝ z✝ : PGame
xl xr : Type u_1
xL : xl → PGame
xR : xr → PGame
yl yr : Type u_1
yL : yl → PGame
yR : yr → PGame
zl zr : Type u_1
zL : zl → PGame
zR : zr → PGame
x : PGame := mk xl xr xL xR
y : PGame := mk yl yr yL yR
z : PGame := mk zl zr zL zR
⊢ ∀ (j : (mk xl xr xL xR * mk yl yr yL yR * mk zl zr zL zR).RightMoves),
    ⟦(mk xl xr xL xR * mk yl yr yL yR * mk zl zr zL zR).moveRight j⟧ =
      ⟦(mk xl xr xL xR * (mk yl yr yL yR * mk zl zr zL zR)).moveRight (?refine_2 j)⟧
tactic: refine quot_eq_of_mk'_quot_eq ?_ ?_ ?_ ?_