Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
利用SML和HOL推理规则从第一原理证明定理_Sml_Theorem Proving_Hol - Fatal编程技术网

利用SML和HOL推理规则从第一原理证明定理

利用SML和HOL推理规则从第一原理证明定理,sml,theorem-proving,hol,Sml,Theorem Proving,Hol,我试图用SML和HOL推理规则证明定理[].\p/\q q/\p:thm。以下是SML代码: val thm1 = ASSUME ``p:bool /\ q:bool``; val thm2 = ASSUME ``p:bool``; val thm3 = ASSUME ``q:bool``; val thm4 = CONJ thm2 thm3; val thm5 = CONJ thm3 thm2; val thm6 = DISCH ``(q:bool/\p:bool)`` thm4; val t

我试图用SML和HOL推理规则证明定理
[].\p/\q q/\p:thm
。以下是SML代码:

val thm1 = ASSUME ``p:bool /\ q:bool``;
val thm2 = ASSUME ``p:bool``;
val thm3 = ASSUME ``q:bool``;
val thm4 = CONJ thm2 thm3;
val thm5 = CONJ thm3 thm2;
val thm6 = DISCH ``(q:bool/\p:bool)`` thm4;
val thm7 = DISCH ``(p:bool/\q:bool)`` thm5;
val thm8 = IMP_ANTISYM_RULE thm6 thm7;
上述代码的结果产生:

val thm8 =  [(p :bool), (q :bool)] |- (q :bool) /\ (p :bool) <=> p /\ q: thm
val-thm8=[(p:bool),(q:bool)]|-(q:bool)/\(p:bool)p/\q:thm

我做错了什么?

你的最终定理的问题是你仍然有
p
q
作为假设,通过
thm2
thm3
引入,而你可以并且应该从
thm1
获得它们

您需要的第一个定理类似于
p/\q==>p
。我通过浏览(第2.3.24节)找到了适当的规则。它被称为
CONJUNCT1

使用它,我们可以从
thm1
中获得
p
作为定理:

val thmp = CONJUNCT1 thm1;
val thmq = CONJUNCT2 thm1;
同样的想法也适用于将
q
作为
thm1
中的一个定理:

val thmp = CONJUNCT1 thm1;
val thmq = CONJUNCT2 thm1;
然后您可以将您的想法应用于
thm5

val thm5 = CONJ thmq thmp;
这里重要的一点是,我们不使用源自
p
thm2
)的
p
和源自
q
thm3
)的
q
),而是源自
p/\q
p
和源自
p/\q
(设置
show\u假定:=true;
可能有助于更清楚地看到这一点)

最后,我们将您的想法应用于
thm7

val thm7 = DISCH ``p /\ q`` thm5;
以获得预期结果的前半部分,但无额外假设

下半部分以类似的方式获得:

val thm9 = ASSUME (``q /\ p``);
val thmp2 = CONJUNCT2 thm9;
val thmq2 = CONJUNCT1 thm9;
val thm6 =  DISCH ``q /\ p`` (CONJ thmp2 thmq2);
然后,您的
thm8
想法就完美地发挥了作用:

val thm8 = IMP_ANTISYM_RULE thm7 thm6;