Goal:
  
  G : t
  HI : invariants G
  HG : acyclic_no_loop G
  y_0 : V.t
  x_0 : V.t
  K : Z
  Hxs : lsp G x_0 y_0 = Some K
  s0 : VSet.t
  s' : VSet.t
  y : V.t
  z : V.t
  d : DisjointAdd y_0 s0 s'
  e : EdgeOf G' y_0 y
  q : SPath G' s0 y z
  IHq : match from_G' q with
        | inl q' => sweight q = sweight q'
        | inr (q1, q2) => sweight q <= sweight q1 - K + sweight q2
        end
  XX : (y_0, - K, x_0) = (y_0, e.π1, y)
  H0 : - K = e.π1
  H1 : x_0 = y
  ============================
   (e.π1 + sweight q <=
    - K +
    sweight
      (sum_rect
         (fun _ : SPath G s0 y z + (SPath G s0 y y_0 × SPath G s0 x_0 z) =>
          SPath G s0 x_0 z)
         (fun IHq : SPath G s0 y z =>
          eq_rect_r
            (fun _pattern_value_ : V.t => SPath G s0 _pattern_value_ z) IHq
            (snd_eq XX))
         (fun IHq : SPath G s0 y y_0 × SPath G s0 x_0 z => IHq.2) 
         (from_G' q)))


DEBUG:Going to execute:
destruct (from_G' q) as [q'| [q1 q2]]
DEBUG LTAC Evaluated term: weight_SPath_sub
DEBUG LTAC Evaluated term: weight_SPath_sub

Goals:
  
  G : t
  HI : invariants G
  HG : acyclic_no_loop G
  y_0 : V.t
  x_0 : V.t
  K : Z
  Hxs : lsp G x_0 y_0 = Some K
  s0 : VSet.t
  s' : VSet.t
  y : V.t
  z : V.t
  d : DisjointAdd y_0 s0 s'
  e : EdgeOf G' y_0 y
  q : SPath G' s0 y z
  q' : SPath G s0 y z
  IHq : sweight q = sweight q'
  XX : (y_0, - K, x_0) = (y_0, e.π1, y)
  H0 : - K = e.π1
  H1 : x_0 = y
  ============================
   (e.π1 + sweight q <=
    - K +
    sweight
      (sum_rect
         (fun _ : SPath G s0 y z + (SPath G s0 y y_0 × SPath G s0 x_0 z) =>
          SPath G s0 x_0 z)
         (fun IHq : SPath G s0 y z =>
          eq_rect_r
            (fun _pattern_value_ : V.t => SPath G s0 _pattern_value_ z) IHq
            (snd_eq XX))
         (fun IHq : SPath G s0 y y_0 × SPath G s0 x_0 z => IHq.2) 
         (inl q')))

  
  G : t
  HI : invariants G
  HG : acyclic_no_loop G
  y_0 : V.t
  x_0 : V.t
  K : Z
  Hxs : lsp G x_0 y_0 = Some K
  s0 : VSet.t
  s' : VSet.t
  y : V.t
  z : V.t
  d : DisjointAdd y_0 s0 s'
  e : EdgeOf G' y_0 y
  q : SPath G' s0 y z
  q1 : SPath G s0 y y_0
  q2 : SPath G s0 x_0 z
  IHq : sweight q <= sweight q1 - K + sweight q2
  XX : (y_0, - K, x_0) = (y_0, e.π1, y)
  H0 : - K = e.π1
  H1 : x_0 = y
  ============================
   (e.π1 + sweight q <=
    - K +
    sweight
      (sum_rect
         (fun _ : SPath G s0 y z + (SPath G s0 y y_0 × SPath G s0 x_0 z) =>
          SPath G s0 x_0 z)
         (fun IHq : SPath G s0 y z =>
          eq_rect_r
            (fun _pattern_value_ : V.t => SPath G s0 _pattern_value_ z) IHq
            (snd_eq XX))
         (fun IHq : SPath G s0 y y_0 × SPath G s0 x_0 z => IHq.2)
         (inr (q1, q2))))


DEBUG:Going to execute:
simpl
DEBUG LTAC Evaluated term: (from_G' q)