%two level L-stratification
%one stable model
%passes finite domain check
%returns stable model in finite time

methanole(a).
alcohol(b).


hasAtom(X,f1(X)):- methanol(X).
hasAtom(X,f2(X)):- methanol(X).
hasAtom(X,f3(X)):- methanol(X).
hasAtom(X,f4(X)):- methanol(X).
hasAtom(X,f5(X)):- methanol(X).
hasAtom(X,f6(X)):- methanol(X).
c(f1(X)):- methanol(X).
o(f2(X)):- methanol(X).
h(f3(X)):- methanol(X).
h(f4(X)):- methanol(X).
h(f5(X)):- methanol(X).
h(f6(X)):- methanol(X).
singleBond(f1(X),f2(X)):- methanol(X).
singleBond(f2(X),f3(X)):- methanol(X).
singleBond(f1(X),f4(X)):- methanol(X).
singleBond(f1(X),f5(X)):- methanol(X).
singleBond(f1(X),f6(X)):- methanol(X).

alcohol(X) :- hasAtom(X,Y1), hasAtom(X,Y2), o(Y1), h(Y2), singleBond(Y1,Y2), not g(Y1), not g(Y2).
rec(X) :- hasAtom(X,Y1), hasAtom(X,Y2), o(Y1), h(Y2), singleBond(Y1,Y2), not g(Y1), not g(Y2).

hasAtom(X,f7(X)):- alcohol(X), not rec(X).
hasAtom(X,f8(X)):- alcohol(X), not rec(X).
o(f7(X)):- alcohol(X), not rec(X).
h(f8(X)):- alcohol(X), not rec(X).
singleBond(f7(X),f8(X)):- alcohol(X), not rec(X).
g(f7(X)):- alcohol(X), not rec(X).
g(f8(X)):- alcohol(X), not rec(X).

oxygenMolEntity(X) :- hasAtom(X,Y1), o(Y1).
