求解Coq中的一个变量
有办法解决Coq中的变量吗?鉴于:求解Coq中的一个变量,coq,Coq,有办法解决Coq中的变量吗?鉴于: From Coq Require Import Reals.Reals. Definition f_of_x (x : R) : R := x + 1. Definition f_of_y (y : R) : R := y + 2. 我想表达 Definition x_of_y (y : R) : R := 类似于求解x in f_of_x=f_of_y。我希望使用战术语言来洗牌术语。我最终希望得到正确的可用定义y+1.我想使用我的定义: Compu
From Coq Require Import Reals.Reals.
Definition f_of_x (x : R) : R := x + 1.
Definition f_of_y (y : R) : R := y + 2.
我想表达
Definition x_of_y (y : R) : R :=
类似于求解x in f_of_x=f_of_y。
我希望使用战术语言来洗牌术语。我最终希望得到正确的可用定义y+1.
我想使用我的定义:
Compute x_of_y 2. (* This would yield 3 if R was tractable or if I was using nat *)
另一种方法是用铅笔/纸手工完成,然后只用Coq检查我的工作。这是唯一的方法吗?如果我理解正确,你想表达的是方程解的存在性
x + 3 = x + 2
如果是这样,您可以在coq中声明为
Lemma solution :
exists x, x + 3 = x + 2.
如果它是可解的,比如x+2=2*x
,那么你可以用
Lemma solution :
exists x, x + 2 = 2 * x.
Proof.
exists 2. reflexivity.
Qed.
但是当然,对于x+3=x+2
,没有解决方案。
如果您想要解决方案,请将y
固定为
x + 3 = y + 2
您必须量化y
:
Lemma solution :
forall y, exists x, x + 1 = y + 2.
Proof.
intro y.
eexists. (* Here I'm saying I want to prove the equality and fill in the x later *)
eapply plus_S_inj.
rewrite plus_0.
reflexivity.
Defined.
Print solution. (* You will see the y + 1 here *)
这里我假设了一些帮助我处理数字的引理:
Lemma plus_S_inj :
forall x y z t,
x + z = y + t ->
x + (S z) = y + (S t).
Admitted.
Lemma plus_0 :
forall x,
x + 0 = x.
Admitted.
你的
R
概念可能也有类似的引理(我不知道是哪一个,所以我不能再进一步了。)谢谢你,我还没有理解存在量化的用法!!但是如果x
和y
是R
,你能在你的答案中完成最后的引理吗?我确实做了intros y.
,但后来不得不使用exists(y+1)。
我不知道如何做从两边减去1的algbraeic操作,所以x是单独的…我更新了我的答案,但我认为R
类型的术语操作应该留给单独的问题。是的,我同意你的看法。我还更新了我的问题,以显示我正在从Coq标准库导入Reals.Reals以获取R
。我不清楚我将如何使用解决方案,正如您所做的那样。在您的情况下,我们处理的是nat
,我认为解决方案
将像计算解决方案2一样可用。(*产生3*)
。相反,检查解决方案2。
产生存在x,x+1=2+2
,这是一个属性
。我能对这个结果做些什么吗?我在回答中已经提到了这一点。如果您打印它,您可以看到它是构造器existT
,您可以在它上进行匹配以获得证人。如果我回答了你的问题,请考虑将其标记为已解决。