Coq中的终止谓词
考虑一个为求值关系建模的谓词。关系将以true或false停止,因此我希望链的值为配置或布尔值:Coq中的终止谓词,coq,Coq,考虑一个为求值关系建模的谓词。关系将以true或false停止,因此我希望链的值为配置或布尔值: Inductive compile_step : conf_type + bool -> conf_type + bool -> Prop 我知道评估终止,我想正式证明它。所以我定义了一个终止谓词: Inductive terminating {A} (r: A -> A -> Prop) (c': A) := | TStep : (forall c1, r c' c1
Inductive compile_step :
conf_type + bool -> conf_type + bool -> Prop
我知道评估终止,我想正式证明它。所以我定义了一个终止谓词:
Inductive terminating {A} (r: A -> A -> Prop) (c': A) :=
| TStep : (forall c1, r c' c1 -> terminating r c1) ->
terminating r c'.
并试图证明这一点:
Lemma compiling_terminates (c': A):
terminating compile_step c'.
现在,让我惊讶的是Coq变得疯狂了。在这里,明智的做法是应用TStep并解决此目标:
(H) c'⟹ c1意味着终止编译步骤c1
以下是问题的起点:
也许对你们中的一些人来说是有用的。试着明确地把
终止放在Prop
中(归纳终止{A}(r:A->A->Prop)(c:A):Prop:=…
)。问题是你不能在Prop
中对一个术语使用消去法来为集合
@SCappella生成一个术语,这只是为了澄清,Prop
的构建理念是它应该与计算无关,所以Coq不允许你对命题的证明进行案例分析,以构建有意义的计算结果。所以Coq不会变得疯狂,它只是告诉你要小心你想做的事。谢谢你的澄清@在Prop
(感应式终止{A}(r:A->A->Prop)(c:A):Prop:=…
)中显式放置终止
)。问题是你不能在Prop
中对一个术语使用消去法来为集合
@SCappella生成一个术语,这只是为了澄清,Prop
的构建理念是它应该与计算无关,所以Coq不允许你对命题的证明进行案例分析,以构建有意义的计算结果。所以Coq不会变得疯狂,它只是告诉你要小心你想做的事。谢谢你的澄清@泰奥维特酒店