Theorem: SetTheory.PGame.Numeric.add
File: Mathlib/SetTheory/Surreal/Basic.lean

Proof steps:
state_before: xl xr : Type u_1
xL : xl → PGame
xR : xr → PGame
yl yr : Type u_1
yL : yl → PGame
yR : yr → PGame
ox : (PGame.mk xl xr xL xR).Numeric
oy : (PGame.mk yl yr yL yR).Numeric
⊢ ∀ (i : xl ⊕ yl) (j : xr ⊕ yr),
    (fun t =>
          Sum.rec
            (fun i =>
              (fun a =>
                  rec (motive := fun x => PGame → PGame)
                    (fun xl xr a a IHxl IHxr y =>
                      rec
                        (fun yl yr yL yR IHyl IHyr =>
                          let_fun y := PGame.mk yl yr yL yR;
                          PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t) fun t =>
                            Sum.rec (fun i => IHxr i y) IHyr t)
                        y)
                    (xL a))
                i (PGame.mk yl yr yL yR))
            (fun a =>
              rec
                (fun yl yr yL yR IHyl IHyr =>
                  let_fun y := PGame.mk yl yr yL yR;
                  PGame.mk (xl ⊕ yl) (xr ⊕ yr)
                    (fun t =>
                      Sum.rec
                        (fun i =>
                          (fun a =>
                              rec (motive := fun x => PGame → PGame)
                                (fun xl xr a a IHxl IHxr y =>
                                  rec
                                    (fun yl yr yL yR IHyl IHyr =>
                                      let_fun y := PGame.mk yl yr yL yR;
                                      PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t)
                                        fun t => Sum.rec (fun i => IHxr i y) IHyr t)
                                    y)
                                (xL a))
                            i y)
                        IHyl t)
                    fun t =>
                    Sum.rec
                      (fun i =>
                        (fun a =>
                            rec (motive := fun x => PGame → PGame)
                              (fun xl xr a a IHxl IHxr y =>
                                rec
                                  (fun yl yr yL yR IHyl IHyr =>
                                    let_fun y := PGame.mk yl yr yL yR;
                                    PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t) fun t =>
                                      Sum.rec (fun i => IHxr i y) IHyr t)
                                  y)
                              (xR a))
                          i y)
                      IHyr t)
                (yL a))
            t)
        i <
      (fun t =>
          Sum.rec
            (fun i =>
              (fun a =>
                  rec (motive := fun x => PGame → PGame)
                    (fun xl xr a a IHxl IHxr y =>
                      rec
                        (fun yl yr yL yR IHyl IHyr =>
                          let_fun y := PGame.mk yl yr yL yR;
                          PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t) fun t =>
                            Sum.rec (fun i => IHxr i y) IHyr t)
                        y)
                    (xR a))
                i (PGame.mk yl yr yL yR))
            (fun a =>
              rec
                (fun yl yr yL yR IHyl IHyr =>
                  let_fun y := PGame.mk yl yr yL yR;
                  PGame.mk (xl ⊕ yl) (xr ⊕ yr)
                    (fun t =>
                      Sum.rec
                        (fun i =>
                          (fun a =>
                              rec (motive := fun x => PGame → PGame)
                                (fun xl xr a a IHxl IHxr y =>
                                  rec
                                    (fun yl yr yL yR IHyl IHyr =>
                                      let_fun y := PGame.mk yl yr yL yR;
                                      PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t)
                                        fun t => Sum.rec (fun i => IHxr i y) IHyr t)
                                    y)
                                (xL a))
                            i y)
                        IHyl t)
                    fun t =>
                    Sum.rec
                      (fun i =>
                        (fun a =>
                            rec (motive := fun x => PGame → PGame)
                              (fun xl xr a a IHxl IHxr y =>
                                rec
                                  (fun yl yr yL yR IHyl IHyr =>
                                    let_fun y := PGame.mk yl yr yL yR;
                                    PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t) fun t =>
                                      Sum.rec (fun i => IHxr i y) IHyr t)
                                  y)
                              (xR a))
                          i y)
                      IHyr t)
                (yR a))
            t)
        j
