proposition: Lemma construct_reachable_set_list: forall (g: PreGraph V E) {rfg: ReachableFiniteGraph g} S (V_DEC: forall x, In x S -> Decidable (vvalid g x)), {l: list V | NoDup l /\ reachable_set_list g S l}.
proof: Proof. intros. induction S. + exists nil. split; [constructor |]. intro. pose proof reachable_through_empty g. pose proof Empty_set_iff V. unfold Same_set, Included, Ensembles.In in *. simpl. firstorder. + spec IHS. - intros; apply V_DEC. right; auto. - destruct IHS as [l2 ?H]. destruct (construct_reachable_list g a (V_DEC a (or_introl eq_refl))) as [l1 ?H]. exists (nodup equiv_dec (l1 ++ l2)). split; [apply NoDup_nodup |]. destruct H as [_ ?]. destruct H0 as [_ ?]. unfold reachable_set_list, reachable_list in *. intros. rewrite nodup_In. rewrite in_app_iff, reachable_through_set_eq. specialize (H x). specialize (H0 x). tauto. Qed.
imports: CertiGraph.lib.Coqlib CertiGraph.lib.EnumEnsembles CertiGraph.lib.EquivDec_ext CertiGraph.lib.List_ext CertiGraph.lib.relation_list CertiGraph.lib.Equivalence_ext CertiGraph.graph.graph_model CertiGraph.graph.graph_gen CertiGraph.graph.path_lemmas