proposition: Lemma reachable_through_set_nonull_nodup: forall S x, reachable_through_set G S x <-> reachable_through_set G (nodup veq_dec (filter not_null_bool S)) x.
proof: Proof. intros. split; repeat intro; destruct H as [y [? ?]]. + exists y. rewrite nodup_In. rewrite filter_In. do 2 (split; auto). unfold not_null_bool. destruct (is_null_dec y); auto. apply reachable_head_valid in H0. exfalso; apply (valid_not_null _ y); auto. + rewrite nodup_In in H. rewrite filter_In in H. destruct H. exists y. split; auto. Qed.
imports: Coq.Arith.Arith CertiGraph.lib.Coqlib CertiGraph.lib.EnumEnsembles CertiGraph.lib.EquivDec_ext CertiGraph.lib.List_ext CertiGraph.graph.graph_model CertiGraph.graph.path_lemmas CertiGraph.graph.subgraph2 CertiGraph.graph.MathGraph CertiGraph.graph.FiniteGraph CertiGraph.graph.reachable_computable Coq.Lists.List