Section GraphTheory_basic1.
Context {G : GRAPH.t}.
#[local] Notation V := G.(vertices).
#[local] Notation E := G.(edges).
#[local] Notation In := L.In.
#[local] Infix "\in" := E.In : type_scope.
Inductive walk (v : V) : V -> list V -> Prop :=
| walk_refl
: v ~~~[ [] ]~~> v
| walk_step (v0 : V) (v1 : V) (w : list V)
(H_edge : (v0, v1) \in E)
(H_walk : v1 ~~~[ w ]~~> v)
: v0 ~~~[ v1 :: w ]~~> v
where " src ~~~[ w ]~~> tgt " := (walk tgt src w) : type_scope.
#[local] Hint Constructors walk : core.

Theorem walk_iff (v0 : V) (vs : list V)
: v0 ~~~[ vs ]~~> last vs v0 <-> L.Forall E (L.mk_edge_seq v0 vs).