Theorem: Surreal.Multiplication.mulOptionsLTMul_of_numeric
File: Mathlib/SetTheory/Surreal/Multiplication.lean

tactic: constructor
state_before: x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y) → P124 a
hx : x.Numeric
hy : y.Numeric
ih' : ∀ (a : Args), ArgsRel a (Args.P24 x₁ x₂ y) → P124 a
hn : (x * y).Numeric
⊢ (MulOptionsLTMul x y ∧ MulOptionsLTMul (-x) (-y)) ∧ MulOptionsLTMul x (-y) ∧ MulOptionsLTMul (-x) y
state_after: case left
x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y) → P124 a
hx : x.Numeric
hy : y.Numeric
ih' : ∀ (a : Args), ArgsRel a (Args.P24 x₁ x₂ y) → P124 a
hn : (x * y).Numeric
⊢ MulOptionsLTMul x y ∧ MulOptionsLTMul (-x) (-y)

case right
x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y) → P124 a
hx : x.Numeric
hy : y.Numeric
ih' : ∀ (a : Args), ArgsRel a (Args.P24 x₁ x₂ y) → P124 a
hn : (x * y).Numeric
⊢ MulOptionsLTMul x (-y) ∧ MulOptionsLTMul (-x) y

tactic: have h := hn.moveLeft_lt
state_before: case left
x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y) → P124 a
hx : x.Numeric
hy : y.Numeric
ih' : ∀ (a : Args), ArgsRel a (Args.P24 x₁ x₂ y) → P124 a
hn : (x * y).Numeric
⊢ MulOptionsLTMul x y ∧ MulOptionsLTMul (-x) (-y)
state_after: case left
x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y) → P124 a
hx : x.Numeric
hy : y.Numeric
ih' : ∀ (a : Args), ArgsRel a (Args.P24 x₁ x₂ y) → P124 a
hn : (x * y).Numeric
h : ∀ (i : (x * y).LeftMoves), (x * y).moveLeft i < x * y
⊢ MulOptionsLTMul x y ∧ MulOptionsLTMul (-x) (-y)

tactic: simp_rw [lt_iff_game_lt] at h
state_before: case left
x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y) → P124 a
hx : x.Numeric
hy : y.Numeric
ih' : ∀ (a : Args), ArgsRel a (Args.P24 x₁ x₂ y) → P124 a
hn : (x * y).Numeric
h : ∀ (i : (x * y).LeftMoves), (x * y).moveLeft i < x * y
⊢ MulOptionsLTMul x y ∧ MulOptionsLTMul (-x) (-y)
state_after: case left
x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y) → P124 a
hx : x.Numeric
hy : y.Numeric
ih' : ∀ (a : Args), ArgsRel a (Args.P24 x₁ x₂ y) → P124 a
hn : (x * y).Numeric
h : ∀ (i : (x * y).LeftMoves), ⟦(x * y).moveLeft i⟧ < ⟦x * y⟧
⊢ MulOptionsLTMul x y ∧ MulOptionsLTMul (-x) (-y)

tactic: convert (leftMoves_mul_iff <| GT.gt _).1 h
state_before: case left
x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y) → P124 a
hx : x.Numeric
hy : y.Numeric
ih' : ∀ (a : Args), ArgsRel a (Args.P24 x₁ x₂ y) → P124 a
hn : (x * y).Numeric
h : ∀ (i : (x * y).LeftMoves), ⟦(x * y).moveLeft i⟧ < ⟦x * y⟧
⊢ MulOptionsLTMul x y ∧ MulOptionsLTMul (-x) (-y)
state_after: case h.e'_2.a
x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y) → P124 a
hx : x.Numeric
hy : y.Numeric
ih' : ∀ (a : Args), ArgsRel a (Args.P24 x₁ x₂ y) → P124 a
hn : (x * y).Numeric
h : ∀ (i : (x * y).LeftMoves), ⟦(x * y).moveLeft i⟧ < ⟦x * y⟧
⊢ MulOptionsLTMul (-x) (-y) ↔ ∀ (i : (-x).LeftMoves) (j : (-y).LeftMoves), ⟦x * y⟧ > ⟦(-x).mulOption (-y) i j⟧

