How to merge set of finite maps?

岁酱吖の 提交于 2019-12-11 15:27:44

问题


I can merge two finite maps as follows:

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

But when I try to merge a set of maps:

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

I get the following error:

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

According to definition of fmap, it's domain is finite:

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

But why fmap is not finite?


回答1:


To answer your immediate question:

But why fmap is not finite?

Every fmap has a finite domain, but it is not necessarily the case that there are only finitely many values of type ('a, 'b) fmap. For example, there are infinitely many finitely-sized mappings from nat to nat.

The problem you're observing is deeper than that: I believe there is no proper code setup for ffold. If I try to compute

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

... the error message is similar. For now, I would recommend rewriting it as fold on lists:

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

It's not the same but it might be useful for your application.



来源:https://stackoverflow.com/questions/46194813/how-to-merge-set-of-finite-maps

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!