Isabelle 如何合并有限映射集?

Isabelle 如何合并有限映射集?,isabelle,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: T

我可以按如下方式合并两个有限贴图:

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不是有限的呢?

要回答您当前的问题:

但为什么fmap不是有限的呢

每个fmap都有一个有限域,但不一定只有有限多个“a”和“b”类型的值。例如,从nat到nat有无限多个有限大小的映射

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

ffold funion fempty {|
  fset_of_list [(1::nat,2::nat)],
  fset_of_list [(2::nat,3::nat)]|}
。。。错误消息与此类似。现在,我建议将其改写为折叠列表:

fold fmadd [
  fmap_of_list [(1::nat,2::nat)],
  fmap_of_list [(2::nat,3::nat)]] fmempty
虽然不同,但它可能对您的应用程序有用