proposition: Lemma mark1_reverse_unmark: forall m1 root m2, mark1 m1 root m2 -> forall n1 n2, g |= n1 ~o~> n2 satisfying (negateP m2) -> g |= n1 ~o~> n2 satisfying (negateP m1).
proof: Proof. intros. destruct H0 as [p [? ?]]. exists p. split; trivial. destruct H1. destruct H as [? [? ?]]. split. auto. rewrite path_prop_equiv in H2 |- *; auto. intros. specialize (H2 _ H5). specialize (H4 n). spec H4. intro. subst n. hnf in H3. hnf in H2. apply H2; auto. rewrite negateP_spec in H2 |- *; tauto. Qed.
imports: Coq.Logic.ProofIrrelevance CertiGraph.lib.Ensembles_ext Coq.Lists.List Coq.Classes.Morphisms CertiGraph.lib.Coqlib CertiGraph.lib.List_ext CertiGraph.lib.EquivDec_ext VST.msl.Coqlib2 CertiGraph.graph.graph_model CertiGraph.graph.path_lemmas CertiGraph.graph.reachable_computable CertiGraph.graph.reachable_ind CertiGraph.graph.graph_gen CertiGraph.graph.graph_relation CertiGraph.graph.subgraph2