我正在开发一个群论证明器。现在,我有兴趣证明如果 H 和 K 是子群,那么 H 与 K 相交是子群。我的证明基于构建一个关系(==H),使得
h (==H) g 当且仅当 hg^{-1} 属于 H。证明这是一个等价关系(自反、对称、传递)等价于证明 H 是一个子群。
我已经完成了以下代码,当我尝试证明 H intersect K 是一个子组时,我失败了。我是 Prolog 的新手,所以也许我遇到了一些基本错误。在数学证明中不需要说等价关系的显式形式,因此我省略了它。
在程序中,我将 hg 和 kg 表示为 H 和 K。H 相交 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).
目前,它没有通过反身性测试(第一次测试)。你能告诉我这个程序有什么问题吗?如果您需要更多说明,请随时询问。