:- op(500,xfx,<=<). :- op(500,xfx,<-<). subset([], []). subset(S, [B|Y]) :- subset(S, Y). subset([B|S], [B|Y]) :- subset(S, Y). member(X, [X|_]). member(X, [_|Y]) :- member(X, Y). not(P) :- P, !, fail. not(P). open(S) :- member(A,S), member(B,S), not(A=B), forces([A,B], C), not(member(C,S)). closed(S) :- not(open(S)). forces([A,B],C) :- meet(A,B,C); join(A,B,C). (A <=< B) :- A <-< B. (A <=< B) :- A <-< C, C <=< B. 0<-<1. 0<-<2. 0<-<4. 1<-<3. 2<-<3. 1<-<5. 4<-<5. 2<-<6. 4<-<6. 3<-<7. 5<-<7. 6<-<7. keyify(A,L-A) :- length(A,L). keyify_list([],[]). keyify_list([A|X],[B|Y]) :- keyify(A,B),keyify_list(X,Y). biglist( [[],[0],[0,1],[0,1,2,3],[0,1,2,3,4,5,6,7],[0,1,2,3,5,7],[0,1,2,3,6,7],[0,1,2,3,7],[0,1,3],[0,1,3,4,5,7],[0,1,3,5,7],[0,1,3,7],[0,1,4,5],[0,1,4,5,6,7],[0,1,4,5,7],[0,1,5],[0,1,5,7],[0,1,6],[0,1,6,7],[0,1,7],[0,2],[0,2,3],[0,2,3,4,6,7],[0,2,3,6,7],[0,2,3,7],[0,2,4,5,6,7],[0,2,4,6],[0,2,4,6,7],[0,2,5],[0,2,5,7],[0,2,6],[0,2,6,7],[0,2,7],[0,3],[0,3,4],[0,3,4,7],[0,3,7],[0,4],[0,4,5],[0,4,5,6,7],[0,4,5,7],[0,4,6],[0,4,6,7],[0,4,7],[0,5],[0,5,7],[0,6],[0,6,7],[0,7],[1],[1,3],[1,3,5,7],[1,3,7],[1,5],[1,5,7],[1,6],[1,6,7],[1,7],[2],[2,3],[2,3,6,7],[2,3,7],[2,5],[2,5,7],[2,6],[2,6,7],[2,7],[3],[3,4],[3,4,7],[3,7],[4],[4,5],[4,5,6,7],[4,5,7],[4,6],[4,6,7],[4,7],[5],[5,7],[6],[6,7],[7]] ).