如何投影(使用proj1
或proj2
)通用量化的双条件(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
)。但对于大多数情况来说,多达三个或四个参数的函数是否足够?