如何将一组转换为Isabelle的列表?
我对函数定义感兴趣,签名为:
"'a set => 'a list"
我该如何定义?
答案 0 :(得分:1)
通过在Isabelle / jEdit的查询面板的查找常量标签中搜索"'a set" "'a list"
,我偶然发现了
sorted_list_of_set :: "'a set ⇒ 'a list"
来自理论List
。但是,此常量要求'a
位于类linorder
中,即,它仅适用于线性排序元素上的集合。而且,正如我的评论中所提到的,它只适用于有限集。 sorted_list_of_set
的定义正上方还有一个警告,我在此重复完整性:
此函数将(有限的)线性有序集映射到已排序 名单。警告:在大多数情况下,转换来自不是一个好主意 设置为列表,但一个应该转换到另一个方向(通过 @ {const set})。
答案 1 :(得分:1)
你可以从
开始definition set_to_list :: "'a set ⇒ 'a list"
where "set_to_list s = (SOME l. set l = s)"
然后证明
lemma set_set_to_list:
"finite s ⟹ set (set_to_list s) = s"
unfolding set_to_list_def by (metis (mono_tags) finite_list some_eq_ex)