proposition: Lemma reachable_through_set_app: forall g S1 S2 x, reachable_through_set g S1 x \/ reachable_through_set g S2 x <-> reachable_through_set g (S1 ++ S2) x.
proof: Proof. intros; split; intros; [destruct H as [[s ?] | [s ?]] | destruct H as [s ?]]. + exists s; split; [| tauto]. rewrite in_app_iff; tauto. + exists s; split; [| tauto]. rewrite in_app_iff; tauto. + rewrite in_app_iff in H; destruct H as [[? | ?] ?]; [left | right]; exists s; tauto. Qed.
imports: Coq.Logic.ProofIrrelevance Coq.micromega.Lia CertiGraph.lib.Coqlib CertiGraph.lib.EnumEnsembles CertiGraph.lib.List_ext CertiGraph.lib.EquivDec_ext CertiGraph.graph.graph_model Coq.Lists.List Coq.Lists.ListDec