为不高兴的头衔道歉。
我定义了一个计算固定点的函数,如
function (domintros) "fix" :: "(env ⇒ env) ⇒ env ⇒ env"
where
"fix f m n = (if f m n = m n then m n else fix f (f m) n)"
by pat_completeness blast
其中type_synonym env = char list ⇀ val
只是通常的(显式)部分函数(map)。
我设法在某些条件下证明终止,但现在我想证明以下引理,这似乎是微不足道的:
lemma fix_dom_iter [intro]:
assumes "fix_dom (f, m, n)"
shows "fix_dom (f, f m, n)"
oops
但只是看似,因为我无法找到如何证明它。似乎没有fix.p*
定理可以做我想要的。
显然是~(f m n = m n)
时的情况。
任何指针。如何证明引理?它甚至可以证明吗?
修改
我认为fix.domintros
应该是等价而不是含义。这样,我就能证明我想要的东西,事实上它应该是合理的。问题是,如果这对于任何类型的部分功能都是合理的。
答案 0 :(得分:2)
不幸的是你的引理不成立。考虑输入的以下变体,我将环境更改为从bool到bool的函数。
type_synonym env = "bool ⇒ bool"
function (domintros) "fix" :: "(env ⇒ env) ⇒ env ⇒ env"
where
"fix f m n = (if f m n = m n then m n else fix f (f m) n)"
by pat_completeness blast
我还定义了相应的可执行部分函数。
partial_function (tailrec) "fix2" :: "(env ⇒ env) ⇒ env ⇒ env"
where
[code]: "fix2 f m n = (if f m n = m n then m n else fix2 f (f m) n)"
现在,f
,m
和n
的以下证人表明您的陈述不正确。
definition "f m = (if m True = m False then Not else Not o m)"
definition "m n = True"
definition "n = False"
fix_dom (f,m,n)
确实成立。
lemma "fix_dom (f,m,n)" unfolding f_def[abs_def] m_def[abs_def] n_def
by (auto intro: fix.domintros)
但是,fix_dom (f,f m,n)
不能保持,因为非终止计算可以观察到。
value (code) "fix2 f (f m) n"