从可计算函数转向归纳关系

时间:2017-10-06 12:17:02

标签: coq

我试图理解如何从可计算函数运算的定理转向使用归纳定义关系来表示计算的定理。考虑下面这个简单的开发。让我们从关系及其属性的标准定义开始:

Definition relation (X : Type) := X -> X -> Prop.

Definition reflexive {X : Type} (R : relation X) :=
  forall a, R a a.

Definition transitive {X : Type} (R : relation X) :=
  forall a b c : X, (R a b) -> (R b c) -> (R a c).

现在我定义了为关系R和两个函数FG定义的三个属性:

Definition propA {X : Type} (R : relation X) (F G : X -> X) :=
  forall p q, R (F p) q <-> R p (G q).

Definition propB {X : Type} (R : relation X) (F G : X -> X) :=
  forall x, R x (G (F x)).

Definition propC {X : Type} (R : relation X) (F : X -> X) :=
  forall a b : X, R a b -> R (F a) (F b).

我陈述一个定理,如果R是自反的且属性A适用于RFG,则属性B也保持RFG

Lemma aPropB {X : Type} {R : relation X} {F G : X -> X} (Rrefl : reflexive R)
      (H : propA R F G) :
  propB R F G.
Proof.
  unfold propB in *.
  intros.
  apply H. apply Rrefl.
Qed.

最后,我陈述了一个定理:如果R具有自反性和传递性,并且属性A适用于RFG,那么属性C适用于{{ 1}}和R

F

现在我想从表示Lemma aPropC {X : Type} {R : relation X} {F G : X -> X} (Rrefl : reflexive R) (Rtrans : transitive R) (H : propA R F G) : propC R F. Proof. unfold propC in *. intros. apply H. eapply Rtrans. eassumption. apply aPropB; assumption. Qed. F作为计算,将它们表示为关系。因此,我现在只说G而不是说F : X -> X,而是坚持认为F : relation X是确定性的:

F

我重申所有三个属性:

Definition deterministic {X : Type} (F : relation X) :=
  forall x y1 y2, F x y1 -> F x y2 -> y1 = y2.

我所遵循的转换模式是表达式Definition propA' {X : Type} (R : relation X) (F G : relation X) (Fdet : deterministic F) (Gdet : deterministic G) := forall p q x y, F p x -> G q y -> R x q <-> R p y. Definition propB' {X : Type} (R : relation X) (F G : relation X) (Fdet : deterministic F) (Gdet : deterministic G) := forall x y z, F x y -> G y z -> R x z. Definition propC' {X : Type} (R : relation X) (F : relation X) (Fdet : deterministic F) := forall a b x y : X, F a x -> F b y -> R a b -> R x y. 变为R a (F b),意味着“F b x -> R a x评估为某些F bx处于关联状态aRx。现在为定理。第一个很容易遵循:

Lemma aPropB' {X : Type} {R : relation X} {Rrefl : reflexive R}
      {F G : relation X} {Fdet : deterministic F} {Gdet : deterministic G}
      (H : propA' R F G Fdet Gdet) :
  propB' R F G Fdet Gdet.
Proof.
  unfold propA', propB' in *.
  intros.
  specialize (H x y y z).
  apply H; auto.
Qed.

但我坚持第二个。我开始这样的证明:

Lemma aPropC' {X : Type} {R : relation X} {F G : relation X}
      {Fdet : deterministic F} {Gdet : deterministic G}
      (Rrefl : reflexive R) (Rtrans : transitive R)
      (H : propA' R F G Fdet Gdet) :
  propC' R F Fdet.
Proof.
  unfold propC' in *.
  intros.
  eapply H; try eassumption.

并以以下目标结束(省略一些不相关的假设):

H : propA' R F G Fdet Gdet
H0 : F a x
H1 : F b y
H2 : R a b
─────────────────────────────────────────────────────
G y b

问题在于G现在是propA'的明确前提,如果我想依赖propA',我必须证明这一点。但我在目前的证据背景下没有关于G的假设,我也没有办法完成证明。以前使用aPropC的{​​{1}}功能G只出现在aPropAaPropB的结论中。因此,目标的形状与我的假设和已知的引理的形状相匹配,允许我轻松使用它们。

我在哪里错了?我从功能到关系的过渡是不正确的?我可以在这里使用任何技术吗?

1 个答案:

答案 0 :(得分:2)

Coq中的函数不仅仅是确定性关系,还有关系。所以你可能想要投入:

 Definition total {X : Type} (R : relation X) : Prop :=
   forall x, exists y, R x y.

然后functional的概念是deterministictotal的结合:

 Definition functional {X : Type} (R : relation X) : Prop :=
   deterministic R /\ total R.

或者,您可以在与您的关系所代表的部分函数的域相关的词条中添加假设。