伊莎贝尔理论 'Variable "return" occurs on right hand side only'
Isabelle theory 'Variable "return" occurs on right hand side only'
我正在尝试为该算法创建我的第一个 Isabelle/HOL 理论,该算法来自两个整数的计算机最大整数。我的意图是将算法形式化,这是初步的尝试。这就是为什么我试图让我的 Isabelle 代码与平常的代码相似。 C。 “工业编程语言”或尽可能使用算法风格的代码。所以 - 没有太多使用 Isabelle 喜欢的默认 primrec
和递归定义(具有匹配和分支)。我提出了理论:
theory Max_Of_Two_Integers
imports Main
begin
function two_integer_max :: "nat ⇒ nat ⇒ nat"
where
"two_integer_max first second =
(if (first > second) then
return first
else
return second)"
end
但是 function
关键字出现错误信息:
Variable "return" occurs on right hand side only:
⋀first second return.
two_integer_max first second =
(if second < first then return first else return second)
我正在密切关注非常复杂的算法 https://isabelle.in.tum.de/library/HOL/HOL-Imperative_HOL/Imperative_Quicksort.html 的模式,并且它使用了 return,正如在通常的编程中预期的那样。
所以 - 我的 return
命令有什么问题以及如何更正它?
此外,为了使这个理论完整,我必须证明终止(关于函数性质的定理不是强制性的,但我会添加它们)。
Isabelle 教程主要使用 primrec
函数的递归定义和模式匹配。我选择了具有灵活性的功能(我的猜测)。
除了教程之外,博客 post https://www.joachim-breitner.de/blog/732-Isabelle_functions__Always_total%2C_sometimes_undefined 是 Isabelle 的绝佳函数指南 - 但很奇怪 - 它没有提供带有 return
关键字的示例,尽管 - 作为在 Imperative_Quicksort 示例中可以看到,function
和 return
是有效的结构。
return
特定于在命令式 HOL 中编写命令式算法(这是 Quicksort 实现所使用的)。 do
符号也是如此。您收到该错误消息的原因是您没有导入 Imperative HOL。
命令式 HOL 本质上是一个允许您编写修改堆的命令式程序的库。这就是为什么那个例子中 quicksort
的 return 类型不是列表或数组,而是 unit Heap
。 (但即使你有,你仍然会收到一条错误消息,因为你 returning a nat
而不是 Heap
)。
如果您刚开始使用 Isabelle,我强烈 建议暂时不要对 Imperative HOL 做任何事情。相反,您应该从“普通”Isabelle 开始,它使用函数式风格来定义事物。 Concrete Semantics 这本书的前半部分很好地介绍了伊莎贝尔,该书可在线免费获得。
我正在尝试为该算法创建我的第一个 Isabelle/HOL 理论,该算法来自两个整数的计算机最大整数。我的意图是将算法形式化,这是初步的尝试。这就是为什么我试图让我的 Isabelle 代码与平常的代码相似。 C。 “工业编程语言”或尽可能使用算法风格的代码。所以 - 没有太多使用 Isabelle 喜欢的默认 primrec
和递归定义(具有匹配和分支)。我提出了理论:
theory Max_Of_Two_Integers
imports Main
begin
function two_integer_max :: "nat ⇒ nat ⇒ nat"
where
"two_integer_max first second =
(if (first > second) then
return first
else
return second)"
end
但是 function
关键字出现错误信息:
Variable "return" occurs on right hand side only:
⋀first second return.
two_integer_max first second =
(if second < first then return first else return second)
我正在密切关注非常复杂的算法 https://isabelle.in.tum.de/library/HOL/HOL-Imperative_HOL/Imperative_Quicksort.html 的模式,并且它使用了 return,正如在通常的编程中预期的那样。
所以 - 我的 return
命令有什么问题以及如何更正它?
此外,为了使这个理论完整,我必须证明终止(关于函数性质的定理不是强制性的,但我会添加它们)。
Isabelle 教程主要使用 primrec
函数的递归定义和模式匹配。我选择了具有灵活性的功能(我的猜测)。
除了教程之外,博客 post https://www.joachim-breitner.de/blog/732-Isabelle_functions__Always_total%2C_sometimes_undefined 是 Isabelle 的绝佳函数指南 - 但很奇怪 - 它没有提供带有 return
关键字的示例,尽管 - 作为在 Imperative_Quicksort 示例中可以看到,function
和 return
是有效的结构。
return
特定于在命令式 HOL 中编写命令式算法(这是 Quicksort 实现所使用的)。 do
符号也是如此。您收到该错误消息的原因是您没有导入 Imperative HOL。
命令式 HOL 本质上是一个允许您编写修改堆的命令式程序的库。这就是为什么那个例子中 quicksort
的 return 类型不是列表或数组,而是 unit Heap
。 (但即使你有,你仍然会收到一条错误消息,因为你 returning a nat
而不是 Heap
)。
如果您刚开始使用 Isabelle,我强烈 建议暂时不要对 Imperative HOL 做任何事情。相反,您应该从“普通”Isabelle 开始,它使用函数式风格来定义事物。 Concrete Semantics 这本书的前半部分很好地介绍了伊莎贝尔,该书可在线免费获得。