我试图理解如何从可计算函数运算的定理转向使用归纳定义关系来表示计算的定理。考虑下面这个简单的开发。让我们从关系及其属性的标准定义开始:
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
和两个函数F
和G
定义的三个属性:
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适用于R
,F
和G
,则属性B也保持R
, F
和G
。
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适用于R
,F
和G
,那么属性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 b
且x
处于关联状态a
与R
“x
。现在为定理。第一个很容易遵循:
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
只出现在aPropA
和aPropB
的结论中。因此,目标的形状与我的假设和已知的引理的形状相匹配,允许我轻松使用它们。
我在哪里错了?我从功能到关系的过渡是不正确的?我可以在这里使用任何技术吗?
答案 0 :(得分:2)
Coq中的函数不仅仅是确定性关系,还有总关系。所以你可能想要投入:
Definition total {X : Type} (R : relation X) : Prop :=
forall x, exists y, R x y.
然后functional
的概念是deterministic
和total
的结合:
Definition functional {X : Type} (R : relation X) : Prop :=
deterministic R /\ total R.
或者,您可以在与您的关系所代表的部分函数的域相关的词条中添加假设。