首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Coq use refine with bi-implication

Coq use refine with bi-implication
EN

Stack Overflow用户
提问于 2020-03-05 03:43:04
回答 1查看 93关注 0票数 0

我不知道如何表达我的问题,因为我是coq的新手。我想用包含双向蕴涵的定理来使用refine。示例代码:

代码语言:javascript
复制
Parameters A B C : Prop.

Theorem t1:
  A -> B -> C.
Admitted.

Theorem t2:
  A -> B <-> C.
Admitted.

Theorem test1:
  A -> B -> C.
Proof.
  intros.
  refine (t1 _ _).
  assumption.
  assumption.
Qed.

Theorem test2:
  A -> B -> C.
Proof.
  intros A B.
  refine (t2 _ _).

t1和t2是我想在refine中使用的定理。t1按照我所期望的方式工作(如test1所示)。但我对t2有个问题。我得到的错误是:

代码语言:javascript
复制
Ltac call to "refine (uconstr)" failed.
Error: Illegal application (Non-functional construction): 
The expression "t2 ?a" of type "Top.B <-> C"
cannot be applied to the term
 "?y" : "?T"
Not in proof mode.

我试过的东西是这样的:

代码语言:javascript
复制
Theorem test3:
  A -> B -> C.
Proof.
  intros.
  cut (B <-> C).
  firstorder.
  refine (t2 _).
  assumption.
Qed.

但是随着更长的道具和证据,它变得有点混乱。(我还必须自己证明这一点)。我可以使用t2并以一种更简单的方式获得它的子目标吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-05 06:22:04

A <-> B被定义为(A -> B) /\ (B -> A),因此您可以使用proj1proj2

代码语言:javascript
复制
Theorem test2:
  A -> B -> C.
Proof.
  intros A B.
  refine (proj1 (t2 _) _).
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60533598

复制
相关文章

相似问题

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