我想证明如果字符串映射(键*值)是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(无序类型)字符串映射转换为相等的字符串。 请有人帮助我