(*========================================================
                 DARTS AS NATURALS
========================================================*)

(* For simplicity, dart is nat, but it could be a deferred type: *)

Definition dart := nat.(* Decidability of dart equality: *)

Definition eq_dart_dec := eq_nat_dec.(* Nil dart: *)

Definition nil := 0%nat.(* Free maps: *)

Inductive fmap:Set :=
      V : fmap
    | I : fmap->dart->tag->point->fmap
    | L : fmap->dim->dart->dart->fmap.(* Free maps: *)

Inductive fmap:Set :=
      V : fmap
    | I : fmap->dart->tag->point->fmap
    | L : fmap->dim->dart->dart->fmap.(* Free maps: *)

Inductive fmap:Set :=
      V : fmap
    | I : fmap->dart->tag->point->fmap
    | L : fmap->dim->dart->dart->fmap.(* Free maps: *)

Inductive fmap:Set :=
      V : fmap
    | I : fmap->dart->tag->point->fmap
    | L : fmap->dim->dart->dart->fmap.(* Map emptiness: *)

Definition empty(m:fmap): Prop:=
 match m with
       V => True
    |  _ => False
 end.

(* Specifications: *)
Lemma empty_dec: forall (m:fmap), {empty m}+{~empty m}.