proposition: Lemma edge_spanning_tree_unmarked_equiv: forall (g1 g2: Graph) (e: E), edge_spanning_tree g1 e g2 -> forall x, (unmarked g1 x /\ ~ g1 |= (dst g1 e) ~o~> x satisfying (unmarked g1)) <-> unmarked g2 x.
proof: Proof. intros. hnf in H. destruct (node_pred_dec (marked g1) (dst g1 e)). + destruct H. split; intros. - destruct H1. intro. apply H1. rewrite (H0 x). auto. - split. * intro. apply H1. rewrite <- (H0 x). auto. * intro. apply reachable_by_head_prop in H2. auto. + apply spanning_tree_unmarked_equiv; 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