From mathcomp.ssreflect
From mathcomp
From fcsl
From DiSeL
Set Implicit Arguments.
Unset Strict Implicit.
Unset Printing Implicit Defensive.
(* An implementation of a dependent map structure *)
Module DepMaps.
Section DepMaps.
Definition Label := [ordType of nat].
Variable V : Type.
Variable labF: V -> Label.
Definition dmDom (u : union_map Label V) : bool :=
all (fun l => if find l u is Some p then (labF p) == l else false) (dom u).
Record depmap := DepMap {
dmap : union_map Label V;
pf   : dmDom dmap;
}.
Section PCMOps.
Variable dm : depmap.

(* Specifications: *)
Lemma dmDom_unit : dmDom Unit.
Definition join : depmap := DepMap (dmDom_join (@pf dm1) (@pf dm2)).