求解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

有办法解决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.
我想使用我的定义:

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
,您可以在它上进行匹配以获得证人。如果我回答了你的问题,请考虑将其标记为已解决。