Goal:
  
  G1 : t
  G2 : t
  on_edge : forall x y : V.t, EdgeOf G1 x y -> EdgeOf G2 x y
  weight_on_edge : forall (x y : V.t) (e : EdgeOf G1 x y),
                   (on_edge x y e).π1 <= e.π1
  s : VSet.t
  x : V.t
  y : V.t
  p : SPath G1 s x y
  ============================
   (forall (s : VSet.t) (x y : V.t) (s1 : VSet.t) 
      (y' : V.t) (d : DisjointAdd x s1 s) (e : EdgeOf G1 x y')
      (p : SPath G1 s1 y' y),
    sweight (map_spath p) <= sweight p ->
    sweight (spath_step G2 s1 s x y' y d (on_edge x y' e) (map_spath p)) <=
    sweight (spath_step G1 s1 s x y' y d e p))


DEBUG:Going to execute:
<coq-equations.plugin::simp@0> $1 $2

Goals:
  
  G1 : t
  G2 : t
  on_edge : forall x y : V.t, EdgeOf G1 x y -> EdgeOf G2 x y
  weight_on_edge : forall (x y : V.t) (e : EdgeOf G1 x y),
                   (on_edge x y e).π1 <= e.π1
  s : VSet.t
  x : V.t
  y : V.t
  p : SPath G1 s x y
  ============================
   (forall (s : VSet.t) (x : V.t),
    sweight (spath_refl G2 s x) <= sweight (spath_refl G1 s x))

  
  G1 : t
  G2 : t
  on_edge : forall x y : V.t, EdgeOf G1 x y -> EdgeOf G2 x y
  weight_on_edge : forall (x y : V.t) (e : EdgeOf G1 x y),
                   (on_edge x y e).π1 <= e.π1
  s : VSet.t
  x : V.t
  y : V.t
  p : SPath G1 s x y
  ============================
   (forall (s : VSet.t) (x y : V.t) (s1 : VSet.t) 
      (y' : V.t) (d : DisjointAdd x s1 s) (e : EdgeOf G1 x y')
      (p : SPath G1 s1 y' y),
    sweight (map_spath p) <= sweight p ->
    sweight (spath_step G2 s1 s x y' y d (on_edge x y' e) (map_spath p)) <=
    sweight (spath_step G1 s1 s x y' y d e p))


DEBUG:Going to execute:
cbn => //