coq - Coq 中的终止谓词
问题描述
考虑一个对评估关系建模的谓词。该关系将以真或假停止,这就是为什么我希望我的链的值是配置或布尔值:
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 意味着终止 compile_step c1
这是问题开始的地方:
- 反转 H:
错误:反转需要对排序集进行案例分析,这在归纳定义 compile_step 中是不允许的。
- 破坏H:
错误:归纳定义 compile_step 不允许对排序集进行案例分析。
- 感应 H:
错误:找不到消除组合器 compile_step_rec,可能不允许消除排序集上的归纳定义 compile_step。
错误会在层次结构的更深层次上重现。
对此有简单的解释吗?有简单的解决方案吗?
也许这对你们中的一些人来说是有用的。
解决方案
推荐阅读
- testing - Clojure - 如何在实现中检测另一个协议
- angular - 将变量分配为数组中的键
- php - 使用 php 查找数组的第一个元素并将其添加到活动类以使用 bootstrap.js 创建选项卡系统
- ruby - 从数组中创建散列,其中值是元素的索引
- android - Kotlin Activity 将书写顺序从左到右更改为从右到左(带有不同语言的电话)
- scala - 与输入字符串匹配的字符串列表
- pom.xml - 我在这个 POM 中的错误是什么以及在哪里?
- python - Pygame 无法加载 PNG 图像
- python - Python 的 time.time 函数在全球范围内的准确性如何?
- jquery - 下拉菜单立即打开