proposition: Lemma mark1_mark_list_mark: forall (g1: Graph) root l (g2 g3: Graph) (R_DEC: forall x, In x l -> ReachDecidable g2 x (unmarked g2)) (V_DEC: forall x, In x l -> Decidable (vvalid g1 x)) (R_DEC': ReachDecidable g1 root (unmarked g1)), vvalid g1 root -> (unmarked g1) root -> step_list g1 root l -> mark1 g1 root g2 -> mark_list g2 l g3 -> mark g1 root g3.
proof: Proof. intros. rewrite mark1_inj in H2. apply mark_list_inj in H3. rewrite mark_inj. split; [transitivity g2; tauto |]. apply SIMPLE_MARK_GRAPH.mark_mark1_mark with l (inj g2); auto. + intros. eapply ReachDecidable_si; [symmetry; exact (proj1 H2) | | eauto]. intro; intros. unfold unmarked; rewrite negateP_spec; simpl. reflexivity. + tauto. + rewrite <- (proj1 H2) in H3 at 2; 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