proposition: Lemma reachable_by_path_subgraph_partialgraph (g: PreGraph V E) (p q: V -> Prop): forall (n1 n2: V) (l: path), (predicate_subgraph g p) |= l is n1 ~o~> n2 satisfying q <-> (predicate_partialgraph g p) |= l is n1 ~o~> n2 satisfying q.
proof: Proof. intros. unfold reachable_by_path, good_path. apply and_iff_split; [|apply and_iff_split]. - unfold path_ends. apply and_iff_compat_l. destruct l as [v l]. revert v. induction l; intros. + simpl. intuition. + rewrite !pfoot_cons. apply IHl. - destruct l as [v l]. revert v. induction l; intros. + simpl. intuition. + rewrite !valid_path_cons_iff. rewrite IHl. apply and_iff_compat_l, and_iff_compat_r. unfold strong_evalid. simpl. apply and_iff_compat_r_weak. intros. destruct H. unfold predicate_evalid. unfold predicate_weak_evalid. destruct H0. intuition. - destruct l as [v l]. unfold path_prop. simpl. rewrite !Forall_forall. reflexivity. 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