state_after: case inl.inl
xl xr : Type u_1
xL : xl → PGame
xR : xr → PGame
yl yr : Type u_1
yL : yl → PGame
yR : yr → PGame
ox : (PGame.mk xl xr xL xR).Numeric
oy : (PGame.mk yl yr yL yR).Numeric
ix : xl
jx : xr
⊢ (fun t =>
        Sum.rec
          (fun i =>
            (fun a =>
                rec (motive := fun x => PGame → PGame)
                  (fun xl xr a a IHxl IHxr y =>
                    rec
                      (fun yl yr yL yR IHyl IHyr =>
                        let_fun y := PGame.mk yl yr yL yR;
                        PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t) fun t =>
                          Sum.rec (fun i => IHxr i y) IHyr t)
                      y)
                  (xL a))
              i (PGame.mk yl yr yL yR))
          (fun a =>
            rec
              (fun yl yr yL yR IHyl IHyr =>
                let_fun y := PGame.mk yl yr yL yR;
                PGame.mk (xl ⊕ yl) (xr ⊕ yr)
                  (fun t =>
                    Sum.rec
                      (fun i =>
                        (fun a =>
                            rec (motive := fun x => PGame → PGame)
                              (fun xl xr a a IHxl IHxr y =>
                                rec
                                  (fun yl yr yL yR IHyl IHyr =>
                                    let_fun y := PGame.mk yl yr yL yR;
                                    PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t) fun t =>
                                      Sum.rec (fun i => IHxr i y) IHyr t)
                                  y)
                              (xL a))
                          i y)
                      IHyl t)
                  fun t =>
                  Sum.rec
                    (fun i =>
                      (fun a =>
                          rec (motive := fun x => PGame → PGame)
                            (fun xl xr a a IHxl IHxr y =>
                              rec
                                (fun yl yr yL yR IHyl IHyr =>
                                  let_fun y := PGame.mk yl yr yL yR;
                                  PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t) fun t =>
                                    Sum.rec (fun i => IHxr i y) IHyr t)
                                y)
                            (xR a))
                        i y)
                    IHyr t)
              (yL a))
          t)
      (Sum.inl ix) <
    (fun t =>
        Sum.rec
          (fun i =>
            (fun a =>
                rec (motive := fun x => PGame → PGame)
                  (fun xl xr a a IHxl IHxr y =>
                    rec
                      (fun yl yr yL yR IHyl IHyr =>
                        let_fun y := PGame.mk yl yr yL yR;
                        PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t) fun t =>
                          Sum.rec (fun i => IHxr i y) IHyr t)
                      y)
                  (xR a))
              i (PGame.mk yl yr yL yR))
          (fun a =>
            rec
              (fun yl yr yL yR IHyl IHyr =>
                let_fun y := PGame.mk yl yr yL yR;
                PGame.mk (xl ⊕ yl) (xr ⊕ yr)
                  (fun t =>
                    Sum.rec
                      (fun i =>
                        (fun a =>
                            rec (motive := fun x => PGame → PGame)
                              (fun xl xr a a IHxl IHxr y =>
                                rec
                                  (fun yl yr yL yR IHyl IHyr =>
                                    let_fun y := PGame.mk yl yr yL yR;
                                    PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t) fun t =>
                                      Sum.rec (fun i => IHxr i y) IHyr t)
                                  y)
                              (xL a))
                          i y)
                      IHyl t)
                  fun t =>
                  Sum.rec
                    (fun i =>
                      (fun a =>
                          rec (motive := fun x => PGame → PGame)
                            (fun xl xr a a IHxl IHxr y =>
                              rec
                                (fun yl yr yL yR IHyl IHyr =>
                                  let_fun y := PGame.mk yl yr yL yR;
                                  PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t) fun t =>
                                    Sum.rec (fun i => IHxr i y) IHyr t)
                                y)
                            (xR a))
                        i y)
                    IHyr t)
              (yR a))
          t)
      (Sum.inl jx)

