:- 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]]
).