proposition: Lemma pregraph_join_pregraph_join: forall G1 G2 G3 PV PE PV' PE', pregraph_join PV PE G1 G2 -> pregraph_join PV' PE' G2 G3 -> pregraph_join (Union _ PV PV') (Union _ PE PE') G1 G3.
proof: Proof. unfold pregraph_join. intros. destruct H as [? [? [? ?]]], H0 as [? [? [? ?]]]. split; [| split; [| split]]; intros. + apply Prop_join_assoc with (P2 := vvalid G2); auto. + apply Prop_join_assoc with (P2 := evalid G2); auto. + assert (evalid G2 e) by (destruct H4; firstorder). rewrite H2, H5; auto. + assert (evalid G2 e) by (destruct H4; firstorder). rewrite H3, H6; auto. Qed.
imports: Coq.Logic.ProofIrrelevance Coq.Sets.Ensembles Coq.Sets.Finite_sets Coq.Classes.Morphisms CertiGraph.lib.Coqlib CertiGraph.lib.Ensembles_ext CertiGraph.lib.relation_list CertiGraph.lib.List_ext CertiGraph.lib.Equivalence_ext CertiGraph.lib.EquivDec_ext VST.msl.Coqlib2 Coq.Lists.List CertiGraph.graph.graph_model CertiGraph.graph.path_lemmas CertiGraph.graph.reachable_ind CertiGraph.graph.graph_gen