tactic: rw [← quot_neg_mul_neg]
state_before: case h.e'_2.a
x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y) → P124 a
hx : x.Numeric
hy : y.Numeric
ih' : ∀ (a : Args), ArgsRel a (Args.P24 x₁ x₂ y) → P124 a
hn : (x * y).Numeric
h : ∀ (i : (x * y).LeftMoves), ⟦(x * y).moveLeft i⟧ < ⟦x * y⟧
⊢ MulOptionsLTMul (-x) (-y) ↔ ∀ (i : (-x).LeftMoves) (j : (-y).LeftMoves), ⟦x * y⟧ > ⟦(-x).mulOption (-y) i j⟧
state_after: case h.e'_2.a
x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y) → P124 a
hx : x.Numeric
hy : y.Numeric
ih' : ∀ (a : Args), ArgsRel a (Args.P24 x₁ x₂ y) → P124 a
hn : (x * y).Numeric
h : ∀ (i : (x * y).LeftMoves), ⟦(x * y).moveLeft i⟧ < ⟦x * y⟧
⊢ MulOptionsLTMul (-x) (-y) ↔ ∀ (i : (-x).LeftMoves) (j : (-y).LeftMoves), ⟦-x * -y⟧ > ⟦(-x).mulOption (-y) i j⟧

tactic: rfl
state_before: case h.e'_2.a
x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y) → P124 a
hx : x.Numeric
hy : y.Numeric
ih' : ∀ (a : Args), ArgsRel a (Args.P24 x₁ x₂ y) → P124 a
hn : (x * y).Numeric
h : ∀ (i : (x * y).LeftMoves), ⟦(x * y).moveLeft i⟧ < ⟦x * y⟧
⊢ MulOptionsLTMul (-x) (-y) ↔ ∀ (i : (-x).LeftMoves) (j : (-y).LeftMoves), ⟦-x * -y⟧ > ⟦(-x).mulOption (-y) i j⟧
state_after: no goals

tactic: have h := hn.lt_moveRight
state_before: case right
x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y) → P124 a
hx : x.Numeric
hy : y.Numeric
ih' : ∀ (a : Args), ArgsRel a (Args.P24 x₁ x₂ y) → P124 a
hn : (x * y).Numeric
⊢ MulOptionsLTMul x (-y) ∧ MulOptionsLTMul (-x) y
state_after: case right
x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y) → P124 a
hx : x.Numeric
hy : y.Numeric
ih' : ∀ (a : Args), ArgsRel a (Args.P24 x₁ x₂ y) → P124 a
hn : (x * y).Numeric
h : ∀ (j : (x * y).RightMoves), x * y < (x * y).moveRight j
⊢ MulOptionsLTMul x (-y) ∧ MulOptionsLTMul (-x) y

tactic: simp_rw [lt_iff_game_lt, rightMoves_mul_iff] at h
state_before: case right
x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y) → P124 a
hx : x.Numeric
hy : y.Numeric
ih' : ∀ (a : Args), ArgsRel a (Args.P24 x₁ x₂ y) → P124 a
hn : (x * y).Numeric
h : ∀ (j : (x * y).RightMoves), x * y < (x * y).moveRight j
⊢ MulOptionsLTMul x (-y) ∧ MulOptionsLTMul (-x) y
state_after: case right
x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y) → P124 a
hx : x.Numeric
hy : y.Numeric
ih' : ∀ (a : Args), ArgsRel a (Args.P24 x₁ x₂ y) → P124 a
hn : (x * y).Numeric
h :
  (∀ (i : x.LeftMoves) (j : (-y).LeftMoves), ⟦x * y⟧ < -⟦x.mulOption (-y) i j⟧) ∧
    ∀ (i : (-x).LeftMoves) (j : y.LeftMoves), ⟦x * y⟧ < -⟦(-x).mulOption y i j⟧
