proposition: Lemma is_list_no_loop: forall root s p, is_list root -> reachable g root s -> snd p <> nil -> ~ g |= p is s ~o~> s satisfying (fun _ => True).
proof: Proof. repeat intro. destruct H as [pf [? ?]]. apply H3 in H0. clear H3. destruct H0 as [ps [[? ?] ?]]. pose proof (reachable_by_path_merge _ _ _ _ _ _ _ H0 H2). apply H3 in H5. destruct ps as [v ps]. unfold path_glue in H5. simpl in H5. inversion H5. destruct p; simpl in *. rewrite app_nil_end in H7 at 1. apply app_inv_head in H7. auto. Qed.
imports: Coq.Classes.Morphisms Coq.micromega.Lia Coq.Logic.FunctionalExtensionality CertiGraph.lib.Coqlib CertiGraph.lib.EquivDec_ext CertiGraph.lib.EnumEnsembles CertiGraph.lib.List_ext CertiGraph.graph.graph_model CertiGraph.graph.path_lemmas CertiGraph.graph.graph_gen CertiGraph.graph.FiniteGraph