Theorem: SetTheory.PGame.neg_le_lf_neg_iff
File: Mathlib/SetTheory/Game/PGame.lean

tactic: simp_rw [neg_def, mk_le_mk, mk_lf_mk, ← neg_def]
state_before: xl✝ xr✝ xl xr : Type u
xL : xl → PGame
xR : xr → PGame
yl yr : Type u
yL : yl → PGame
yR : yr → PGame
⊢ (-mk yl yr yL yR ≤ -mk xl xr xL xR ↔ mk xl xr xL xR ≤ mk yl yr yL yR) ∧
    (-mk yl yr yL yR ⧏ -mk xl xr xL xR ↔ mk xl xr xL xR ⧏ mk yl yr yL yR)
state_after: xl✝ xr✝ xl xr : Type u
xL : xl → PGame
xR : xr → PGame
yl yr : Type u
yL : yl → PGame
yR : yr → PGame
⊢ (((∀ (i : yr), -yR i ⧏ -mk xl xr xL xR) ∧ ∀ (j : xl), -mk yl yr yL yR ⧏ -xL j) ↔
      (∀ (i : xl), xL i ⧏ mk yl yr yL yR) ∧ ∀ (j : yr), mk xl xr xL xR ⧏ yR j) ∧
    (((∃ i, -mk yl yr yL yR ≤ -xR i) ∨ ∃ j, -yL j ≤ -mk xl xr xL xR) ↔
      (∃ i, mk xl xr xL xR ≤ yL i) ∨ ∃ j, xR j ≤ mk yl yr yL yR)

tactic: constructor
state_before: xl✝ xr✝ xl xr : Type u
xL : xl → PGame
xR : xr → PGame
yl yr : Type u
yL : yl → PGame
yR : yr → PGame
⊢ (((∀ (i : yr), -yR i ⧏ -mk xl xr xL xR) ∧ ∀ (j : xl), -mk yl yr yL yR ⧏ -xL j) ↔
      (∀ (i : xl), xL i ⧏ mk yl yr yL yR) ∧ ∀ (j : yr), mk xl xr xL xR ⧏ yR j) ∧
    (((∃ i, -mk yl yr yL yR ≤ -xR i) ∨ ∃ j, -yL j ≤ -mk xl xr xL xR) ↔
      (∃ i, mk xl xr xL xR ≤ yL i) ∨ ∃ j, xR j ≤ mk yl yr yL yR)
state_after: case left
xl✝ xr✝ xl xr : Type u
xL : xl → PGame
xR : xr → PGame
yl yr : Type u
yL : yl → PGame
yR : yr → PGame
⊢ ((∀ (i : yr), -yR i ⧏ -mk xl xr xL xR) ∧ ∀ (j : xl), -mk yl yr yL yR ⧏ -xL j) ↔
    (∀ (i : xl), xL i ⧏ mk yl yr yL yR) ∧ ∀ (j : yr), mk xl xr xL xR ⧏ yR j

case right
xl✝ xr✝ xl xr : Type u
xL : xl → PGame
xR : xr → PGame
yl yr : Type u
yL : yl → PGame
yR : yr → PGame
⊢ ((∃ i, -mk yl yr yL yR ≤ -xR i) ∨ ∃ j, -yL j ≤ -mk xl xr xL xR) ↔
    (∃ i, mk xl xr xL xR ≤ yL i) ∨ ∃ j, xR j ≤ mk yl yr yL yR

tactic: rw [and_comm]
state_before: case left
xl✝ xr✝ xl xr : Type u
xL : xl → PGame
xR : xr → PGame
yl yr : Type u
yL : yl → PGame
yR : yr → PGame
⊢ ((∀ (i : yr), -yR i ⧏ -mk xl xr xL xR) ∧ ∀ (j : xl), -mk yl yr yL yR ⧏ -xL j) ↔
    (∀ (i : xl), xL i ⧏ mk yl yr yL yR) ∧ ∀ (j : yr), mk xl xr xL xR ⧏ yR j
state_after: case left
xl✝ xr✝ xl xr : Type u
xL : xl → PGame
xR : xr → PGame
yl yr : Type u
yL : yl → PGame
yR : yr → PGame
⊢ ((∀ (j : xl), -mk yl yr yL yR ⧏ -xL j) ∧ ∀ (i : yr), -yR i ⧏ -mk xl xr xL xR) ↔
    (∀ (i : xl), xL i ⧏ mk yl yr yL yR) ∧ ∀ (j : yr), mk xl xr xL xR ⧏ yR j

tactic: apply and_congr <;> exact forall_congr' fun _ => neg_le_lf_neg_iff.2
state_before: case left
xl✝ xr✝ xl xr : Type u
xL : xl → PGame
xR : xr → PGame
yl yr : Type u
yL : yl → PGame
yR : yr → PGame
⊢ ((∀ (j : xl), -mk yl yr yL yR ⧏ -xL j) ∧ ∀ (i : yr), -yR i ⧏ -mk xl xr xL xR) ↔
    (∀ (i : xl), xL i ⧏ mk yl yr yL yR) ∧ ∀ (j : yr), mk xl xr xL xR ⧏ yR j
state_after: no goals

tactic: rw [or_comm]
state_before: case right
xl✝ xr✝ xl xr : Type u
xL : xl → PGame
xR : xr → PGame
yl yr : Type u
yL : yl → PGame
yR : yr → PGame
⊢ ((∃ i, -mk yl yr yL yR ≤ -xR i) ∨ ∃ j, -yL j ≤ -mk xl xr xL xR) ↔
    (∃ i, mk xl xr xL xR ≤ yL i) ∨ ∃ j, xR j ≤ mk yl yr yL yR
state_after: case right
xl✝ xr✝ xl xr : Type u
xL : xl → PGame
xR : xr → PGame
yl yr : Type u
yL : yl → PGame
yR : yr → PGame
⊢ ((∃ j, -yL j ≤ -mk xl xr xL xR) ∨ ∃ i, -mk yl yr yL yR ≤ -xR i) ↔
    (∃ i, mk xl xr xL xR ≤ yL i) ∨ ∃ j, xR j ≤ mk yl yr yL yR

tactic: apply or_congr <;> exact exists_congr fun _ => neg_le_lf_neg_iff.1
state_before: case right
xl✝ xr✝ xl xr : Type u
xL : xl → PGame
xR : xr → PGame
yl yr : Type u
yL : yl → PGame
yR : yr → PGame
⊢ ((∃ j, -yL j ≤ -mk xl xr xL xR) ∨ ∃ i, -mk yl yr yL yR ≤ -xR i) ↔
    (∃ i, mk xl xr xL xR ≤ yL i) ∨ ∃ j, xR j ≤ mk yl yr yL yR
state_after: no goals