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
虽然不同,但它可能对您的应用程序有用