proposition: Lemma reachable_set_enumcovered_single_reachable: forall S, EnumCovered V (reachable_through_set G S) -> forall s, In s S -> weak_valid G s -> {l' : list V | reachable_list G s l' /\ NoDup l'}.
proof: Proof. intros. destruct (@null_or_valid _ _ _ _ _ G _ _ H0). + subst. exists nil. split. - unfold reachable_list. intro. split; intros. * inversion H1. * apply reachable_head_valid in H1. apply (@valid_not_null _ _ _ _ G is_null) in H1; auto. - apply NoDup_nil. + apply finite_reachable_set_single with S; auto. Qed.
imports: Coq.Sets.Finite_sets Coq.Arith.Arith Coq.Logic.ProofIrrelevance Coq.Logic.FunctionalExtensionality Coq.Sorting.Permutation Coq.micromega.Lia CertiGraph.lib.Coqlib CertiGraph.lib.List_ext CertiGraph.lib.EquivDec_ext CertiGraph.lib.EnumEnsembles Coq.Lists.List VST.msl.Coqlib2 CertiGraph.graph.graph_model CertiGraph.graph.path_lemmas CertiGraph.graph.reachable_ind CertiGraph.graph.subgraph2 CertiGraph.graph.graph_gen CertiGraph.graph.MathGraph CertiGraph.graph.FiniteGraph