Goal:
  
  G : t
  s0 : VSet.t
  s' : VSet.t
  x : V.t
  y : V.t
  z : V.t
  d : DisjointAdd x s0 s'
  e : EdgeOf x y
  p : SPath s0 y z
  u : VSet.elt
  Hu : {VSet.In u (snodes (spath_step d e p))} + {u = z}
  IHp : forall Hu : {VSet.In u (snodes p)} + {u = z},
        sweight (split p u Hu).1 + sweight (split p u Hu).2 = sweight p
  X : x <> u
  ============================
   (e.π1 +
    (sweight
       (split p u
          (sumbool_rec
             (fun _ : {VSet.In u (VSet.add x (snodes p))} + {u = z} =>
              {VSet.In u (snodes p)} + {u = z})
             (fun Hu : VSet.In u (VSet.add x (snodes p)) =>
              left (VSetFact.add_3 X Hu)) (fun Hu : u = z => right Hu) Hu)).1 +
     sweight
       (split p u
          (sumbool_rec
             (fun _ : {VSet.In u (VSet.add x (snodes p))} + {u = z} =>
              {VSet.In u (snodes p)} + {u = z})
             (fun Hu : VSet.In u (VSet.add x (snodes p)) =>
              left (VSetFact.add_3 X Hu)) (fun Hu : u = z => right Hu) Hu)).2) =
    e.π1 + sweight p)


DEBUG:Going to execute:
<coq-core.plugins.ssreflect::ssrrewrite@0> $1 $2