如何合并有限图集?

时间:2017-09-13 10:14:22

标签: isabelle

我可以合并两个有限的地图如下:

value "fmadd
  (fmap_of_list [(1::nat,2::nat)])
  (fmap_of_list [(2::nat,3::nat)])"

但是当我尝试合并一组地图时:

value "ffold fmadd fmempty {|
  fmap_of_list [(1::nat,2::nat)],
  fmap_of_list [(2::nat,3::nat)]|}"

我收到以下错误:

Wellsortedness error:
Type nat ⇀⇩f nat not of sort finite
No type arity fmap :: finite

根据fmap的定义,它的域名是有限的:

typedef ('a, 'b) fmap = "{m. finite (dom m)} :: ('a ⇀ 'b) set"
  morphisms fmlookup Abs_fmap
proof
  show "Map.empty ∈ {m. finite (dom m)}"
    by auto
qed

但为什么fmap不是有限的?

1 个答案:

答案 0 :(得分:1)

回答您的直接问题:

  

但为什么fmap不是有限的?

每个fmap都有一个有限域,但不一定只有有限数量的('a, 'b) fmap类型的值。例如,从natnat有无限多个有限大小的映射。

您所观察到的问题比这更深入:我认为ffold没有正确的代码设置。如果我试着计算

ffold funion fempty {|
  fset_of_list [(1::nat,2::nat)],
  fset_of_list [(2::nat,3::nat)]|}

...错误信息类似。现在,我建议在列表中将其重写为fold

fold fmadd [
  fmap_of_list [(1::nat,2::nat)],
  fmap_of_list [(2::nat,3::nat)]] fmempty

它不一样,但它可能对您的应用程序有用。