case inl.inr
xl xr : Type u_1
xL : xl → PGame
xR : xr → PGame
yl yr : Type u_1
yL : yl → PGame
yR : yr → PGame
ox : (PGame.mk xl xr xL xR).Numeric
oy : (PGame.mk yl yr yL yR).Numeric
ix : xl
jy : yr
⊢ (fun t =>
        Sum.rec
          (fun i =>
            (fun a =>
                rec (motive := fun x => PGame → PGame)
                  (fun xl xr a a IHxl IHxr y =>
                    rec
                      (fun yl yr yL yR IHyl IHyr =>
                        let_fun y := PGame.mk yl yr yL yR;
                        PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t) fun t =>
                          Sum.rec (fun i => IHxr i y) IHyr t)
                      y)
                  (xL a))
              i (PGame.mk yl yr yL yR))
          (fun a =>
            rec
              (fun yl yr yL yR IHyl IHyr =>
                let_fun y := PGame.mk yl yr yL yR;
                PGame.mk (xl ⊕ yl) (xr ⊕ yr)
                  (fun t =>
                    Sum.rec
                      (fun i =>
                        (fun a =>
                            rec (motive := fun x => PGame → PGame)
                              (fun xl xr a a IHxl IHxr y =>
                                rec
                                  (fun yl yr yL yR IHyl IHyr =>
                                    let_fun y := PGame.mk yl yr yL yR;
                                    PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t) fun t =>
                                      Sum.rec (fun i => IHxr i y) IHyr t)
                                  y)
                              (xL a))
                          i y)
                      IHyl t)
                  fun t =>
                  Sum.rec
                    (fun i =>
                      (fun a =>
                          rec (motive := fun x => PGame → PGame)
                            (fun xl xr a a IHxl IHxr y =>
                              rec
                                (fun yl yr yL yR IHyl IHyr =>
                                  let_fun y := PGame.mk yl yr yL yR;
                                  PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t) fun t =>
                                    Sum.rec (fun i => IHxr i y) IHyr t)
                                y)
                            (xR a))
                        i y)
                    IHyr t)
              (yL a))
          t)
      (Sum.inl ix) <
    (fun t =>
        Sum.rec
          (fun i =>
            (fun a =>
                rec (motive := fun x => PGame → PGame)
                  (fun xl xr a a IHxl IHxr y =>
                    rec
                      (fun yl yr yL yR IHyl IHyr =>
                        let_fun y := PGame.mk yl yr yL yR;
                        PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t) fun t =>
                          Sum.rec (fun i => IHxr i y) IHyr t)
                      y)
                  (xR a))
              i (PGame.mk yl yr yL yR))
          (fun a =>
            rec
              (fun yl yr yL yR IHyl IHyr =>
                let_fun y := PGame.mk yl yr yL yR;
                PGame.mk (xl ⊕ yl) (xr ⊕ yr)
                  (fun t =>
                    Sum.rec
                      (fun i =>
                        (fun a =>
                            rec (motive := fun x => PGame → PGame)
                              (fun xl xr a a IHxl IHxr y =>
                                rec
                                  (fun yl yr yL yR IHyl IHyr =>
                                    let_fun y := PGame.mk yl yr yL yR;
                                    PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t) fun t =>
                                      Sum.rec (fun i => IHxr i y) IHyr t)
                                  y)
                              (xL a))
                          i y)
                      IHyl t)
                  fun t =>
                  Sum.rec
                    (fun i =>
                      (fun a =>
                          rec (motive := fun x => PGame → PGame)
                            (fun xl xr a a IHxl IHxr y =>
                              rec
                                (fun yl yr yL yR IHyl IHyr =>
                                  let_fun y := PGame.mk yl yr yL yR;
                                  PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t) fun t =>
                                    Sum.rec (fun i => IHxr i y) IHyr t)
                                y)
                            (xR a))
                        i y)
                    IHyr t)
              (yR a))
          t)
      (Sum.inr jy)

