【发布时间】:2021-04-02 17:12:15
【问题描述】:
Isabelle 中是否可以定义一个终止递归函数f where
-
f有一个t类型的参数,因此t类型的值可能包含到t类型的值的映射,并且 -
f对此类映射范围内的所有元素执行递归调用?
例如考虑trie理论上定义的数据类型Trie_Fun:
datatype 'a trie = Nd bool "'a ⇒ 'a trie option"
以及我对一个简单函数height 的尝试,该函数旨在计算尝试的高度(具有有限多个传出边):
theory Scratch
imports "HOL-Data_Structures.Trie_Fun"
begin
function height :: "'a trie ⇒ nat" where
"height (Nd _ edges) = (if dom edges = Set.empty ∨ ¬ finite (dom edges)
then 0
else 1 + Max (height ` ran edges))"
by pat_completeness auto
termination (* ??? *)
end
这里lexicographic_order 不足以证明函数要终止,但到目前为止,我还无法对trie(用于终止)制定任何本身不需要类似递归的度量。
我必须在这里承认,我不确定我是否正确理解了 Isabelle/HOL 中的数据类型(即,上述定义的 trie 是否实际上总是有限高度)。
是否可以显示height 终止?
【问题讨论】:
-
您是否尝试过在声明中添加
function (domintros)选项,然后使用归纳法作为终止证明? -
非常感谢,这确实足以证明终止。您想提交您的评论作为答案,还是我可以根据您的评论自己回答问题?
-
如果您可以自己添加答案,包括工作终止证明,那就太好了。
标签: isabelle