等效字符串映射(无序类型)到等于字符串

时间:2013-05-07 15:21:13

标签: string maps unordered-map coq

我想证明如果字符串映射(键*值)是Equiv,那么字符串列表等于OR 将两个Equiv贴图转换为相等的键值对字符串。

(**defined in FMapInterface*)
Definition Equiv (eq_elt:elt->elt->Prop) m m' :=
         (forall k, In k m <-> In k m') /\
         (forall k e e', MapsTo k e m -> MapsTo k e' m' -> eq_elt e e').

Definition t (elt:Set) := list (X.t * elt) (**defined in FMapWeakList *).

就我而言,X.t和elt是String.string(字符串映射)。

Definition StringMap_to_strlist (zm : t String.string) : String.string :=
   fold (fun k v z => (k ++ v) ::  z) zm "". 


Lemma test: forall m m, 
       Equiv m m -> StringMap_to_strlist m = StringMap_to_strlist m. 

例如,对于两个Equiv字符串映射m和m',

 m    quiv   m'
 k1:v1       k1:v1
 k3:v1       k2:v2
 k2:v2       k3:v1

correspong列表可能如下:  k1++v1::k3++v1::k2++v2 and k1++v1::k2++v2::k3++v1不相等。

我想证明如果map是Equiv,那么字符串列表是等于OR 将两个Equiv贴图转换为相等的键值对字符串。 就我而言,字符串中键值对的顺序并不重要, 所以如果可能的话,订购清单是可以的。对于地图,以下列表是 在我的情况下可以接受。

k1++v1::k2++v2::k3++v1 = k1++v1::k2++v2::k3++v1

我不知道怎么做  将Equiv(无序类型)字符串映射转换为相等的字符串。  请有人帮助我

0 个答案:

没有答案