⊢ MulOptionsLTMul x (-y) ∧ MulOptionsLTMul (-x) y

tactic: refine h.imp ?_ ?_ <;> refine forall₂_imp fun a b ↦ ?_
state_before: case right
x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y) → P124 a
hx : x.Numeric
hy : y.Numeric
ih' : ∀ (a : Args), ArgsRel a (Args.P24 x₁ x₂ y) → P124 a
hn : (x * y).Numeric
h :
  (∀ (i : x.LeftMoves) (j : (-y).LeftMoves), ⟦x * y⟧ < -⟦x.mulOption (-y) i j⟧) ∧
    ∀ (i : (-x).LeftMoves) (j : y.LeftMoves), ⟦x * y⟧ < -⟦(-x).mulOption y i j⟧
⊢ MulOptionsLTMul x (-y) ∧ MulOptionsLTMul (-x) y
state_after: case right.refine_1
x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y) → P124 a
hx : x.Numeric
hy : y.Numeric
ih' : ∀ (a : Args), ArgsRel a (Args.P24 x₁ x₂ y) → P124 a
hn : (x * y).Numeric
h :
  (∀ (i : x.LeftMoves) (j : (-y).LeftMoves), ⟦x * y⟧ < -⟦x.mulOption (-y) i j⟧) ∧
    ∀ (i : (-x).LeftMoves) (j : y.LeftMoves), ⟦x * y⟧ < -⟦(-x).mulOption y i j⟧
a : x.LeftMoves
b : (-y).LeftMoves
⊢ ⟦x * y⟧ < -⟦x.mulOption (-y) a b⟧ → ⟦x.mulOption (-y) a b⟧ < ⟦x * -y⟧

case right.refine_2
x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y) → P124 a
hx : x.Numeric
hy : y.Numeric
ih' : ∀ (a : Args), ArgsRel a (Args.P24 x₁ x₂ y) → P124 a
hn : (x * y).Numeric
h :
  (∀ (i : x.LeftMoves) (j : (-y).LeftMoves), ⟦x * y⟧ < -⟦x.mulOption (-y) i j⟧) ∧
    ∀ (i : (-x).LeftMoves) (j : y.LeftMoves), ⟦x * y⟧ < -⟦(-x).mulOption y i j⟧
a : (-x).LeftMoves
b : y.LeftMoves
⊢ ⟦x * y⟧ < -⟦(-x).mulOption y a b⟧ → ⟦(-x).mulOption y a b⟧ < ⟦-x * y⟧

tactic: all_goals
  rw [lt_neg]
  first | rw [quot_mul_neg] | rw [quot_neg_mul]
  exact id
state_before: case right.refine_1
x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y) → P124 a
hx : x.Numeric
hy : y.Numeric
ih' : ∀ (a : Args), ArgsRel a (Args.P24 x₁ x₂ y) → P124 a
hn : (x * y).Numeric
h :
  (∀ (i : x.LeftMoves) (j : (-y).LeftMoves), ⟦x * y⟧ < -⟦x.mulOption (-y) i j⟧) ∧
    ∀ (i : (-x).LeftMoves) (j : y.LeftMoves), ⟦x * y⟧ < -⟦(-x).mulOption y i j⟧
a : x.LeftMoves
b : (-y).LeftMoves
⊢ ⟦x * y⟧ < -⟦x.mulOption (-y) a b⟧ → ⟦x.mulOption (-y) a b⟧ < ⟦x * -y⟧

case right.refine_2
x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y) → P124 a
hx : x.Numeric
hy : y.Numeric
ih' : ∀ (a : Args), ArgsRel a (Args.P24 x₁ x₂ y) → P124 a
hn : (x * y).Numeric
h :
  (∀ (i : x.LeftMoves) (j : (-y).LeftMoves), ⟦x * y⟧ < -⟦x.mulOption (-y) i j⟧) ∧
    ∀ (i : (-x).LeftMoves) (j : y.LeftMoves), ⟦x * y⟧ < -⟦(-x).mulOption y i j⟧
