proposition: Lemma spanning_tree_not_reachable_derive: forall (g1 : Graph) (root : V) (P : V -> Prop) (g2 : Graph) (x y : V), spanning_tree g1 root P g2 -> ~ g1 |= root ~o~> y satisfying P -> reachable g2 x y -> reachable g1 x y.
proof: Proof. intros. apply (spanning_tree_not_reachable_s _ _ _ _ _ _ H) in H1; auto. unfold Complement in H1. unfold Ensembles.In in H1. destruct H1 as [p ?]. assert (forall v, In_path g2 v p -> ~ g1 |= root ~o~> v satisfying P). { intros. pose proof (reachable_by_path_in _ _ _ _ _ H1 v H2). apply reachable_by_foot_prop in H3. auto. } destruct H. symmetry in H. apply (ppg_reachable_by_path_to g2 g1 _ _ _ _ _ H) in H1; eauto. apply reachable_by_path_is_reachable_by in H1. revert H1. apply reachable_by_weaken. hnf; unfold Ensembles.In ; intros; auto. Qed.
imports: Coq.Classes.Morphisms CertiGraph.lib.Coqlib CertiGraph.lib.EquivDec_ext CertiGraph.lib.EnumEnsembles CertiGraph.lib.List_ext CertiGraph.lib.relation_list CertiGraph.graph.graph_model CertiGraph.graph.path_lemmas CertiGraph.graph.graph_gen CertiGraph.graph.graph_relation CertiGraph.graph.subgraph2 CertiGraph.graph.reachable_ind Coq.Logic.Classical