proposition: Lemma si_spanning_tree: forall (g1 g2 g3: Graph) (v: V) (P: V -> Prop), g1 ~=~ g2 -> (spanning_tree g1 v P g3 <-> spanning_tree g2 v P g3).
proof: Proof. cut (forall g1 g2 g3 v P, g1 ~=~ g2 -> spanning_tree g1 v P g3 -> spanning_tree g2 v P g3); intros. + split; intros; [apply H with g1 | apply H with g2]; auto. symmetry; auto. + destruct H0 as [? [? [? ?]]]. split; [|split; [|split]]; intros. - rewrite <- H. clear -H0 H. destruct H0 as [? [? [? ?]]]. hnf. simpl in *. unfold predicate_vvalid in *. unfold predicate_weak_evalid in *. split; [|split;[|split]]; intros; rewrite <- H in *. * specialize (H0 v0). intuition. * specialize (H1 e). intuition. * apply H2; auto. * apply H3; auto. - rewrite <- H. apply H1. auto. - apply H2. rewrite H. auto. - apply H3; rewrite H; 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