当使用quotient_type命令时,我收到以下警告:“没有为Example.A定义映射函数。这将在以后导致问题”。 以下是触发警告的最小示例(使用Isabelle2017测试)。
theory Example
imports
Main
begin
datatype 'a A = B "'a A" | C
(*for map: map *) (* uncommenting doesn't fix the warning*)
quotient_type 'a Q = "'a A" / "op ="
by (rule identity_equivp)
end
所以我的问题是: 这个上下文中的map函数是什么意思(我只知道函数式编程中仿函数上下文中map函数的概念)? 它与数据类型包映射函数有什么关系,比如由注释行生成的函数? 以后会遇到哪些问题?
答案 0 :(得分:1)
datatype
命令默认情况下不会使用商包注册生成的map函数,因为可能有更多的常规映射器(如果有死类型变量)。因此,您必须手动执行仿函数声明:
functor map_A
by(simp_all add: A.map_id0 A.map_comp o_def)
如果您以后想要通过商类型提升定义,则需要映射器及其定理。这是Isabelle邮件列表中的discussed。