Goal:
  
  G : t
  HI : invariants G
  HG : acyclic_no_loop G
  y_0 : V.t
  x_0 : V.t
  Hxs : lsp G x_0 y_0 = None
  K : Z
  s0 : VSet.t
  s' : VSet.t
  x : V.t
  y : V.t
  z : V.t
  d : DisjointAdd x s0 s'
  e : EdgeOf G' x y
  q : SPath G' s0 y z
  IHq : sweight q =
        match from_G' q with
        | inl q' => sweight q'
        | inr (q1, q2) => sweight q1 + K + sweight q2
        end
  XX : (y_0, K, x_0) <> (x, e.π1, y)
  ============================
   (e.π1 + sweight q =
    match
      sum_rect
        (fun _ : SPath G s0 y z + (SPath G s0 y y_0 × SPath G s0 x_0 z) =>
         (SPath G s' x z + (SPath G s' x y_0 × SPath G s' x_0 z))%type)
        (fun IHq : SPath G s0 y z =>
         inl
           (spath_step G s0 s' x y z d (e.π1; EdgeSetFact.add_3 XX e.π2) IHq))
        (fun IHq : SPath G s0 y y_0 × SPath G s0 x_0 z =>
         inr
           (spath_step G s0 s' x y y_0 d (e.π1; EdgeSetFact.add_3 XX e.π2)
              IHq.1, SPath_sub G (DisjointAdd_Subset d) IHq.2)) 
        (from_G' q)
    with
    | inl q' => sweight q'
    | inr (q1, q2) => sweight q1 + K + sweight q2
    end)


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

Goals:
  
  G : t
  HI : invariants G
  HG : acyclic_no_loop G
  y_0 : V.t
  x_0 : V.t
  Hxs : lsp G x_0 y_0 = None
  K : Z
  s0 : VSet.t
  s' : VSet.t
  x : V.t
  y : V.t
  z : V.t
  d : DisjointAdd x s0 s'
  e : EdgeOf G' x y
  q : SPath G' s0 y z
  q' : SPath G s0 y z
  IHq : sweight q = sweight q'
  XX : (y_0, K, x_0) <> (x, e.π1, y)
  ============================
   (e.π1 + sweight q =
    match
      sum_rect
        (fun _ : SPath G s0 y z + (SPath G s0 y y_0 × SPath G s0 x_0 z) =>
         (SPath G s' x z + (SPath G s' x y_0 × SPath G s' x_0 z))%type)
        (fun IHq : SPath G s0 y z =>
         inl
           (spath_step G s0 s' x y z d (e.π1; EdgeSetFact.add_3 XX e.π2) IHq))
        (fun IHq : SPath G s0 y y_0 × SPath G s0 x_0 z =>
         inr
           (spath_step G s0 s' x y y_0 d (e.π1; EdgeSetFact.add_3 XX e.π2)
              IHq.1, SPath_sub G (DisjointAdd_Subset d) IHq.2)) 
        (inl q')
    with
    | inl q' => sweight q'
    | inr (q1, q2) => sweight q1 + K + sweight q2
    end)

  
  G : t
  HI : invariants G
  HG : acyclic_no_loop G
  y_0 : V.t
  x_0 : V.t
  Hxs : lsp G x_0 y_0 = None
  K : Z
  s0 : VSet.t
  s' : VSet.t
  x : V.t
  y : V.t
  z : V.t
  d : DisjointAdd x s0 s'
  e : EdgeOf G' x 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) <> (x, e.π1, y)
  ============================
   (e.π1 + sweight q =
    match
      sum_rect
        (fun _ : SPath G s0 y z + (SPath G s0 y y_0 × SPath G s0 x_0 z) =>
         (SPath G s' x z + (SPath G s' x y_0 × SPath G s' x_0 z))%type)
        (fun IHq : SPath G s0 y z =>
         inl
           (spath_step G s0 s' x y z d (e.π1; EdgeSetFact.add_3 XX e.π2) IHq))
        (fun IHq : SPath G s0 y y_0 × SPath G s0 x_0 z =>
         inr
           (spath_step G s0 s' x y y_0 d (e.π1; EdgeSetFact.add_3 XX e.π2)
              IHq.1, SPath_sub G (DisjointAdd_Subset d) IHq.2))
        (inr (q1, q2))
    with
    | inl q' => sweight q'
    | inr (q1, q2) => sweight q1 + K + sweight q2
    end)


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