(* A, for alpha, completed by nil when necessary:
designed for qhmaps: *)

Fixpoint A (m:fmap)(k:dim)(x:dart)
               {struct m}:dart:=
 match m with
      V => nil
    | I m0 x0 => A m0 k x
    | L m0 k0 x0 y0 =>
          if (eq_dim_dec k k0)
          then if (eq_dart_dec x x0) then y0
               else A m0 k x
          else A m0 k x
 end.(* Auxiliary notion: a dart has a k-successor *)

Definition succ(m:fmap)(k:dim)(x:dart):=
  A m k x <> nil.

(* Specifications: *)
Lemma succ_dec: forall (m:fmap)(k:dim)(x:dart), {succ m k x} + {~succ m k x}.