case inr.inl
xl xr : Type u_1
xL : xl → PGame
xR : xr → PGame
yl yr : Type u_1
yL : yl → PGame
yR : yr → PGame
ox : (PGame.mk xl xr xL xR).Numeric
oy : (PGame.mk yl yr yL yR).Numeric
iy : yl
jx : xr
⊢ (fun t =>
        Sum.rec
          (fun i =>
            (fun a =>
                rec (motive := fun x => PGame → PGame)
                  (fun xl xr a a IHxl IHxr y =>
                    rec
                      (fun yl yr yL yR IHyl IHyr =>
                        let_fun y := PGame.mk yl yr yL yR;
                        PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t) fun t =>
                          Sum.rec (fun i => IHxr i y) IHyr t)
                      y)
                  (xL a))
              i (PGame.mk yl yr yL yR))
          (fun a =>
            rec
              (fun yl yr yL yR IHyl IHyr =>
                let_fun y := PGame.mk yl yr yL yR;
                PGame.mk (xl ⊕ yl) (xr ⊕ yr)
                  (fun t =>
                    Sum.rec
                      (fun i =>
                        (fun a =>
                            rec (motive := fun x => PGame → PGame)
                              (fun xl xr a a IHxl IHxr y =>
                                rec
                                  (fun yl yr yL yR IHyl IHyr =>
                                    let_fun y := PGame.mk yl yr yL yR;
                                    PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t) fun t =>
                                      Sum.rec (fun i => IHxr i y) IHyr t)
                                  y)
                              (xL a))
                          i y)
                      IHyl t)
                  fun t =>
                  Sum.rec
                    (fun i =>
                      (fun a =>
                          rec (motive := fun x => PGame → PGame)
                            (fun xl xr a a IHxl IHxr y =>
                              rec
                                (fun yl yr yL yR IHyl IHyr =>
                                  let_fun y := PGame.mk yl yr yL yR;
                                  PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t) fun t =>
                                    Sum.rec (fun i => IHxr i y) IHyr t)
                                y)
                            (xR a))
                        i y)
                    IHyr t)
              (yL a))
          t)
      (Sum.inr iy) <
    (fun t =>
        Sum.rec
          (fun i =>
            (fun a =>
                rec (motive := fun x => PGame → PGame)
                  (fun xl xr a a IHxl IHxr y =>
                    rec
                      (fun yl yr yL yR IHyl IHyr =>
                        let_fun y := PGame.mk yl yr yL yR;
                        PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t) fun t =>
                          Sum.rec (fun i => IHxr i y) IHyr t)
                      y)
                  (xR a))
              i (PGame.mk yl yr yL yR))
          (fun a =>
            rec
              (fun yl yr yL yR IHyl IHyr =>
                let_fun y := PGame.mk yl yr yL yR;
                PGame.mk (xl ⊕ yl) (xr ⊕ yr)
                  (fun t =>
                    Sum.rec
                      (fun i =>
                        (fun a =>
                            rec (motive := fun x => PGame → PGame)
                              (fun xl xr a a IHxl IHxr y =>
                                rec
                                  (fun yl yr yL yR IHyl IHyr =>
                                    let_fun y := PGame.mk yl yr yL yR;
                                    PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t) fun t =>
                                      Sum.rec (fun i => IHxr i y) IHyr t)
                                  y)
                              (xL a))
                          i y)
                      IHyl t)
                  fun t =>
                  Sum.rec
                    (fun i =>
                      (fun a =>
                          rec (motive := fun x => PGame → PGame)
                            (fun xl xr a a IHxl IHxr y =>
                              rec
                                (fun yl yr yL yR IHyl IHyr =>
                                  let_fun y := PGame.mk yl yr yL yR;
                                  PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t) fun t =>
                                    Sum.rec (fun i => IHxr i y) IHyr t)
                                y)
                            (xR a))
                        i y)
                    IHyr t)
              (yR a))
          t)
      (Sum.inl jx)

