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_app_iff (v0 : V) (v' : V) (vs1 : list V) (vs2 : list V)
: v0 ~~~[ vs1 ++ vs2 ]~~> v' <-> (exists v, v0 ~~~[ vs1 ]~~> v /\ v ~~~[ vs2 ]~~> v').