我需要定义一个函数,它将有限映射的键和值映射到一组键值对中:
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
函数的反函数。
答案 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"