Я занимаюсь разработкой теории групповых испытаний. Прямо сейчас мне интересно доказать, что если H и K являются подгруппами, то H пересекает K подгруппу. Я основываю свое доказательство на построении отношения (== H), такого, что
h (== H) g тогда и только тогда, когда hg ^ {- 1} принадлежит H. Доказательство того, что это отношение эквивалентности (рефлексивное (симметрия c, транзитивная) эквивалентна доказательству того, что H является подгруппой.
Я сделал этот следующий код, и когда я пытаюсь доказать, что H пересекается, K является подгруппой, я получаю ошибку. Я новичок в Прологе, так что, возможно, я что-то неправильно понял. В математическом доказательстве не требуется говорить явную форму отношения эквивалентности, поэтому я его опускаю.
В программе я обозначаю 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).
На данный момент он не проходит тест на рефлексивность (первый тест). Не могли бы вы показать мне, что не так с этой программой? Если вам нужны дополнительные разъяснения, не стесняйтесь спрашивать.