Math 如何描述Coq中的一对多关系?

Math 如何描述Coq中的一对多关系?,math,logic,relation,coq,theorem-proving,Math,Logic,Relation,Coq,Theorem Proving,我正在读B.Russell的《数学哲学导论》一书,试图将书中描述的所有定理形式化 下文()描述了一种或多种关系 一对多关系可以定义为这样的关系,如果x具有 关于y,没有其他术语x'也具有 与y的关系 或者,它们可以定义如下:给定 两个术语x和x',x与之具有给定关系的术语,以及 那些与x'有联系的人没有共同的成员 或者,再一次,他们可能 定义为其中一个的相对乘积 反之则意味着同一性,即两者的“相对乘积” 关系R和S是当 有一个中间项y,使得x与R和y有关系 y与S和z有关系 它提出了三种定义方式

我正在读B.Russell的《数学哲学导论》一书,试图将书中描述的所有定理形式化

下文()描述了一种或多种关系

一对多关系可以定义为这样的关系,如果x具有 关于y,没有其他术语x'也具有 与y的关系

或者,它们可以定义如下:给定 两个术语x和x',x与之具有给定关系的术语,以及 那些与x'有联系的人没有共同的成员

或者,再一次,他们可能 定义为其中一个的相对乘积 反之则意味着同一性,即两者的“相对乘积” 关系R和S是当 有一个中间项y,使得x与R和y有关系 y与S和z有关系

它提出了三种定义方式。我已经成功地描述了前两个,并证明了它们的等价性。当我陷入第三个问题时,我试图摆脱“相对产品”的概念,直接触及其内涵,但也失败了

下面是我的定义,我有没有犯错误

Definition one_many {X} (R : relation X) : Prop :=
  forall x y, R x y -> forall x', x <> x' -> ~(R x' y).

Definition one_many' {X} (R : relation X) : Prop :=
  forall x x' y, R x y -> R x' y -> x = x'.

Inductive relative_product
          {X} (R: relation X) (S: relation X) : relation X :=
  | rp0 : forall x y, forall z, R x y -> S y z -> relative_product R S x z.
Inductive converse {X} (R : relation X) : relation X :=
  | cv0 : forall x y, R x y -> converse R y x.
Inductive id {X} : relation X :=
  | id0 : forall x, id x x.

Definition one_many'' {X} (R : relation X) : Prop :=
  forall x y, relative_product R (converse R) x y <-> id x y.
definitionone\u many{X}(R:relationx:Prop:=
对于所有x y,R x y->对于所有x',x x'->~(R x'y)。
定义一个或多个{X}(R:关系X):属性:=
对于所有x'y,R x y->R x'y->x=x'。
归纳相对积
{十} (R:关系X)(S:关系X):关系X:=
|rp0:forall x y,forall z,R x y->S y z->相对乘积R S x z。
归纳逆{X}(R:关系X):关系X:=
|cv0:FORALLXY,RXY->逆向RYX。
归纳id{X}:关系X:=
|id0:forall x,id x。
定义一个或多个“{X}(R:关系X):属性:=
对于所有xy,相对乘积R(逆R)xy id x y。
下面是我如何解释第三个的定义,我也没有证明它们的等价性

Goal forall {X} (R : relation X),
    one_many'' R <-> (forall x y, R x y -> forall x', converse R y x' -> x = x').
Proof.
  intros. unfold one_many''. split.

  intros.
  assert (relative_product R (converse R) x x' <-> id x x'). apply H.
  inversion H2. apply id_eqv. apply H3.
  apply rp0 with y. assumption. assumption.

  intros.
  split. intro.
  inversion H0. subst.
  apply id_eqv. apply H with y0.
  assumption. assumption.

   (* I'm stuck here. This subgoal is obviously not provable. *)
所有{X}(R:relationx)的目标,
一个或多个“R”(对于所有x y,R x y->对于所有x',逆R y x'->x=x')。
证明。
介绍。展开一个或多个“”。分裂
介绍。
断言(相对乘积R(逆R)x x'id x')。应用H。
反转H2。应用id_eqv。应用H3。
用y应用rp0。假设。假设。
介绍。
分裂简介。
反转H0。替代品。
应用id_eqv。用y0涂抹H。
假设。假设。
(*我被困在这里。这个子目标显然是不可证明的。*)
其中,
id\u eqv
引理id\u eqv:forall{X}(X:X)(y:X),X=y id X y
,很容易提前证明


有人能帮我找出或给我一个关于我哪里出错的提示吗?提前感谢。

胡乱猜测,但您可能需要
R
自反或不为空。用你的剧本我最终不得不证明

1 subgoal
X : Type
R : relation X
H : forall x y : X, R x y -> forall x' : X, converse R y x' -> x = x'
y : X
______________________________________(1/1)
relative_product R (converse R) y y

所以你有一个关系
R
,和一个居住者
y:X
。为了证明你的目标,你需要有一个证人
z
,这样
ryz
rzy
。在没有任何其他信息的情况下,我想你唯一的办法就是让
R
具有自反性和
z
be
y

我认为你误译了第三个定义。原文说:

或者,它们也可以被定义为这样的关系,即其中一个的相对乘积及其逆意味着同一性

(我的重点)。这将转化为:

forall x y, relative_product R (converse R) x y -> id x y

也就是说,它应该是一个直接的含义,而不是你所断言的等价物。你不能希望从其他任何一个来证明你的第三个陈述,因为它不是等价的:考虑一个非空集合上的空关系。这当然是一对多关系,但与其相反的相对乘积也是空的,因此不是完全标识关系。

如何定义
关系
?你能分享你其余的定义吗?sinan:关系直接取自标准库关系,即
定义关系(X:Type):=X->X->Prop
id\u eqv
是否也在stdlib中定义?我很难找到所需的定义。西南:对不起,我错过了。我证明了我自己
引理id_eqv:forall{X}(X:X)(y:X),X=yidxy
。在逆向关系的定义中,你需要
rxy逆向ryx
,还是在给定该定义的情况下,很容易证明
逆向ryx->rxy