利用SML和HOL推理规则从第一原理证明定理
我试图用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
[].\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;