case inr.inr
xl xr : Type u_1
xL : xl → PGame
xR : xr → PGame
yl yr : Type u_1
yL : yl → PGame
yR : yr → PGame
ox : (PGame.mk xl xr xL xR).Numeric
oy : (PGame.mk yl yr yL yR).Numeric
iy : yl
jy : yr
⊢ (fun t =>
        Sum.rec
          (fun i =>
            (fun a =>
                rec (motive := fun x => PGame → PGame)
                  (fun xl xr a a IHxl IHxr y =>
                    rec
                      (fun yl yr yL yR IHyl IHyr =>
                        let_fun y := PGame.mk yl yr yL yR;
                        PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t) fun t =>
                          Sum.rec (fun i => IHxr i y) IHyr t)
                      y)
                  (xL a))
              i (PGame.mk yl yr yL yR))
          (fun a =>
            rec
              (fun yl yr yL yR IHyl IHyr =>
                let_fun y := PGame.mk yl yr yL yR;
                PGame.mk (xl ⊕ yl) (xr ⊕ yr)
                  (fun t =>
                    Sum.rec
                      (fun i =>
                        (fun a =>
                            rec (motive := fun x => PGame → PGame)
                              (fun xl xr a a IHxl IHxr y =>
                                rec
                                  (fun yl yr yL yR IHyl IHyr =>
                                    let_fun y := PGame.mk yl yr yL yR;
                                    PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t) fun t =>
                                      Sum.rec (fun i => IHxr i y) IHyr t)
                                  y)
                              (xL a))
                          i y)
                      IHyl t)
                  fun t =>
                  Sum.rec
                    (fun i =>
                      (fun a =>
                          rec (motive := fun x => PGame → PGame)
                            (fun xl xr a a IHxl IHxr y =>
                              rec
                                (fun yl yr yL yR IHyl IHyr =>
                                  let_fun y := PGame.mk yl yr yL yR;
                                  PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t) fun t =>
                                    Sum.rec (fun i => IHxr i y) IHyr t)
                                y)
                            (xR a))
                        i y)
                    IHyr t)
              (yL a))
          t)
      (Sum.inr iy) <
    (fun t =>
        Sum.rec
          (fun i =>
            (fun a =>
                rec (motive := fun x => PGame → PGame)
                  (fun xl xr a a IHxl IHxr y =>
                    rec
                      (fun yl yr yL yR IHyl IHyr =>
                        let_fun y := PGame.mk yl yr yL yR;
                        PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t) fun t =>
                          Sum.rec (fun i => IHxr i y) IHyr t)
                      y)
                  (xR a))
              i (PGame.mk yl yr yL yR))
          (fun a =>
            rec
              (fun yl yr yL yR IHyl IHyr =>
                let_fun y := PGame.mk yl yr yL yR;
                PGame.mk (xl ⊕ yl) (xr ⊕ yr)
                  (fun t =>
                    Sum.rec
                      (fun i =>
                        (fun a =>
                            rec (motive := fun x => PGame → PGame)
                              (fun xl xr a a IHxl IHxr y =>
                                rec
                                  (fun yl yr yL yR IHyl IHyr =>
                                    let_fun y := PGame.mk yl yr yL yR;
                                    PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t) fun t =>
                                      Sum.rec (fun i => IHxr i y) IHyr t)
                                  y)
                              (xL a))
                          i y)
                      IHyl t)
                  fun t =>
                  Sum.rec
                    (fun i =>
                      (fun a =>
                          rec (motive := fun x => PGame → PGame)
                            (fun xl xr a a IHxl IHxr y =>
                              rec
                                (fun yl yr yL yR IHyl IHyr =>
                                  let_fun y := PGame.mk yl yr yL yR;
                                  PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t) fun t =>
                                    Sum.rec (fun i => IHxr i y) IHyr t)
                                y)
                            (xR a))
                        i y)
                    IHyr t)
              (yR a))
          t)
      (Sum.inr jy)
