Theorem: SetTheory.PGame.add_le_add_right'
File: Mathlib/SetTheory/Game/PGame.lean

tactic: refine le_def.2 ⟨fun i => ?_, fun i => ?_⟩ <;> cases' i with i i
state_before: xl✝ xr✝ : Type u
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
h : mk xl xr xL xR ≤ mk yl yr yL yR
⊢ mk xl xr xL xR + mk zl zr zL zR ≤ mk yl yr yL yR + mk zl zr zL zR
state_after: case refine_1.inl
xl✝ xr✝ : Type u
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
h : mk xl xr xL xR ≤ mk yl yr yL yR
i : xl
⊢ (∃ i', (mk xl xr xL xR + mk zl zr zL zR).moveLeft (Sum.inl i) ≤ (mk yl yr yL yR + mk zl zr zL zR).moveLeft i') ∨
    ∃ j, ((mk xl xr xL xR + mk zl zr zL zR).moveLeft (Sum.inl i)).moveRight j ≤ mk yl yr yL yR + mk zl zr zL zR

case refine_1.inr
xl✝ xr✝ : Type u
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
h : mk xl xr xL xR ≤ mk yl yr yL yR
i : zl
⊢ (∃ i', (mk xl xr xL xR + mk zl zr zL zR).moveLeft (Sum.inr i) ≤ (mk yl yr yL yR + mk zl zr zL zR).moveLeft i') ∨
    ∃ j, ((mk xl xr xL xR + mk zl zr zL zR).moveLeft (Sum.inr i)).moveRight j ≤ mk yl yr yL yR + mk zl zr zL zR

case refine_2.inl
xl✝ xr✝ : Type u
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
h : mk xl xr xL xR ≤ mk yl yr yL yR
i : yr
⊢ (∃ i_1, mk xl xr xL xR + mk zl zr zL zR ≤ ((mk yl yr yL yR + mk zl zr zL zR).moveRight (Sum.inl i)).moveLeft i_1) ∨
    ∃ j', (mk xl xr xL xR + mk zl zr zL zR).moveRight j' ≤ (mk yl yr yL yR + mk zl zr zL zR).moveRight (Sum.inl i)

case refine_2.inr
xl✝ xr✝ : Type u
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
h : mk xl xr xL xR ≤ mk yl yr yL yR
i : zr
⊢ (∃ i_1, mk xl xr xL xR + mk zl zr zL zR ≤ ((mk yl yr yL yR + mk zl zr zL zR).moveRight (Sum.inr i)).moveLeft i_1) ∨
    ∃ j', (mk xl xr xL xR + mk zl zr zL zR).moveRight j' ≤ (mk yl yr yL yR + mk zl zr zL zR).moveRight (Sum.inr i)

tactic: rw [le_def] at h
state_before: case refine_1.inl
xl✝ xr✝ : Type u
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
h : mk xl xr xL xR ≤ mk yl yr yL yR
i : xl
⊢ (∃ i', (mk xl xr xL xR + mk zl zr zL zR).moveLeft (Sum.inl i) ≤ (mk yl yr yL yR + mk zl zr zL zR).moveLeft i') ∨
    ∃ j, ((mk xl xr xL xR + mk zl zr zL zR).moveLeft (Sum.inl i)).moveRight j ≤ mk yl yr yL yR + mk zl zr zL zR
state_after: case refine_1.inl
xl✝ xr✝ : Type u
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
h :
  (∀ (i : (mk xl xr xL xR).LeftMoves),
      (∃ i', (mk xl xr xL xR).moveLeft i ≤ (mk yl yr yL yR).moveLeft i') ∨
        ∃ j, ((mk xl xr xL xR).moveLeft i).moveRight j ≤ mk yl yr yL yR) ∧
    ∀ (j : (mk yl yr yL yR).RightMoves),
      (∃ i, mk xl xr xL xR ≤ ((mk yl yr yL yR).moveRight j).moveLeft i) ∨
        ∃ j', (mk xl xr xL xR).moveRight j' ≤ (mk yl yr yL yR).moveRight j
