proposition: Lemma reachable_by_through_app_join: forall (g: PreGraph V E) P l1 l2, (forall n, reachable_by_through_set g l1 P n \/ ~ reachable_by_through_set g l1 P n) -> Prop_join (reachable_by_through_set g l1 P) (reachable_by_through_set (predicate_partialgraph g (Complement _ (reachable_by_through_set g l1 P))) l2 P) (reachable_by_through_set g (l1 ++ l2) P).
proof: Proof. intros. split; [apply reachable_by_through_app_strong; auto |]. intros. destruct H0 as [s [? ?]], H1 as [? [? ?]]. rewrite reachable_by_eq_partialgraph_reachable, partial_partialgraph, Intersection_comm, <- partial_partialgraph, <- reachable_by_eq_partialgraph_reachable in H3. apply reachable_by_foot_prop in H3. apply H3; exists s; auto. Qed.
imports: Coq.Arith.Arith Coq.Logic.ProofIrrelevance Coq.Logic.FunctionalExtensionality Coq.Classes.Morphisms Coq.Classes.Equivalence 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 CertiGraph.graph.graph_model CertiGraph.graph.path_lemmas CertiGraph.graph.reachable_ind CertiGraph.graph.graph_gen CertiGraph.graph.graph_relation