proposition: Lemma reachable_ufroot_same: forall u v, reachable g u v -> ufroot_same u v.
proof: Proof. intros. assert (EnumEnsembles.EnumCovered Edge (evalid g)). { apply EnumEnsembles.Enumerable_is_EnumCovered, finiteE. } pose proof (reachable_foot_valid _ _ _ H). pose proof (reachable_head_valid _ _ _ H). pose proof (uf_root_always_exists u X H1). pose proof (uf_root_always_exists v X H0). destruct H2 as [r_u ?]. destruct H3 as [r_v ?]. pose proof (uf_root_reachable _ _ _ H H3). exists r_v. split; trivial. Qed.
imports: CertiGraph.lib.Coqlib CertiGraph.lib.EquivDec_ext CertiGraph.lib.List_ext CertiGraph.lib.Ensembles_ext CertiGraph.lib.EnumEnsembles CertiGraph.graph.graph_model CertiGraph.graph.path_lemmas CertiGraph.graph.graph_gen CertiGraph.graph.MathGraph CertiGraph.graph.LstGraph CertiGraph.graph.FiniteGraph CertiGraph.graph.reachable_computable