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

Proof steps:
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
⊢ (x * y).Numeric
state_after: 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
⊢ (x * y).Numeric
tactic: have ihxy := ih1 ih
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
⊢ (x * y).Numeric
state_after: 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
⊢ (x * y).Numeric
tactic: have ihyx := ih1_swap ih
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
⊢ (x * y).Numeric
state_after: 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
ihxyn : IH1 (-x) (-y)
⊢ (x * y).Numeric
tactic: have ihxyn := ih1_neg_left (ih1_neg_right ihxy)
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
ihxyn : IH1 (-x) (-y)
⊢ (x * y).Numeric
state_after: 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
ihxyn : IH1 (-x) (-y)
ihyxn : IH1 (-y) (-x)
⊢ (x * y).Numeric
tactic: have ihyxn := ih1_neg_left (ih1_neg_right ihyx)
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
ihxyn : IH1 (-x) (-y)
ihyxn : IH1 (-y) (-x)
⊢ (x * y).Numeric
state_after: case 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
ihxy : IH1 x y
ihyx : IH1 y x
ihxyn : IH1 (-x) (-y)
ihyxn : IH1 (-y) (-x)
⊢ ∀ (i : (x * y).LeftMoves) (j : (x * y).RightMoves), (x * y).moveLeft i < (x * y).moveRight j

case 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
ihxy : IH1 x y
ihyx : IH1 y x
ihxyn : IH1 (-x) (-y)
ihyxn : IH1 (-y) (-x)
⊢ ∀ (i : (x * y).LeftMoves), ((x * y).moveLeft i).Numeric

case refine_3
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
ihxyn : IH1 (-x) (-y)
ihyxn : IH1 (-y) (-x)
⊢ ∀ (j : (x * y).RightMoves), ((x * y).moveRight j).Numeric
tactic: refine numeric_def.mpr ⟨?_, ?_, ?_⟩
state_before: case 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
ihxy : IH1 x y
ihyx : IH1 y x
ihxyn : IH1 (-x) (-y)
ihyxn : IH1 (-y) (-x)
⊢ ∀ (i : (x * y).LeftMoves), ((x * y).moveLeft i).Numeric

case refine_3
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
ihxyn : IH1 (-x) (-y)
ihyxn : IH1 (-y) (-x)
⊢ ∀ (j : (x * y).RightMoves), ((x * y).moveRight j).Numeric
state_after: no goals
tactic: all_goals
    cases x; cases y
    rintro (⟨i,j⟩|⟨i,j⟩) <;>
    refine ((numeric_option_mul ih ?_).add <| numeric_mul_option ih ?_).sub
      (numeric_option_mul_option ih ?_ ?_) <;>
    solve_by_elim [IsOption.mk_left, IsOption.mk_right]