Theorem: SetTheory.PGame.quot_left_distrib
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 xl xr xL xR * 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 xl xr xL xR * 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 xl xr xL xR * 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 xl xr xL xR * 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 xl xr xL xR * 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 xl xr xL xR * 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 xl xr xL xR * 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 xl xr xL xR * 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 xl xr xL xR * 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 xl xr xL xR * 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 xl xr xL xR * mk zl zr zL zR).moveRight (?refine_2 j)⟧
tactic: refine quot_eq_of_mk'_quot_eq ?_ ?_ ?_ ?_