End CGNoBadCycles.
(*s [(CG_add x y d)] adds the edge (x,y) of weight d to G, in case an edge already exists, only the minimal one is kept *)
Definition CG_add (x y : ad) (d : D) :=
match MapGet _ cg x with
| None => MapPut _ cg x (M1 _ y d)
| Some edges =>
match MapGet _ edges y with
| None => MapPut _ cg x (MapPut _ edges y d)
| Some d0 => MapPut _ cg x (MapPut _ edges y (Dmin d d0))
end
end.
End CGDist.
(*s Properties of [CG_add] *)
Section CGAdd.
Variable cg1 : CGraph1.
Variable x y : ad.
Variable d : D.
Definition cg2 := CG_add cg1 x y d.

Lemma CG_add_edge_1 :
forall x0 y0 : ad,
CG_edge cg2 x0 y0 =
(if Neqb x x0 && Neqb y y0
then Ddmin (Some d) (CG_edge cg1 x0 y0)
else CG_edge cg1 x0 y0).