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

tactic: obtain (h|h|h) := lt_or_equiv_or_gt (hx.moveLeft i) (hx.moveLeft j)
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
ihxy : IH1 x y
ihyx : IH1 y x
i j : x.LeftMoves
k : y.LeftMoves
l : (-y).LeftMoves
⊢ ⟦x.mulOption y i k⟧ < -⟦x.mulOption (-y) j l⟧
state_after: case inl
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
ihxy : IH1 x y
ihyx : IH1 y x
i j : x.LeftMoves
k : y.LeftMoves
l : (-y).LeftMoves
h : x.moveLeft i < x.moveLeft j
⊢ ⟦x.mulOption y i k⟧ < -⟦x.mulOption (-y) j l⟧

case inr.inl
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
ihxy : IH1 x y
ihyx : IH1 y x
i j : x.LeftMoves
k : y.LeftMoves
l : (-y).LeftMoves
h : x.moveLeft i ≈ x.moveLeft j
⊢ ⟦x.mulOption y i k⟧ < -⟦x.mulOption (-y) j l⟧

case inr.inr
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
ihxy : IH1 x y
ihyx : IH1 y x
i j : x.LeftMoves
k : y.LeftMoves
l : (-y).LeftMoves
h : x.moveLeft j < x.moveLeft i
⊢ ⟦x.mulOption y i k⟧ < -⟦x.mulOption (-y) j l⟧

tactic: exact mulOption_lt_of_lt hy ihxy ihyx i j k l h
state_before: case inl
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
ihxy : IH1 x y
ihyx : IH1 y x
i j : x.LeftMoves
k : y.LeftMoves
l : (-y).LeftMoves
h : x.moveLeft i < x.moveLeft j
⊢ ⟦x.mulOption y i k⟧ < -⟦x.mulOption (-y) j l⟧
state_after: no goals

tactic: have ml := @IsOption.moveLeft
state_before: case inr.inl
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
ihxy : IH1 x y
ihyx : IH1 y x
i j : x.LeftMoves
k : y.LeftMoves
l : (-y).LeftMoves
h : x.moveLeft i ≈ x.moveLeft j
⊢ ⟦x.mulOption y i k⟧ < -⟦x.mulOption (-y) j l⟧
state_after: case inr.inl
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
ihxy : IH1 x y
ihyx : IH1 y x
i j : x.LeftMoves
k : y.LeftMoves
l : (-y).LeftMoves
h : x.moveLeft i ≈ x.moveLeft j
ml : ∀ {x : PGame} (i : x.LeftMoves), (x.moveLeft i).IsOption x
⊢ ⟦x.mulOption y i k⟧ < -⟦x.mulOption (-y) j l⟧

tactic: exact mulOption_lt_iff_P1.2 (P1_of_eq h (P24_of_ih ihxy i j).1
  (ihxy (ml i) (ml j) <| Or.inr <| isOption_neg.1 <| ml l).1 <| P3_of_ih hy ihyx i k l)
state_before: case inr.inl
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
ihxy : IH1 x y
ihyx : IH1 y x
i j : x.LeftMoves
k : y.LeftMoves
l : (-y).LeftMoves
h : x.moveLeft i ≈ x.moveLeft j
ml : ∀ {x : PGame} (i : x.LeftMoves), (x.moveLeft i).IsOption x
⊢ ⟦x.mulOption y i k⟧ < -⟦x.mulOption (-y) j l⟧
state_after: no goals

tactic: rw [mulOption_neg_neg, lt_neg]
state_before: case inr.inr
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
ihxy : IH1 x y
ihyx : IH1 y x
i j : x.LeftMoves
k : y.LeftMoves
l : (-y).LeftMoves
h : x.moveLeft j < x.moveLeft i
⊢ ⟦x.mulOption y i k⟧ < -⟦x.mulOption (-y) j l⟧
state_after: case inr.inr
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
ihxy : IH1 x y
ihyx : IH1 y x
i j : x.LeftMoves
k : y.LeftMoves
l : (-y).LeftMoves
h : x.moveLeft j < x.moveLeft i
⊢ ⟦x.mulOption (-y) j l⟧ < -⟦x.mulOption (- -y) i (toLeftMovesNeg (toRightMovesNeg k))⟧

tactic: exact mulOption_lt_of_lt hy.neg (ih1_neg_right ihxy) (ih1_neg_left ihyx) j i l _ h
state_before: case inr.inr
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
ihxy : IH1 x y
ihyx : IH1 y x
i j : x.LeftMoves
k : y.LeftMoves
l : (-y).LeftMoves
h : x.moveLeft j < x.moveLeft i
⊢ ⟦x.mulOption (-y) j l⟧ < -⟦x.mulOption (- -y) i (toLeftMovesNeg (toRightMovesNeg k))⟧
state_after: no goals