如何映射映射的键和值?

How to map both keys and values of a mapping?

我需要定义一个函数,将有限映射的键和值映射到一组键值对中:

theory Test
  imports Main "~~/src/HOL/Library/Finite_Map"
begin

definition denorm :: "('a, 'b) fmap ⇒ ('a × 'b) fset" where
  "denorm m ≡ "

end

问题是我不能通过递归定义这个函数,因为fmap不是归纳数据类型而且它没有任何构造函数。

我想 fmap 在内部表示为一个对列表。是否可以将 fmap 转换为列表?我需要 fmap_of_list 函数的反函数。

一种可能的方法是组合图像、域和查找:表达式

λ m. (λ k. (k, the (fmlookup m k))) |`| fmdom m

有想要的类型

('a, 'b) fmap ⇒ ('a × 'b) fset

并且应该为地图计算所需的集合 m

此功能已存在:

fset_of_fmap :: "('a, 'b) fmap ⇒ ('a × 'b) fset"