a : (-x).LeftMoves
b : y.LeftMoves
⊢ ⟦x * y⟧ < -⟦(-x).mulOption y a b⟧ → ⟦(-x).mulOption y a b⟧ < ⟦-x * y⟧
state_after: no goals

tactic: rw [lt_neg]
state_before: case right.refine_2
x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y) → P124 a
hx : x.Numeric
hy : y.Numeric
ih' : ∀ (a : Args), ArgsRel a (Args.P24 x₁ x₂ y) → P124 a
hn : (x * y).Numeric
h :
  (∀ (i : x.LeftMoves) (j : (-y).LeftMoves), ⟦x * y⟧ < -⟦x.mulOption (-y) i j⟧) ∧
    ∀ (i : (-x).LeftMoves) (j : y.LeftMoves), ⟦x * y⟧ < -⟦(-x).mulOption y i j⟧
a : (-x).LeftMoves
b : y.LeftMoves
⊢ ⟦x * y⟧ < -⟦(-x).mulOption y a b⟧ → ⟦(-x).mulOption y a b⟧ < ⟦-x * y⟧
state_after: case right.refine_2
x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y) → P124 a
hx : x.Numeric
hy : y.Numeric
ih' : ∀ (a : Args), ArgsRel a (Args.P24 x₁ x₂ y) → P124 a
hn : (x * y).Numeric
h :
  (∀ (i : x.LeftMoves) (j : (-y).LeftMoves), ⟦x * y⟧ < -⟦x.mulOption (-y) i j⟧) ∧
    ∀ (i : (-x).LeftMoves) (j : y.LeftMoves), ⟦x * y⟧ < -⟦(-x).mulOption y i j⟧
a : (-x).LeftMoves
b : y.LeftMoves
⊢ ⟦(-x).mulOption y a b⟧ < -⟦x * y⟧ → ⟦(-x).mulOption y a b⟧ < ⟦-x * y⟧

tactic: first | rw [quot_mul_neg] | rw [quot_neg_mul]
state_before: case right.refine_2
x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y) → P124 a
hx : x.Numeric
hy : y.Numeric
ih' : ∀ (a : Args), ArgsRel a (Args.P24 x₁ x₂ y) → P124 a
hn : (x * y).Numeric
h :
  (∀ (i : x.LeftMoves) (j : (-y).LeftMoves), ⟦x * y⟧ < -⟦x.mulOption (-y) i j⟧) ∧
    ∀ (i : (-x).LeftMoves) (j : y.LeftMoves), ⟦x * y⟧ < -⟦(-x).mulOption y i j⟧
a : (-x).LeftMoves
b : y.LeftMoves
⊢ ⟦(-x).mulOption y a b⟧ < -⟦x * y⟧ → ⟦(-x).mulOption y a b⟧ < ⟦-x * y⟧
state_after: case right.refine_2
x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y) → P124 a
hx : x.Numeric
hy : y.Numeric
ih' : ∀ (a : Args), ArgsRel a (Args.P24 x₁ x₂ y) → P124 a
hn : (x * y).Numeric
h :
  (∀ (i : x.LeftMoves) (j : (-y).LeftMoves), ⟦x * y⟧ < -⟦x.mulOption (-y) i j⟧) ∧
    ∀ (i : (-x).LeftMoves) (j : y.LeftMoves), ⟦x * y⟧ < -⟦(-x).mulOption y i j⟧
a : (-x).LeftMoves
b : y.LeftMoves
⊢ ⟦(-x).mulOption y a b⟧ < -⟦x * y⟧ → ⟦(-x).mulOption y a b⟧ < -⟦x * y⟧

