Definition diff_dec (l1 l2: loc) : { Loc.diff l1 l2 } + { ~Loc.diff l1 l2 }.(** We now redefine some standard notions over lists, using the [Loc.diff]
  predicate instead of standard disequality [<>].

  [Loc.notin l ll] holds if the location [l] is different from all locations
  in the list [ll]. *)

  Fixpoint notin (l: loc) (ll: list loc) {struct ll} : Prop :=
    match ll with
    | nil => True
    | l1 :: ls => diff l l1 /\ notin l ls
    end.

(* Specifications: *)
Lemma notin_iff: forall l ll, notin l ll <-> (forall l', In l' ll -> Loc.diff l l').
Lemma notin_not_in: forall l ll, notin l ll -> ~(In l ll).
Lemma notin_dec (l: loc) (ll: list loc) : {notin l ll} + {~notin l ll}.