如何投影(使用`proj1`或`proj2`)一个普遍量化的双条件(iff)?

时间:2017-11-27 13:30:44

标签: coq

如何投影(使用proj1proj2)通用量化的双条件(iff),如下例所示?

Parameter T : Set.
Parameter P Q R: T -> Prop.
Parameter H : forall (t : T), P t <-> Q t.

当我尝试使用proj1 H时,它会因以下错误而失败:

  

错误:术语&#34; H&#34;具有类型&#34; foral t:T,P t - &lt; - &gt; Q t&#34;虽然它是   期望有类型&#34;?A / \?B&#34;。

虽然我想获得forall (t : T), P t -> Q t

修改

使用suggested solution,我现在有两种方法来投射双条件:

Theorem proj1' : (forall t, P t <-> Q t) -> forall t, P t -> Q t.
Proof.
  intros H t.
  exact (proj1 (H t)).
Qed.

Theorem foo : forall (t1 t2 : T),
  (R t1 -> P t1) ->
  (R t2 -> P t2) ->
  R t1 /\ R t2 -> Q t1 /\ Q t2.
Proof.
  intros t1 t2 H1 H2 [H3 H4].

  (* Does not solve the goal, as expected. *)
  auto using H.

  (* Solves the goal, but is unnecessary explicit. *)
  (* auto using (proj1 (H t1)), (proj1 (H t2)). *)

  (* Solves the goal and instanciations are infered. *)
  auto using (proj1' H).
Qed.

现在,像proj1'这样的函数似乎非常有用。如果标准库中没有提供它,是不是因为这种情况实际上并不足以证明它是合理的,还是仅仅是历史事故?

我确实认识到需要两种,三种等通用量化的独特功能(例如proj1'' : (forall t u, P t u <-> Q t u) -> forall t u, P t u -> Q t u)。但对于大多数情况来说,多达三个或四个参数的函数是否足够?

相关

How does `auto` interract with biconditional (iff)

0 个答案:

没有答案