tactic: rintro (ix | iy) (jx | jy)
state_before: xl xr : Type u_1
xL : xl → PGame
xR : xr → PGame
yl yr : Type u_1
yL : yl → PGame
yR : yr → PGame
ox : (PGame.mk xl xr xL xR).Numeric
oy : (PGame.mk yl yr yL yR).Numeric
⊢ (∀ (i : xl ⊕ yl),
      ((fun t =>
            Sum.rec
              (fun i =>
                (fun a =>
                    rec (motive := fun x => PGame → PGame)
                      (fun xl xr a a IHxl IHxr y =>
                        rec
                          (fun yl yr yL yR IHyl IHyr =>
                            let_fun y := PGame.mk yl yr yL yR;
                            PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t) fun t =>
                              Sum.rec (fun i => IHxr i y) IHyr t)
                          y)
                      (xL a))
                  i (PGame.mk yl yr yL yR))
              (fun a =>
                rec
                  (fun yl yr yL yR IHyl IHyr =>
                    let_fun y := PGame.mk yl yr yL yR;
                    PGame.mk (xl ⊕ yl) (xr ⊕ yr)
                      (fun t =>
                        Sum.rec
                          (fun i =>
                            (fun a =>
                                rec (motive := fun x => PGame → PGame)
                                  (fun xl xr a a IHxl IHxr y =>
                                    rec
                                      (fun yl yr yL yR IHyl IHyr =>
                                        let_fun y := PGame.mk yl yr yL yR;
                                        PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t)
                                          fun t => Sum.rec (fun i => IHxr i y) IHyr t)
                                      y)
                                  (xL a))
                              i y)
                          IHyl t)
                      fun t =>
                      Sum.rec
                        (fun i =>
                          (fun a =>
                              rec (motive := fun x => PGame → PGame)
                                (fun xl xr a a IHxl IHxr y =>
                                  rec
                                    (fun yl yr yL yR IHyl IHyr =>
                                      let_fun y := PGame.mk yl yr yL yR;
                                      PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t)
                                        fun t => Sum.rec (fun i => IHxr i y) IHyr t)
                                    y)
                                (xR a))
                            i y)
                        IHyr t)
                  (yL a))
              t)
          i).Numeric) ∧
    ∀ (j : xr ⊕ yr),
      ((fun t =>
            Sum.rec
              (fun i =>
                (fun a =>
                    rec (motive := fun x => PGame → PGame)
                      (fun xl xr a a IHxl IHxr y =>
                        rec
                          (fun yl yr yL yR IHyl IHyr =>
                            let_fun y := PGame.mk yl yr yL yR;
                            PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t) fun t =>
                              Sum.rec (fun i => IHxr i y) IHyr t)
                          y)
                      (xR a))
                  i (PGame.mk yl yr yL yR))
              (fun a =>
                rec
                  (fun yl yr yL yR IHyl IHyr =>
                    let_fun y := PGame.mk yl yr yL yR;
                    PGame.mk (xl ⊕ yl) (xr ⊕ yr)
                      (fun t =>
                        Sum.rec
                          (fun i =>
                            (fun a =>
                                rec (motive := fun x => PGame → PGame)
                                  (fun xl xr a a IHxl IHxr y =>
                                    rec
                                      (fun yl yr yL yR IHyl IHyr =>
                                        let_fun y := PGame.mk yl yr yL yR;
                                        PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t)
                                          fun t => Sum.rec (fun i => IHxr i y) IHyr t)
                                      y)
                                  (xL a))
                              i y)
                          IHyl t)
                      fun t =>
                      Sum.rec
                        (fun i =>
                          (fun a =>
                              rec (motive := fun x => PGame → PGame)
                                (fun xl xr a a IHxl IHxr y =>
                                  rec
                                    (fun yl yr yL yR IHyl IHyr =>
                                      let_fun y := PGame.mk yl yr yL yR;
                                      PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t)
                                        fun t => Sum.rec (fun i => IHxr i y) IHyr t)
                                    y)
                                (xR a))
                            i y)
                        IHyr t)
                  (yR a))
              t)
          j).Numeric
