如何映射映射的键和值?

时间:2017-09-05 10:46:07

标签: isabelle

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

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函数的反函数。

2 个答案:

答案 0 :(得分:1)

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

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

具有所需的类型

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

并应计算地图m的所需集合。

答案 1 :(得分:1)

此功能已经存在:

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