Lean4
/-- `(x + y) + z` has exactly the same moves as `x + (y + z)`. -/
def addAssocRelabelling : ∀ x y z : PGame.{u}, x + y + z ≡r x + (y + z)
| ⟨xl, xr, xL, xR⟩, ⟨yl, yr, yL, yR⟩, ⟨zl, zr, zL, zR⟩ =>
by
refine ⟨Equiv.sumAssoc _ _ _, Equiv.sumAssoc _ _ _, ?_, ?_⟩
· rintro (⟨i | i⟩ | i)
· apply addAssocRelabelling
· apply addAssocRelabelling ⟨xl, xr, xL, xR⟩ (yL i)
· apply addAssocRelabelling ⟨xl, xr, xL, xR⟩ ⟨yl, yr, yL, yR⟩ (zL i)
· rintro (⟨i | i⟩ | i)
· apply addAssocRelabelling
· apply addAssocRelabelling ⟨xl, xr, xL, xR⟩ (yR i)
· apply addAssocRelabelling ⟨xl, xr, xL, xR⟩ ⟨yl, yr, yL, yR⟩ (zR i)
termination_by x y z => (x, y, z)