首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“自动”如何与双相关联(当且仅当)

“自动”如何与双相关联(当且仅当)
EN

Stack Overflow用户
提问于 2017-11-22 12:52:41
回答 1查看 124关注 0票数 5

我注意到,auto忽略了二分词。下面是一个简化的示例:

代码语言:javascript
复制
Parameter A B : Prop.
Parameter A_iff_B : A <-> B.

Theorem foo1: A -> B.
Proof.
  intros H. apply A_iff_B. assumption.
Qed.

Theorem bar1: B -> A.
Proof.
  intros H. apply A_iff_B. assumption.
Qed.

Theorem foo2_failing: A -> B.
Proof.
  intros H. auto using A_iff_B.
Abort.

Theorem bar2_failing: B -> A.
Proof.
  intros H. auto using A_iff_B.
Abort.

现在,我知道A <-> BA -> B /\ B -> A的一种语法糖,所以我写了两个定理来提取其中一个定理:

代码语言:javascript
复制
Theorem iff_forward : forall {P Q : Prop},
  (P <-> Q) -> P -> Q.
Proof.
  intros P Q H. apply H.
Qed.

Theorem iff_backward : forall {P Q : Prop},
  (P <-> Q) -> Q -> P.
Proof.
  intros P Q H. apply H.
Qed.

Theorem foo3: A -> B.
Proof.
  intros H.
  auto using (iff_forward A_iff_B).
Qed.

Theorem bar3: B -> A.
Proof.
  intros H.
  auto using (iff_backward A_iff_B).
Qed.
  1. 为什么apply A_iff_B工作,而auto using A_iff_B不工作?我认为auto n是在使用给定数据库中的假设和所有定理对长度为<= n的所有可能序列进行详尽的搜索。
  2. 这两个投影函数是否有一个标准的技巧来处理双数,或者这两个投影函数是通常的解?
  3. 这样的投影函数是否在标准库的某个地方?我找不到他们。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-22 21:55:42

  1. 为什么apply A_iff_B worksauto using A_iff_B没有呢?

auto通常使用simple apply而不是apply,并且这个受限制的apply版本不处理二叉树。

  1. 这两个投影函数是否有一个标准的技巧来处理双数,或者这两个投影函数是通常的解?

为此,可以使用Hint Resolve -> (<-)特性:

代码语言:javascript
复制
Hint Resolve -> A_iff_B.
Hint Resolve <- A_iff_B. (* if you remove this one, then `auto` won't be able to prove the `bar3` theorem *)

Theorem foo3: A -> B.
Proof. info_auto. Qed. (* look at the output *)

  1. 这样的投影函数是否在标准库的某个地方?

是的,它们叫做:proj1proj2。下面是你如何找到它们的方法:

代码语言:javascript
复制
Search (?A /\ ?B -> ?A).

或者更容易打字,但发现的东西比我们需要的要多一些:

代码语言:javascript
复制
Search (_ /\ _ -> _).
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47435258

复制
相关文章

相似问题

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