proposition: Lemma uforest_no_self_loops: forall g e, uforest g -> evalid g e -> src g e <> dst g e.
proof: Proof. unfold not; intros. rename H1 into H2; rename H0 into H1. destruct H. apply (H0 (src g e :: dst g e :: nil) (e::nil)). rewrite H2. split. simpl. apply NoDup_cons. unfold not; intros; auto. apply NoDup_nil. unfold ucycle. assert (adj_edge g e (dst g e) (dst g e)). rewrite <- H2 at 1. apply strong_evalid_adj_edge. apply H. apply H1. split. unfold connected_by_path; simpl. split. split. exists e. auto. apply H. apply H1. auto. split. simpl. split. auto. apply H. apply H1. auto. apply NoDup_cons. unfold not; intros; auto. apply NoDup_nil. Qed.
imports: Coq.Logic.Classical CertiGraph.lib.List_ext CertiGraph.lib.EquivDec_ext CertiGraph.graph.graph_model CertiGraph.graph.graph_relation CertiGraph.graph.path_lemmas CertiGraph.graph.graph_gen CertiGraph.graph.FiniteGraph