proposition: Lemma reachabel_single_uf: forall x y, x <> null -> reachable (single_uf_pregraph x) x y <-> x = y.
proof: Proof. intros. split; intros. - destruct H0 as [[? ?] [[? ?] [? _]]]. simpl in H0. subst a. destruct l. + simpl in H1. auto. + destruct H2. simpl in H2. assert (strong_evalid (single_uf_pregraph x) p) by (destruct l; intuition). clear H2. exfalso. hnf in H3. simpl in H3. unfold updateEdgeFunc in H3. destruct H3 as [? [_ ?]]. unfold addValidFunc in H2. destruct H2; auto. subst p. destruct (equiv_dec (x, tt) (x, tt)); [|compute in c]; auto. - subst y. apply reachable_refl. simpl. auto. Qed.
imports: Coq.Logic.Classical Coq.Lists.List Coq.Sets.Ensembles CertiGraph.lib.Coqlib CertiGraph.lib.Ensembles_ext CertiGraph.lib.EquivDec_ext CertiGraph.lib.Relation_ext CertiGraph.lib.List_ext CertiGraph.graph.graph_model CertiGraph.graph.weak_mark_lemmas CertiGraph.graph.path_lemmas CertiGraph.graph.graph_gen CertiGraph.graph.graph_relation CertiGraph.graph.subgraph2 CertiGraph.graph.reachable_computable CertiGraph.graph.FiniteGraph CertiGraph.graph.MathGraph CertiGraph.graph.LstGraph CertiGraph.graph.UnionFind CertiGraph.msl_application.Graph CertiGraph.msl_application.UnionFindGraph