List 函数将Isabelle中的列表加倍
我想在Isabelle/HOL中定义一个将列表加倍的函数List 函数将Isabelle中的列表加倍,list,isabelle,List,Isabelle,我想在Isabelle/HOL中定义一个将列表加倍的函数 fun double :: "'a list => 'a list" where ... 这样double[x1,x2,…]=[x1,x1,x2,x2,…] 我尝试了以下方法: fun double :: " 'a list ⇒ 'a list" where "double [] = []" | "double [x#[l]] = x # x # double
fun double :: "'a list => 'a list" where
...
这样double[x1,x2,…]=[x1,x1,x2,x2,…]
我尝试了以下方法:
fun double :: " 'a list ⇒ 'a list" where
"double [] = []" |
"double [x#[l]] = x # x # double [l]"
以及其他一些定义。我得到了错误
类型统一失败
应用程序中的类型错误:操作数类型不兼容
我的函数有什么问题?实际上,错误消息包含一些进一步的信息。即
Operator: double :: 'a list ⇒ 'a list
Operand: [[x, l]] :: ??'a list list
这告诉我们,[[x,l]]
是一个列表类型,即列表列表。当您希望将其作为参数提供给double
,该参数需要一个类型为的参数列表,您会得到类型错误
错误消息中术语[[x,l]]
的来源是定义的第二行
`double [x # [l]]`
其中,x#[l]
打印为等效的[x,l]
您的输入中有几个多余的括号。请注意,与Isabelle中的非正式数学文本(具有纸上的非正式含义)不同,您不能使用括号[
,]
进行显式嵌套。请尝试以下方法
fun double :: " 'a list ⇒ 'a list"
where
"double [] = []" |
"double (x#xs) = x # x # double xs"