Coq:如何在目标中更深入地应用公理?
试图用MT1(或MT1bis)证明MT1A,但Coq未能统一:Coq:如何在目标中更深入地应用公理?,coq,Coq,试图用MT1(或MT1bis)证明MT1A,但Coq未能统一: Require Export Classical_Prop. Require Export Classical_Pred_Type. Variable MT : Type. Parameter NIL : MT. Variables a b e : MT -> MT. Variable c : MT * MT -> MT. Axiom MT1 : forall x y z: MT, z = c(x,y) ->
Require Export Classical_Prop.
Require Export Classical_Pred_Type.
Variable MT : Type.
Parameter NIL : MT.
Variables a b e : MT -> MT.
Variable c : MT * MT -> MT.
Axiom MT1 :
forall x y z: MT, z = c(x,y) -> a(z) = x /\ b(z) = y.
Axiom MT1bis :
forall x y z: MT, z = c(x,y) <-> a(z) = x /\ b(z) = y.
Axiom MT3 :
forall x y z : MT, z = c(a(z),b(z)) <-> a(z) <> z /\ b(z) <> z.
Definition example := c(NIL, e NIL).
Lemma MT1A :
forall x: MT, x = a (c(example, b example)) -> x = example /\ a x <> x /\ b x <> x.
Proof.
(* unfold example. *)
intros.
apply MT1. (* ??? *)
Qed.
需要导出经典道具。
需要导出经典\u Pred\u类型。
变量MT:Type。
参数NIL:MT。
变量a b e:MT->MT。
变量c:MT*MT->MT。
Axiom MT1:
对于所有x-y-z:MT,z=c(x,y)->a(z)=x/\b(z)=y。
Axiom MT1bis:
对于所有x y z:MT,z=c(x,y)a(z)=x/\b(z)=y。
Axiom MT3:
对于所有x y z:MT,z=c(a(z),b(z))a(z)z/\b(z)z。
定义示例:=c(NIL,e NIL)。
引理MT1A:
对于所有x:MT,x=a(c(示例,b示例))->x=example/\ax/\bxx。
证明。
(*展开示例。*)
介绍。
应用MT1。(* ??? *)
Qed。
这里可以使用哪些策略来提示Coq如何从a()
中获取c()
?(还有一种可能性是,这些公理还不足以证明,尽管乍一看是这样。如果MT1还不够,也许MT1bis不够?)
试图找到合适的策略,比如重写,但没有成功(可能需要更复杂的提示)。找不到更多的战术,这会有所帮助
(这不是家庭作业,只是一个爱好项目)我从
MT3
中删除了未使用的变量:
Axiom MT3 :
forall z : MT, z = c(a(z),b(z)) <-> a(z) <> z /\ b(z) <> z.
好的,谢谢!。我有三个新的战术。。。正确使用重写(我添加了
Require-Import-Coq.Setoids.Setoid.
以获得通过)我没有添加任何导入,除了Require-classic_-Prop.
之外,它对我有效(我使用的是Coq 8.7.1)。我有一个古老的版本:8.4pl4。现在人们可以使用OPAM包管理器来处理现代Coq版本。在准备步骤之后,您可以在终端中键入opam install coq
,并获得一个工作的coq系统。它们分别代表x
,y
,z
MT1
的类型为对于所有x y z:MT,z=c(x,y)->a(z)=x/\b(z)=y
和x
,y
,z
可以从类型的下一个参数z=c(x,y)
中推断出z
,因此三个。或者,您可以将前三个参数声明为隐式:arguments MT1[x y z]
(将其放在MT1
之后),然后您就可以将证明(mt1f)设置为[F1 F2]。
。另一个选项是在导入后设置隐式参数。
(这是文件的全局设置)。
Lemma MT1A x :
x = a (c (example, b example)) ->
x = example /\ a x <> x /\ b x <> x.
Proof.
unfold example; intros H.
rewrite <-MT3.
remember (c (NIL, e NIL)) as f eqn:F.
pose proof (MT1 _ _ _ F) as [F1 F2].
remember (c (f, b f)) as g eqn:G.
pose proof (MT1 _ _ _ G) as [G1 G2].
split; congruence.
Qed.