tactic: exact id
state_before: case right.refine_2
x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y) → P124 a
hx : x.Numeric
hy : y.Numeric
ih' : ∀ (a : Args), ArgsRel a (Args.P24 x₁ x₂ y) → P124 a
hn : (x * y).Numeric
h :
  (∀ (i : x.LeftMoves) (j : (-y).LeftMoves), ⟦x * y⟧ < -⟦x.mulOption (-y) i j⟧) ∧
    ∀ (i : (-x).LeftMoves) (j : y.LeftMoves), ⟦x * y⟧ < -⟦(-x).mulOption y i j⟧
a : (-x).LeftMoves
b : y.LeftMoves
⊢ ⟦(-x).mulOption y a b⟧ < -⟦x * y⟧ → ⟦(-x).mulOption y a b⟧ < -⟦x * y⟧
state_after: no goals

tactic: rw [quot_mul_neg]
state_before: case right.refine_1
x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y) → P124 a
hx : x.Numeric
hy : y.Numeric
ih' : ∀ (a : Args), ArgsRel a (Args.P24 x₁ x₂ y) → P124 a
hn : (x * y).Numeric
h :
  (∀ (i : x.LeftMoves) (j : (-y).LeftMoves), ⟦x * y⟧ < -⟦x.mulOption (-y) i j⟧) ∧
    ∀ (i : (-x).LeftMoves) (j : y.LeftMoves), ⟦x * y⟧ < -⟦(-x).mulOption y i j⟧
a : x.LeftMoves
b : (-y).LeftMoves
⊢ ⟦x.mulOption (-y) a b⟧ < -⟦x * y⟧ → ⟦x.mulOption (-y) a b⟧ < ⟦x * -y⟧
state_after: case right.refine_1
x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y) → P124 a
hx : x.Numeric
hy : y.Numeric
ih' : ∀ (a : Args), ArgsRel a (Args.P24 x₁ x₂ y) → P124 a
hn : (x * y).Numeric
h :
  (∀ (i : x.LeftMoves) (j : (-y).LeftMoves), ⟦x * y⟧ < -⟦x.mulOption (-y) i j⟧) ∧
    ∀ (i : (-x).LeftMoves) (j : y.LeftMoves), ⟦x * y⟧ < -⟦(-x).mulOption y i j⟧
a : x.LeftMoves
b : (-y).LeftMoves
⊢ ⟦x.mulOption (-y) a b⟧ < -⟦x * y⟧ → ⟦x.mulOption (-y) a b⟧ < -⟦x * y⟧

tactic: rw [quot_neg_mul]
state_before: case right.refine_2
x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y) → P124 a
hx : x.Numeric
hy : y.Numeric
ih' : ∀ (a : Args), ArgsRel a (Args.P24 x₁ x₂ y) → P124 a
hn : (x * y).Numeric
h :
  (∀ (i : x.LeftMoves) (j : (-y).LeftMoves), ⟦x * y⟧ < -⟦x.mulOption (-y) i j⟧) ∧
    ∀ (i : (-x).LeftMoves) (j : y.LeftMoves), ⟦x * y⟧ < -⟦(-x).mulOption y i j⟧
a : (-x).LeftMoves
b : y.LeftMoves
⊢ ⟦(-x).mulOption y a b⟧ < -⟦x * y⟧ → ⟦(-x).mulOption y a b⟧ < ⟦-x * y⟧
state_after: case right.refine_2
x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y) → P124 a
hx : x.Numeric
hy : y.Numeric
ih' : ∀ (a : Args), ArgsRel a (Args.P24 x₁ x₂ y) → P124 a
hn : (x * y).Numeric
h :
  (∀ (i : x.LeftMoves) (j : (-y).LeftMoves), ⟦x * y⟧ < -⟦x.mulOption (-y) i j⟧) ∧
    ∀ (i : (-x).LeftMoves) (j : y.LeftMoves), ⟦x * y⟧ < -⟦(-x).mulOption y i j⟧
a : (-x).LeftMoves
b : y.LeftMoves
⊢ ⟦(-x).mulOption y a b⟧ < -⟦x * y⟧ → ⟦(-x).mulOption y a b⟧ < -⟦x * y⟧