证明H与K相交是Prolog中的子群(H和K是子群)



我正在开发一个群论证明器。现在,我有兴趣证明如果H和K是子群,那么H与K相交是子群。我的证明基于构造一个关系式(==H(,使得

h(==h(g当且仅当hg^{-1}属于h。证明这是等价关系(自反、对称、传递(等价于证明h是子群。

我已经完成了下面的代码,当我试图证明H相交K是子群时,我失败了。我是Prolog的新手,所以也许我有一些基本的错误。在数学证明中,不需要说等价关系的显式,因此我省略了它

在程序中,我将hg和kg表示为H和K。H与K相交,K为hkg。

inside(X,H) :- equals(H,X,e).

equals(hkg,e,e).
equals(hkg,x,e).
equals(hkg,y,e).
equals(hkg,z,e).
equals(hkg,X,Y) :- equals(hg,X,Y),equals(kg,X,Y).

reflexive(H) :- forall(inside(X,H),equals(H,X,X)).

symmetric(H) :- forall(equals(H,X,Y),equals(H,Y,X)).

transitive(H) :- forall(equals(H,X,Y),equals(H,Y,Z),equals(H,X,Z)).

subgroup(H) :- reflexive(H),symmetric(H),transitive(H).
subgroup(hg).
subgroup(kg).

目前,它未通过自反性测试(第一次测试(。你能告诉我这个节目出了什么问题吗?如果你需要更多的澄清,请随时询问。

Prolog对定理证明并不那么好。它在逻辑程序中调用谓词的方式是基于解析定理证明的(因此仅限于Horn子句(,但这并不意味着该语言允许您对定理证明问题建模;技术特别好。特别是因为Prolog处理目标p(X,Y),它试图找到使这些目标如逻辑程序所定义的那样为TRUE的元组(x,y),而不是处理根据某些逻辑(经典、直觉等(的一些推导方法(自然推导、序列演算(重写的句子S,直到获得最终的S'。特别要注意的是,在任何地方都看不到量词,因为没有人编写可能需要它的S。这并不意味着不能在Prolog上构建定理证明器,但有一些方法可以实现。

在这种情况下,对于

reflexive(H) :- forall(inside(X,H),equals(H,X,X)).

你已经有麻烦了,因为Prolog证明reflexive(hg)意味着

实际上去寻找任何X,这样inside(X,hg)

inside(X,hg) :- equals(hg,X,e).

实际上去寻找任何X,这样equals(hg,X,e)

因为我需要确保inside(X,hg)(以及语句∀X:equals(hg,X,e(=>内部(X,hg(将允许我这样做(

在这个逻辑程序中没有。

反射性应该是空洞真实的

?- reflexive(hg).
true.

不错,但没用。

相关内容

  • 没有找到相关文章