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
  ============================
   (sweight (map_spath p) >= sweight p)


DEBUG:Going to execute:
<coq-equations.plugin::refine_ho@0> $1
DEBUG LTAC Evaluated term: (fun_elim ?P ?f ?f0 s x y p)

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),
    (fun (s0 : VSet.t) (x0 y0 : V.t) (p0 : SPath G1 s0 x0 y0)
       (x1 : SPath G2 s0 x0 y0) => sweight x1 >= sweight p0) s x x
      (spath_refl G1 s x) (spath_refl G2 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),
    (fun (s0 : VSet.t) (x0 y0 : V.t) (p0 : SPath G1 s0 x0 y0)
       (x1 : SPath G2 s0 x0 y0) => sweight x1 >= sweight p0) s1 y' y p
      (map_spath p) ->
    (fun (s0 : VSet.t) (x0 y0 : V.t) (p0 : SPath G1 s0 x0 y0)
       (x1 : SPath G2 s0 x0 y0) => sweight x1 >= sweight p0) s x y
      (spath_step G1 s1 s x y' y d e p)
      (spath_step G2 s1 s x y' y d (on_edge x y' e) (map_spath p)))


DEBUG:Going to execute:
cbv beta

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:
simp map_spath
Level 6: evaluation returns
idtac of type tacvalue

Level 6: evaluation returns
idtac of type tacvalue

Level 1: evaluation returns
idtac of type tacvalue

Level 1: evaluation returns
idtac of type tacvalue