首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Coq中分号链局部子目标的策略

Coq中分号链局部子目标的策略
EN

Stack Overflow用户
提问于 2014-11-03 03:43:25
回答 1查看 575关注 0票数 0

假设我们有了定义

代码语言:javascript
复制
Inductive sillyA : nat -> Prop :=
| sA0 : sillyA 0
| sA1 : sillyA 1.

Inductive sillyB : nat -> Prop :=
| sB0 : sillyB 0
| sB1 : sillyB 1.

Inductive sillyC (n : nat) : Prop :=
| sC0 : sillyA n -> sillyC n
| sC1 : sillyA n -> sillyC n.

想要证明

代码语言:javascript
复制
Theorem silly : forall n, sillyC n -> sillyB n.

通过案例分析可以得到一个简单的证明

代码语言:javascript
复制
intros. inversion H; inversion H0.
apply sB0. apply sB1.
apply sB0. apply sB1.

但是这里有一个明显重复的apply sB0. apply sB1.

问:除了定义一种新的战术符号外,什么才是最佳的筛选方法呢?

使用T; [T1 | ... Tn]是没有帮助的,因为

代码语言:javascript
复制
intros. inversion H; inversion H0;
[apply sB0 | apply sB1].

有错误的战术数量,正确的形式

代码语言:javascript
复制
intros. inversion H; inversion H0;
[apply sB0 | apply sB1 | apply sB0 | apply sB1].

一点也不进步。我们需要的是一种类似于T; [T1 | ... Tn]的策略,但只将[T1 | ... Tn]应用于由前面的策略T生成的子目标,而不是整个分号链。如果我们有这样一个战术T; <T1 | ... Tn>,我们可以进一步缩短上述证据

代码语言:javascript
复制
intros. inversion H; inversion H0;
<apply sB0 | apply sB1>.

这个是可能的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-03 04:24:41

分组将做到这一点:

代码语言:javascript
复制
Theorem silly : forall n, sillyC n -> sillyB n.
intros. inversion H; (inversion H0; [apply sB0 | apply sB1]).
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26707448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档