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 : forall u : VSet.elt,
        {VSet.In u (snodes p)} + {u = z} ->
        SPath (VSet.remove u s0) y u × SPath s0 u z
  u : VSet.elt
  Hu : {VSet.In u (VSet.add x (snodes p))} + {u = z}
  Hx : x = u
  ============================
   (SPath ?s ?y z)


DEBUG:Going to execute:
fun => <coq-core.plugins.ltac::eassumption@0>

Goals:
  
  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 : forall u : VSet.elt,
        {VSet.In u (snodes p)} + {u = z} ->
        SPath (VSet.remove u s0) y u × SPath s0 u z
  u : VSet.elt
  Hu : {VSet.In u (VSet.add x (snodes p))} + {u = z}
  Hx : x = u
  ============================
   (DisjointAdd u s0 s')

  
  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 : forall u : VSet.elt,
        {VSet.In u (snodes p)} + {u = z} ->
        SPath (VSet.remove u s0) y u × SPath s0 u z
  u : VSet.elt
  Hu : {VSet.In u (VSet.add x (snodes p))} + {u = z}
  Hx : x = u
  ============================
   (EdgeOf u y)


DEBUG:Going to execute:
subst

Goals:
  
  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 : forall u : VSet.elt,
        {VSet.In u (snodes p)} + {u = z} ->
        SPath (VSet.remove u s0) y u × SPath s0 u z
  u : VSet.elt
  Hu : {VSet.In u (VSet.add x (snodes p))} + {u = z}
  Hx : x = u
  ============================
   (DisjointAdd u s0 s')

  
  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 : forall u : VSet.elt,
        {VSet.In u (snodes p)} + {u = z} ->
        SPath (VSet.remove u s0) y u × SPath s0 u z
  u : VSet.elt
  Hu : {VSet.In u (VSet.add x (snodes p))} + {u = z}
  Hx : x = u
  ============================
   (EdgeOf u y)


DEBUG:Going to execute:
<coq-core.plugins.ltac::subst@1>

Goals:
  
  G : t
  s0 : VSet.t
  s' : VSet.t
  y : V.t
  z : V.t
  u : VSet.elt
  p : SPath s0 y z
  Hu : {VSet.In u (VSet.add u (snodes p))} + {u = z}
  e : EdgeOf u y
  d : DisjointAdd u s0 s'
  IHp : forall u : VSet.elt,
        {VSet.In u (snodes p)} + {u = z} ->
        SPath (VSet.remove u s0) y u × SPath s0 u z
  ============================
   (DisjointAdd u s0 s')

  
  G : t
  s0 : VSet.t
  s' : VSet.t
  y : V.t
  z : V.t
  u : VSet.elt
  p : SPath s0 y z
  Hu : {VSet.In u (VSet.add u (snodes p))} + {u = z}
  e : EdgeOf u y
  d : DisjointAdd u s0 s'
  IHp : forall u : VSet.elt,
        {VSet.In u (snodes p)} + {u = z} ->
        SPath (VSet.remove u s0) y u × SPath s0 u z
  ============================
   (EdgeOf u y)


DEBUG:Going to execute:
eassumption

Goals:
  
  G : t
  s0 : VSet.t
  s' : VSet.t
  y : V.t
  z : V.t
  u : VSet.elt
  p : SPath s0 y z
  Hu : {VSet.In u (VSet.add u (snodes p))} + {u = z}
  e : EdgeOf u y
  d : DisjointAdd u s0 s'
  IHp : forall u : VSet.elt,
        {VSet.In u (snodes p)} + {u = z} ->
        SPath (VSet.remove u s0) y u × SPath s0 u z
  ============================
   (DisjointAdd u s0 s')

  
  G : t
  s0 : VSet.t
  s' : VSet.t
  y : V.t
  z : V.t
  u : VSet.elt
  p : SPath s0 y z
  Hu : {VSet.In u (VSet.add u (snodes p))} + {u = z}
  e : EdgeOf u y
  d : DisjointAdd u s0 s'
  IHp : forall u : VSet.elt,
        {VSet.In u (snodes p)} + {u = z} ->
        SPath (VSet.remove u s0) y u × SPath s0 u z
  ============================
   (EdgeOf u y)


DEBUG:Going to execute:
fun => <coq-core.plugins.ltac::eassumption@0>