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

tactic: unfold LE.le le
state_before: x y : PGame
⊢ x ≤ y ↔ (∀ (i : LeftMoves x), moveLeft x i ⧏ y) ∧ ∀ (j : RightMoves y), x ⧏ moveRight y j

tactic: simp only
state_before: x y : PGame
⊢ {
          le :=
            Sym2.GameAdd.fix wf_isOption fun x y le =>
              (∀ (i : LeftMoves x),
                  ¬le y (moveLeft x i)
                      (_ :
                        Sym2.GameAdd IsOption (Quotient.mk (Sym2.Rel.setoid PGame) (y, moveLeft x i))
                          (Quotient.mk (Sym2.Rel.setoid PGame) (x, y)))) ∧
                ∀ (j : RightMoves y),
                  ¬le (moveRight y j) x
                      (_ :
                        Sym2.GameAdd IsOption (Quotient.mk (Sym2.Rel.setoid PGame) (moveRight y j, x))
                          (Quotient.mk (Sym2.Rel.setoid PGame) (x, y))) }.1
      x y ↔
    (∀ (i : LeftMoves x), moveLeft x i ⧏ y) ∧ ∀ (j : RightMoves y), x ⧏ moveRight y j

tactic: rw [Sym2.GameAdd.fix_eq]
state_before: x y : PGame
⊢ Sym2.GameAdd.fix wf_isOption
      (fun x y le =>
        (∀ (i : LeftMoves x),
            ¬le y (moveLeft x i)
                (_ :
                  Sym2.GameAdd IsOption (Quotient.mk (Sym2.Rel.setoid PGame) (y, moveLeft x i))
                    (Quotient.mk (Sym2.Rel.setoid PGame) (x, y)))) ∧
          ∀ (j : RightMoves y),
            ¬le (moveRight y j) x
                (_ :
                  Sym2.GameAdd IsOption (Quotient.mk (Sym2.Rel.setoid PGame) (moveRight y j, x))
                    (Quotient.mk (Sym2.Rel.setoid PGame) (x, y))))
      x y ↔
    (∀ (i : LeftMoves x), moveLeft x i ⧏ y) ∧ ∀ (j : RightMoves y), x ⧏ moveRight y j

tactic: rfl
state_before: x y : PGame
⊢ ((∀ (i : LeftMoves x),
        ¬(fun a' b' x =>
              Sym2.GameAdd.fix wf_isOption
                (fun x y le =>
                  (∀ (i : LeftMoves x),
                      ¬le y (moveLeft x i)
                          (_ :
                            Sym2.GameAdd IsOption (Quotient.mk (Sym2.Rel.setoid PGame) (y, moveLeft x i))
                              (Quotient.mk (Sym2.Rel.setoid PGame) (x, y)))) ∧
                    ∀ (j : RightMoves y),
                      ¬le (moveRight y j) x
                          (_ :
                            Sym2.GameAdd IsOption (Quotient.mk (Sym2.Rel.setoid PGame) (moveRight y j, x))
                              (Quotient.mk (Sym2.Rel.setoid PGame) (x, y))))
                a' b')
            y (moveLeft x i)
            (_ :
              Sym2.GameAdd IsOption (Quotient.mk (Sym2.Rel.setoid PGame) (y, moveLeft x i))
                (Quotient.mk (Sym2.Rel.setoid PGame) (x, y)))) ∧
      ∀ (j : RightMoves y),
        ¬(fun a' b' x =>
              Sym2.GameAdd.fix wf_isOption
                (fun x y le =>
                  (∀ (i : LeftMoves x),
                      ¬le y (moveLeft x i)
                          (_ :
                            Sym2.GameAdd IsOption (Quotient.mk (Sym2.Rel.setoid PGame) (y, moveLeft x i))
                              (Quotient.mk (Sym2.Rel.setoid PGame) (x, y)))) ∧
                    ∀ (j : RightMoves y),
                      ¬le (moveRight y j) x
                          (_ :
                            Sym2.GameAdd IsOption (Quotient.mk (Sym2.Rel.setoid PGame) (moveRight y j, x))
                              (Quotient.mk (Sym2.Rel.setoid PGame) (x, y))))
                a' b')
            (moveRight y j) x
            (_ :
              Sym2.GameAdd IsOption (Quotient.mk (Sym2.Rel.setoid PGame) (moveRight y j, x))
                (Quotient.mk (Sym2.Rel.setoid PGame) (x, y)))) ↔
    (∀ (i : LeftMoves x), moveLeft x i ⧏ y) ∧ ∀ (j : RightMoves y), x ⧏ moveRight y j