Coq 使用 refine with bi-implication
Coq use refine with bi-implication
我不确定如何表达我的问题,因为我是 coq 的新手。我想将 refine 与包含双向蕴涵的定理一起使用。示例代码:
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 有疑问。我得到的错误是:
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.
我试过的是这样的:
Theorem test3:
A -> B -> C.
Proof.
intros.
cut (B <-> C).
firstorder.
refine (t2 _).
assumption.
Qed.
但是随着道具和证明的加长,它变得有点乱。 (我还必须自己证明双向蕴涵)。我可以使用 t2 并以更简单的方式获得它的子目标吗?
谢谢
A <-> B
定义为 (A -> B) /\ (B -> A)
,因此您可以使用 proj1
、proj2
:
进行投影
Theorem test2:
A -> B -> C.
Proof.
intros A B.
refine (proj1 (t2 _) _).
我不确定如何表达我的问题,因为我是 coq 的新手。我想将 refine 与包含双向蕴涵的定理一起使用。示例代码:
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 有疑问。我得到的错误是:
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.
我试过的是这样的:
Theorem test3:
A -> B -> C.
Proof.
intros.
cut (B <-> C).
firstorder.
refine (t2 _).
assumption.
Qed.
但是随着道具和证明的加长,它变得有点乱。 (我还必须自己证明双向蕴涵)。我可以使用 t2 并以更简单的方式获得它的子目标吗?
谢谢
A <-> B
定义为 (A -> B) /\ (B -> A)
,因此您可以使用 proj1
、proj2
:
Theorem test2:
A -> B -> C.
Proof.
intros A B.
refine (proj1 (t2 _) _).