state_after: case left
xl xr : Type u_1
xL : xl → PGame
xR : xr → PGame
yl yr : Type u_1
yL : yl → PGame
yR : yr → PGame
ox : (PGame.mk xl xr xL xR).Numeric
oy : (PGame.mk yl yr yL yR).Numeric
⊢ ∀ (i : xl ⊕ yl),
    ((fun t =>
          Sum.rec
            (fun i =>
              (fun a =>
                  rec (motive := fun x => PGame → PGame)
                    (fun xl xr a a IHxl IHxr y =>
                      rec
                        (fun yl yr yL yR IHyl IHyr =>
                          let_fun y := PGame.mk yl yr yL yR;
                          PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t) fun t =>
                            Sum.rec (fun i => IHxr i y) IHyr t)
                        y)
                    (xL a))
                i (PGame.mk yl yr yL yR))
            (fun a =>
              rec
                (fun yl yr yL yR IHyl IHyr =>
                  let_fun y := PGame.mk yl yr yL yR;
                  PGame.mk (xl ⊕ yl) (xr ⊕ yr)
                    (fun t =>
                      Sum.rec
                        (fun i =>
                          (fun a =>
                              rec (motive := fun x => PGame → PGame)
                                (fun xl xr a a IHxl IHxr y =>
                                  rec
                                    (fun yl yr yL yR IHyl IHyr =>
                                      let_fun y := PGame.mk yl yr yL yR;
                                      PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t)
                                        fun t => Sum.rec (fun i => IHxr i y) IHyr t)
                                    y)
                                (xL a))
                            i y)
                        IHyl t)
                    fun t =>
                    Sum.rec
                      (fun i =>
                        (fun a =>
                            rec (motive := fun x => PGame → PGame)
                              (fun xl xr a a IHxl IHxr y =>
                                rec
                                  (fun yl yr yL yR IHyl IHyr =>
                                    let_fun y := PGame.mk yl yr yL yR;
                                    PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t) fun t =>
                                      Sum.rec (fun i => IHxr i y) IHyr t)
                                  y)
                              (xR a))
                          i y)
                      IHyr t)
                (yL a))
            t)
        i).Numeric

case right
xl xr : Type u_1
xL : xl → PGame
xR : xr → PGame
yl yr : Type u_1
yL : yl → PGame
yR : yr → PGame
ox : (PGame.mk xl xr xL xR).Numeric
oy : (PGame.mk yl yr yL yR).Numeric
⊢ ∀ (j : xr ⊕ yr),
    ((fun t =>
          Sum.rec
            (fun i =>
              (fun a =>
                  rec (motive := fun x => PGame → PGame)
                    (fun xl xr a a IHxl IHxr y =>
                      rec
                        (fun yl yr yL yR IHyl IHyr =>
                          let_fun y := PGame.mk yl yr yL yR;
                          PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t) fun t =>
                            Sum.rec (fun i => IHxr i y) IHyr t)
                        y)
                    (xR a))
                i (PGame.mk yl yr yL yR))
            (fun a =>
              rec
                (fun yl yr yL yR IHyl IHyr =>
                  let_fun y := PGame.mk yl yr yL yR;
                  PGame.mk (xl ⊕ yl) (xr ⊕ yr)
                    (fun t =>
                      Sum.rec
                        (fun i =>
                          (fun a =>
                              rec (motive := fun x => PGame → PGame)
                                (fun xl xr a a IHxl IHxr y =>
                                  rec
                                    (fun yl yr yL yR IHyl IHyr =>
                                      let_fun y := PGame.mk yl yr yL yR;
                                      PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t)
                                        fun t => Sum.rec (fun i => IHxr i y) IHyr t)
                                    y)
                                (xL a))
                            i y)
                        IHyl t)
                    fun t =>
                    Sum.rec
                      (fun i =>
                        (fun a =>
                            rec (motive := fun x => PGame → PGame)
                              (fun xl xr a a IHxl IHxr y =>
                                rec
                                  (fun yl yr yL yR IHyl IHyr =>
                                    let_fun y := PGame.mk yl yr yL yR;
                                    PGame.mk (xl ⊕ yl) (xr ⊕ yr) (fun t => Sum.rec (fun i => IHxl i y) IHyl t) fun t =>
                                      Sum.rec (fun i => IHxr i y) IHyr t)
                                  y)
                              (xR a))
                          i y)
                      IHyr t)
                (yR a))
            t)
        j).Numeric
tactic: constructor