i : xl
⊢ (∃ i', (mk xl xr xL xR + mk zl zr zL zR).moveLeft (Sum.inl i) ≤ (mk yl yr yL yR + mk zl zr zL zR).moveLeft i') ∨
    ∃ j, ((mk xl xr xL xR + mk zl zr zL zR).moveLeft (Sum.inl i)).moveRight j ≤ mk yl yr yL yR + mk zl zr zL zR

tactic: cases' h with h_left h_right
state_before: case refine_1.inl
xl✝ xr✝ : Type u
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
h :
  (∀ (i : (mk xl xr xL xR).LeftMoves),
      (∃ i', (mk xl xr xL xR).moveLeft i ≤ (mk yl yr yL yR).moveLeft i') ∨
        ∃ j, ((mk xl xr xL xR).moveLeft i).moveRight j ≤ mk yl yr yL yR) ∧
    ∀ (j : (mk yl yr yL yR).RightMoves),
      (∃ i, mk xl xr xL xR ≤ ((mk yl yr yL yR).moveRight j).moveLeft i) ∨
        ∃ j', (mk xl xr xL xR).moveRight j' ≤ (mk yl yr yL yR).moveRight j
i : xl
⊢ (∃ i', (mk xl xr xL xR + mk zl zr zL zR).moveLeft (Sum.inl i) ≤ (mk yl yr yL yR + mk zl zr zL zR).moveLeft i') ∨
    ∃ j, ((mk xl xr xL xR + mk zl zr zL zR).moveLeft (Sum.inl i)).moveRight j ≤ mk yl yr yL yR + mk zl zr zL zR
state_after: case refine_1.inl.intro
xl✝ xr✝ : Type u
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
i : xl
h_left :
  ∀ (i : (mk xl xr xL xR).LeftMoves),
    (∃ i', (mk xl xr xL xR).moveLeft i ≤ (mk yl yr yL yR).moveLeft i') ∨
      ∃ j, ((mk xl xr xL xR).moveLeft i).moveRight j ≤ mk yl yr yL yR
h_right :
  ∀ (j : (mk yl yr yL yR).RightMoves),
    (∃ i, mk xl xr xL xR ≤ ((mk yl yr yL yR).moveRight j).moveLeft i) ∨
      ∃ j', (mk xl xr xL xR).moveRight j' ≤ (mk yl yr yL yR).moveRight j
⊢ (∃ i', (mk xl xr xL xR + mk zl zr zL zR).moveLeft (Sum.inl i) ≤ (mk yl yr yL yR + mk zl zr zL zR).moveLeft i') ∨
    ∃ j, ((mk xl xr xL xR + mk zl zr zL zR).moveLeft (Sum.inl i)).moveRight j ≤ mk yl yr yL yR + mk zl zr zL zR

