dav*_*idg 5 overloading isabelle
如何在Isabelle中定义一个函数,该函数具有不同的定义,具体取决于其参数的类型或它所使用的上下文的类型?
例如,我可能想要定义一个is_default带有类型的函数'a ? bool,其中每个不同的类型'a都有一个可能不同的"默认值".(为了论证,我也假设现有的概念zero不合适.)
这种重载看起来非常适合类型类。首先,为所需的函数定义一个类型类is_default:
class is_default =\n fixes is_default :: "\'a \xe2\x87\x92 bool"\nRun Code Online (Sandbox Code Playgroud)\n\n然后引入任意实例。例如,对于布尔值
\n\ninstantiation bool :: is_default\nbegin\ndefinition "is_default (b::bool) \xe2\x9f\xb7 b"\ninstance ..\nend\nRun Code Online (Sandbox Code Playgroud)\n\n并列出
\n\ninstantiation list :: (type) is_default\nbegin\ndefinition "is_default (xs::\'a list) \xe2\x9f\xb7 xs = []"\ninstance ..\nend\nRun Code Online (Sandbox Code Playgroud)\n