proposition: Lemma triple_nothing: forall (g g1 g2: Graph) root l l_done l_later, vvalid g root -> (unmarked g) root -> let marked' := Union _ (marked g) (eq root) in step_list g root l -> l = l_done ++ l_later -> let PV1 := reachable_by_through_set g l_done (Complement _ marked') in (predicate_partialgraph g (Complement _ (Union _ PV1 (eq root)))) ~=~ (predicate_partialgraph g1 (Complement _ (Union _ PV1 (eq root)))) /\ Same_set (marked g1) (Union _ marked' PV1) -> nothing root g1 g2 -> (predicate_partialgraph g (Complement _ (Union _ PV1 (eq root)))) ~=~ (predicate_partialgraph g2 (Complement _ (Union _ PV1 (eq root)))) /\ Same_set (marked g2) (Union _ marked' PV1).
proof: Proof. intros. destruct H3. destruct H4. split. + etransitivity; [eauto |]. eapply si_stronger_partialgraph_simple; [| eauto]. apply Complement_Included_rev. apply right_Included_Union. + assert (Same_set (marked g1) (marked g2)) by (rewrite Same_set_spec; auto). rewrite <- H7. auto. Qed.
imports: Coq.Logic.ProofIrrelevance Coq.Classes.Morphisms VST.msl.Coqlib2 CertiGraph.lib.Coqlib CertiGraph.lib.EquivDec_ext CertiGraph.lib.Relation_ext CertiGraph.lib.relation_list CertiGraph.lib.EnumEnsembles CertiGraph.lib.List_ext CertiGraph.graph.graph_model CertiGraph.graph.path_lemmas CertiGraph.graph.reachable_computable CertiGraph.graph.reachable_ind CertiGraph.graph.graph_gen CertiGraph.graph.subgraph2 CertiGraph.graph.dual_graph