tactic: rcases h_left i with (⟨i', ih⟩ | ⟨j, jh⟩)
state_before: case refine_1.inl.intro
xl✝ xr✝ : Type u
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
i : xl
h_left :
  ∀ (i : (mk xl xr xL xR).LeftMoves),
    (∃ i', (mk xl xr xL xR).moveLeft i ≤ (mk yl yr yL yR).moveLeft i') ∨
      ∃ j, ((mk xl xr xL xR).moveLeft i).moveRight j ≤ mk yl yr yL yR
h_right :
  ∀ (j : (mk yl yr yL yR).RightMoves),
    (∃ i, mk xl xr xL xR ≤ ((mk yl yr yL yR).moveRight j).moveLeft i) ∨
      ∃ j', (mk xl xr xL xR).moveRight j' ≤ (mk yl yr yL yR).moveRight j
⊢ (∃ i', (mk xl xr xL xR + mk zl zr zL zR).moveLeft (Sum.inl i) ≤ (mk yl yr yL yR + mk zl zr zL zR).moveLeft i') ∨
    ∃ j, ((mk xl xr xL xR + mk zl zr zL zR).moveLeft (Sum.inl i)).moveRight j ≤ mk yl yr yL yR + mk zl zr zL zR
state_after: case refine_1.inl.intro.inl.intro
xl✝ xr✝ : Type u
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
i : xl
h_left :
  ∀ (i : (mk xl xr xL xR).LeftMoves),
    (∃ i', (mk xl xr xL xR).moveLeft i ≤ (mk yl yr yL yR).moveLeft i') ∨
      ∃ j, ((mk xl xr xL xR).moveLeft i).moveRight j ≤ mk yl yr yL yR
h_right :
  ∀ (j : (mk yl yr yL yR).RightMoves),
    (∃ i, mk xl xr xL xR ≤ ((mk yl yr yL yR).moveRight j).moveLeft i) ∨
      ∃ j', (mk xl xr xL xR).moveRight j' ≤ (mk yl yr yL yR).moveRight j
i' : (mk yl yr yL yR).LeftMoves
ih : (mk xl xr xL xR).moveLeft i ≤ (mk yl yr yL yR).moveLeft i'
⊢ (∃ i', (mk xl xr xL xR + mk zl zr zL zR).moveLeft (Sum.inl i) ≤ (mk yl yr yL yR + mk zl zr zL zR).moveLeft i') ∨
    ∃ j, ((mk xl xr xL xR + mk zl zr zL zR).moveLeft (Sum.inl i)).moveRight j ≤ mk yl yr yL yR + mk zl zr zL zR

case refine_1.inl.intro.inr.intro
xl✝ xr✝ : Type u
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
i : xl
h_left :
  ∀ (i : (mk xl xr xL xR).LeftMoves),
    (∃ i', (mk xl xr xL xR).moveLeft i ≤ (mk yl yr yL yR).moveLeft i') ∨
      ∃ j, ((mk xl xr xL xR).moveLeft i).moveRight j ≤ mk yl yr yL yR
h_right :
  ∀ (j : (mk yl yr yL yR).RightMoves),
    (∃ i, mk xl xr xL xR ≤ ((mk yl yr yL yR).moveRight j).moveLeft i) ∨
      ∃ j', (mk xl xr xL xR).moveRight j' ≤ (mk yl yr yL yR).moveRight j
j : ((mk xl xr xL xR).moveLeft i).RightMoves
jh : ((mk xl xr xL xR).moveLeft i).moveRight j ≤ mk yl yr yL yR
⊢ (∃ i', (mk xl xr xL xR + mk zl zr zL zR).moveLeft (Sum.inl i) ≤ (mk yl yr yL yR + mk zl zr zL zR).moveLeft i') ∨
    ∃ j, ((mk xl xr xL xR + mk zl zr zL zR).moveLeft (Sum.inl i)).moveRight j ≤ mk yl yr yL yR + mk zl zr zL zR

tactic: exact Or.inl ⟨toLeftMovesAdd (Sum.inl i'), add_le_add_right' ih⟩
state_before: case refine_1.inl.intro.inl.intro
xl✝ xr✝ : Type u
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
i : xl
h_left :
  ∀ (i : (mk xl xr xL xR).LeftMoves),
    (∃ i', (mk xl xr xL xR).moveLeft i ≤ (mk yl yr yL yR).moveLeft i') ∨
      ∃ j, ((mk xl xr xL xR).moveLeft i).moveRight j ≤ mk yl yr yL yR
h_right :
  ∀ (j : (mk yl yr yL yR).RightMoves),
    (∃ i, mk xl xr xL xR ≤ ((mk yl yr yL yR).moveRight j).moveLeft i) ∨
      ∃ j', (mk xl xr xL xR).moveRight j' ≤ (mk yl yr yL yR).moveRight j
i' : (mk yl yr yL yR).LeftMoves
ih : (mk xl xr xL xR).moveLeft i ≤ (mk yl yr yL yR).moveLeft i'
⊢ (∃ i', (mk xl xr xL xR + mk zl zr zL zR).moveLeft (Sum.inl i) ≤ (mk yl yr yL yR + mk zl zr zL zR).moveLeft i') ∨
    ∃ j, ((mk xl xr xL xR + mk zl zr zL zR).moveLeft (Sum.inl i)).moveRight j ≤ mk yl yr yL yR + mk zl zr zL zR
state_after: no goals

tactic: refine Or.inr ⟨toRightMovesAdd (Sum.inl j), ?_⟩
state_before: case refine_1.inl.intro.inr.intro
xl✝ xr✝ : Type u
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
i : xl
h_left :
  ∀ (i : (mk xl xr xL xR).LeftMoves),
    (∃ i', (mk xl xr xL xR).moveLeft i ≤ (mk yl yr yL yR).moveLeft i') ∨
      ∃ j, ((mk xl xr xL xR).moveLeft i).moveRight j ≤ mk yl yr yL yR
h_right :
  ∀ (j : (mk yl yr yL yR).RightMoves),
    (∃ i, mk xl xr xL xR ≤ ((mk yl yr yL yR).moveRight j).moveLeft i) ∨
      ∃ j', (mk xl xr xL xR).moveRight j' ≤ (mk yl yr yL yR).moveRight j
j : ((mk xl xr xL xR).moveLeft i).RightMoves
jh : ((mk xl xr xL xR).moveLeft i).moveRight j ≤ mk yl yr yL yR
⊢ (∃ i', (mk xl xr xL xR + mk zl zr zL zR).moveLeft (Sum.inl i) ≤ (mk yl yr yL yR + mk zl zr zL zR).moveLeft i') ∨
    ∃ j, ((mk xl xr xL xR + mk zl zr zL zR).moveLeft (Sum.inl i)).moveRight j ≤ mk yl yr yL yR + mk zl zr zL zR
state_after: case refine_1.inl.intro.inr.intro
xl✝ xr✝ : Type u
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
i : xl
h_left :
  ∀ (i : (mk xl xr xL xR).LeftMoves),
    (∃ i', (mk xl xr xL xR).moveLeft i ≤ (mk yl yr yL yR).moveLeft i') ∨
      ∃ j, ((mk xl xr xL xR).moveLeft i).moveRight j ≤ mk yl yr yL yR
h_right :
  ∀ (j : (mk yl yr yL yR).RightMoves),
    (∃ i, mk xl xr xL xR ≤ ((mk yl yr yL yR).moveRight j).moveLeft i) ∨
      ∃ j', (mk xl xr xL xR).moveRight j' ≤ (mk yl yr yL yR).moveRight j
j : ((mk xl xr xL xR).moveLeft i).RightMoves
jh : ((mk xl xr xL xR).moveLeft i).moveRight j ≤ mk yl yr yL yR
⊢ ((mk xl xr xL xR + mk zl zr zL zR).moveLeft (Sum.inl i)).moveRight (toRightMovesAdd (Sum.inl j)) ≤
    mk yl yr yL yR + mk zl zr zL zR

tactic: convert add_le_add_right' jh
state_before: case refine_1.inl.intro.inr.intro
xl✝ xr✝ : Type u
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
i : xl
h_left :
  ∀ (i : (mk xl xr xL xR).LeftMoves),
    (∃ i', (mk xl xr xL xR).moveLeft i ≤ (mk yl yr yL yR).moveLeft i') ∨
      ∃ j, ((mk xl xr xL xR).moveLeft i).moveRight j ≤ mk yl yr yL yR
h_right :
  ∀ (j : (mk yl yr yL yR).RightMoves),
    (∃ i, mk xl xr xL xR ≤ ((mk yl yr yL yR).moveRight j).moveLeft i) ∨
      ∃ j', (mk xl xr xL xR).moveRight j' ≤ (mk yl yr yL yR).moveRight j
j : ((mk xl xr xL xR).moveLeft i).RightMoves
jh : ((mk xl xr xL xR).moveLeft i).moveRight j ≤ mk yl yr yL yR
⊢ ((mk xl xr xL xR + mk zl zr zL zR).moveLeft (Sum.inl i)).moveRight (toRightMovesAdd (Sum.inl j)) ≤
    mk yl yr yL yR + mk zl zr zL zR
state_after: case h.e'_3
xl✝ xr✝ : Type u
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
i : xl
h_left :
  ∀ (i : (mk xl xr xL xR).LeftMoves),
    (∃ i', (mk xl xr xL xR).moveLeft i ≤ (mk yl yr yL yR).moveLeft i') ∨
      ∃ j, ((mk xl xr xL xR).moveLeft i).moveRight j ≤ mk yl yr yL yR
h_right :
  ∀ (j : (mk yl yr yL yR).RightMoves),
    (∃ i, mk xl xr xL xR ≤ ((mk yl yr yL yR).moveRight j).moveLeft i) ∨
      ∃ j', (mk xl xr xL xR).moveRight j' ≤ (mk yl yr yL yR).moveRight j
j : ((mk xl xr xL xR).moveLeft i).RightMoves
jh : ((mk xl xr xL xR).moveLeft i).moveRight j ≤ mk yl yr yL yR
⊢ ((mk xl xr xL xR + mk zl zr zL zR).moveLeft (Sum.inl i)).moveRight (toRightMovesAdd (Sum.inl j)) =
    ((mk xl xr xL xR).moveLeft i).moveRight j + mk zl zr zL zR

tactic: apply add_moveRight_inl
state_before: case h.e'_3
xl✝ xr✝ : Type u
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
i : xl
h_left :
  ∀ (i : (mk xl xr xL xR).LeftMoves),
    (∃ i', (mk xl xr xL xR).moveLeft i ≤ (mk yl yr yL yR).moveLeft i') ∨
      ∃ j, ((mk xl xr xL xR).moveLeft i).moveRight j ≤ mk yl yr yL yR
h_right :
  ∀ (j : (mk yl yr yL yR).RightMoves),
    (∃ i, mk xl xr xL xR ≤ ((mk yl yr yL yR).moveRight j).moveLeft i) ∨
      ∃ j', (mk xl xr xL xR).moveRight j' ≤ (mk yl yr yL yR).moveRight j
j : ((mk xl xr xL xR).moveLeft i).RightMoves
jh : ((mk xl xr xL xR).moveLeft i).moveRight j ≤ mk yl yr yL yR
⊢ ((mk xl xr xL xR + mk zl zr zL zR).moveLeft (Sum.inl i)).moveRight (toRightMovesAdd (Sum.inl j)) =
    ((mk xl xr xL xR).moveLeft i).moveRight j + mk zl zr zL zR
state_after: no goals

tactic: exact Or.inl ⟨@toLeftMovesAdd _ ⟨_, _, _, _⟩ (Sum.inr i), add_le_add_right' h⟩
state_before: case refine_1.inr
xl✝ xr✝ : Type u
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
h : mk xl xr xL xR ≤ mk yl yr yL yR
i : zl
⊢ (∃ i', (mk xl xr xL xR + mk zl zr zL zR).moveLeft (Sum.inr i) ≤ (mk yl yr yL yR + mk zl zr zL zR).moveLeft i') ∨
    ∃ j, ((mk xl xr xL xR + mk zl zr zL zR).moveLeft (Sum.inr i)).moveRight j ≤ mk yl yr yL yR + mk zl zr zL zR
state_after: no goals

tactic: rw [le_def] at h
state_before: case refine_2.inl
xl✝ xr✝ : Type u
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
h : mk xl xr xL xR ≤ mk yl yr yL yR
i : yr
⊢ (∃ i_1, mk xl xr xL xR + mk zl zr zL zR ≤ ((mk yl yr yL yR + mk zl zr zL zR).moveRight (Sum.inl i)).moveLeft i_1) ∨
    ∃ j', (mk xl xr xL xR + mk zl zr zL zR).moveRight j' ≤ (mk yl yr yL yR + mk zl zr zL zR).moveRight (Sum.inl i)
state_after: case refine_2.inl
xl✝ xr✝ : Type u
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
h :
  (∀ (i : (mk xl xr xL xR).LeftMoves),
      (∃ i', (mk xl xr xL xR).moveLeft i ≤ (mk yl yr yL yR).moveLeft i') ∨
        ∃ j, ((mk xl xr xL xR).moveLeft i).moveRight j ≤ mk yl yr yL yR) ∧
    ∀ (j : (mk yl yr yL yR).RightMoves),
      (∃ i, mk xl xr xL xR ≤ ((mk yl yr yL yR).moveRight j).moveLeft i) ∨
        ∃ j', (mk xl xr xL xR).moveRight j' ≤ (mk yl yr yL yR).moveRight j
i : yr
⊢ (∃ i_1, mk xl xr xL xR + mk zl zr zL zR ≤ ((mk yl yr yL yR + mk zl zr zL zR).moveRight (Sum.inl i)).moveLeft i_1) ∨
    ∃ j', (mk xl xr xL xR + mk zl zr zL zR).moveRight j' ≤ (mk yl yr yL yR + mk zl zr zL zR).moveRight (Sum.inl i)

tactic: rcases h.right i with (⟨i, ih⟩ | ⟨j', jh⟩)
state_before: case refine_2.inl
xl✝ xr✝ : Type u
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
h :
  (∀ (i : (mk xl xr xL xR).LeftMoves),
      (∃ i', (mk xl xr xL xR).moveLeft i ≤ (mk yl yr yL yR).moveLeft i') ∨
        ∃ j, ((mk xl xr xL xR).moveLeft i).moveRight j ≤ mk yl yr yL yR) ∧
    ∀ (j : (mk yl yr yL yR).RightMoves),
      (∃ i, mk xl xr xL xR ≤ ((mk yl yr yL yR).moveRight j).moveLeft i) ∨
        ∃ j', (mk xl xr xL xR).moveRight j' ≤ (mk yl yr yL yR).moveRight j
i : yr
⊢ (∃ i_1, mk xl xr xL xR + mk zl zr zL zR ≤ ((mk yl yr yL yR + mk zl zr zL zR).moveRight (Sum.inl i)).moveLeft i_1) ∨
    ∃ j', (mk xl xr xL xR + mk zl zr zL zR).moveRight j' ≤ (mk yl yr yL yR + mk zl zr zL zR).moveRight (Sum.inl i)
state_after: case refine_2.inl.inl.intro
xl✝ xr✝ : Type u
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
h :
  (∀ (i : (mk xl xr xL xR).LeftMoves),
      (∃ i', (mk xl xr xL xR).moveLeft i ≤ (mk yl yr yL yR).moveLeft i') ∨
        ∃ j, ((mk xl xr xL xR).moveLeft i).moveRight j ≤ mk yl yr yL yR) ∧
    ∀ (j : (mk yl yr yL yR).RightMoves),
      (∃ i, mk xl xr xL xR ≤ ((mk yl yr yL yR).moveRight j).moveLeft i) ∨
        ∃ j', (mk xl xr xL xR).moveRight j' ≤ (mk yl yr yL yR).moveRight j
i✝ : yr
i : ((mk yl yr yL yR).moveRight i✝).LeftMoves
ih : mk xl xr xL xR ≤ ((mk yl yr yL yR).moveRight i✝).moveLeft i
⊢ (∃ i, mk xl xr xL xR + mk zl zr zL zR ≤ ((mk yl yr yL yR + mk zl zr zL zR).moveRight (Sum.inl i✝)).moveLeft i) ∨
    ∃ j', (mk xl xr xL xR + mk zl zr zL zR).moveRight j' ≤ (mk yl yr yL yR + mk zl zr zL zR).moveRight (Sum.inl i✝)

case refine_2.inl.inr.intro
xl✝ xr✝ : Type u
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
h :
  (∀ (i : (mk xl xr xL xR).LeftMoves),
      (∃ i', (mk xl xr xL xR).moveLeft i ≤ (mk yl yr yL yR).moveLeft i') ∨
        ∃ j, ((mk xl xr xL xR).moveLeft i).moveRight j ≤ mk yl yr yL yR) ∧
    ∀ (j : (mk yl yr yL yR).RightMoves),
      (∃ i, mk xl xr xL xR ≤ ((mk yl yr yL yR).moveRight j).moveLeft i) ∨
        ∃ j', (mk xl xr xL xR).moveRight j' ≤ (mk yl yr yL yR).moveRight j
i : yr
j' : (mk xl xr xL xR).RightMoves
jh : (mk xl xr xL xR).moveRight j' ≤ (mk yl yr yL yR).moveRight i
⊢ (∃ i_1, mk xl xr xL xR + mk zl zr zL zR ≤ ((mk yl yr yL yR + mk zl zr zL zR).moveRight (Sum.inl i)).moveLeft i_1) ∨
    ∃ j', (mk xl xr xL xR + mk zl zr zL zR).moveRight j' ≤ (mk yl yr yL yR + mk zl zr zL zR).moveRight (Sum.inl i)

tactic: refine Or.inl ⟨toLeftMovesAdd (Sum.inl i), ?_⟩
state_before: case refine_2.inl.inl.intro
xl✝ xr✝ : Type u
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
h :
  (∀ (i : (mk xl xr xL xR).LeftMoves),
      (∃ i', (mk xl xr xL xR).moveLeft i ≤ (mk yl yr yL yR).moveLeft i') ∨
        ∃ j, ((mk xl xr xL xR).moveLeft i).moveRight j ≤ mk yl yr yL yR) ∧
    ∀ (j : (mk yl yr yL yR).RightMoves),
      (∃ i, mk xl xr xL xR ≤ ((mk yl yr yL yR).moveRight j).moveLeft i) ∨
        ∃ j', (mk xl xr xL xR).moveRight j' ≤ (mk yl yr yL yR).moveRight j
i✝ : yr
i : ((mk yl yr yL yR).moveRight i✝).LeftMoves
ih : mk xl xr xL xR ≤ ((mk yl yr yL yR).moveRight i✝).moveLeft i
⊢ (∃ i, mk xl xr xL xR + mk zl zr zL zR ≤ ((mk yl yr yL yR + mk zl zr zL zR).moveRight (Sum.inl i✝)).moveLeft i) ∨
    ∃ j', (mk xl xr xL xR + mk zl zr zL zR).moveRight j' ≤ (mk yl yr yL yR + mk zl zr zL zR).moveRight (Sum.inl i✝)
state_after: case refine_2.inl.inl.intro
xl✝ xr✝ : Type u
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
h :
  (∀ (i : (mk xl xr xL xR).LeftMoves),
      (∃ i', (mk xl xr xL xR).moveLeft i ≤ (mk yl yr yL yR).moveLeft i') ∨
        ∃ j, ((mk xl xr xL xR).moveLeft i).moveRight j ≤ mk yl yr yL yR) ∧
    ∀ (j : (mk yl yr yL yR).RightMoves),
      (∃ i, mk xl xr xL xR ≤ ((mk yl yr yL yR).moveRight j).moveLeft i) ∨
        ∃ j', (mk xl xr xL xR).moveRight j' ≤ (mk yl yr yL yR).moveRight j
i✝ : yr
i : ((mk yl yr yL yR).moveRight i✝).LeftMoves
ih : mk xl xr xL xR ≤ ((mk yl yr yL yR).moveRight i✝).moveLeft i
⊢ mk xl xr xL xR + mk zl zr zL zR ≤
    ((mk yl yr yL yR + mk zl zr zL zR).moveRight (Sum.inl i✝)).moveLeft (toLeftMovesAdd (Sum.inl i))

tactic: convert add_le_add_right' ih
state_before: case refine_2.inl.inl.intro
xl✝ xr✝ : Type u
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
h :
  (∀ (i : (mk xl xr xL xR).LeftMoves),
      (∃ i', (mk xl xr xL xR).moveLeft i ≤ (mk yl yr yL yR).moveLeft i') ∨
        ∃ j, ((mk xl xr xL xR).moveLeft i).moveRight j ≤ mk yl yr yL yR) ∧
    ∀ (j : (mk yl yr yL yR).RightMoves),
      (∃ i, mk xl xr xL xR ≤ ((mk yl yr yL yR).moveRight j).moveLeft i) ∨
        ∃ j', (mk xl xr xL xR).moveRight j' ≤ (mk yl yr yL yR).moveRight j
i✝ : yr
i : ((mk yl yr yL yR).moveRight i✝).LeftMoves
ih : mk xl xr xL xR ≤ ((mk yl yr yL yR).moveRight i✝).moveLeft i
⊢ mk xl xr xL xR + mk zl zr zL zR ≤
    ((mk yl yr yL yR + mk zl zr zL zR).moveRight (Sum.inl i✝)).moveLeft (toLeftMovesAdd (Sum.inl i))
state_after: case h.e'_4
xl✝ xr✝ : Type u
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
h :
  (∀ (i : (mk xl xr xL xR).LeftMoves),
      (∃ i', (mk xl xr xL xR).moveLeft i ≤ (mk yl yr yL yR).moveLeft i') ∨
        ∃ j, ((mk xl xr xL xR).moveLeft i).moveRight j ≤ mk yl yr yL yR) ∧
    ∀ (j : (mk yl yr yL yR).RightMoves),
      (∃ i, mk xl xr xL xR ≤ ((mk yl yr yL yR).moveRight j).moveLeft i) ∨
        ∃ j', (mk xl xr xL xR).moveRight j' ≤ (mk yl yr yL yR).moveRight j
i✝ : yr
i : ((mk yl yr yL yR).moveRight i✝).LeftMoves
ih : mk xl xr xL xR ≤ ((mk yl yr yL yR).moveRight i✝).moveLeft i
⊢ ((mk yl yr yL yR + mk zl zr zL zR).moveRight (Sum.inl i✝)).moveLeft (toLeftMovesAdd (Sum.inl i)) =
    ((mk yl yr yL yR).moveRight i✝).moveLeft i + mk zl zr zL zR

tactic: apply add_moveLeft_inl
state_before: case h.e'_4
xl✝ xr✝ : Type u
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
h :
  (∀ (i : (mk xl xr xL xR).LeftMoves),
      (∃ i', (mk xl xr xL xR).moveLeft i ≤ (mk yl yr yL yR).moveLeft i') ∨
        ∃ j, ((mk xl xr xL xR).moveLeft i).moveRight j ≤ mk yl yr yL yR) ∧
    ∀ (j : (mk yl yr yL yR).RightMoves),
      (∃ i, mk xl xr xL xR ≤ ((mk yl yr yL yR).moveRight j).moveLeft i) ∨
        ∃ j', (mk xl xr xL xR).moveRight j' ≤ (mk yl yr yL yR).moveRight j
i✝ : yr
i : ((mk yl yr yL yR).moveRight i✝).LeftMoves
ih : mk xl xr xL xR ≤ ((mk yl yr yL yR).moveRight i✝).moveLeft i
⊢ ((mk yl yr yL yR + mk zl zr zL zR).moveRight (Sum.inl i✝)).moveLeft (toLeftMovesAdd (Sum.inl i)) =
    ((mk yl yr yL yR).moveRight i✝).moveLeft i + mk zl zr zL zR
state_after: no goals

tactic: exact Or.inr ⟨toRightMovesAdd (Sum.inl j'), add_le_add_right' jh⟩
state_before: case refine_2.inl.inr.intro
xl✝ xr✝ : Type u
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
h :
  (∀ (i : (mk xl xr xL xR).LeftMoves),
      (∃ i', (mk xl xr xL xR).moveLeft i ≤ (mk yl yr yL yR).moveLeft i') ∨
        ∃ j, ((mk xl xr xL xR).moveLeft i).moveRight j ≤ mk yl yr yL yR) ∧
    ∀ (j : (mk yl yr yL yR).RightMoves),
      (∃ i, mk xl xr xL xR ≤ ((mk yl yr yL yR).moveRight j).moveLeft i) ∨
        ∃ j', (mk xl xr xL xR).moveRight j' ≤ (mk yl yr yL yR).moveRight j
i : yr
j' : (mk xl xr xL xR).RightMoves
jh : (mk xl xr xL xR).moveRight j' ≤ (mk yl yr yL yR).moveRight i
⊢ (∃ i_1, mk xl xr xL xR + mk zl zr zL zR ≤ ((mk yl yr yL yR + mk zl zr zL zR).moveRight (Sum.inl i)).moveLeft i_1) ∨
    ∃ j', (mk xl xr xL xR + mk zl zr zL zR).moveRight j' ≤ (mk yl yr yL yR + mk zl zr zL zR).moveRight (Sum.inl i)
state_after: no goals

tactic: exact
  Or.inr ⟨@toRightMovesAdd _ ⟨_, _, _, _⟩ (Sum.inr i), add_le_add_right' h⟩
state_before: case refine_2.inr
xl✝ xr✝ : Type u
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
h : mk xl xr xL xR ≤ mk yl yr yL yR
i : zr
⊢ (∃ i_1, mk xl xr xL xR + mk zl zr zL zR ≤ ((mk yl yr yL yR + mk zl zr zL zR).moveRight (Sum.inr i)).moveLeft i_1) ∨
    ∃ j', (mk xl xr xL xR + mk zl zr zL zR).moveRight j' ≤ (mk yl yr yL yR + mk zl zr zL zR).moveRight (Sum.inr i)
state_after: no goals