このディレクトリの索引
#  prologでの冪集合が難しい。でも、たぶんできると思う。

冪集合(_集合,_冪集合) :-
        length(_集合,Len),
        findall(L,(
                    for(1,N,Len),
                    組合せ(_集合,N,L)),
               LL),
        _冪集合 = [[]|LL],!.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

組合せ(X,1,[A]) :-
        member(A,X).
組合せ([A|Y],N,[A|X]) :-
        N > 1,
        M is N - 1,
        組合せ(Y,M,X).
組合せ([_|Y],N,A) :-
        N > 1,
        組合せ(Y,N,A).

for(S,N,E) :-
        E >= S,
        for_2(S,N,E).

for(S,N,E) :-
        E < S,
        for_1(S,N,E).

for_1(S,_,E) :- S < E,!,fail.
for_1(N,N,E).
for_1(S,N,E) :- S1 is S - 1,for_1(S1,N,E).

for_2(S,_,E) :- S > E,!,fail.
for_2(N,N,E).
for_2(S,N,E) :- S1 is S + 1,for_2(S1,N,E).