Theorem: SetTheory.PGame.Relabelling.numeric_imp
File: Mathlib/SetTheory/Surreal/Basic.lean

tactic: induction' x using PGame.moveRecOn with x IHl IHr generalizing y
state_before: x y : PGame
r : x ≡r y
ox : x.Numeric
⊢ y.Numeric
state_after: case IH
x : PGame
IHl : ∀ (i : x.LeftMoves) {y : PGame}, x.moveLeft i ≡r y → (x.moveLeft i).Numeric → y.Numeric
IHr : ∀ (j : x.RightMoves) {y : PGame}, x.moveRight j ≡r y → (x.moveRight j).Numeric → y.Numeric
y : PGame
r : x ≡r y
ox : x.Numeric
⊢ y.Numeric

tactic: apply Numeric.mk (fun i j => ?_) (fun i => ?_) fun j => ?_
state_before: case IH
x : PGame
IHl : ∀ (i : x.LeftMoves) {y : PGame}, x.moveLeft i ≡r y → (x.moveLeft i).Numeric → y.Numeric
IHr : ∀ (j : x.RightMoves) {y : PGame}, x.moveRight j ≡r y → (x.moveRight j).Numeric → y.Numeric
y : PGame
r : x ≡r y
ox : x.Numeric
⊢ y.Numeric
state_after: x : PGame
IHl : ∀ (i : x.LeftMoves) {y : PGame}, x.moveLeft i ≡r y → (x.moveLeft i).Numeric → y.Numeric
IHr : ∀ (j : x.RightMoves) {y : PGame}, x.moveRight j ≡r y → (x.moveRight j).Numeric → y.Numeric
y : PGame
r : x ≡r y
ox : x.Numeric
i : y.LeftMoves
j : y.RightMoves
⊢ y.moveLeft i < y.moveRight j

x : PGame
IHl : ∀ (i : x.LeftMoves) {y : PGame}, x.moveLeft i ≡r y → (x.moveLeft i).Numeric → y.Numeric
IHr : ∀ (j : x.RightMoves) {y : PGame}, x.moveRight j ≡r y → (x.moveRight j).Numeric → y.Numeric
y : PGame
r : x ≡r y
ox : x.Numeric
i : y.LeftMoves
⊢ (y.moveLeft i).Numeric

x : PGame
IHl : ∀ (i : x.LeftMoves) {y : PGame}, x.moveLeft i ≡r y → (x.moveLeft i).Numeric → y.Numeric
IHr : ∀ (j : x.RightMoves) {y : PGame}, x.moveRight j ≡r y → (x.moveRight j).Numeric → y.Numeric
y : PGame
r : x ≡r y
ox : x.Numeric
j : y.RightMoves
⊢ (y.moveRight j).Numeric

tactic: rw [← lt_congr (r.moveLeftSymm i).equiv (r.moveRightSymm j).equiv]
state_before: x : PGame
IHl : ∀ (i : x.LeftMoves) {y : PGame}, x.moveLeft i ≡r y → (x.moveLeft i).Numeric → y.Numeric
IHr : ∀ (j : x.RightMoves) {y : PGame}, x.moveRight j ≡r y → (x.moveRight j).Numeric → y.Numeric
y : PGame
r : x ≡r y
ox : x.Numeric
i : y.LeftMoves
j : y.RightMoves
⊢ y.moveLeft i < y.moveRight j
state_after: x : PGame
IHl : ∀ (i : x.LeftMoves) {y : PGame}, x.moveLeft i ≡r y → (x.moveLeft i).Numeric → y.Numeric
IHr : ∀ (j : x.RightMoves) {y : PGame}, x.moveRight j ≡r y → (x.moveRight j).Numeric → y.Numeric
y : PGame
r : x ≡r y
ox : x.Numeric
i : y.LeftMoves
j : y.RightMoves
⊢ x.moveLeft (r.leftMovesEquiv.symm i) < x.moveRight (r.rightMovesEquiv.symm j)

tactic: apply ox.left_lt_right
state_before: x : PGame
IHl : ∀ (i : x.LeftMoves) {y : PGame}, x.moveLeft i ≡r y → (x.moveLeft i).Numeric → y.Numeric
IHr : ∀ (j : x.RightMoves) {y : PGame}, x.moveRight j ≡r y → (x.moveRight j).Numeric → y.Numeric
y : PGame
r : x ≡r y
ox : x.Numeric
i : y.LeftMoves
j : y.RightMoves
⊢ x.moveLeft (r.leftMovesEquiv.symm i) < x.moveRight (r.rightMovesEquiv.symm j)
state_after: no goals

tactic: exact IHl _ (r.moveLeftSymm i) (ox.moveLeft _)
state_before: x : PGame
IHl : ∀ (i : x.LeftMoves) {y : PGame}, x.moveLeft i ≡r y → (x.moveLeft i).Numeric → y.Numeric
IHr : ∀ (j : x.RightMoves) {y : PGame}, x.moveRight j ≡r y → (x.moveRight j).Numeric → y.Numeric
y : PGame
r : x ≡r y
ox : x.Numeric
i : y.LeftMoves
⊢ (y.moveLeft i).Numeric
state_after: no goals

tactic: exact IHr _ (r.moveRightSymm j) (ox.moveRight _)
state_before: x : PGame
IHl : ∀ (i : x.LeftMoves) {y : PGame}, x.moveLeft i ≡r y → (x.moveLeft i).Numeric → y.Numeric
IHr : ∀ (j : x.RightMoves) {y : PGame}, x.moveRight j ≡r y → (x.moveRight j).Numeric → y.Numeric
y : PGame
r : x ≡r y
ox : x.Numeric
j : y.RightMoves
⊢ (y.moveRight j).Numeric
state_after: no goals