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
  IHp : (Some (sweight p) <= lsp0 s0 y z)%nbar
  ============================
   (Some (sweight (spath_step d e p)) <= lsp0 s' x z)%nbar


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

Goals:
    G : t  s0 : VSet.t  x : V.t
  ============================
   (Some (sweight (spath_refl s0 x)) <=
    (let base := if is_left (V.eq_dec x x) then Some 0 else None in
     if VSet.mem x s0
     then
      let ds :=
        map (fun '(n, y) => Some n + lsp0 (VSet.remove x s0) y x) (succs x)
        in
      fold_left max ds base
     else base))%nbar

  
  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
  IHp : (Some (sweight p) <= lsp0 s0 y z)%nbar
  ============================
   (Some (sweight (spath_step d e p)) <=
    (let base := if is_left (V.eq_dec x z) then Some 0 else None in
     if VSet.mem x s'
     then
      let ds :=
        map (fun '(n, y) => Some n + lsp0 (VSet.remove x s') y z) (succs x)
        in
      fold_left max ds base
     else base))%nbar


DEBUG:Going to execute:
simpl
DEBUG LTAC Evaluated term: lsp0_eq
DEBUG LTAC Evaluated term: lsp0_eq