s:-J=['% strategic manipulation and majority vote by prolog' ,'%------------------------------------------------------' ,'% sproof_f.pl (12-3 Jan, 30 Mar-7(c),17-28(e), 29-30 Apr, ' ,'% 1,8-10,14(f)-31 May, 1-2,10-11, 15,17-20,23,29,30 Jun, ' ,'% 29 Jul 2006)' ], forall(member(X,J),(nl,write(X))). % references: /* [Arrow 63] Arrow, K. Social Choice and Individual Values, Yale University Press, 1963. [Gibbard 73] Gibbard, A. Manipulation of voting schemes: A general result, Econometrica, Vol. 41: 587-602, 1973. [Muller 77] Muller, E. and Satterthwaite, M. A. The equivalence of strong positive association and strategy-proofness, Journal of Economic Theory, Vol. 14: 412-418, 1977. [Reny 01] Reny, P. J. Arrow's theorem and the Gibbard-Satterthwaite theorem: A unified approach, Economic Letters, Vol. 70: 99-105, 2001. [Satterthwaite 75] Satterthwaite, M. A. Strategy-proofness and Arrow's conditions: Existence and correspondence theorems for voting procedures and social welfare functions, Journal of Economic Theory, Vol. 10: 187-217, 1975. [Sen 82] Sen, A., Choice, Welfare and Measurement, The MIT Press, 1982. [Sen 69] Sen, A. and Pattanaik, P. K. Necessary and sufficient condition for rational choice under majority decision, Journal of Economic Theory, Vol. 1: 178-202, 1969. [Sen 66] Sen, A. A possibility theorem of majority decisions, Econometrica, Vol. 34(2): 490-506, 1966. [Ward 65] Ward, B. Majority voting and alternative forms of public enterprise, In J. Margolis (ed.), The Public Economy of Urban Communities. Johns Hopkins Press, Chapter 6, pp. 112-126, 1965. [Inada 69] Inada, K., On the simple majority decision rule, Econometrica, Vol. 36: 490-506, 1969. [Kalai 77] Kalai, E. and Muller, E. Characterization of domains admitting nondictatorial social welfare functions and nonmanipulable voting procedures, Journal of Economic Theory, Vol. 16, pp.457-469 (1977). [Fishburn 97] Fishburn, P. Acyclic sets of linear orders, Social Choice and Welfare 14:113-124. [Craven 96] Craven, J. Majority-consistent preference orderings, Social Choice and Welfare 13:259-267. [Abello 85] Abello, J. Intrinsic limitations on the majority rule, an algorithmic approach, SIAM J Alg Discrete Meth 6:133-144. */ % Gibbard-Satterthwaite theorem %------------------------------------------------- % SP (strategy-proofness) % MM (Maskin monotonicity) % PE (Parato efficiency) % urd (unrestricted domain) % cs (citizen's sovereginty) % i=1, ..., n (agents) N=[1,..,n]. % X=[a, b, ... ] (alternatives) #X=m. % Dict(i): the fact that agent i is a dictator. % Theorem(GS). Assume n>=2, m>=3, urd, cs. Then SP->Dict(i). % Lemma. SP --> MM (-->SP ). % Lemma. SP -->PE. % unrestricted/admissible domain of 2- or N-person and 3-alternative. %------------------------------------------------- % modified: 30 Apr 2006. N-person % modified: 22 May 2006. added setup_model/2. :- dynamic set_of_alternatives/1. :- dynamic set_of_agents/1. :- dynamic mode_of_analysis/2. setup_model(alt:A,soc:I):- abolish(set_of_alternatives/1), abolish(set_of_agents/1), abolish(mode_of_analysis/2), length(A,M), length(I,N), assert(set_of_alternatives(A)), assert(set_of_agents(I)), assert(mode_of_analysis(M-alternatives,N-person)), make_all_possible_rankings_0. % lastely modified: 10, 23 Jun 2006. :- dynamic all_possible_rankings_0/2. make_all_possible_rankings_0:- abolish( all_possible_rankings_0/2), findall( R, possible_ranking_0(R,_), TR), length( TR, N), assert( all_possible_rankings_0(TR,N)). all_possible_rankings_0(TR):- \+ clause( all_possible_rankings_0(TR,_), _), make_all_possible_rankings_0, fail. all_possible_rankings_0(TR):- clause( all_possible_rankings_0(TR,_), _), !. %set_of_alternatives([a,b,c]). % set_of_alternatives([a,b,c,d]). %set_of_alternatives([a,b,c,d,e]). %set_of_agents([1,2]). % set_of_agents([1,2,3]). % code for N>=3: a preparation set_of_agents_1(I):- mode_of_analysis(_,N-person), length( I, N), set_of_agents_1(I,N,N). set_of_agents_1([],0,_). set_of_agents_1([K|I],M,N):- set_of_agents_1(I,J,N), M is J + 1, K is N - M + 1. % mode_of_analysis/2. mode_of_analysis(M-alternatives,N-person):- set_of_alternatives(A), set_of_agents(Is), length(A,M), length(Is,N). alternative(X):- set_of_alternatives(A), member(X,A). agent(J):- set_of_agents(N), member(J,N). distinct_ordered_triple( (X,Y,Z)):- distinct_ordered_pair((X,Y)), alternative(Z), \+ member(Z, [X,Y]). triple_of_alternative( (X,Y,Z)):- alternative(X), alternative(Y), X@ 3, % M > 8, possible_ranking_0_for_M_alternatives( M, r(J), R). possible_ranking_0_for_3_alternatives( r(K), [S,T,U]):- set_of_alternatives([X,Y,Z|_]), relative_ranking_on_triple_0((X,Y,Z),(S,T,U),K). % /* possible_ranking_0_for_4_alternatives( r((J,K)), R):- possible_ranking_0_for_3_alternatives( r(J), O), length(R,4), insert_nth_coordinate_and_shift(M,d,O,R), K is 4 - M. possible_ranking_0_for_5_alternatives( r((J,K,L)), R):- possible_ranking_0_for_4_alternatives( r((J,K)), O), length(R,5), insert_nth_coordinate_and_shift(M,e,O,R), L is 5 - M. possible_ranking_0_for_6_alternatives( r((J,K,L,L1)), R):- possible_ranking_0_for_5_alternatives( r((J,K,L)), O), length(R,6), insert_nth_coordinate_and_shift(M,f,O,R), L1 is 6 - M. possible_ranking_0_for_7_alternatives( r((J,K,L,L1,L2)), R):- possible_ranking_0_for_6_alternatives( r((J,K,L,L1)), O), length(R,7), insert_nth_coordinate_and_shift(M,g,O,R), L2 is 7 - M. possible_ranking_0_for_8_alternatives( r((J,K,L,L1,L2,L3)), R):- possible_ranking_0_for_7_alternatives( r((J,K,L,L1,L2)), O), length(R,8), insert_nth_coordinate_and_shift(M,h,O,R), L3 is 8 - M. possible_ranking_0_for_M_alternatives(8, r((J,K,L)), R):- possible_ranking_0_for_8_alternatives( r((J,K,L)), R). % */ possible_ranking_0_for_M_alternatives( M, _, _):- \+ var(M), set_of_alternatives(A), length(A,M), % M > 3, % M > 8, % Base= [a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z], % append(A,_,Base), gen_possible_ranking_0_for_M_alt_if_not_exist( M, A), fail. possible_ranking_0_for_M_alternatives( M, SymR, R):- \+ var(M), mode_of_analysis( M-alternatives, _), % M > 3, % M > 8, clause( possible_ranking_0_for_M_alt( M, SymR, R), true). % possible_ranking_0_for_M_alt(3, SR, R):- % possible_ranking_0_for_3_alternatives( SR, R). % /* possible_ranking_0_for_M_alt(8, SR, R):- possible_ranking_0_for_8_alternatives( SR, R). % */ gen_possible_ranking_0_for_M_alt_if_not_exist( M,_):- \+ \+ clause( possible_ranking_0_for_M_alt( M, _, _), _). gen_possible_ranking_0_for_M_alt_if_not_exist( M,A):- \+ clause( possible_ranking_0_for_M_alt( M, _, _), _), \+ var(M), M1 is M -1, last(Z,A), subtract( A, [Z], B), gen_possible_ranking_0_for_M_alt_if_not_exist( M1, B), forall( ( possible_ranking_0_for_M_alt(M1, r(S), O), length(R,M), insert_nth_coordinate_and_shift(Pos,Z,O,R), L is M - Pos ), assert( possible_ranking_0_for_M_alt(M,r((S,L)),R)) ). /* ?- setup_K_alt_domain(7,L). L = [a, b, c, d, e, f, g] Yes ?- possible_ranking_0( r(J), R). J = (1, 4, 5, 6), 7 R = [g, f, e, d, a, b, c] Yes ?- */ replace_nth_coordinate_and_shift(0,_,[],[],no). replace_nth_coordinate_and_shift(K,X,[R|Q],[R|S],B):- replace_nth_coordinate_and_shift(K0,X,Q,S,B), (B=no->K=K0; K is K0 + 1). replace_nth_coordinate_and_shift(K,X,[X|Q],[_|S],yes):- replace_nth_coordinate_and_shift(K0,X,Q,S,no), K is K0 + 1. insert_nth_coordinate_and_shift(K,X,List1,List2):- append(A,B,List1), length(A,K), append(A,[X],C), append(C,B,List2). possible_ranking( R, O):- possible_ranking_0( R, O), is_admissible( R). :- dynamic admissible_rankings/1. admissible_rankings([r(1),r(2),r(3),r(4),r(5),r(6)]):- set_of_alternatives([_,_,_]). admissible_rankings(A):- set_of_alternatives([_,_,_,_]), findall(r((J,K)), ( member(J,[1,2,3,4,5,6]), member(K,[0,1,2,3]) ), A). admissible_rankings(A):- set_of_alternatives([_,_,_,_,_]), findall(r((J,K,L)), ( member(J,[1,2,3,4,5,6]), member(K,[0,1,2,3]), member(L,[0,1,2,3,4]) ), A). is_admissible( R):- admissible_rankings(L), member( R, L). prefer_x_to_y(A,B, R):- possible_ranking( R, O), append( _,[A|C],O), member(B,C). prefer_x_to_y_0(A,B, R):- possible_ranking_0( R, O), append( _,[A|C],O), member(B,C). possible_ranking_of( J, R, O):- agent(J), possible_ranking(R, O). % the social choice function (SCF) %------------------------------------------------- % modified: 30 Apr 2006. 3-person % modified: 19 May 2006. n-person % the domain profile_of_rankings( [R1,R2]):- set_of_agents([_,_]), %2-person, possible_ranking_of( 1, R1, _), possible_ranking_of( 2, R2, _). profile_of_rankings( [R1,R2,R3]):- set_of_agents([_,_,_]), %3-person, possible_ranking_of( 1, R1, _), possible_ranking_of( 2, R2, _), possible_ranking_of( 3, R3, _). profile_of_rankings( Rs):- set_of_agents(Is), length(Is,N), %n-person, N > 3, profile_of_rankings_0( Is,Rs). profile_of_rankings_0( [],[]). profile_of_rankings_0( [I|Is],[R|Rs]):- profile_of_rankings_0( Is,Rs), possible_ranking_of( I, R, _). profile_of_rankings_in_tuple( Rn):- profile_of_rankings( LR), tuple_to_list(Rn,LR). % added: 19 May 2006. tuple_to_list/3 with a specified list length. tuple_to_list(T,N,L):- tuple_to_list(T,L), length(L,N). tuple_to_list(A,[A]). tuple_to_list((A,T),[A|L]):- tuple_to_list(T,L). all_profile_of_rankings(L):- findall(Rn, profile_of_rankings_in_tuple( Rn), L). % a generic constructor auto_scf( FL,Property):- all_profile_of_rankings( L), auto_scf( FL, L, Property). % initial stage of recursions auto_scf( [],[], _). % scf without constraints auto_scf( [R-> X | H], [R|Q], free):- auto_scf( H,Q,free), alternative( X). % dictatorial scf auto_scf( [R-> X | H], [R|Q], dictatorial(J)):- auto_scf( H,Q,dictatorial(J)), alternative(X), is_dictatorial_scf( [R->X|H], J). % Pareto efficient scf auto_scf( [R-> X | H], [R|Q], pareto):- auto_scf( H,Q,pareto), alternative(X), is_Pareto_efficient_at_profile( R->X). % strategy-proof scf auto_scf( [R-> X | H], [R|Q], sp):- auto_scf( H,Q,sp), alternative(X), \+ is_manipulable_at_profile( H, R->X,_,_), \+ ( member(V, H), is_manipulable_at_profile( [R->X|H], V,R->X,_) ). % monotone scf auto_scf( [R-> X | H], [R|Q], monotonic):- auto_scf( H,Q,monotonic), alternative(X), \+ is_non_monotonic_at_profile( H, R->X, _), \+ ( member(V, H), is_non_monotonic_at_profile( [R->X|H],V,R->X) ). % explaining strategy-proof scf auto_scf( [R-> X | H], [R|Q], sp1):- auto_scf( H,Q,sp1), alternative(X), counter_0(K), \+ ( is_manipulable_at_profile( H, R->X,P,C) ,nl,write((K,'manipulable by',C,'into',P)) ), \+ ( member(V, H), is_manipulable_at_profile( [R->X|H], V,R->X,C) ,nl,write((K,'manipulable by ',C,'from',V)) ), R=(r(A),r(B)), update_count(K1),nl,write((K1,A,B,X)). /* ?- init_count. Yes ?- init_count,tell_goal('sp.txt',forall,(auto_scf( FL,sp1), (citizens_sovereignty(FL)->(nl,write(cs));(nl,write(ncs))), show_scf_hr_1(FL))), current_stream('sp.txt',write,B),close(B). */ % explaining strategy-proof scf auto_scf( [R-> X | H], [R|Q], sp(Z)):- auto_scf( H,Q,sp(Y)), findall(X,( alternative(X), \+ ( is_manipulable_at_profile( H, R->X,_,_) ), \+ ( member(V, H), is_manipulable_at_profile( [R->X|H], V,R->X,_) )), Z), member(X,Z),(var(Y)->Y=[a,b,c];true), R=(r(A),r(B)),list_concat(Z,W),list_concat(Y,W1), update_count(K1),nl,write((K1,A,B,X,W,W1)). % scf of simple majority (added: 21 Apr 2006) auto_scf( [R-> X | H], [R|Q], majority):- auto_scf( H,Q,majority), is_simple_majority_decision( R->W), member(X,W). auto_scf( [R-> W | H], [R|Q], majority_set):- auto_scf( H,Q,majority_set), is_simple_majority_decision( R->W). % decision rule for simple majority %------------------------------------------------- % added: 21-4,30 Apr 2006. % modified: 19 May 2006. n-person. % modified: 29 Jun 2006. SDF rule and utilizing mode parameters. :- dynamic mode_of_simple_majority/2. mode_of_simple_majority(condorcet, on). mode_of_simple_majority(w-condorcet, off). mode_of_simple_majority(s-ordering, off). mode_of_simple_majority(choice-set, off). set_mode_of_simple_majority(A->B):- mode_of_simple_majority(A, on), mode_of_simple_majority(B, off), retract( mode_of_simple_majority(A, on) ), retract( mode_of_simple_majority(B, off) ), assert( mode_of_simple_majority(B, on) ), assert( mode_of_simple_majority(A, off) ). is_simple_majority_decision( Rn->WS):- collect_social_weak_preference_relations(Rn,L), findall(W, is_simple_majority_choice_on_mode( W,L), WS0), sort(WS0,WS). % for md-SWF is_simple_majority_choice_on_mode( W,L):- mode_of_simple_majority(condorcet,on), is_Condorcet_winner(W,L). is_simple_majority_choice_on_mode( W,L):- mode_of_simple_majority(w-condorcet,on), is_weak_Condorcet_winner(W,L). % for md-SWF is_simple_majority_choice_on_mode( W,L):- mode_of_simple_majority(s-ordering,on), is_a_social_ordering(_,[W|_],L). % for md-SDF is_simple_majority_choice_on_mode( W,L):- mode_of_simple_majority(choice-set,on), is_a_rational_social_choice(_,[W|_],L). % collect_social_weak_preference_relations(Rn,L):- findall((X,Y), ( distinct_ordered_pair((X,Y)), is_simple_majority_decision( Rn,(X,Y)) ), L). % majority-decision-SWF % revised: 29 Jul 2006 is_Condorcet_winner(W,L):- alternative(W), \+ ( distinct_ordered_pair((X,W)), \+ member((W,X),L) ). is_strict_Condorcet_winner(W,L):- alternative(W), \+ \+ member((W,_),L), \+ member((_,W),L). is_strict_Condorcet_looser(D,L):- alternative(D), \+ \+ member((_,D),L), \+ member((D,_),L). is_weak_Condorcet_winner(W,L):- is_strict_Condorcet_winner(W,L). is_weak_Condorcet_winner(W,L):- \+ is_strict_Condorcet_winner(_,L), alternative(W), \+ is_strict_Condorcet_looser(W,L). is_a_social_ordering(R,O,L):- possible_ranking_0(R, O), \+ ( prefer_x_to_y_0(X,Y,R), \+ member((X,Y),L) ), \+ ( member((X,Y),L), \+ prefer_x_to_y_0(X,Y,R) ). is_a_rational_social_choice(_,[W],L):- \+ is_not_quasi_transitive(_,L), alternative(W), forall( member((Y,W),L), ( member((W,Y),L) ) ). is_not_quasi_transitive((X,Y,Z),L):- member((X,Y),L), \+ member((Y,X),L), member((Y,Z),L), % Z\=X, \+ member((Z,Y),L), \+ member((X,Z),L),write('#q'). is_a_rational_social_choice_1(R,O,L):- possible_ranking_0(R, O), \+ ( prefer_x_to_y_0(X,Y,R), \+ member((X,Y),L) ). indifferent_pair_in_ballot((A,B),L):- member((A,B),L), member((B,A),L). is_simple_majority_decision( Rn,(X,Y)):- set_of_agents(Soc), length( Soc, N), is_simple_majority_decision( N-person,Rn,(X,Y)). is_simple_majority_decision( 2-person,(R1,R2),(X,Y)):- prefer_x_to_y( X, Y, R1), prefer_x_to_y( X, Y, R2). is_simple_majority_decision( 2-person,(R1,R2),(X,Y)):- prefer_x_to_y( X, Y, R1), prefer_x_to_y( Y, X, R2). is_simple_majority_decision( 2-person,(R1,R2),(Y,X)):- prefer_x_to_y( X, Y, R1), prefer_x_to_y( Y, X, R2). is_simple_majority_decision( 3-person,(R1,R2,R3),(X,Y)):- findall(1, ( member(R, [R1,R2,R3]), prefer_x_to_y( X, Y, R) ), Poll), length(Poll,Nxy), length([R1,R2,R3],N), N =< 2* Nxy. is_simple_majority_decision( N-person,Rn,(X,Y)):- set_of_agents(Is), length(Is,N), N >3, tuple_to_list(Rn,LR), findall(1, ( member(R, LR), prefer_x_to_y( X, Y, R) ), Poll), length(Poll,Nxy), N =< 2* Nxy. % rule of moderate (reasonable) decision %------------------------------------------------- is_moderate_decision((r(X),r(Y))->X):- set_of_agents([_,_]), %2-person, Taboo= [ (1,4,a), (1,5,c), (4,5,b), (2,3,b), (2,6,a), (3,6,c) ], \+ ( member((X,Y,Z),Taboo), ( member((r(X),r(Y))->Z,F) ; member((r(Y),r(X))->Z,F) ) ). is_moderate_decision((r(_),r(_),_)->_):- \+ set_of_agents([_,_]), nl, write('under construction. please edit the program file by yourself.'), read(y). /* ?- auto_restricted_domain([A,B]), auto_scf(M,majority),\+ member(_->intransitive,M), nl, write(domin:[A,B]),show_scf(M),nl,fail. domin:[r(1), r(2)] col=r(#) [1, 2] --------------------------- row=r(1) [a, a] row=r(2) [a, a] domin:[r(3), r(4)] col=r(#) [3, 4] --------------------------- row=r(3) [b, b] row=r(4) [b, b] domin:[r(5), r(6)] col=r(#) [5, 6] --------------------------- row=r(5) [c, c] row=r(6) [c, c] No ?- ?- profile_of_rankings([r(A),r(B),r(C)]), is_simple_majority_decision( (r(A),r(B),r(C))->L). A = 1 B = 1 C = 1 L = [a] Yes ?- profile_of_rankings([r(A),r(B),r(C)]),(A,B,C)=(6,6,6), is_simple_majority_decision( (r(A),r(B),r(C))->L). A = 6 B = 6 C = 6 L = [c] Yes ?- ?- auto_scf( F,majority_set),member(A->[],F),nl,write(A),fail. r(1), r(4), r(5) r(1), r(5), r(4) r(2), r(3), r(6) r(2), r(6), r(3) r(3), r(2), r(6) r(3), r(6), r(2) r(4), r(1), r(5) r(4), r(5), r(1) r(5), r(1), r(4) r(5), r(4), r(1) r(6), r(2), r(3) r(6), r(3), r(2) No ?- % n=3, the majority rule using is_a_social_ordering. ?- auto_restricted_domain(H), \+ \+ (profile_of_rankings([r(A),r(B),r(C)]), is_simple_majority_decision( (r(A),r(B),r(C))->[])),nl,write(H),fail. [r(1), r(2), r(3), r(4), r(5), r(6)] [r(1), r(2), r(3), r(4), r(5)] [r(1), r(2), r(3), r(4), r(6)] [r(1), r(2), r(3), r(5), r(6)] [r(1), r(2), r(3), r(6)] [r(1), r(2), r(4), r(5), r(6)] [r(1), r(2), r(4), r(5)] [r(1), r(3), r(4), r(5), r(6)] [r(1), r(3), r(4), r(5)] [r(1), r(4), r(5), r(6)] [r(1), r(4), r(5)] [r(2), r(3), r(4), r(5), r(6)] [r(2), r(3), r(4), r(6)] [r(2), r(3), r(5), r(6)] [r(2), r(3), r(6)] No ?- auto_restricted_domain(H), \+ \+ (profile_of_rankings([r(A),r(B),r(C)]), is_simple_majority_decision( (r(A),r(B),r(C))->[_,_,_])),nl,write(H),fail. No ?- % n=3, the majority rule using is_weak_Condorcet_winner. ?- auto_restricted_domain(H), \+ \+ (profile_of_rankings([r(A),r(B),r(C)]), is_simple_majority_decision( (r(A),r(B),r(C))->[])),nl,write(H),fail. No ?- auto_restricted_domain(H), \+ \+ (profile_of_rankings([r(A),r(B),r(C)]), is_simple_majority_decision( (r(A),r(B),r(C))->[_,_,_])),nl,write(H),fail. [r(1), r(2), r(3), r(4), r(5), r(6)] [r(1), r(2), r(3), r(4), r(5)] [r(1), r(2), r(3), r(4), r(6)] [r(1), r(2), r(3), r(5), r(6)] [r(1), r(2), r(3), r(6)] [r(1), r(2), r(4), r(5), r(6)] [r(1), r(2), r(4), r(5)] [r(1), r(3), r(4), r(5), r(6)] [r(1), r(3), r(4), r(5)] [r(1), r(4), r(5), r(6)] [r(1), r(4), r(5)] [r(2), r(3), r(4), r(5), r(6)] [r(2), r(3), r(4), r(6)] [r(2), r(3), r(5), r(6)] [r(2), r(3), r(6)] No ?- */ % no taboo alternative %------------------------------------------------- citizens_sovereignty(Scf):- forall( alternative(A), member( _->A, Scf) ). % Pareto principle %------------------------------------------------- % modified: 30 Apr, 19 May 2006. n-person is_Pareto_efficient_at_profile( (R1, R2)->Y):- set_of_agents([_,_]), \+ ( prefer_x_to_y( X, Y, R1), prefer_x_to_y( X, Y, R2) ). is_Pareto_efficient_at_profile( (R1,R2,R3)->Y):- set_of_agents([_,_,_]), \+ ( alternative(X), forall( member(R,[R1,R2,R3]), prefer_x_to_y( X, Y, R) ) ). is_Pareto_efficient_at_profile( Rn->Y):- set_of_agents(Is), length(Is,N), N >3, tuple_to_list(Rn,LR), \+ ( alternative(X), forall( member(R,LR), prefer_x_to_y( X, Y, R) ) ). is_Pareto_efficient_scf( Scf):- forall( member( V, Scf), is_Pareto_efficient_at_profile( V) ). % dictatorship %------------------------------------------------- is_dictatorial_scf( Scf,J):- is_ranking_of(J,L,R), forall( member(L->X, Scf), \+ prefer_x_to_y( _,X, R) ). is_non_dictatorial_scf( Scf):- \+ is_dictatorial_scf( Scf, _). /* is_non_dictatorial_scf( Scf):- agent(J), is_dictatorial_scf( Scf,J), agent(J1), J1 \= J, is_dictatorial_scf( Scf,J1). */ is_ranking_of(1,(R,_),R):- set_of_agents([_,_]). is_ranking_of(2,(_,R),R):- set_of_agents([_,_]). is_ranking_of(1,(R,_,_),R):- set_of_agents([_,_,_]). is_ranking_of(2,(_,R,_),R):- set_of_agents([_,_,_]). is_ranking_of(3,(_,_,R),R):- set_of_agents([_,_,_]). % manipulability %------------------------------------------------- /* % n=2. is_manipulable_at_profile( Scf,(R,R2)->X,(Q,R2)->Y,1):- set_of_agents([_,_]), member( (Q,R2)->Y, Scf), prefer_x_to_y( Y, X, R). is_manipulable_at_profile( Scf,(R1,R)->X,(R1,Q)->Y,2):- set_of_agents([_,_]), member( (R1,Q)->Y, Scf), prefer_x_to_y( Y, X, R). */ % n>= 2. is_manipulable_at_profile( Scf,L->X,H->Y,J):- set_of_agents(N), member( H->Y, Scf), same_profile_pair_except_for(J,N,(L,H),(R,_)), prefer_x_to_y( Y, X, R). same_profile_pair_except_for(J,N,(L,H),(R,Q)):- member(J,N), sppxf(J,N,(L,H),(R,Q)). sppxf(J,[J],(P,Q),(P,Q)). sppxf(J,[K],((P),(P)),_):- J\=K. sppxf(J,[J|N],((P,L),(Q,H)),(P,Q)):- sppxf(J,N,(L,H),(P,Q)). sppxf(J,[K|N],((P,L),(P,H)),D):- J\=K, sppxf(J,N,(L,H),D). is_strategy_proof_scf( Scf):- is_non_manipulable_scf( Scf). is_non_manipulable_scf( Scf):- forall( member( V, Scf), \+ is_manipulable_at_profile( Scf, V,_,_) ). /* ?- auto_scf( F,pareto),citizens_sovereignty(F),show_scf_hr_1(F), ((member(U,F),is_manipulable_at_profile(F,U,_,J))->A=m(J);A='sp'). scf: aaaaaaaaaaaaaabbabaabbbbaaabccaabbcc F = [ (r(1), r(1)->a), (r(1), r(2)->a), (r(1), r(3)->a), (r(1), r(4)->a), (r(1), r(5)->a), (r(1), r(6)->a), (r(...), r(...)->a), (..., ... ->a), (... ->...)|...] U = r(3), r(5)->a J = 1 A = m(1) ; scf: aabaaaaaaaaaaabbabaabbbbaaabccaabbcc F = [ (r(1), r(1)->a), (r(1), r(2)->a), (r(1), r(3)->b), (r(1), r(4)->a), (r(1), r(5)->a), (r(1), r(6)->a), (r(...), r(...)->a), (..., ... ->a), (... ->...)|...] U = r(1), r(3)->b J = 1 A = m(1) Yes ?- % n=3 (1 May 2006) ?- auto_scf( F,sp),citizens_sovereignty(F),show_scf(F), nl,(is_dictatorial_scf(F,J)->write(d(J));true), fail. col=r(#) [1, 2, 3, 4, 5, 6] --------------------------- row=r(1) [a, a, b, b, c, c, a, a, b, b, c, c, a, a, b, b, c, c, a, a, b, b, c, c, a, a, b, b, c, c, a, a, b, b, c, c] row=r(2) [a, a, b, b, c, c, a, a, b, b, c, c, a, a, b, b, c, c, a, a, b, b, c, c, a, a, b, b, c, c, a, a, b, b, c, c] row=r(3) [a, a, b, b, c, c, a, a, b, b, c, c, a, a, b, b, c, c, a, a, b, b, c, c, a, a, b, b, c, c, a, a, b, b, c, c] row=r(4) [a, a, b, b, c, c, a, a, b, b, c, c, a, a, b, b, c, c, a, a, b, b, c, c, a, a, b, b, c, c, a, a, b, b, c, c] row=r(5) [a, a, b, b, c, c, a, a, b, b, c, c, a, a, b, b, c, c, a, a, b, b, c, c, a, a, b, b, c, c, a, a, b, b, c, c] row=r(6) [a, a, b, b, c, c, a, a, b, b, c, c, a, a, b, b, c, c, a, a, b, b, c, c, a, a, b, b, c, c, a, a, b, b, c, c] d(3) col=r(#) [1, 2, 3, 4, 5, 6] --------------------------- row=r(1) [a, a, a, a, a, a, a, a, a, a, a, a, b, b, b, b, b, b, b, b, b, b, b, b, c, c, c, c, c, c, c, c, c, c, c, c] row=r(2) [a, a, a, a, a, a, a, a, a, a, a, a, b, b, b, b, b, b, b, b, b, b, b, b, c, c, c, c, c, c, c, c, c, c, c, c] row=r(3) [a, a, a, a, a, a, a, a, a, a, a, a, b, b, b, b, b, b, b, b, b, b, b, b, c, c, c, c, c, c, c, c, c, c, c, c] row=r(4) [a, a, a, a, a, a, a, a, a, a, a, a, b, b, b, b, b, b, b, b, b, b, b, b, c, c, c, c, c, c, c, c, c, c, c, c] row=r(5) [a, a, a, a, a, a, a, a, a, a, a, a, b, b, b, b, b, b, b, b, b, b, b, b, c, c, c, c, c, c, c, c, c, c, c, c] row=r(6) [a, a, a, a, a, a, a, a, a, a, a, a, b, b, b, b, b, b, b, b, b, b, b, b, c, c, c, c, c, c, c, c, c, c, c, c] d(2) col=r(#) [1, 2, 3, 4, 5, 6] --------------------------- row=r(1) [a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a] row=r(2) [a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a] row=r(3) [b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b] row=r(4) [b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b] row=r(5) [c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c] row=r(6) [c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c] d(1) No ?- */ % (Maskin) monotonicity %------------------------------------------------- preference_reversal( (R1,R2)->X, (Q1,Q2), (J,W)):- is_ranking_of(J,(R1,R2),R), is_ranking_of(J,(Q1,Q2),Q), prefer_x_to_y( X, W, R), prefer_x_to_y( W, X, Q). is_non_monotonic_at_profile( Scf, R->X, Q->Y):- member( Q->Y, Scf), Y \= X, \+ preference_reversal( R->X, Q, _). is_monotonic_at_profile( Scf, R->X):- \+ is_non_monotonic_at_profile( Scf, R->X, _). is_monotonic_scf( Scf):- forall( member( V, Scf), is_monotonic_at_profile( Scf, V) ). % displaying scf in tabular form %------------------------------------------------- show_scf(Scf):- nl, write('col=r(#) '), findall(K,possible_ranking(r(K),_),H), write(H), nl, length(I,27), forall(member(_,I),write('-')), forall( ( bagof(C, B^member((A,B)->C, Scf), L) ), ( nl, write(row=A), tab(1), write(L) ) ). /* ?- auto_scf( FL,free),show_scf(FL). col=r(#) [1, 2, 3, 4, 5, 6] --------------------------- row=r(1) [a, a, a, a, a, a] row=r(2) [a, a, a, a, a, a] row=r(3) [a, a, a, a, a, a] row=r(4) [a, a, a, a, a, a] row=r(5) [a, a, a, a, a, a] row=r(6) [a, a, a, a, a, a] FL = [ (r(1), r(1)->a), (r(1), r(2)->a), (r(1), r(3)->a), (r(1), r(4)->a), (r(1), r(5)->a), (r(1), r(6)->a), (r(...), r(...)->a), (..., ... ->a), (... ->...)|...] Yes ?- auto_scf( FL,dictatorial(J)), show_scf(FL),write(' dictator'=J),nl,fail. col=r(#) [1, 2, 3, 4, 5, 6] --------------------------- row=r(1) [a, a, a, a, a, a] row=r(2) [a, a, a, a, a, a] row=r(3) [b, b, b, b, b, b] row=r(4) [b, b, b, b, b, b] row=r(5) [c, c, c, c, c, c] row=r(6) [c, c, c, c, c, c] dictator=1 col=r(#) [1, 2, 3, 4, 5, 6] --------------------------- row=r(1) [a, a, b, b, c, c] row=r(2) [a, a, b, b, c, c] row=r(3) [a, a, b, b, c, c] row=r(4) [a, a, b, b, c, c] row=r(5) [a, a, b, b, c, c] row=r(6) [a, a, b, b, c, c] dictator=2 No ?- */ % displaying scf in lines %------------------------------------------------- show_scf_hr(Scf):- show_scf_label(1,Scf), show_scf_label(2,Scf), show_scf_hr_1(Scf). show_scf_label(1,Scf):- nl, write( 'i=1: '), forall( member((r(J),_)->_, Scf), write(J) ). show_scf_label(2,Scf):- nl, write( 'i=2: '), forall( member((_,r(K))->_, Scf), write(K) ). show_scf_hr_1(Scf):- nl, write( 'scf: '), forall( member(_->X, Scf), write(X) ). show_scf_hr_0(Scf):- nl, write( 'scf: '), forall( ( possible_ranking_0(R1,_), possible_ranking_0(R2,_) ), ( member((R1,R2)->X, Scf)-> write(X);write('-') ) ). show_scf_hr_0t(Scf):- nl, write( 'scf: '), show_scf_hr_0t_label, forall( ( possible_ranking_0(R1,_) ), ( nl,write(r1=R1), show_scf_hr_0t(R1,Scf) ) ). show_scf_hr_0t_label:- nl,tab(2),write('#r2: '), forall( ( possible_ranking_0(r(K),_), possible_ranking_0(_,_) ), ( write(K) ) ), nl,tab(2),write('#r3: '), forall( ( possible_ranking_0(_,_), possible_ranking_0(r(J),_) ), ( write(J) ) ). show_scf_hr_0t(R1,Scf):- forall( ( possible_ranking_0(R2,_), possible_ranking_0(R3,_) ), ( member((R1,R2,R3)->X, Scf)-> write(X);write('-') ) ). :- dynamic counter_0/1. counter_0(0). init_count:- abolish(counter_0/1), assert(counter_0(0)). update_count(K):- retract(counter_0(J)), K is J+1, assert(counter_0(K)). % list operation tool %-------------------------------------------------- list_concat([],''). list_concat([X|Y],S):- list_concat(Y,S0), concat( X,S0,S). % demo: a proof of Gibbard-Satterthwaite theorem %------------------------------------------------- /* ?- auto_scf( F,monotonic), citizens_sovereignty(F), show_scf(F),nl,fail. col=r(#) [1, 2, 3, 4, 5, 6] --------------------------- row=r(1) [a, a, b, b, c, c] row=r(2) [a, a, b, b, c, c] row=r(3) [a, a, b, b, c, c] row=r(4) [a, a, b, b, c, c] row=r(5) [a, a, b, b, c, c] row=r(6) [a, a, b, b, c, c] col=r(#) [1, 2, 3, 4, 5, 6] --------------------------- row=r(1) [a, a, a, a, a, a] row=r(2) [a, a, a, a, a, a] row=r(3) [b, b, b, b, b, b] row=r(4) [b, b, b, b, b, b] row=r(5) [c, c, c, c, c, c] row=r(6) [c, c, c, c, c, c] No ?- auto_scf( F,sp),\+ is_monotonic_scf(F). No ?- auto_scf( F,monotonic),member(U,F), is_manipulable_at_profile(F,U,V,J). No ?- auto_scf( F,monotonic), citizens_sovereignty(F), \+ is_Pareto_efficient_scf(F). No ?- auto_scf( FL,sp),is_dictatorial_scf(FL,J), nl,write([J]),fail. [2][1] No ?- */ % another representation of the proof %------------------------------------------------- /* ?- auto_scf( F,sp),show_scf_hr_1(F), (is_strategy_proof_scf(F)->A=sp;A='-'), (citizens_sovereignty(F)->B='cs';B='-'), (is_dictatorial_scf(F,D)->C=d(D);C='-'),tab(1),write([A,B,C]),fail. scf: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [sp, -, -] scf: aaaaaaaaaaaaaabbabaabbabaaaaaaaabbab [sp, -, -] scf: aabbabaabbabaabbabaabbabaabbabaabbab [sp, -, -] scf: aaaaaaaaaaaabbbbbbbbbbbbaaaaaabbbbbb [sp, -, -] scf: aabbabaabbabbbbbbbbbbbbbaabbabbbbbbb [sp, -, -] scf: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb [sp, -, -] scf: aabbccaabbccaabbccaabbccaabbccaabbcc [sp, cs, d(2)] scf: bbbbbbbcbbccbbbbbbbbbbbbbcbbccbcbbcc [sp, -, -] scf: bcbbccbcbbccbcbbccbcbbccbcbbccbcbbcc [sp, -, -] scf: aaaaaaaaaaaaaaaaaaaaacccaaacccaaaccc [sp, -, -] scf: aaacccaaacccaaacccaaacccaaacccaaaccc [sp, -, -] scf: aaaaaaaaaaaabbbbbbbbbbbbcccccccccccc [sp, cs, d(1)] scf: bbbbbbccccccbbbbbbbbbbbbcccccccccccc [sp, -, -] scf: bcbbccccccccbcbbccbcbbcccccccccccccc [sp, -, -] scf: aaaaaaaaaaaaaaaaaacccccccccccccccccc [sp, -, -] scf: aaacccaaacccaaaccccccccccccccccccccc [sp, -, -] scf: cccccccccccccccccccccccccccccccccccc [sp, -, -] No ?- ?- auto_scf( FL,dictatorial(J)),show_scf_hr(FL),nl,fail. i=1: 111111222222333333444444555555666666 i=2: 123456123456123456123456123456123456 scf: aaaaaaaaaaaabbbbbbbbbbbbcccccccccccc i=1: 111111222222333333444444555555666666 i=2: 123456123456123456123456123456123456 scf: aabbccaabbccaabbccaabbccaabbccaabbcc No ?- auto_scf(F,sp),citizens_sovereignty(F), show_scf_hr_1(F),nl,fail. scf: aabbccaabbccaabbccaabbccaabbccaabbcc scf: aaaaaaaaaaaabbbbbbbbbbbbcccccccccccc No ?- auto_scf( FL,sp),show_scf_hr_1(FL),fail. scf: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa scf: aaaaaaaaaaaaaabbabaabbabaaaaaaaabbab scf: aabbabaabbabaabbabaabbabaabbabaabbab scf: aaaaaaaaaaaabbbbbbbbbbbbaaaaaabbbbbb scf: aabbabaabbabbbbbbbbbbbbbaabbabbbbbbb scf: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb scf: aabbccaabbccaabbccaabbccaabbccaabbcc scf: bbbbbbbcbbccbbbbbbbbbbbbbcbbccbcbbcc scf: bcbbccbcbbccbcbbccbcbbccbcbbccbcbbcc scf: aaaaaaaaaaaaaaaaaaaaacccaaacccaaaccc scf: aaacccaaacccaaacccaaacccaaacccaaaccc scf: aaaaaaaaaaaabbbbbbbbbbbbcccccccccccc scf: bbbbbbccccccbbbbbbbbbbbbcccccccccccc scf: bcbbccccccccbcbbccbcbbcccccccccccccc scf: aaaaaaaaaaaaaaaaaacccccccccccccccccc scf: aaacccaaacccaaaccccccccccccccccccccc scf: cccccccccccccccccccccccccccccccccccc No ?- auto_scf( FL,sp),member(U,FL), is_manipulable_at_profile(FL,U,V,J). No ?- auto_scf( FL,monotonic),show_scf_hr_1(FL),fail. scf: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa scf: aaaaaaaaaaaaaabbabaabbabaaaaaaaabbab scf: aabbabaabbabaabbabaabbabaabbabaabbab scf: aaaaaaaaaaaabbbbbbbbbbbbaaaaaabbbbbb scf: aabbabaabbabbbbbbbbbbbbbaabbabbbbbbb scf: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb scf: aabbccaabbccaabbccaabbccaabbccaabbcc scf: bbbbbbbcbbccbbbbbbbbbbbbbcbbccbcbbcc scf: bcbbccbcbbccbcbbccbcbbccbcbbccbcbbcc scf: aaaaaaaaaaaaaaaaaaaaacccaaacccaaaccc scf: aaacccaaacccaaacccaaacccaaacccaaaccc scf: aaaaaaaaaaaabbbbbbbbbbbbcccccccccccc scf: bbbbbbccccccbbbbbbbbbbbbcccccccccccc scf: bcbbccccccccbcbbccbcbbcccccccccccccc scf: aaaaaaaaaaaaaaaaaacccccccccccccccccc scf: aaacccaaacccaaaccccccccccccccccccccc scf: cccccccccccccccccccccccccccccccccccc No ?- auto_scf( FL,monotonic), citizens_sovereignty(FL), show_scf_hr_1(FL),fail. scf: aabbccaabbccaabbccaabbccaabbccaabbcc scf: aaaaaaaaaaaabbbbbbbbbbbbcccccccccccc No ?- auto_scf( FL,monotonic),member(U,FL), is_manipulable_at_profile(FL,U,V,J). No ?- */ conditional_projection(_,[],[],[]). conditional_projection((F,C,R),[R|Q],[R|S],[1|B]):- conditional_projection((F,C,_),Q,S,B), G=.. [F|C], G. conditional_projection((F,C,R),[R|Q],[R|S],[0|B]):- conditional_projection((F,C,_),Q,S,B), G=.. [F|C], \+ G. %------------------------------------------------- % restricted domains %------------------------------------------------- % started: 1-4 Apr 2006 %closed under decisiveness implications distinct_ordered_pair((X,Y)):- alternative(X), alternative(Y), Y \= X. trivial_ordered_pair((X,Y)):- distinct_ordered_pair((X,Y)), \+ ( prefer_x_to_y(X,Y,_), prefer_x_to_y(Y,X,_) ). nontrivial_ordered_pair((X,Y)):- distinct_ordered_pair((X,Y)), \+ trivial_ordered_pair((X,Y)). list_projection([],[],[]). list_projection([R|Q],[R|S],[1|B]):-list_projection(Q,S,B). list_projection(Q,[_|S],[0|B]):-list_projection(Q,S,B). % the generating script. % modified: 26 May 2006 separated 'without commitment' version. auto_restricted_domain_without_commit(L):- % findall(S,possible_ranking_0(S,_),TR), all_possible_rankings_0(TR), list_projection(L,TR,_). auto_restricted_domain(L):- auto_restricted_domain_without_commit(L), abolish(admissible_rankings/1), assert(admissible_rankings(L)). % the Abello-Johnson's method %------------------------------------------------- % maximal consistent domain as chain of adjacent permutations % added: 15 May 2006 antagonistic_ordering_pair((X,Y)):- antagonistic_ordering_pair((X,Y),_). antagonistic_ordering_pair((X,Y),(O,P)):- possible_ranking_0( X, O), reverse(O, P), possible_ranking_0( Y, P). adjacent_ordering_pair((X,Y)):- adjacent_ordering_pair((X,Y),_,_). adjacent_ordering_pair((X,Y),(O,Q),(U,V)):- possible_ranking_0( X, O), append(A,[U,V|B],O), append(A,[V,U|B],Q), possible_ranking_0( Y, Q). math_factorial(0,0). math_factorial(1,1). math_factorial(N,U):- integer(N), N > 1, N1 is N -1, math_factorial(N1,U1), U is N * U1. auto_consistent_domain(L):- auto_chain_of_permutation_pairs( C), sort(C,L), abolish(admissible_rankings/1), assert(admissible_rankings(L)). auto_chain_of_permutation_pairs( L):- maximal_reduced_decomposition(L,_). maximal_reduced_decomposition(L,C):- mode_of_analysis(M-alternatives,_), math_factorial(M,U), length([_|I],U), append(L,_,I), antagonistic_ordering_pair((X,Y)), X @< Y, inversion_chain((X,Y),L,C). chain_of_permutation_pairs_between((X,X),[X]). chain_of_permutation_pairs_between((Z,Y),[Z|C]):- chain_of_permutation_pairs_between((X,Y),C), adjacent_ordering_pair((Z,X)), \+ member(Z,C). inversion_chain((X,X),[X],[]). inversion_chain((Z,Y),[Z|C],[(U,V)|W]):- inversion_chain((X,Y),C,W), % distinct_ordered_pair((U,V)), adjacent_ordering_pair((Z,X),_,(U,V)), \+ member(Z,C), \+ member((V,U),W), \+ member((U,V),W). /* ?- [sproof_f], setup_K_alt_domain(3,_). % sproof_f compiled 0.02 sec, 400 bytes Yes ?- setup_K_alt_domain(3,_). Yes ?- maximal_reduced_decomposition(L,U). L = [r(1), r(3), r(4), r(6)] U = [ (a, b), (a, c), (b, c)] ; L = [r(1), r(2), r(5), r(6)] U = [ (b, c), (a, c), (a, b)] ; L = [r(2), r(1), r(3), r(4)] U = [ (c, b), (a, b), (a, c)] ; L = [r(2), r(5), r(6), r(4)] U = [ (a, c), (a, b), (c, b)] ; L = [r(3), r(1), r(2), r(5)] U = [ (b, a), (b, c), (a, c)] ; L = [r(3), r(4), r(6), r(5)] U = [ (a, c), (b, c), (b, a)] ; No ?- auto_consistent_domain(L). L = [r(1), r(3), r(4), r(6)] ; L = [r(1), r(2), r(5), r(6)] ; L = [r(1), r(2), r(3), r(4)] ; L = [r(2), r(4), r(5), r(6)] ; L = [r(1), r(2), r(3), r(5)] ; L = [r(3), r(4), r(5), r(6)] ; No ?- ?- setup_K_alt_domain(4,_). Yes ?- auto_chain_of_permutation_pairs( L), length(L,N),forall(member(X,L),(nl,possible_ranking_0(X,O),write(X:O))). r((1, 4)):[d, a, b, c] r((1, 3)):[a, d, b, c] r((1, 2)):[a, b, d, c] r((1, 1)):[a, b, c, d] r((3, 1)):[b, a, c, d] r((4, 1)):[b, c, a, d] r((6, 1)):[c, b, a, d] L = [r((1, 4)), r((1, 3)), r((1, 2)), r((1, 1)), r((3, 1)), r((4, 1)), r((6, 1))] N = 7 X = _G165 O = _G169 Yes ?- ?- setup_K_alt_domain(5,_). Yes ?- auto_chain_of_permutation_pairs( L), length(L,N),forall(member(X,L), (nl,possible_ranking_0(X,O),write(X:O))). r((1, 4, 5)):[e, d, a, b, c] r((1, 4, 4)):[d, e, a, b, c] r((1, 4, 3)):[d, a, e, b, c] r((1, 4, 2)):[d, a, b, e, c] r((1, 4, 1)):[d, a, b, c, e] r((1, 3, 1)):[a, d, b, c, e] r((1, 2, 1)):[a, b, d, c, e] r((1, 1, 1)):[a, b, c, d, e] r((3, 1, 1)):[b, a, c, d, e] r((4, 1, 1)):[b, c, a, d, e] r((6, 1, 1)):[c, b, a, d, e] L = [r((1, 4, 5)), r((1, 4, 4)), r((1, 4, 3)), r((1, 4, 2)), r((1, 4, 1)), r((1, 3, 1)), r((1, ..., ...)), r((..., ...)), r(...)|...] N = 11 X = _G162 O = _G166 Yes ?- */ % generating value restricted domains %------------------------------------------------- % added: 18-22 May 2006 %auto_value_restricted_domain(L,TR):- %value_restricted_domain_by_triples([],[],[]). %==> moved into later part auto_restricted_domain_with_filter(L):- % findall(S,possible_ranking_0(S,_),TR), all_possible_rankings_0(TR), %(alternative 1: recursive but not decomposed by triples) auto_restricted_domain_with_filter_1(L,TR,_), %(alternative 2: not recursive) % \+ violates_filter_on_auto_restricted_domain_1(L), % (involves_latin_square_0(L)->write(peke);true), abolish(admissible_rankings/1), assert(admissible_rankings(L)). violates_filter_on_auto_restricted_domain_1(L):- larger_than_3_alternatives, length(L,N), N>=4, member(J,[1,2,4,6]), \+ member(r((J,_)),L). larger_than_3_alternatives:- set_of_alternatives(A), length(A,M), M > 3. auto_restricted_domain_with_filter_1([],[],[]). auto_restricted_domain_with_filter_1([X|L],[X|T],[1|W]):- auto_restricted_domain_with_filter_1(L,T,W), \+ involves_latin_square_for_triple([X|L],_). % length(L,N), % \+ (N>12,violates_filter_on_restricted_domain(L,N)). auto_restricted_domain_with_filter_1(L,[_|T],[0|W]):- auto_restricted_domain_with_filter_1(L,T,W). % generating latin squares %------------------------------------------------- :- dynamic latin_square_0/1,latin_square_0/3. :- dynamic involving_latin_square_0/3. latin_square_0([1,4,5]). latin_square_0([2,3,6]). involves_latin_square_for_triple(L,(X,Y,Z)):- triple_of_alternative((X,Y,Z)), findall(K, ( member(R,L), relative_ranking_on_triple(R,(X,Y,Z),_,K) ), KL), sort(KL,KL1), latin_square_0(LS), subset(LS,KL1). involves_latin_square_not_wise(L):- generate_if_no_latin_square(Alt,Soc), % It's not wise. latin_square_0(Alt,Soc,LS), subset(LS,L). generate_if_no_latin_square(Alt,Soc):- mode_of_analysis(Alt,Soc), \+ \+ clause( latin_square_0(Alt,Soc,_),_), !. generate_if_no_latin_square(Alt,Soc):- mode_of_analysis(Alt,Soc), % \+ clause( latin_square_0(Alt,Soc,LS),_), forall( ( involves_latin_square_0(_,_,(R,R1,R2)), sort([R,R1,R2],LS), \+ clause(latin_square_0(Alt,Soc,LS),_) ), assert(latin_square_0(Alt,Soc,LS)) ). involves_latin_square_0b(L):- involves_latin_square_0(_,_,(R,R1,R2)), subset([R,R1,R2],L). % a very slow version. involves_latin_square_0a([R|L]):- member(R1,L), R1 \= R, member(R2,L), R2 \= R, R2 \= R1, involves_latin_square_0(_,_,(R,R1,R2)). involves_latin_square_0(type(1),(X,Y,Z),(R1,R2,R3)):- prefer_x_to_y_0(X,Y,R1), prefer_x_to_y_0(Y,Z,R1), prefer_x_to_y_0(Z,X,R2), prefer_x_to_y_0(Y,Z,R2), prefer_x_to_y_0(X,Y,R3), prefer_x_to_y_0(Z,X,R3). involves_latin_square_0(type(2),(X,Y,Z),(R1,R2,R3)):- prefer_x_to_y_0(X,Z,R1), prefer_x_to_y_0(Z,Y,R1), prefer_x_to_y_0(Z,Y,R2), prefer_x_to_y_0(Y,X,R2), prefer_x_to_y_0(Y,X,R3), prefer_x_to_y_0(X,Z,R3). /* % for 3 alternatives. % negligence. ?- auto_restricted_domain(L), \+ auto_restricted_domain_with_filter(L),nl,write(L), findall(V,(member(V,[sp,sc,s2]),value_restriction(V)),P), write(P),fail. [r(1), r(2), r(3), r(4), r(5), r(6)][] [r(1), r(2), r(3), r(4), r(5)][] [r(1), r(2), r(3), r(4), r(6)][] [r(1), r(2), r(3), r(5), r(6)][] [r(1), r(2), r(3), r(6)][] [r(1), r(2), r(4), r(5), r(6)][] [r(1), r(2), r(4), r(5)][] [r(1), r(3), r(4), r(5), r(6)][] [r(1), r(3), r(4), r(5)][] [r(1), r(4), r(5), r(6)][] [r(1), r(4), r(5)][] [r(2), r(3), r(4), r(5), r(6)][] [r(2), r(3), r(4), r(6)][] [r(2), r(3), r(5), r(6)][] [r(2), r(3), r(6)][] No ?- ?- auto_restricted_domain_with_filter(H), findall(V,value_restriction(V),[]). No ?- auto_restricted_domain(H), value_restriction(V), involves_latin_square_0(H). No ?- % for 4 alternatives and 3 length admissible rankings. ?- length(H,3), auto_restricted_domain_with_filter(H), findall(V,value_restriction(V),[]). No ?- length(H,3),auto_restricted_domain(H), value_restriction(V), involves_latin_square_0(H). No ?- ?- mode_of_analysis(Alt,Soc),,B,C),L),length(L,N). generate_if_no_latin_square(Alt,Soc). Alt = 4-alternatives Soc = 3-person Yes ?- findall(1,latin_square_0(4-_,3-_,_),L),length(L,N). L = [1, 1, 1, 1, 1, 1, 1, 1, 1|...] N = 392 Yes ?- */ % generating decomposable domains %------------------------------------------------- % See Kalai and Muller(1977). % added: 30 Mar-1 Apr 2006 (about) auto_cdi_domain(L,D,Tb):- auto_restricted_domain(L), nl,write(apply:L), \+ \+ is_cdi_pairs(D,Tb). is_cdi_pairs(D,Tb):- findall(B,distinct_ordered_pair(B),Tb), ntr_projection(D,Tb,_), \+ violates_DI(_,_,D), is_nontrivial_and_consistent_cdi(D,Tb). is_nontrivial_and_consistent_cdi(D,Tb):- D \=Tb, \+ \+ ( member( NTR, D), nontrivial_ordered_pair(NTR) ), \+ circulate(_,D). circulate((X,Y),D):- member((X,Y),D),member((Y,X),D). circulate((X,Y),D):- member((X,Y),D),member((Y,Z),D),member((Z,X),D). ntr_projection([],[],[]). ntr_projection([R|Q],[R|S],[1|B]):-ntr_projection(Q,S,B). ntr_projection(Q,[R|S],[0|B]):-ntr_projection(Q,S,B), \+ trivial_ordered_pair(R). violates_DI(V,(X,Y,Z),L):- nontrivial_ordered_pair((X,Y)), nontrivial_ordered_pair((X,Z)), (violates_DI(I,(X,Y,Z),C,L)->V=(I,C);fail). violates_DI(1, (X,Y,Z),[(R1,R2)],L):- possible_ranking(R1,[X,Y,Z]), possible_ranking(R2,[Y,Z,X]), violates_DI_1(_, (X,Y,Z),L). violates_DI(2, (X,Y,Z),[R1], L):- possible_ranking(R1,[X,Y,Z]), violates_DI_2(_, (X,Y,Z),L). violates_DI_1( a, (X,Y,Z),L):- member( (X,Y), L), \+ member( (X,Z), L). violates_DI_1( b, (X,Y,Z),L):- member( (Z,X), L), \+ member( (Y,X), L). violates_DI_2(a,(X,Y,Z),L):- member((X,Y),L), member((Y,Z),L), \+ member((X,Z),L). violates_DI_2(b,(X,Y,Z),L):- member((Z,X),L), member((Y,X),L), member((Z,Y),L). violates_DI_2(c,(X,Y,Z),L):- member((Z,X),L), \+ member((Y,X),L), \+ member((Z,Y),L). test_cdi(1):- forall( ( auto_restricted_domain(L), \+ ( auto_scf( F,sp), citizens_sovereignty(F), is_non_dictatorial_scf(F) ) ), ( nl,write(L), (\+ \+ is_cdi_pairs(D,T)->write([cdi]);true), findall(B,nontrivial_ordered_pair(B),NTR), findall(B,trivial_ordered_pair(B),TR), nl,write(ntr:NTR), nl,write(tr:TR), forall(is_cdi_pairs(D,T),(nl,tab(1),write(D))) ) ). test_cdi(2):- forall( ( auto_restricted_domain(L), \+ \+ ( auto_scf( F,sp), citizens_sovereignty(F), is_non_dictatorial_scf(F) ) ), ( nl,write(L), (\+ \+ is_cdi_pairs(D,T)->write([cdi]);true), findall(B,nontrivial_ordered_pair(B),NTR), findall(B,trivial_ordered_pair(B),TR), nl,write(ntr:NTR), nl,write(tr:TR), forall(is_cdi_pairs(D,T),(nl,tab(1),write(D))) ) ). % a filter for moderate decision scfs %------------------------------------------------- % added: 20-25 Apr 2006 (about) is_moderate_scf(F):- Taboo= [ (1,4,a), (1,5,c), (4,5,b), (2,3,b), (2,6,a), (3,6,c) ], \+ ( member((X,Y,Z),Taboo), ( member((r(X),r(Y))->Z,F) ; member((r(Y),r(X))->Z,F) ) ). % demos for restricted domain %------------------------------------------------- /* ?- auto_restricted_domain(Rq), forall(possible_ranking(R,_),write(R)). r(1)r(2)r(3)r(4)r(5)r(6) Rq = [r(1), r(2), r(3), r(4), r(5), r(6)] R = _G162 ; r(2)r(3)r(4)r(5)r(6) Rq = [r(2), r(3), r(4), r(5), r(6)] R = _G162 Yes ?- auto_scf( F,sp),citizens_sovereignty(F), show_scf_hr(F),nl,fail. i=1: 2222233333444445555566666 i=2: 2345623456234562345623456 scf: aaaaabbbbbbbbbbcccccccccc i=1: 2222233333444445555566666 i=2: 2345623456234562345623456 scf: abbccabbccabbccabbccabbcc No ?- auto_scf( F,sp),show_scf_hr_1(F), (is_strategy_proof_scf(F)->A=sp;A='-'), (citizens_sovereignty(F)->B='cs';B='-'), (is_dictatorial_scf(F,D)->C=d(D);C='-'),tab(1),write([A,B,C]),fail. scf: aaaaaaaaaaaaaaaaaaaaaaaaa [sp, -, -] scf: aaaaaabbababbabaaaaaabbab [sp, -, -] scf: abbababbababbababbababbab [sp, -, -] scf: aaaaabbbbbbbbbbaaaaabbbbb [sp, -, -] scf: abbabbbbbbbbbbbabbabbbbbb [sp, -, -] scf: bbbbbbbbbbbbbbbbbbbbbbbbb [sp, -, -] scf: abbccabbccabbccabbccabbcc [sp, cs, d(2)] scf: abbccbbbbbbbbbbcbbcccbbcc [sp, cs, -] scf: cbbccbbbbbbbbbbcbbcccbbcc [sp, -, -] scf: abbccabbcccbbcccbbcccbbcc [sp, cs, -] scf: cbbcccbbcccbbcccbbcccbbcc [sp, -, -] scf: aaaaaaaaaaaacccaacccaaccc [sp, -, -] scf: aacccaacccaacccaacccaaccc [sp, -, -] scf: aaaaabbbbbbbbbbcccccccccc [sp, cs, d(1)] scf: aacccbbbbbbbbbbcccccccccc [sp, cs, -] scf: cccccbbbbbbbbbbcccccccccc [sp, -, -] scf: aacccabbcccbbcccccccccccc [sp, cs, -] scf: ccccccbbcccbbcccccccccccc [sp, -, -] scf: aaaaaaaaaaccccccccccccccc [sp, -, -] scf: aacccaacccccccccccccccccc [sp, -, -] scf: ccccccccccccccccccccccccc [sp, -, -] No ?- auto_scf( F,dictatorial(J)),show_scf_hr(F),nl,fail. i=1: 2222233333444445555566666 i=2: 2345623456234562345623456 scf: aaaaabbbbbbbbbbcccccccccc i=1: 2222233333444445555566666 i=2: 2345623456234562345623456 scf: abbccabbccabbccabbccabbcc No ?- ?- auto_restricted_domain(L), \+ (auto_cdi_domain_1(D,T),D\=[],D\=T), nl,write(apply:L),fail. apply:[r(1), r(2), r(3), r(4), r(5), r(6)] apply:[r(1)] apply:[r(2)] apply:[r(3)] apply:[r(4)] apply:[r(5)] apply:[r(6)] apply:[] No ?- ?- auto_restricted_domain(L),\+ (auto_scf( F,sp), citizens_sovereignty(F),is_non_dictatorial_scf(F)), nl,write(L),(\+ \+ is_cdi_pairs(D,T)->write([cdi]);fail),fail. [r(1), r(2), r(3), r(4), r(5), r(6)] [r(1), r(2), r(3), r(4)][cdi] [r(1), r(2), r(3)] [r(1), r(2), r(5), r(6)][cdi] [r(1), r(2), r(5)] [r(1), r(2)] [r(1), r(3), r(4)] [r(1), r(3)] [r(1), r(4)] [r(1), r(5)] [r(1)] [r(2), r(3)] [r(2), r(5), r(6)] [r(2), r(5)] [r(2), r(6)] [r(2)] [r(3), r(4), r(5), r(6)][cdi] [r(3), r(4), r(6)] [r(3), r(4)] [r(3), r(6)] [r(3)] [r(4), r(5), r(6)] [r(4), r(5)] [r(4), r(6)] [r(4)] [r(5), r(6)] [r(5)] [r(6)] [] No ?- ?- auto_restricted_domain(L),\+ \+ (auto_scf( F,sp), citizens_sovereignty(F),is_non_dictatorial_scf(F)), nl,write(L),(\+ \+ is_cdi_pairs(D,T)->write([cdi]);fail),fail. [r(1), r(2), r(3), r(4), r(5)][cdi] [r(1), r(2), r(3), r(4), r(6)][cdi] [r(1), r(2), r(3), r(5), r(6)][cdi] [r(1), r(2), r(3), r(5)][cdi] [r(1), r(2), r(3), r(6)][cdi] [r(1), r(2), r(4), r(5), r(6)][cdi] [r(1), r(2), r(4), r(5)][cdi] [r(1), r(2), r(4), r(6)][cdi] [r(1), r(2), r(4)][cdi] [r(1), r(2), r(6)][cdi] [r(1), r(3), r(4), r(5), r(6)][cdi] [r(1), r(3), r(4), r(5)][cdi] [r(1), r(3), r(4), r(6)][cdi] [r(1), r(3), r(5), r(6)][cdi] [r(1), r(3), r(5)][cdi] [r(1), r(3), r(6)][cdi] [r(1), r(4), r(5), r(6)][cdi] [r(1), r(4), r(5)][cdi] [r(1), r(4), r(6)][cdi] [r(1), r(5), r(6)][cdi] [r(1), r(6)][cdi] [r(2), r(3), r(4), r(5), r(6)][cdi] [r(2), r(3), r(4), r(5)][cdi] [r(2), r(3), r(4), r(6)][cdi] [r(2), r(3), r(4)][cdi] [r(2), r(3), r(5), r(6)][cdi] [r(2), r(3), r(5)][cdi] [r(2), r(3), r(6)][cdi] [r(2), r(4), r(5), r(6)][cdi] [r(2), r(4), r(5)][cdi] [r(2), r(4), r(6)][cdi] [r(2), r(4)][cdi] [r(3), r(4), r(5)][cdi] [r(3), r(5), r(6)][cdi] [r(3), r(5)][cdi] No ?- % proof of Lemma 4 in Kelly and Muller (1977). ?- auto_restricted_domain(L),\+ \+ (auto_scf( F,sp), citizens_sovereignty(F),is_non_dictatorial_scf(F)), is_cdi_pairs(D,T),member(X,T),\+ member(X,D), \+ ( is_cdi_pairs(D1,T),subtract(D1,[X|D],[])). No ?- auto_restricted_domain(L),\+ (auto_scf( F,sp), citizens_sovereignty(F),is_non_dictatorial_scf(F)), is_cdi_pairs(D,T),member(X,T),\+ member(X,D), \+ ( is_cdi_pairs(D1,T),subtract(D1,[X|D],[])). No ?- % The inheritance relationship of NDNM scfs in permissible domain % added: 23 Apr 2006. ?- auto_restricted_domain(L),length(L,5), (auto_scf( F,sp), citizens_sovereignty(F),is_non_dictatorial_scf(F)), show_scf_hr_1(F),write(L),fail. scf: aabbaaabbabbbbbbbbbbaabbc[r(1), r(2), r(3), r(4), r(5)] scf: aabbaaabbaaabbaaabbcaabbc[r(1), r(2), r(3), r(4), r(5)] scf: aaaaaaaaaabbbbbbbbbbaaacc[r(1), r(2), r(3), r(4), r(5)] scf: aaaaaaaaaaaabbaaabbcaaacc[r(1), r(2), r(3), r(4), r(5)] scf: aaaaaaaaaaaabbbaabbbaabbc[r(1), r(2), r(3), r(4), r(6)] scf: aabbbaabbcaabbbaabbbaabbc[r(1), r(2), r(3), r(4), r(6)] scf: aaaaaaaaaabbbbbbbbbbbcbbc[r(1), r(2), r(3), r(4), r(6)] scf: aabbbaabbcbbbbbbbbbbbcbbc[r(1), r(2), r(3), r(4), r(6)] scf: aaaaaaaaaaaababaaaccaabcc[r(1), r(2), r(3), r(5), r(6)] scf: aaaccaaaccaabccaaaccaabcc[r(1), r(2), r(3), r(5), r(6)] scf: aaaaaaaaaaaababcccccccccc[r(1), r(2), r(3), r(5), r(6)] scf: aaaccaaaccaabcccccccccccc[r(1), r(2), r(3), r(5), r(6)] scf: aaaaaaaaaaaabccaacccaaccc[r(1), r(2), r(4), r(5), r(6)] scf: aabccaacccaabccaacccaaccc[r(1), r(2), r(4), r(5), r(6)] scf: aaaaaaaaaabcbcccccccccccc[r(1), r(2), r(4), r(5), r(6)] scf: aabccaacccbcbcccccccccccc[r(1), r(2), r(4), r(5), r(6)] scf: abbabbbbbbbbbbbabbccbbbcc[r(1), r(3), r(4), r(5), r(6)] scf: abbccbbbccbbbccabbccbbbcc[r(1), r(3), r(4), r(5), r(6)] scf: abbabbbbbbbbbbbcccccccccc[r(1), r(3), r(4), r(5), r(6)] scf: abbccbbbccbbbcccccccccccc[r(1), r(3), r(4), r(5), r(6)] scf: abbccbbbbbbbbbbcbbcccbbcc[r(2), r(3), r(4), r(5), r(6)] scf: abbccabbcccbbcccbbcccbbcc[r(2), r(3), r(4), r(5), r(6)] scf: aacccbbbbbbbbbbcccccccccc[r(2), r(3), r(4), r(5), r(6)] scf: aacccabbcccbbcccccccccccc[r(2), r(3), r(4), r(5), r(6)] No ?- % NDNM domain-scf pairs which does not has a basis in 5 rankings NDNM. % (basis=The maximal domains where the smaller NMDM scf can be embedded.) ?- findall((U,G), ( auto_restricted_domain(U),length(U,5), (auto_scf( G,sp), citizens_sovereignty(G),is_non_dictatorial_scf(G))), SL), auto_restricted_domain(L),length(L,N),N<5, (auto_scf( F,sp), citizens_sovereignty(F),is_non_dictatorial_scf(F)), \+ (member((U,G),SL),subset(L,U),subset(F,G)),)), show_scf_hr_1(F),write(L),fail. scf: aaaaaaaaaabcaabc[r(1), r(2), r(4), r(6)] scf: aaaaaaaabcbcbcbc[r(1), r(2), r(4), r(6)] scf: aabcaabcbcbcbcbc[r(1), r(2), r(4), r(6)] scf: aaaaaaaaaabbaacc[r(1), r(2), r(4), r(6)] scf: aabbaaccaabbaacc[r(1), r(2), r(4), r(6)] scf: aabbaaccbbbbcccc[r(1), r(2), r(4), r(6)] scf: aabaacbbb[r(1), r(2), r(4)] scf: aabaabbcb[r(1), r(2), r(4)] scf: aacaacbcc[r(1), r(2), r(6)] scf: aabaacccc[r(1), r(2), r(6)] scf: abababababccabcc[r(1), r(3), r(5), r(6)] scf: aaaabbbbaaccbbcc[r(1), r(3), r(5), r(6)] scf: aaccbbccaaccbbcc[r(1), r(3), r(5), r(6)] scf: ababababcccccccc[r(1), r(3), r(5), r(6)] scf: abccabcccccccccc[r(1), r(3), r(5), r(6)] scf: aaccbbcccccccccc[r(1), r(3), r(5), r(6)] scf: aacbbcaac[r(1), r(3), r(5)] scf: abaabaccc[r(1), r(3), r(5)] scf: abcabcccc[r(1), r(3), r(5)] scf: aacbbcccc[r(1), r(3), r(5)] scf: aacbbcbbc[r(1), r(3), r(6)] scf: abbabbccc[r(1), r(3), r(6)] scf: abcabcccc[r(1), r(3), r(6)] scf: aacbbcccc[r(1), r(3), r(6)] scf: ababbcabc[r(1), r(4), r(5)] scf: ababbbacc[r(1), r(4), r(5)] scf: abaabcacc[r(1), r(4), r(5)] scf: aaabbcacc[r(1), r(4), r(5)] scf: ababbcacc[r(1), r(4), r(5)] scf: abcbbcacc[r(1), r(4), r(5)] scf: ababbcccc[r(1), r(4), r(5)] scf: aaaabcabc[r(1), r(4), r(6)] scf: aaabbcbbc[r(1), r(4), r(6)] scf: aaaabbacc[r(1), r(4), r(6)] scf: abbabbacc[r(1), r(4), r(6)] scf: aabaccacc[r(1), r(5), r(6)] scf: aaaaccbcc[r(1), r(5), r(6)] scf: abbcbbbbbbbbabbc[r(2), r(3), r(4), r(5)] scf: abbabbbbbbbbcbbc[r(2), r(3), r(4), r(5)] scf: abbaabbacbbccbbc[r(2), r(3), r(4), r(5)] scf: aaccbbbbbbbbaacc[r(2), r(3), r(4), r(5)] scf: aaccabbcabbcaacc[r(2), r(3), r(4), r(5)] scf: aaaaabbacbbccccc[r(2), r(3), r(4), r(5)] scf: aacabbabb[r(2), r(3), r(4)] scf: aaaabbcbb[r(2), r(3), r(4)] scf: aacbbbaac[r(2), r(3), r(5)] scf: abcbbbabc[r(2), r(3), r(5)] scf: abaabacbc[r(2), r(3), r(5)] scf: ababbbcbc[r(2), r(3), r(5)] scf: aacabbabc[r(2), r(3), r(6)] scf: aaaabbcbc[r(2), r(3), r(6)] scf: aacabbcbc[r(2), r(3), r(6)] scf: abcabbcbc[r(2), r(3), r(6)] scf: aacbbbcbc[r(2), r(3), r(6)] scf: aacabccbc[r(2), r(3), r(6)] scf: aacabbccc[r(2), r(3), r(6)] scf: abcbbbabc[r(2), r(4), r(5)] scf: ababbbcbc[r(2), r(4), r(5)] scf: abacbccbc[r(2), r(4), r(5)] scf: accbbbacc[r(2), r(4), r(5)] scf: aaaabcabc[r(2), r(4), r(6)] scf: aaacbccbc[r(2), r(4), r(6)] scf: aaaabbacc[r(2), r(4), r(6)] scf: accabbacc[r(2), r(4), r(6)] scf: bbcbbcacc[r(3), r(4), r(5)] scf: bbabbcccc[r(3), r(4), r(5)] scf: bbbaccbcc[r(3), r(5), r(6)] scf: babbccbcc[r(3), r(5), r(6)] No ?- % NDNM domain-scf pairs of 2 rankings which has a basis in 5 rankings NDNM. ?- findall((U,G), ( auto_restricted_domain(U),length(U,5), (auto_scf( G,sp), citizens_sovereignty(G),is_non_dictatorial_scf(G))), SL), auto_restricted_domain(L),length(L,N),N=2, (auto_scf( F,sp), citizens_sovereignty(F),is_non_dictatorial_scf(F)), \+ \+ (member((U,G),SL),subset(L,U),subset(F,G)), show_scf_hr_1(F),write(L),fail. scf: abac[r(1), r(6)] scf: aabc[r(1), r(6)] scf: abbc[r(1), r(6)] scf: acbc[r(1), r(6)] scf: abcc[r(1), r(6)] scf: acab[r(2), r(4)] scf: acbb[r(2), r(4)] scf: aacb[r(2), r(4)] scf: abcb[r(2), r(4)] scf: accb[r(2), r(4)] scf: baac[r(3), r(5)] scf: bbac[r(3), r(5)] scf: bcac[r(3), r(5)] scf: babc[r(3), r(5)] scf: bacc[r(3), r(5)] No ?- % The maximal NDNM basis for each 2 rankings NDNM is near unique. ?- findall((K,U,G), (auto_restricted_domain(U),length(U,K), (auto_scf( G,sp), citizens_sovereignty(G),is_non_dictatorial_scf(G))), SL),length(SL,N),nl,write(N:scf_and_domains), member((2,L,F),SL),show_scf_hr_0(F),write(L),write(2), member((5,U,G),SL),subset(L,U),subset(F,G), show_scf_hr_0(G),write(U),write(5), fail. 290:scf_and_domains scf: a----b------------------------a----c[r(1), r(6)]2 scf: aabb-baabb-caabb-baabb-b------aabb-c[r(1), r(2), r(3), r(4), r(6)]5 scf: a----a------------------------b----c[r(1), r(6)]2 scf: aaaa-aaaaa-abbbb-bbbbb-b------bcbb-c[r(1), r(2), r(3), r(4), r(6)]5 scf: a----b------------------------b----c[r(1), r(6)]2 scf: aabb-baabb-cbbbb-bbbbb-b------bcbb-c[r(1), r(2), r(3), r(4), r(6)]5 scf: a-bbab------b-bbbbb-bbbba-bbccb-bbcc[r(1), r(3), r(4), r(5), r(6)]5 scf: a----c------------------------b----c[r(1), r(6)]2 scf: a-bbcc------b-bbccb-bbcca-bbccb-bbcc[r(1), r(3), r(4), r(5), r(6)]5 scf: a----b------------------------c----c[r(1), r(6)]2 scf: a-bbab------b-bbbbb-bbbbc-ccccc-cccc[r(1), r(3), r(4), r(5), r(6)]5 scf: -------a-c---------a-b--------------[r(2), r(4)]2 scf: aa-bccaa-ccc------aa-bccaa-cccaa-ccc[r(1), r(2), r(4), r(5), r(6)]5 scf: -------a-c---------b-b--------------[r(2), r(4)]2 scf: -------aaccc-bbbbb-bbbbb-ccccc-ccccc[r(2), r(3), r(4), r(5), r(6)]5 scf: -------a-a---------c-b--------------[r(2), r(4)]2 scf: aa-aaaaa-aaa------bc-bcccc-ccccc-ccc[r(1), r(2), r(4), r(5), r(6)]5 scf: -------a-b---------c-b--------------[r(2), r(4)]2 scf: -------abbcc-abbcc-cbbcc-cbbcc-cbbcc[r(2), r(3), r(4), r(5), r(6)]5 scf: -------a-c---------c-b--------------[r(2), r(4)]2 scf: aa-bccaa-ccc------bc-bcccc-ccccc-ccc[r(1), r(2), r(4), r(5), r(6)]5 scf: -------aaccc-abbcc-cbbcc-ccccc-ccccc[r(2), r(3), r(4), r(5), r(6)]5 scf: --------------b-a---------a-c-------[r(3), r(5)]2 scf: aaaaa-aaaaa-aabba-aabbc-aaacc-------[r(1), r(2), r(3), r(4), r(5)]5 scf: aaa-aaaaa-aaaab-ab------aaa-ccaab-cc[r(1), r(2), r(3), r(5), r(6)]5 scf: --------------b-b---------a-c-------[r(3), r(5)]2 scf: aaaaa-aaaaa-bbbbb-bbbbb-aaacc-------[r(1), r(2), r(3), r(4), r(5)]5 scf: --------------b-c---------a-c-------[r(3), r(5)]2 scf: aaa-ccaaa-ccaab-cc------aaa-ccaab-cc[r(1), r(2), r(3), r(5), r(6)]5 scf: --------------b-a---------b-c-------[r(3), r(5)]2 scf: aabba-aabba-aabba-aabbc-aabbc-------[r(1), r(2), r(3), r(4), r(5)]5 scf: --------------b-a---------c-c-------[r(3), r(5)]2 scf: aaa-aaaaa-aaaab-ab------ccc-ccccc-cc[r(1), r(2), r(3), r(5), r(6)]5 No ?- % NDNM pairs which has two or more basis in 5 rankings NDNM. ?- findall((U,G), (auto_restricted_domain(U),length(U,5), (auto_scf( G,sp), citizens_sovereignty(G),is_non_dictatorial_scf(G))), SL), auto_restricted_domain(L),length(L,N),N<5, (auto_scf( F,sp), citizens_sovereignty(F),is_non_dictatorial_scf(F)), findall((U,G), (member((U,G),SL),subset(L,U),subset(F,G)),Par), length(Par,K),K>1,show_scf_hr_1(F),write(L),write(K),fail. scf: aaaaaaaaaabaaaac[r(1), r(2), r(3), r(5)]2 scf: aaaaaaaaaabbaabc[r(1), r(2), r(3), r(6)]2 scf: aaaaaaaaaabcaacc[r(1), r(2), r(4), r(5)]2 scf: abbabbbbbbbbabbc[r(1), r(3), r(4), r(5)]2 scf: abbbbbbbbbbbbbbc[r(1), r(3), r(4), r(6)]2 scf: aaaabaaac[r(1), r(3), r(5)]2 scf: ababbbabc[r(1), r(3), r(5)]2 scf: aaaabbabc[r(1), r(3), r(6)]2 scf: abbbbbbbc[r(1), r(3), r(6)]2 scf: abccbbcccccccccc[r(1), r(4), r(5), r(6)]2 scf: ababbbabc[r(1), r(4), r(5)]2 scf: aaaabcacc[r(1), r(4), r(5)]2 scf: abcbbcccc[r(1), r(4), r(5)]2 scf: abbbbbbbc[r(1), r(4), r(6)]2 scf: abcbbcccc[r(1), r(4), r(6)]2 scf: abbc[r(1), r(6)]2 scf: abbcbbbbbbbbcbbc[r(2), r(3), r(4), r(6)]2 scf: aaccabcccccccccc[r(2), r(3), r(5), r(6)]2 scf: aaaabaaac[r(2), r(3), r(5)]2 scf: aacabcccc[r(2), r(3), r(5)]2 scf: aaaabbabc[r(2), r(3), r(6)]2 scf: abcbbbcbc[r(2), r(3), r(6)]2 scf: aacabcccc[r(2), r(3), r(6)]2 scf: accccbcccccccccc[r(2), r(4), r(5), r(6)]2 scf: aaaabcacc[r(2), r(4), r(5)]2 scf: acccbcccc[r(2), r(4), r(5)]2 scf: abcbbbcbc[r(2), r(4), r(6)]2 scf: acccbcccc[r(2), r(4), r(6)]2 scf: accb[r(2), r(4)]2 scf: baac[r(3), r(5)]2 No ?- % NDNM pairs which has two or more basis in 5 rankings NDNM. % showing the parents. ?- findall((U,G), (auto_restricted_domain(U),length(U,5), (auto_scf( G,sp), citizens_sovereignty(G),is_non_dictatorial_scf(G))), SL), auto_restricted_domain(L),length(L,N),N<5, (auto_scf( F,sp), citizens_sovereignty(F),is_non_dictatorial_scf(F)), findall(D, (member((U,G),SL),subset(L,U),subset(F,G),subtract(U,L,D)),Par), length(Par,K),K>1,show_scf_hr_1(F),write(L),write(Par),fail. scf: aaaaaaaaaabaaaac[r(1), r(2), r(3), r(5)][[r(4)], [r(6)]] scf: aaaaaaaaaabbaabc[r(1), r(2), r(3), r(6)][[r(4)], [r(5)]] scf: aaaaaaaaaabcaacc[r(1), r(2), r(4), r(5)][[r(3)], [r(6)]] scf: abbabbbbbbbbabbc[r(1), r(3), r(4), r(5)][[r(2)], [r(6)]] scf: abbbbbbbbbbbbbbc[r(1), r(3), r(4), r(6)][[r(2)], [r(5)]] scf: aaaabaaac[r(1), r(3), r(5)][[r(2), r(4)], [r(2), r(6)]] scf: ababbbabc[r(1), r(3), r(5)][[r(2), r(4)], [r(4), r(6)]] scf: aaaabbabc[r(1), r(3), r(6)][[r(2), r(4)], [r(2), r(5)]] scf: abbbbbbbc[r(1), r(3), r(6)][[r(2), r(4)], [r(4), r(5)]] scf: abccbbcccccccccc[r(1), r(4), r(5), r(6)][[r(2)], [r(3)]] scf: ababbbabc[r(1), r(4), r(5)][[r(2), r(3)], [r(3), r(6)]] scf: aaaabcacc[r(1), r(4), r(5)][[r(2), r(3)], [r(2), r(6)]] scf: abcbbcccc[r(1), r(4), r(5)][[r(2), r(6)], [r(3), r(6)]] scf: abbbbbbbc[r(1), r(4), r(6)][[r(2), r(3)], [r(3), r(5)]] scf: abcbbcccc[r(1), r(4), r(6)][[r(2), r(5)], [r(3), r(5)]] scf: abbc[r(1), r(6)][[r(2), r(3), r(4)], [r(3), r(4), r(5)]] scf: abbcbbbbbbbbcbbc[r(2), r(3), r(4), r(6)][[r(1)], [r(5)]] scf: aaccabcccccccccc[r(2), r(3), r(5), r(6)][[r(1)], [r(4)]] scf: aaaabaaac[r(2), r(3), r(5)][[r(1), r(4)], [r(1), r(6)]] scf: aacabcccc[r(2), r(3), r(5)][[r(1), r(6)], [r(4), r(6)]] scf: aaaabbabc[r(2), r(3), r(6)][[r(1), r(4)], [r(1), r(5)]] scf: abcbbbcbc[r(2), r(3), r(6)][[r(1), r(4)], [r(4), r(5)]] scf: aacabcccc[r(2), r(3), r(6)][[r(1), r(5)], [r(4), r(5)]] scf: accccbcccccccccc[r(2), r(4), r(5), r(6)][[r(1)], [r(3)]] scf: aaaabcacc[r(2), r(4), r(5)][[r(1), r(3)], [r(1), r(6)]] scf: acccbcccc[r(2), r(4), r(5)][[r(1), r(6)], [r(3), r(6)]] scf: abcbbbcbc[r(2), r(4), r(6)][[r(1), r(3)], [r(3), r(5)]] scf: acccbcccc[r(2), r(4), r(6)][[r(1), r(5)], [r(3), r(5)]] scf: accb[r(2), r(4)][[r(1), r(5), r(6)], [r(3), r(5), r(6)]] scf: baac[r(3), r(5)][[r(1), r(2), r(4)], [r(1), r(2), r(6)]] No ?- % NDNM basis: % The maximal domains where the smaller NMDM scf can be embedded. ?- findall((K,U,G), (auto_restricted_domain(U),length(U,K), (auto_scf( G,sp), citizens_sovereignty(G),is_non_dictatorial_scf(G))), SL),length(SL,N),nl,write(N:scf_and_domains), member((K,L,F),SL),\+ (member((_,U,G),SL),G\=F,subset(L,U),subset(F,G)), show_scf_hr_1(F),write(L),write(K),fail. 290:scf_and_domains scf: aabbaaabbabbbbbbbbbbaabbc[r(1), r(2), r(3), r(4), r(5)]5 scf: aabbaaabbaaabbaaabbcaabbc[r(1), r(2), r(3), r(4), r(5)]5 scf: aaaaaaaaaabbbbbbbbbbaaacc[r(1), r(2), r(3), r(4), r(5)]5 scf: aaaaaaaaaaaabbaaabbcaaacc[r(1), r(2), r(3), r(4), r(5)]5 scf: aaaaaaaaaaaabbbaabbbaabbc[r(1), r(2), r(3), r(4), r(6)]5 scf: aabbbaabbcaabbbaabbbaabbc[r(1), r(2), r(3), r(4), r(6)]5 scf: aaaaaaaaaabbbbbbbbbbbcbbc[r(1), r(2), r(3), r(4), r(6)]5 scf: aabbbaabbcbbbbbbbbbbbcbbc[r(1), r(2), r(3), r(4), r(6)]5 scf: aaaaaaaaaaaababaaaccaabcc[r(1), r(2), r(3), r(5), r(6)]5 scf: aaaccaaaccaabccaaaccaabcc[r(1), r(2), r(3), r(5), r(6)]5 scf: aaaaaaaaaaaababcccccccccc[r(1), r(2), r(3), r(5), r(6)]5 scf: aaaccaaaccaabcccccccccccc[r(1), r(2), r(3), r(5), r(6)]5 scf: aaaaaaaaaaaabccaacccaaccc[r(1), r(2), r(4), r(5), r(6)]5 scf: aabccaacccaabccaacccaaccc[r(1), r(2), r(4), r(5), r(6)]5 scf: aaaaaaaaaabcbcccccccccccc[r(1), r(2), r(4), r(5), r(6)]5 scf: aabccaacccbcbcccccccccccc[r(1), r(2), r(4), r(5), r(6)]5 scf: aaaaaaaaaabcaabc[r(1), r(2), r(4), r(6)]4 scf: aaaaaaaabcbcbcbc[r(1), r(2), r(4), r(6)]4 scf: aabcaabcbcbcbcbc[r(1), r(2), r(4), r(6)]4 scf: aaaaaaaaaabbaacc[r(1), r(2), r(4), r(6)]4 scf: aabbaaccaabbaacc[r(1), r(2), r(4), r(6)]4 scf: aabbaaccbbbbcccc[r(1), r(2), r(4), r(6)]4 scf: abbabbbbbbbbbbbabbccbbbcc[r(1), r(3), r(4), r(5), r(6)]5 scf: abbccbbbccbbbccabbccbbbcc[r(1), r(3), r(4), r(5), r(6)]5 scf: abbabbbbbbbbbbbcccccccccc[r(1), r(3), r(4), r(5), r(6)]5 scf: abbccbbbccbbbcccccccccccc[r(1), r(3), r(4), r(5), r(6)]5 scf: abababababccabcc[r(1), r(3), r(5), r(6)]4 scf: aaaabbbbaaccbbcc[r(1), r(3), r(5), r(6)]4 scf: aaccbbccaaccbbcc[r(1), r(3), r(5), r(6)]4 scf: ababababcccccccc[r(1), r(3), r(5), r(6)]4 scf: abccabcccccccccc[r(1), r(3), r(5), r(6)]4 scf: aaccbbcccccccccc[r(1), r(3), r(5), r(6)]4 scf: ababbcabc[r(1), r(4), r(5)]3 scf: ababbbacc[r(1), r(4), r(5)]3 scf: abaabcacc[r(1), r(4), r(5)]3 scf: aaabbcacc[r(1), r(4), r(5)]3 scf: ababbcacc[r(1), r(4), r(5)]3 scf: abcbbcacc[r(1), r(4), r(5)]3 scf: ababbcccc[r(1), r(4), r(5)]3 scf: abbccbbbbbbbbbbcbbcccbbcc[r(2), r(3), r(4), r(5), r(6)]5 scf: abbccabbcccbbcccbbcccbbcc[r(2), r(3), r(4), r(5), r(6)]5 scf: aacccbbbbbbbbbbcccccccccc[r(2), r(3), r(4), r(5), r(6)]5 scf: aacccabbcccbbcccccccccccc[r(2), r(3), r(4), r(5), r(6)]5 scf: abbcbbbbbbbbabbc[r(2), r(3), r(4), r(5)]4 scf: abbabbbbbbbbcbbc[r(2), r(3), r(4), r(5)]4 scf: abbaabbacbbccbbc[r(2), r(3), r(4), r(5)]4 scf: aaccbbbbbbbbaacc[r(2), r(3), r(4), r(5)]4 scf: aaccabbcabbcaacc[r(2), r(3), r(4), r(5)]4 scf: aaaaabbacbbccccc[r(2), r(3), r(4), r(5)]4 scf: aacabbabc[r(2), r(3), r(6)]3 scf: aaaabbcbc[r(2), r(3), r(6)]3 scf: aacabbcbc[r(2), r(3), r(6)]3 scf: abcabbcbc[r(2), r(3), r(6)]3 scf: aacbbbcbc[r(2), r(3), r(6)]3 scf: aacabccbc[r(2), r(3), r(6)]3 scf: aacabbccc[r(2), r(3), r(6)]3 No ?- % NDNM basis: % another display for all logically possible profiles ?- findall((K,U,G), (auto_restricted_domain(U),length(U,K), (auto_scf( G,sp), citizens_sovereignty(G),is_non_dictatorial_scf(G))), SL),length(SL,N),nl,write(N:scf_and_domains),findall((K,L,F),( member((K,L,F),SL),\+ (member((_,U,G),SL),G\=F,subset(L,U),subset(F,G))),BL),member((K,L,F),BL), show_scf_hr_0(F),write(L),write(K),fail. 290:scf_and_domains scf: aabba-aabba-bbbbb-bbbbb-aabbc-------[r(1), r(2), r(3), r(4), r(5)]5 scf: aabba-aabba-aabba-aabbc-aabbc-------[r(1), r(2), r(3), r(4), r(5)]5 scf: aaaaa-aaaaa-bbbbb-bbbbb-aaacc-------[r(1), r(2), r(3), r(4), r(5)]5 scf: aaaaa-aaaaa-aabba-aabbc-aaacc-------[r(1), r(2), r(3), r(4), r(5)]5 scf: aaaa-aaaaa-aaabb-baabb-b------aabb-c[r(1), r(2), r(3), r(4), r(6)]5 scf: aabb-baabb-caabb-baabb-b------aabb-c[r(1), r(2), r(3), r(4), r(6)]5 scf: aaaa-aaaaa-abbbb-bbbbb-b------bcbb-c[r(1), r(2), r(3), r(4), r(6)]5 scf: aabb-baabb-cbbbb-bbbbb-b------bcbb-c[r(1), r(2), r(3), r(4), r(6)]5 scf: aaa-aaaaa-aaaab-ab------aaa-ccaab-cc[r(1), r(2), r(3), r(5), r(6)]5 scf: aaa-ccaaa-ccaab-cc------aaa-ccaab-cc[r(1), r(2), r(3), r(5), r(6)]5 scf: aaa-aaaaa-aaaab-ab------ccc-ccccc-cc[r(1), r(2), r(3), r(5), r(6)]5 scf: aaa-ccaaa-ccaab-cc------ccc-ccccc-cc[r(1), r(2), r(3), r(5), r(6)]5 scf: aa-aaaaa-aaa------aa-bccaa-cccaa-ccc[r(1), r(2), r(4), r(5), r(6)]5 scf: aa-bccaa-ccc------aa-bccaa-cccaa-ccc[r(1), r(2), r(4), r(5), r(6)]5 scf: aa-aaaaa-aaa------bc-bcccc-ccccc-ccc[r(1), r(2), r(4), r(5), r(6)]5 scf: aa-bccaa-ccc------bc-bcccc-ccccc-ccc[r(1), r(2), r(4), r(5), r(6)]5 scf: aa-a-aaa-a-a------aa-b-c------aa-b-c[r(1), r(2), r(4), r(6)]4 scf: aa-a-aaa-a-a------bc-b-c------bc-b-c[r(1), r(2), r(4), r(6)]4 scf: aa-b-caa-b-c------bc-b-c------bc-b-c[r(1), r(2), r(4), r(6)]4 scf: aa-a-aaa-a-a------aa-b-b------aa-c-c[r(1), r(2), r(4), r(6)]4 scf: aa-b-baa-c-c------aa-b-b------aa-c-c[r(1), r(2), r(4), r(6)]4 scf: aa-b-baa-c-c------bb-b-b------cc-c-c[r(1), r(2), r(4), r(6)]4 scf: a-bbab------b-bbbbb-bbbba-bbccb-bbcc[r(1), r(3), r(4), r(5), r(6)]5 scf: a-bbcc------b-bbccb-bbcca-bbccb-bbcc[r(1), r(3), r(4), r(5), r(6)]5 scf: a-bbab------b-bbbbb-bbbbc-ccccc-cccc[r(1), r(3), r(4), r(5), r(6)]5 scf: a-bbcc------b-bbccb-bbccc-ccccc-cccc[r(1), r(3), r(4), r(5), r(6)]5 scf: a-b-ab------a-b-ab------a-b-cca-b-cc[r(1), r(3), r(5), r(6)]4 scf: a-a-aa------b-b-bb------a-a-ccb-b-cc[r(1), r(3), r(5), r(6)]4 scf: a-a-cc------b-b-cc------a-a-ccb-b-cc[r(1), r(3), r(5), r(6)]4 scf: a-b-ab------a-b-ab------c-c-ccc-c-cc[r(1), r(3), r(5), r(6)]4 scf: a-b-cc------a-b-cc------c-c-ccc-c-cc[r(1), r(3), r(5), r(6)]4 scf: a-a-cc------b-b-cc------c-c-ccc-c-cc[r(1), r(3), r(5), r(6)]4 scf: a--ba-------------b--bc-a--bc-------[r(1), r(4), r(5)]3 scf: a--ba-------------b--bb-a--cc-------[r(1), r(4), r(5)]3 scf: a--ba-------------a--bc-a--cc-------[r(1), r(4), r(5)]3 scf: a--aa-------------b--bc-a--cc-------[r(1), r(4), r(5)]3 scf: a--ba-------------b--bc-a--cc-------[r(1), r(4), r(5)]3 scf: a--bc-------------b--bc-a--cc-------[r(1), r(4), r(5)]3 scf: a--ba-------------b--bc-c--cc-------[r(1), r(4), r(5)]3 scf: -------abbcc-bbbbb-bbbbb-cbbcc-cbbcc[r(2), r(3), r(4), r(5), r(6)]5 scf: -------abbcc-abbcc-cbbcc-cbbcc-cbbcc[r(2), r(3), r(4), r(5), r(6)]5 scf: -------aaccc-bbbbb-bbbbb-ccccc-ccccc[r(2), r(3), r(4), r(5), r(6)]5 scf: -------aaccc-abbcc-cbbcc-ccccc-ccccc[r(2), r(3), r(4), r(5), r(6)]5 scf: -------abbc--bbbb--bbbb--abbc-------[r(2), r(3), r(4), r(5)]4 scf: -------abba--bbbb--bbbb--cbbc-------[r(2), r(3), r(4), r(5)]4 scf: -------abba--abba--cbbc--cbbc-------[r(2), r(3), r(4), r(5)]4 scf: -------aacc--bbbb--bbbb--aacc-------[r(2), r(3), r(4), r(5)]4 scf: -------aacc--abbc--abbc--aacc-------[r(2), r(3), r(4), r(5)]4 scf: -------aaaa--abba--cbbc--cccc-------[r(2), r(3), r(4), r(5)]4 scf: -------aa--c-ab--b-------------ab--c[r(2), r(3), r(6)]3 scf: -------aa--a-ab--b-------------cb--c[r(2), r(3), r(6)]3 scf: -------aa--c-ab--b-------------cb--c[r(2), r(3), r(6)]3 scf: -------ab--c-ab--b-------------cb--c[r(2), r(3), r(6)]3 scf: -------aa--c-bb--b-------------cb--c[r(2), r(3), r(6)]3 scf: -------aa--c-ab--c-------------cb--c[r(2), r(3), r(6)]3 scf: -------aa--c-ab--b-------------cc--c[r(2), r(3), r(6)]3 No ?- % There are relatively few moderate basis NDNMs. ?- findall((K,U,G), (auto_restricted_domain(U),length(U,K), (auto_scf( G,sp), citizens_sovereignty(G),is_non_dictatorial_scf(G))), SL),length(SL,N),nl,write(N:scf_and_domains),findall((K,L,F),( member((K,L,F),SL),\+ (member((_,U,G),SL),G\=F,subset(L,U),subset(F,G))),BL), member((K,L,F),BL),is_moderate_scf(F), show_scf_hr_0(F),write(L),write(K),fail. 290:scf_and_domains scf: aa-b-caa-b-c------bc-b-c------bc-b-c[r(1), r(2), r(4), r(6)]4 scf: aa-b-baa-c-c------bb-b-b------cc-c-c[r(1), r(2), r(4), r(6)]4 scf: a-b-ab------a-b-ab------a-b-cca-b-cc[r(1), r(3), r(5), r(6)]4 scf: a-a-aa------b-b-bb------a-a-ccb-b-cc[r(1), r(3), r(5), r(6)]4 scf: a--ba-------------b--bc-a--cc-------[r(1), r(4), r(5)]3 scf: -------aacc--abbc--abbc--aacc-------[r(2), r(3), r(4), r(5)]4 scf: -------aaaa--abba--cbbc--cccc-------[r(2), r(3), r(4), r(5)]4 scf: -------aa--c-ab--b-------------cb--c[r(2), r(3), r(6)]3 No ?- % Other moderate (non)basis NDNMs at level 4. ?- findall((K,U,G), (auto_restricted_domain(U),length(U,K), (auto_scf( G,sp), citizens_sovereignty(G),is_non_dictatorial_scf(G))), SL),member((K,L,F),SL),K=4,is_moderate_scf(F), show_scf_hr_0(F),write(L),write(K),fail. scf: aaa-a-aaa-a-aab-a-------aaa-c-------[r(1), r(2), r(3), r(5)]4 scf: aa-b-baa-b-c------bb-b-b------bc-b-c[r(1), r(2), r(4), r(6)]4 scf: aa-b-caa-b-c------bc-b-c------bc-b-c[r(1), r(2), r(4), r(6)]4 scf: aa-b-baa-c-c------bb-b-b------cc-c-c[r(1), r(2), r(4), r(6)]4 scf: aa-b-caa-c-c------bc-b-c------cc-c-c[r(1), r(2), r(4), r(6)]4 scf: a-bb-b------b-bb-bb-bb-b------b-bb-c[r(1), r(3), r(4), r(6)]4 scf: a-a-aa------a-b-ab------a-a-cca-b-cc[r(1), r(3), r(5), r(6)]4 scf: a-b-ab------a-b-ab------a-b-cca-b-cc[r(1), r(3), r(5), r(6)]4 scf: a-a-aa------b-b-bb------a-a-ccb-b-cc[r(1), r(3), r(5), r(6)]4 scf: a-b-ab------b-b-bb------a-b-ccb-b-cc[r(1), r(3), r(5), r(6)]4 scf: -------aaaa--abba--abbc--aacc-------[r(2), r(3), r(4), r(5)]4 scf: -------aacc--abbc--abbc--aacc-------[r(2), r(3), r(4), r(5)]4 scf: -------aaaa--abba--cbbc--cccc-------[r(2), r(3), r(4), r(5)]4 scf: -------aacc--abbc--cbbc--cccc-------[r(2), r(3), r(4), r(5)]4 scf: -------a-ccc-------c-bcc-c-ccc-c-ccc[r(2), r(4), r(5), r(6)]4 No ?- % simple majority rule for permissible NDNM domains: % Some of them are NDNM. % But there are lot of non-NDNM simple majority SCFs. % Q. Every NDNM for two rankings domain can be a simple majority rule? % A. Yes. ?- auto_restricted_domain(U),length(U,2),auto_scf(F,sp), citizens_sovereignty(F),is_non_dictatorial_scf(F), (auto_scf(F,majority)->M=1;M=0), show_scf_hr_0(F),write(U),write(2:M),fail. scf: a----b------------------------a----c[r(1), r(6)]2:1 scf: a----a------------------------b----c[r(1), r(6)]2:1 scf: a----b------------------------b----c[r(1), r(6)]2:1 scf: a----c------------------------b----c[r(1), r(6)]2:1 scf: a----b------------------------c----c[r(1), r(6)]2:1 scf: -------a-c---------a-b--------------[r(2), r(4)]2:1 scf: -------a-c---------b-b--------------[r(2), r(4)]2:1 scf: -------a-a---------c-b--------------[r(2), r(4)]2:1 scf: -------a-b---------c-b--------------[r(2), r(4)]2:1 scf: -------a-c---------c-b--------------[r(2), r(4)]2:1 scf: --------------b-a---------a-c-------[r(3), r(5)]2:1 scf: --------------b-b---------a-c-------[r(3), r(5)]2:1 scf: --------------b-c---------a-c-------[r(3), r(5)]2:1 scf: --------------b-a---------b-c-------[r(3), r(5)]2:1 scf: --------------b-a---------c-c-------[r(3), r(5)]2:1 No ?- % Q. Every simple majority rule is nonmanipulable at K=2 ? % A. No. ?- auto_restricted_domain(U),length(U,2),auto_scf(F,majority), is_non_manipulable_scf(F), show_scf_hr_0(F). scf: aa----aa---------------------------- U = [r(1), r(2)] F = [ (r(1), r(1)->a), (r(1), r(2)->a), (r(2), r(1)->a), (r(2), r(2)->a)] Yes ?- auto_restricted_domain(U),length(U,2),auto_scf(F,majority), \+ is_non_manipulable_scf(F), show_scf_hr_0(F). scf: ab----aa---------------------------- U = [r(1), r(2)] F = [ (r(1), r(1)->a), (r(1), r(2)->b), (r(2), r(1)->a), (r(2), r(2)->a)] Yes ?- % Q. Is there a simple majority decision SCF in the set of NDNM pairs ? % A. Yes. % For example, at K=5 as shown below, every NDNM scf is a simple majority SCF. ?- findall((M,K,U,G), (auto_restricted_domain(U),length(U,K), auto_scf( G,sp), citizens_sovereignty(G),is_non_dictatorial_scf(G),(auto_scf(G,majority)->M=1;M=0)), SL),length(SL,N),nl,write(N:scf_and_domains),member((M,K,L,F),SL),K=5, show_scf_hr_0(F),write(L:K:M),fail. 290:scf_and_domains scf: aabba-aabba-bbbbb-bbbbb-aabbc-------[r(1), r(2), r(3), r(4), r(5)]:5:1 scf: aabba-aabba-aabba-aabbc-aabbc-------[r(1), r(2), r(3), r(4), r(5)]:5:1 scf: aaaaa-aaaaa-bbbbb-bbbbb-aaacc-------[r(1), r(2), r(3), r(4), r(5)]:5:1 scf: aaaaa-aaaaa-aabba-aabbc-aaacc-------[r(1), r(2), r(3), r(4), r(5)]:5:1 scf: aaaa-aaaaa-aaabb-baabb-b------aabb-c[r(1), r(2), r(3), r(4), r(6)]:5:1 scf: aabb-baabb-caabb-baabb-b------aabb-c[r(1), r(2), r(3), r(4), r(6)]:5:1 scf: aaaa-aaaaa-abbbb-bbbbb-b------bcbb-c[r(1), r(2), r(3), r(4), r(6)]:5:1 scf: aabb-baabb-cbbbb-bbbbb-b------bcbb-c[r(1), r(2), r(3), r(4), r(6)]:5:1 scf: aaa-aaaaa-aaaab-ab------aaa-ccaab-cc[r(1), r(2), r(3), r(5), r(6)]:5:1 scf: aaa-ccaaa-ccaab-cc------aaa-ccaab-cc[r(1), r(2), r(3), r(5), r(6)]:5:1 scf: aaa-aaaaa-aaaab-ab------ccc-ccccc-cc[r(1), r(2), r(3), r(5), r(6)]:5:1 scf: aaa-ccaaa-ccaab-cc------ccc-ccccc-cc[r(1), r(2), r(3), r(5), r(6)]:5:1 scf: aa-aaaaa-aaa------aa-bccaa-cccaa-ccc[r(1), r(2), r(4), r(5), r(6)]:5:1 scf: aa-bccaa-ccc------aa-bccaa-cccaa-ccc[r(1), r(2), r(4), r(5), r(6)]:5:1 scf: aa-aaaaa-aaa------bc-bcccc-ccccc-ccc[r(1), r(2), r(4), r(5), r(6)]:5:1 scf: aa-bccaa-ccc------bc-bcccc-ccccc-ccc[r(1), r(2), r(4), r(5), r(6)]:5:1 scf: a-bbab------b-bbbbb-bbbba-bbccb-bbcc[r(1), r(3), r(4), r(5), r(6)]:5:1 scf: a-bbcc------b-bbccb-bbcca-bbccb-bbcc[r(1), r(3), r(4), r(5), r(6)]:5:1 scf: a-bbab------b-bbbbb-bbbbc-ccccc-cccc[r(1), r(3), r(4), r(5), r(6)]:5:1 scf: a-bbcc------b-bbccb-bbccc-ccccc-cccc[r(1), r(3), r(4), r(5), r(6)]:5:1 scf: -------abbcc-bbbbb-bbbbb-cbbcc-cbbcc[r(2), r(3), r(4), r(5), r(6)]:5:1 scf: -------abbcc-abbcc-cbbcc-cbbcc-cbbcc[r(2), r(3), r(4), r(5), r(6)]:5:1 scf: -------aaccc-bbbbb-bbbbb-ccccc-ccccc[r(2), r(3), r(4), r(5), r(6)]:5:1 scf: -------aaccc-abbcc-cbbcc-ccccc-ccccc[r(2), r(3), r(4), r(5), r(6)]:5:1 No ?- % And I show the cases of NDNM basis for K=3. ?- findall((M,K,U,G), (auto_restricted_domain(U),length(U,K), auto_scf( G,sp), citizens_sovereignty(G),is_non_dictatorial_scf(G),(auto_scf(G,majority)->M=1;M=0)), SL),length(SL,N),nl,write(N:scf_and_domains), member((M,K,L,F),SL),K=3, \+ (member((_,_,U,G),SL),G\=F,subset(L,U),subset(F,G)), show_scf_hr_0(F),write(L),write(K:M),fail. 290:scf_and_domains scf: a--ba-------------b--bc-a--bc-------[r(1), r(4), r(5)]3:1 scf: a--ba-------------b--bb-a--cc-------[r(1), r(4), r(5)]3:1 scf: a--ba-------------a--bc-a--cc-------[r(1), r(4), r(5)]3:1 scf: a--aa-------------b--bc-a--cc-------[r(1), r(4), r(5)]3:1 scf: a--ba-------------b--bc-a--cc-------[r(1), r(4), r(5)]3:1 scf: a--bc-------------b--bc-a--cc-------[r(1), r(4), r(5)]3:1 scf: a--ba-------------b--bc-c--cc-------[r(1), r(4), r(5)]3:1 scf: -------aa--c-ab--b-------------ab--c[r(2), r(3), r(6)]3:1 scf: -------aa--a-ab--b-------------cb--c[r(2), r(3), r(6)]3:1 scf: -------aa--c-ab--b-------------cb--c[r(2), r(3), r(6)]3:1 scf: -------ab--c-ab--b-------------cb--c[r(2), r(3), r(6)]3:1 scf: -------aa--c-bb--b-------------cb--c[r(2), r(3), r(6)]3:1 scf: -------aa--c-ab--c-------------cb--c[r(2), r(3), r(6)]3:1 scf: -------aa--c-ab--b-------------cc--c[r(2), r(3), r(6)]3:1 No ?- % Q. Is there a non simple majority decision SCF (intransitivity) % in the set of NDNM pairs ? % A. No. ?- auto_restricted_domain(U),length(U,K), auto_scf( G,sp), citizens_sovereignty(G),is_non_dictatorial_scf(G),\+ auto_scf(G,majority). No ?- % embedding (non-maximal) 3 rankings NDNM scfs % into 5 rankings (maximal) NDMS scfs. ?- findall((K,U,G), (auto_restricted_domain(U),length(U,K), (auto_scf( G,sp), citizens_sovereignty(G),is_non_dictatorial_scf(G))), SL),length(SL,N),nl,write(N:scf_and_domains),member(L,[[r(1),r(4),r(5)],[r(2),r(3),r(6)]]),3,L,F),SL),show_scf_hr_0(F),write(L),write(2), member((3,L,F),SL),show_scf_hr_0(F),write(L),write(2), member((5,U,G),SL),subset(L,U),subset(F,G), show_scf_hr_0(G),write(U),write(5),fail. 290:scf_and_domains scf: a--ba-------------b--bb-a--bc-------[r(1), r(4), r(5)]2 scf: aabba-aabba-bbbbb-bbbbb-aabbc-------[r(1), r(2), r(3), r(4), r(5)]5 scf: a-bbab------b-bbbbb-bbbba-bbccb-bbcc[r(1), r(3), r(4), r(5), r(6)]5 scf: a--ba-------------a--bc-a--bc-------[r(1), r(4), r(5)]2 scf: aabba-aabba-aabba-aabbc-aabbc-------[r(1), r(2), r(3), r(4), r(5)]5 scf: a--ba-------------b--bc-a--bc-------[r(1), r(4), r(5)]2 scf: a--bc-------------b--bc-a--bc-------[r(1), r(4), r(5)]2 scf: a-bbcc------b-bbccb-bbcca-bbccb-bbcc[r(1), r(3), r(4), r(5), r(6)]5 scf: a--aa-------------b--bb-a--cc-------[r(1), r(4), r(5)]2 scf: aaaaa-aaaaa-bbbbb-bbbbb-aaacc-------[r(1), r(2), r(3), r(4), r(5)]5 scf: a--ba-------------b--bb-a--cc-------[r(1), r(4), r(5)]2 scf: a--aa-------------a--bc-a--cc-------[r(1), r(4), r(5)]2 scf: aaaaa-aaaaa-aabba-aabbc-aaacc-------[r(1), r(2), r(3), r(4), r(5)]5 scf: aa-aaaaa-aaa------aa-bccaa-cccaa-ccc[r(1), r(2), r(4), r(5), r(6)]5 scf: a--ba-------------a--bc-a--cc-------[r(1), r(4), r(5)]2 scf: a--bc-------------a--bc-a--cc-------[r(1), r(4), r(5)]2 scf: aa-bccaa-ccc------aa-bccaa-cccaa-ccc[r(1), r(2), r(4), r(5), r(6)]5 scf: a--aa-------------b--bc-a--cc-------[r(1), r(4), r(5)]2 scf: a--ba-------------b--bc-a--cc-------[r(1), r(4), r(5)]2 scf: a--bc-------------b--bc-a--cc-------[r(1), r(4), r(5)]2 scf: a--ba-------------b--bb-c--cc-------[r(1), r(4), r(5)]2 scf: a-bbab------b-bbbbb-bbbbc-ccccc-cccc[r(1), r(3), r(4), r(5), r(6)]5 scf: a--aa-------------b--bc-c--cc-------[r(1), r(4), r(5)]2 scf: aa-aaaaa-aaa------bc-bcccc-ccccc-ccc[r(1), r(2), r(4), r(5), r(6)]5 scf: a--ba-------------b--bc-c--cc-------[r(1), r(4), r(5)]2 scf: a--bc-------------b--bc-c--cc-------[r(1), r(4), r(5)]2 scf: aa-bccaa-ccc------bc-bcccc-ccccc-ccc[r(1), r(2), r(4), r(5), r(6)]5 scf: a-bbcc------b-bbccb-bbccc-ccccc-cccc[r(1), r(3), r(4), r(5), r(6)]5 scf: -------aa--a-ab--b-------------ab--c[r(2), r(3), r(6)]2 scf: aaaa-aaaaa-aaabb-baabb-b------aabb-c[r(1), r(2), r(3), r(4), r(6)]5 scf: aaa-aaaaa-aaaab-ab------aaa-ccaab-cc[r(1), r(2), r(3), r(5), r(6)]5 scf: -------aa--c-ab--b-------------ab--c[r(2), r(3), r(6)]2 scf: -------ab--c-ab--b-------------ab--c[r(2), r(3), r(6)]2 scf: -------ab--c-ab--b-------------ab--c[r(2), r(3), r(6)]2 scf: aabb-baabb-caabb-baabb-b------aabb-c[r(1), r(2), r(3), r(4), r(6)]5 scf: -------aa--c-ab--c-------------ab--c[r(2), r(3), r(6)]2 scf: aaa-ccaaa-ccaab-cc------aaa-ccaab-cc[r(1), r(2), r(3), r(5), r(6)]5 scf: -------aa--a-ab--b-------------cb--c[r(2), r(3), r(6)]2 scf: -------aa--c-ab--b-------------cb--c[r(2), r(3), r(6)]2 scf: -------ab--c-ab--b-------------cb--c[r(2), r(3), r(6)]2 scf: -------aa--a-bb--b-------------cb--c[r(2), r(3), r(6)]2 scf: aaaa-aaaaa-abbbb-bbbbb-b------bcbb-c[r(1), r(2), r(3), r(4), r(6)]5 scf: -------aa--c-bb--b-------------cb--c[r(2), r(3), r(6)]2 scf: -------ab--c-bb--b-------------cb--c[r(2), r(3), r(6)]2 scf: aabb-baabb-cbbbb-bbbbb-b------bcbb-c[r(1), r(2), r(3), r(4), r(6)]5 scf: -------abbcc-bbbbb-bbbbb-cbbcc-cbbcc[r(2), r(3), r(4), r(5), r(6)]5 scf: -------aa--c-ab--c-------------cb--c[r(2), r(3), r(6)]2 scf: -------ab--c-ab--c-------------cb--c[r(2), r(3), r(6)]2 scf: -------abbcc-abbcc-cbbcc-cbbcc-cbbcc[r(2), r(3), r(4), r(5), r(6)]5 scf: -------aa--a-ab--b-------------cc--c[r(2), r(3), r(6)]2 scf: aaa-aaaaa-aaaab-ab------ccc-ccccc-cc[r(1), r(2), r(3), r(5), r(6)]5 scf: -------aa--c-ab--b-------------cc--c[r(2), r(3), r(6)]2 scf: -------aa--c-bb--b-------------cc--c[r(2), r(3), r(6)]2 scf: -------aaccc-bbbbb-bbbbb-ccccc-ccccc[r(2), r(3), r(4), r(5), r(6)]5 scf: -------aa--c-ab--c-------------cc--c[r(2), r(3), r(6)]2 scf: aaa-ccaaa-ccaab-cc------ccc-ccccc-cc[r(1), r(2), r(3), r(5), r(6)]5 scf: -------aaccc-abbcc-cbbcc-ccccc-ccccc[r(2), r(3), r(4), r(5), r(6)]5 No ?- */ %------------------------------------------------- % avoiding voting paradoxes %------------------------------------------------- % betweenness and single-peaked preference %------------------------------------------------- % Arrow(1963 p.77). See also Black(1948), and Sen (1982). % revised: 18 Apr 2006. betweenness((X,Y,Z),S,O):- distinct_ordered_triple( (X,Y,Z)), possible_ranking_0(S,O), % R=r(1,6),r(2,4),r(3,5) member(O,[[X,Y,Z],[Z,Y,X]]). betweenness_lemma:- \+ violates_betweenness_lemma(_,_,_). violates_betweenness_lemma((X,Y,Z),[O,B,C],(P,F)):- BL=[(X,Y,Z),(Y,X,Z),(Y,Z,X)], distinct_ordered_triple( (X,Y,Z)), ((member(B,BL), betweenness(B,_,O))->P=y;P=n), ((P=y,member(C,BL), C\=B, betweenness(C,_,O))->F=n;F=y), (P,F) \= (y,y). /* ?- auto_restricted_domain(H),H\=[], violates_betweenness_lemma(A,B,C). No ?- */ is_single_peaked:- \+ \+ ( betweenness((X,Y,Z),_S,_), \+ is_not_single_peaked((X,Y,Z),_R) ). % nogood. is_not_single_peaked((X,Y,Z),R):- prefer_x_to_y(X,Y,R), \+ prefer_x_to_y(Y,Z,R). is_not_single_peaked_b((X,Y,Z),R):- prefer_x_to_y(X,Y,R), prefer_x_to_y(Z,Y,R). is_single_peaked_1:- forall( % triple_of_alternative((X,Y,Z)), distinct_ordered_triple( (X,Y,Z)), ( alternative(W), forall( profile_of_rankings( R12), is_agreed_on( not_worst, W,(X,Y,Z), R12) ) ) ). % See Muller and Satterthwaite(1977). % which coincides with Sen& Pattanaik. % Note: if possible_ranking/2 instead of possible_ranking_0/2 % then [1,2],[3,4],[5,6],[] (which are ERs) will fail. is_single_peaked_2:- \+ \+ ( ( %distinct_ordered_triple( (X,Y,Z)), possible_ranking_0(Q,[X,Y,Z]); possible_ranking_0(Q,[Z,Y,X]) ), \+ ( prefer_x_to_y(X,Y,R), prefer_x_to_y(Z,Y,R) ) ). % a version is_single_peaked_2_b:- \+ \+ ( ( %distinct_ordered_triple( (X,Y,Z)), possible_ranking_0(Q,[X,Y,Z]); possible_ranking_0(Q,[Z,Y,X]) ), \+ ( prefer_x_to_y(X,Y,R), \+ prefer_x_to_y(Y,Z,R) ) ). % nogood. The following is ER (sa me as old is_s._p.) is_single_peaked_2_er:- forall( ( %distinct_ordered_triple( (X,Y,Z)), possible_ranking_0(_P,[X,Y,Z]) ), \+ ( prefer_x_to_y(X,Y,R), prefer_x_to_y(Z,Y,R) ) ). set_of_single_peaked_preferences_relative_to(P,S):- possible_ranking_0(P,[X,Y,Z]), findall(R, ( possible_ranking_0(R,_), \+ ( prefer_x_to_y_0(X,Y,R), prefer_x_to_y_0(Z,Y,R) ) ), S). /* ?- set_of_single_peaked_preferences_relative_to(P,S). P = r(1) S = [r(1), r(3), r(4), r(6)] ; P = r(2) S = [r(2), r(4), r(5), r(6)] ; P = r(3) S = [r(1), r(2), r(3), r(5)] ; P = r(4) S = [r(2), r(4), r(5), r(6)] ; P = r(5) S = [r(1), r(2), r(3), r(5)] ; P = r(6) S = [r(1), r(3), r(4), r(6)] ; No ?- */ % value restriction (VR) %------------------------------------------------- % See Inada (1964), Sen (1982). % revised: 18 Apr % revised: 16-24,28 May for the auto-generation (later part) % for logically possible rankings value_restriction_in_rankings( S, (C, W), (X,Y,Z), L):- type_of_value_restriction( S,agree_on(C),_), member(W,[X,Y,Z]), subtract([X,Y,Z],[W],[U,V]), forall( (possible_ranking_0( R,_),member(R,L)), value_restriction_0( S, C, (W,U,V), R) ). value_restriction_0( sp, not_worst, (X,Y,Z), R):- prefer_x_to_y_0( X, Y, R) ; prefer_x_to_y_0( X, Z, R). value_restriction_0( sc, not_best, (X,Y,Z), R):- prefer_x_to_y_0( Y, X, R) ; prefer_x_to_y_0( Z, X, R). value_restriction_0( s2, not_medium, (X,Y,Z), R):- prefer_x_to_y_0( X, Y, R), prefer_x_to_y_0( X, Z, R). value_restriction_0( s2, not_medium, (X,Y,Z), R):- prefer_x_to_y_0( Y, X, R), prefer_x_to_y_0( Z, X, R). % an earlier non-recursive version. value_restriction( S):- % type_of_value_restriction( S,agree_on(_C),_), forall( triple_of_alternative( (X,Y,Z)), value_restriction( S, _C, (X,Y,Z)) ). value_restriction( S, C, (X,Y,Z)):- type_of_value_restriction( S,agree_on(C),_), member(W,[X,Y,Z]), subtract([X,Y,Z],[W],[U,V]), forall( possible_ranking( R,_), value_restriction( S, C, (W,U,V), R) ). value_restriction( sp, not_worst, (X,Y,Z), R):- prefer_x_to_y( X, Y, R) ; prefer_x_to_y( X, Z, R). value_restriction( sc, not_best, (X,Y,Z), R):- prefer_x_to_y( Y, X, R) ; prefer_x_to_y( Z, X, R). value_restriction( s2, not_medium, (X,Y,Z), R):- prefer_x_to_y( X, Y, R), prefer_x_to_y( X, Z, R). value_restriction( s2, not_medium, (X,Y,Z), R):- prefer_x_to_y( Y, X, R), prefer_x_to_y( Z, X, R). % the alternative but relatively slow. value_restriction_1( S):- forall( triple_of_alternative((X,Y,Z)), % distinct_ordered_triple( (X,Y,Z)), ( type_of_value_restriction( S,agree_on(C),_), alternative(W), member(W,[X,Y,Z]), forall( profile_of_rankings( R12), is_agreed_on( C, W,(X,Y,Z), R12) ) ) ). % The majority-decision-SDF iff VR % (Sen and Pattanaik, 1969, Theorem VIII). type_of_value_restriction( 'sp', agree_on( not_worst), 'A weaker version of Single-Peakedness by Black(1948) and Arrow(1963)' ). type_of_value_restriction( 'sc', agree_on( not_best), 'A weaker version of Single-Cavedness by Inada(1964)' ). type_of_value_restriction( 's2', agree_on( not_medium), 'A weaker version of Separability into 2 Groups by Inada(1964)' ). % modified: 16 may 2006. is_agreed_on( C, W, (X,Y,Z), Rankings):- member((K,C),[ (1, not_best), (2, not_medium), (3, not_worst) ]), member(W, [X,Y,Z]), \+ ( member( R, Rankings), rank_in_list( K, W, [X,Y,Z], R) ). rank_in_list( K, A, List, R):- possible_ranking( R,_), member( A, List), rank_in_list_1( K, A, List, R). rank_in_list_1( 1, A, List, R):- \+ ( member( B, List), prefer_x_to_y( B, A, R) ). rank_in_list_1( 3, A, List, R):- \+ ( member( B, List), prefer_x_to_y( A, B, R) ). rank_in_list_1( 2, A, List, R):- \+ rank_in_list( 1, A, List, R), \+ rank_in_list( 3, A, List, R). /* ?- auto_restricted_domain(H),findall(A,( member(S,[sp,sc,s2]),(value_restriction(S)->A=S;A='-')),L), (\+ \+ is_cdi_pairs(_,_)->Z=cdi;Z='-'), ((Z=cdi,L=[sp|_])->(nl,write([Z|L]:H));true),fail. [cdi, sp, -, -]:[r(1), r(2), r(3), r(5)] [cdi, sp, -, -]:[r(1), r(3), r(4), r(6)] [cdi, sp, -, s2]:[r(1), r(3), r(5)] [cdi, sp, -, s2]:[r(1), r(3), r(6)] [cdi, sp, -, s2]:[r(1), r(4), r(6)] [cdi, sp, sc, s2]:[r(1), r(6)] [cdi, sp, -, s2]:[r(2), r(3), r(5)] [cdi, sp, -, -]:[r(2), r(4), r(5), r(6)] [cdi, sp, -, s2]:[r(2), r(4), r(5)] [cdi, sp, -, s2]:[r(2), r(4), r(6)] [cdi, sp, sc, s2]:[r(2), r(4)] [cdi, sp, sc, s2]:[r(3), r(5)] No ?- auto_restricted_domain(H),findall(A,( member(S,[sp,sc,s2]),(value_restriction(S)->A=S;A='-')),L), (\+ \+ is_cdi_pairs(_,_)->Z=cdi;Z='-'), ((Z=cdi,member(sc,L))->(nl,write([Z|L]:H));true),fail. [cdi, -, sc, -]:[r(1), r(2), r(3), r(4)] [cdi, -, sc, s2]:[r(1), r(2), r(4)] [cdi, -, sc, -]:[r(1), r(2), r(5), r(6)] [cdi, -, sc, s2]:[r(1), r(2), r(6)] [cdi, -, sc, s2]:[r(1), r(5), r(6)] [cdi, sp, sc, s2]:[r(1), r(6)] [cdi, -, sc, s2]:[r(2), r(3), r(4)] [cdi, sp, sc, s2]:[r(2), r(4)] [cdi, -, sc, -]:[r(3), r(4), r(5), r(6)] [cdi, -, sc, s2]:[r(3), r(4), r(5)] [cdi, -, sc, s2]:[r(3), r(5), r(6)] [cdi, sp, sc, s2]:[r(3), r(5)] No ?- auto_restricted_domain(H),findall(A,( member(S,[sp,sc,s2]),(value_restriction(S)->A=S;A='-')),L), (\+ \+ is_cdi_pairs(_,_)->Z=cdi;Z='-'), ((Z=cdi,member(s2,L))->(nl,write([Z|L]:H));true),fail. [cdi, -, -, s2]:[r(1), r(2), r(4), r(6)] [cdi, -, sc, s2]:[r(1), r(2), r(4)] [cdi, -, sc, s2]:[r(1), r(2), r(6)] [cdi, -, -, s2]:[r(1), r(3), r(5), r(6)] [cdi, sp, -, s2]:[r(1), r(3), r(5)] [cdi, sp, -, s2]:[r(1), r(3), r(6)] [cdi, sp, -, s2]:[r(1), r(4), r(6)] [cdi, -, sc, s2]:[r(1), r(5), r(6)] [cdi, sp, sc, s2]:[r(1), r(6)] [cdi, -, -, s2]:[r(2), r(3), r(4), r(5)] [cdi, -, sc, s2]:[r(2), r(3), r(4)] [cdi, sp, -, s2]:[r(2), r(3), r(5)] [cdi, sp, -, s2]:[r(2), r(4), r(5)] [cdi, sp, -, s2]:[r(2), r(4), r(6)] [cdi, sp, sc, s2]:[r(2), r(4)] [cdi, -, sc, s2]:[r(3), r(4), r(5)] [cdi, -, sc, s2]:[r(3), r(5), r(6)] [cdi, sp, sc, s2]:[r(3), r(5)] No ?- ?- ?- auto_restricted_domain(H),findall(A,( member(S,[sp,sc,s2]), (value_restriction(S)->A=1;A=0)),L), (\+ \+ is_cdi_pairs(_,_)->Z=1;Z=0), (\+ member(0,[Z|L])->(nl,write([Z|L]:H));true),fail. [1, 1, 1, 1]:[r(1), r(6)] [1, 1, 1, 1]:[r(2), r(4)] [1, 1, 1, 1]:[r(3), r(5)] No ?- auto_restricted_domain(H),findall(A,( member(S,[sp,sc,s2]), (value_restriction(S)->A=1;A=0)),L), (\+ \+ is_cdi_pairs(_,_)->Z=1;Z=0), (member(1,L),Z=1->(nl,write([Z|L]:H));true),fail. [1, 0, 1, 0]:[r(1), r(2), r(3), r(4)] [1, 1, 0, 0]:[r(1), r(2), r(3), r(5)] [1, 0, 0, 1]:[r(1), r(2), r(4), r(6)] [1, 0, 1, 1]:[r(1), r(2), r(4)] [1, 0, 1, 0]:[r(1), r(2), r(5), r(6)] [1, 0, 1, 1]:[r(1), r(2), r(6)] [1, 1, 0, 0]:[r(1), r(3), r(4), r(6)] [1, 0, 0, 1]:[r(1), r(3), r(5), r(6)] [1, 1, 0, 1]:[r(1), r(3), r(5)] [1, 1, 0, 1]:[r(1), r(3), r(6)] [1, 1, 0, 1]:[r(1), r(4), r(6)] [1, 0, 1, 1]:[r(1), r(5), r(6)] [1, 1, 1, 1]:[r(1), r(6)] [1, 0, 0, 1]:[r(2), r(3), r(4), r(5)] [1, 0, 1, 1]:[r(2), r(3), r(4)] [1, 1, 0, 1]:[r(2), r(3), r(5)] [1, 1, 0, 0]:[r(2), r(4), r(5), r(6)] [1, 1, 0, 1]:[r(2), r(4), r(5)] [1, 1, 0, 1]:[r(2), r(4), r(6)] [1, 1, 1, 1]:[r(2), r(4)] [1, 0, 1, 0]:[r(3), r(4), r(5), r(6)] [1, 0, 1, 1]:[r(3), r(4), r(5)] [1, 0, 1, 1]:[r(3), r(5), r(6)] [1, 1, 1, 1]:[r(3), r(5)] No ?- ?- auto_restricted_domain(H), value_restriction(sp),nl, write(H),fail. [r(1), r(2), r(3), r(5)] [r(1), r(2), r(3)] [r(1), r(2), r(5)] [r(1), r(2)] [r(1), r(3), r(4), r(6)] [r(1), r(3), r(4)] [r(1), r(3), r(5)] [r(1), r(3), r(6)] [r(1), r(3)] [r(1), r(4), r(6)] [r(1), r(4)] [r(1), r(5)] [r(1), r(6)] [r(1)] [r(2), r(3), r(5)] [r(2), r(3)] [r(2), r(4), r(5), r(6)] [r(2), r(4), r(5)] [r(2), r(4), r(6)] [r(2), r(4)] [r(2), r(5), r(6)] [r(2), r(5)] [r(2), r(6)] [r(2)] [r(3), r(4), r(6)] [r(3), r(4)] [r(3), r(5)] [r(3), r(6)] [r(3)] [r(4), r(5), r(6)] [r(4), r(5)] [r(4), r(6)] [r(4)] [r(5), r(6)] [r(5)] [r(6)] [] No ?- */ % Sen's latin square condition (Sen, 1966) %------------------------------------------------- value_restriction_by_latin_square:- \+ involves_latin_square(_,_,_). /* involves_latin_square(type(1),(X,Y,Z),(R1,R2,R3)):- set_of_alternatives([_,_,_]), possible_ranking(R1,[X,Y,Z]), possible_ranking(R2,[Y,Z,X]), possible_ranking(R3,[Z,X,Y]). involves_latin_square(type(2),(X,Y,Z),(R1,R2,R3)):- set_of_alternatives([_,_,_]), possible_ranking(R1,[X,Z,Y]), possible_ranking(R2,[Z,Y,X]), possible_ranking(R3,[Y,X,Z]). */ involves_latin_square(type(1),(X,Y,Z),(R1,R2,R3)):- % \+ set_of_alternatives([_,_,_]), prefer_x_to_y(X,Y,R1), prefer_x_to_y(Y,Z,R1), prefer_x_to_y(Z,X,R2), prefer_x_to_y(Y,Z,R2), prefer_x_to_y(X,Y,R3), prefer_x_to_y(Z,X,R3). involves_latin_square(type(2),(X,Y,Z),(R1,R2,R3)):- % \+ set_of_alternatives([_,_,_]), prefer_x_to_y(X,Z,R1), prefer_x_to_y(Z,Y,R1), prefer_x_to_y(Z,Y,R2), prefer_x_to_y(Y,X,R2), prefer_x_to_y(Y,X,R3), prefer_x_to_y(X,Z,R3). /* % 17-8 Apr 2006. ?- auto_restricted_domain(H),findall(A,( member(S,[sp,sc,s2]),(value_restriction(S)->A=(v,S);A='-')),L), (\+ \+ is_cdi_pairs(_,_)->Z=cdi;Z='-'), (extremal_restriction->ER='e';ER='-'), (limited_agreement->LA=l;LA='-'), (is_nontrivial->NT=n;NT='-'),(is_single_peaked_2->Sp=1;Sp=0), Z\=cdi,nl,write([Z,NT,ER,Sp,LA|L]:H),fail. [-, n, -, 0, -, -, -, -]:[r(1), r(2), r(3), r(4), r(5), r(6)] [-, -, -, 0, l, (v, sp), (v, sc), -]:[r(1), r(2), r(3)] [-, -, -, 0, l, (v, sp), (v, sc), -]:[r(1), r(2), r(5)] [-, -, e, 0, l, (v, sp), (v, sc), (v, s2)]:[r(1), r(2)] [-, -, -, 0, l, (v, sp), (v, sc), -]:[r(1), r(3), r(4)] [-, -, e, 1, l, (v, sp), (v, sc), (v, s2)]:[r(1), r(3)] [-, -, -, 0, l, (v, sp), (v, sc), (v, s2)]:[r(1), r(4)] [-, -, -, 0, l, (v, sp), (v, sc), (v, s2)]:[r(1), r(5)] [-, -, e, 1, l, (v, sp), (v, sc), (v, s2)]:[r(1)] [-, -, -, 0, l, (v, sp), (v, sc), (v, s2)]:[r(2), r(3)] [-, -, -, 0, l, (v, sp), (v, sc), -]:[r(2), r(5), r(6)] [-, -, e, 1, l, (v, sp), (v, sc), (v, s2)]:[r(2), r(5)] [-, -, -, 0, l, (v, sp), (v, sc), (v, s2)]:[r(2), r(6)] [-, -, e, 1, l, (v, sp), (v, sc), (v, s2)]:[r(2)] [-, -, -, 0, l, (v, sp), (v, sc), -]:[r(3), r(4), r(6)] [-, -, e, 0, l, (v, sp), (v, sc), (v, s2)]:[r(3), r(4)] [-, -, -, 0, l, (v, sp), (v, sc), (v, s2)]:[r(3), r(6)] [-, -, e, 1, l, (v, sp), (v, sc), (v, s2)]:[r(3)] [-, -, -, 0, l, (v, sp), (v, sc), -]:[r(4), r(5), r(6)] [-, -, -, 0, l, (v, sp), (v, sc), (v, s2)]:[r(4), r(5)] [-, -, e, 1, l, (v, sp), (v, sc), (v, s2)]:[r(4), r(6)] [-, -, e, 1, l, (v, sp), (v, sc), (v, s2)]:[r(4)] [-, -, e, 0, l, (v, sp), (v, sc), (v, s2)]:[r(5), r(6)] [-, -, e, 1, l, (v, sp), (v, sc), (v, s2)]:[r(5)] [-, -, e, 1, l, (v, sp), (v, sc), (v, s2)]:[r(6)] [-, -, e, 1, l, (v, sp), (v, sc), (v, s2)]:[] No */ % extremal restriction (ER) %------------------------------------------------- % Sen and Pattanaik (1969), Inada (1969). % revised: 17-20 Apr 2006. extremal_restriction:- forall( distinct_ordered_triple( (X,Y,Z)), \+ violates_extremal_restriction((X,Y,Z),_) ). violates_extremal_restriction((X,Y,Z),(R,Q)):- possible_ranking(R,[X,Y,Z]), prefer_x_to_y(Z,X,Q), \+ possible_ranking(Q,[Z,Y,X]). % another definition for ER % by using Conditions A, B, and C in Inada(1969). %------------------------------------------------- extremal_restriction(J):- member(J,[a,b,c]), forall( distinct_ordered_triple( (X,Y,Z)), \+ violates_extremal_restriction(inada(J,_),(X,Y,Z),_) ). violates_extremal_restriction(inada(a,I),(X,Y,Z),R):- I= dichotomous_preference, possible_ranking(R,[X,Y,Z]). violates_extremal_restriction(inada(b,I),(X,Y,Z),(P,R)):- I= echoic_preference, possible_ranking(P,[X,Y,Z]), prefer_x_to_y(Z,X,R). violates_extremal_restriction(inada(c,I),(X,Y,Z),P):- I= antagonistic_preference, possible_ranking(P,[X,Y,Z]), possible_ranking(R,O), O \= [Z,Y,X], prefer_x_to_y(Z,X,R). % Claim. inada(c) <-> (Z is best <-> X is worst). violates_extremal_restriction(inada_1(c,I),(X,Y,Z),P):- I= antagonistic_preference, possible_ranking(P,[X,Y,Z]), possible_ranking(R,[W|_]), G= prefer_x_to_y(X,_,R), (W = Z -> G;\+ G). % forall triple, ER <-> the majority-decision-SWF % (Sen and Pattanaik, 1969, Theorems IV and XI). % limited agreement (LA) %------------------------------------------------- % A version of 'taboo preferences' by Inada(1969). % revised: 17-20 Apr 2006. distinct_pair_in_triple((A,B),(X,Y,Z)):- member(A,[X,Y,Z]), member(B,[X,Y,Z]), B \= A. limited_agreement:- forall( triple_of_alternative( (X,Y,Z)), ( distinct_pair_in_triple((A,B),(X,Y,Z)), \+ prefer_x_to_y(B,A,_) ) ). % For strict orderings, ER->VR, LA->VR. % (Sen and Pattanaik, 1969, Lemma 7). % nontariviality (almost equivalent to decomposability) %------------------------------------------------- % A weaker version of 'taboo preferences' by Inada(1969). is_nontrivial:- forall( distinct_ordered_pair( (X,Y)), \+ \+ prefer_x_to_y(X,Y,_) ). % integrated test for restrictions %------------------------------------------------- % added: 30 Apr 2006. test_restrictions(H):- auto_restricted_domain(H), test_restrictions((VR,ER,LA),(Z,NT)), show_test_restrictions((VR,ER,LA),(Z,NT),H). test_restrictions_by_cdi(Z, H):- auto_restricted_domain(H), test_restrictions((VR,ER,LA),(Z,NT)), member(Z,[cdi,'-']), show_test_restrictions((VR,ER,LA),(Z,NT),H). test_restrictions((VR,ER,LA),(Z,NT)):- findall(A,( member(S,[sp,sc,s2]), (value_restriction(S)->A=(v,S);A='-') ),VR), (\+ is_cdi_pairs(_,_)->Z='-';Z=cdi), (extremal_restriction->ER='e';ER='-'), (limited_agreement->LA=l;LA='-'), (is_nontrivial->NT=n;NT='-'). show_test_restrictions((VR,ER,LA),(Z,NT),H):- nl, write([Z,NT,ER,LA|VR]:H). /* ?- auto_restricted_domain(U), (extremal_restriction->ER=1;ER=0), (limited_agreement->LA=1;LA=0), \+ \+ member(1,[ER,LA]),nl,write([ER,LA]:U),fail. [0, 1]:[r(1), r(2), r(3)] [0, 1]:[r(1), r(2), r(5)] [1, 1]:[r(1), r(2)] [0, 1]:[r(1), r(3), r(4)] [1, 1]:[r(1), r(3)] [0, 1]:[r(1), r(4)] [0, 1]:[r(1), r(5)] [1, 0]:[r(1), r(6)] [1, 1]:[r(1)] [0, 1]:[r(2), r(3)] [1, 0]:[r(2), r(4)] [0, 1]:[r(2), r(5), r(6)] [1, 1]:[r(2), r(5)] [0, 1]:[r(2), r(6)] [1, 1]:[r(2)] [0, 1]:[r(3), r(4), r(6)] [1, 1]:[r(3), r(4)] [1, 0]:[r(3), r(5)] [0, 1]:[r(3), r(6)] [1, 1]:[r(3)] [0, 1]:[r(4), r(5), r(6)] [0, 1]:[r(4), r(5)] [1, 1]:[r(4), r(6)] [1, 1]:[r(4)] [1, 1]:[r(5), r(6)] [1, 1]:[r(5)] [1, 1]:[r(6)] [1, 1]:[] No ?- ?- auto_restricted_domain(U), limited_agreement, nl,write(U),fail. [r(1), r(2), r(3)] [r(1), r(2), r(5)] [r(1), r(2)] [r(1), r(3), r(4)] [r(1), r(3)] [r(1), r(4)] [r(1), r(5)] [r(1)] [r(2), r(3)] [r(2), r(5), r(6)] [r(2), r(5)] [r(2), r(6)] [r(2)] [r(3), r(4), r(6)] [r(3), r(4)] [r(3), r(6)] [r(3)] [r(4), r(5), r(6)] [r(4), r(5)] [r(4), r(6)] [r(4)] [r(5), r(6)] [r(5)] [r(6)] [] No ?- auto_restricted_domain(H),findall(A,( member(S,[sp,sc,s2]),(value_restriction(S)->A=(v,S);A='-')),L), (\+ \+ is_cdi_pairs(_,_)->Z=cdi;Z='-'), (extremal_restriction->ER='e';ER='-'), (limited_agreement->LA=l;LA='-'), (is_nontrivial->NT=n;NT='-'), Z=cdi,nl,write([Z,NT,ER,LA|L]:H),fail. [cdi, n, -, -, -, -, -]:[r(1), r(2), r(3), r(4), r(5)] [cdi, n, -, -, -, -, -]:[r(1), r(2), r(3), r(4), r(6)] [cdi, n, -, -, -, (v, sc), -]:[r(1), r(2), r(3), r(4)] [cdi, n, -, -, -, -, -]:[r(1), r(2), r(3), r(5), r(6)] [cdi, n, -, -, (v, sp), -, -]:[r(1), r(2), r(3), r(5)] [cdi, n, -, -, -, -, -]:[r(1), r(2), r(3), r(6)] [cdi, n, -, -, -, -, -]:[r(1), r(2), r(4), r(5), r(6)] [cdi, n, -, -, -, -, -]:[r(1), r(2), r(4), r(5)] [cdi, n, -, -, -, -, (v, s2)]:[r(1), r(2), r(4), r(6)] [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(1), r(2), r(4)] [cdi, n, -, -, -, (v, sc), -]:[r(1), r(2), r(5), r(6)] [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(1), r(2), r(6)] [cdi, n, -, -, -, -, -]:[r(1), r(3), r(4), r(5), r(6)] [cdi, n, -, -, -, -, -]:[r(1), r(3), r(4), r(5)] [cdi, n, -, -, (v, sp), -, -]:[r(1), r(3), r(4), r(6)] [cdi, n, -, -, -, -, (v, s2)]:[r(1), r(3), r(5), r(6)] [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(1), r(3), r(5)] [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(1), r(3), r(6)] [cdi, n, -, -, -, -, -]:[r(1), r(4), r(5), r(6)] [cdi, n, -, -, -, -, -]:[r(1), r(4), r(5)] [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(1), r(4), r(6)] [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(1), r(5), r(6)] [cdi, n, e, -, (v, sp), (v, sc), (v, s2)]:[r(1), r(6)] [cdi, n, -, -, -, -, -]:[r(2), r(3), r(4), r(5), r(6)] [cdi, n, -, -, -, -, (v, s2)]:[r(2), r(3), r(4), r(5)] [cdi, n, -, -, -, -, -]:[r(2), r(3), r(4), r(6)] [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(2), r(3), r(4)] [cdi, n, -, -, -, -, -]:[r(2), r(3), r(5), r(6)] [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(2), r(3), r(5)] [cdi, n, -, -, -, -, -]:[r(2), r(3), r(6)] [cdi, n, -, -, (v, sp), -, -]:[r(2), r(4), r(5), r(6)] [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(2), r(4), r(5)] [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(2), r(4), r(6)] [cdi, n, e, -, (v, sp), (v, sc), (v, s2)]:[r(2), r(4)] [cdi, n, -, -, -, (v, sc), -]:[r(3), r(4), r(5), r(6)] [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(3), r(4), r(5)] [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(3), r(5), r(6)] [cdi, n, e, -, (v, sp), (v, sc), (v, s2)]:[r(3), r(5)] No ?- ?- auto_restricted_domain(H),findall(A,( member(S,[sp,sc,s2]),(value_restriction(S)->A=(v,S);A='-')),L), (\+ \+ is_cdi_pairs(_,_)->Z=cdi;Z='-'), (extremal_restriction->ER='e';ER='-'), (limited_agreement->LA=l;LA='-'), (is_nontrivial->NT=n;NT='-'), Z\=cdi,nl,write([Z,NT,ER,LA|L]:H),fail. [-, n, -, -, -, -, -]:[r(1), r(2), r(3), r(4), r(5), r(6)] [-, -, -, l, (v, sp), (v, sc), -]:[r(1), r(2), r(3)] [-, -, -, l, (v, sp), (v, sc), -]:[r(1), r(2), r(5)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(1), r(2)] [-, -, -, l, (v, sp), (v, sc), -]:[r(1), r(3), r(4)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(1), r(3)] [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(1), r(4)] [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(1), r(5)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(1)] [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(2), r(3)] [-, -, -, l, (v, sp), (v, sc), -]:[r(2), r(5), r(6)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(2), r(5)] [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(2), r(6)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(2)] [-, -, -, l, (v, sp), (v, sc), -]:[r(3), r(4), r(6)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(3), r(4)] [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(3), r(6)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(3)] [-, -, -, l, (v, sp), (v, sc), -]:[r(4), r(5), r(6)] [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(4), r(5)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(4), r(6)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(4)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(5), r(6)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(5)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(6)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[] No ?- ?- auto_restricted_domain(H),findall(A,( member(S,[sp,sc,s2]),(value_restriction(S)->A=(v,S);A='-')),L), (\+ \+ is_cdi_pairs(_,_)->Z=cdi;Z='-'), (extremal_restriction(U)->ER=U;ER='-'), (limited_agreement->LA=l;LA='-'), (is_nontrivial->NT=n;NT='-'),(is_single_peaked->Sp=1;Sp=0), Z=cdi,nl,write([Z,NT,ER,Sp,LA|L]:H),fail. [cdi, n, -, 0, -, -, -, -]:[r(1), r(2), r(3), r(4), r(5)] [cdi, n, -, 0, -, -, -, -]:[r(1), r(2), r(3), r(4), r(6)] [cdi, n, -, 0, -, -, (v, sc), -]:[r(1), r(2), r(3), r(4)] [cdi, n, -, 0, -, -, -, -]:[r(1), r(2), r(3), r(5), r(6)] [cdi, n, -, 1, -, (v, sp), -, -]:[r(1), r(2), r(3), r(5)] [cdi, n, -, 0, -, -, -, -]:[r(1), r(2), r(3), r(6)] [cdi, n, -, 0, -, -, -, -]:[r(1), r(2), r(4), r(5), r(6)] [cdi, n, -, 0, -, -, -, -]:[r(1), r(2), r(4), r(5)] [cdi, n, -, 0, -, -, -, (v, s2)]:[r(1), r(2), r(4), r(6)] [cdi, n, -, 0, -, -, (v, sc), (v, s2)]:[r(1), r(2), r(4)] [cdi, n, -, 0, -, -, (v, sc), -]:[r(1), r(2), r(5), r(6)] [cdi, n, -, 0, -, -, (v, sc), (v, s2)]:[r(1), r(2), r(6)] [cdi, n, -, 0, -, -, -, -]:[r(1), r(3), r(4), r(5), r(6)] [cdi, n, -, 0, -, -, -, -]:[r(1), r(3), r(4), r(5)] [cdi, n, -, 1, -, (v, sp), -, -]:[r(1), r(3), r(4), r(6)] [cdi, n, -, 0, -, -, -, (v, s2)]:[r(1), r(3), r(5), r(6)] [cdi, n, -, 1, -, (v, sp), -, (v, s2)]:[r(1), r(3), r(5)] [cdi, n, -, 1, -, (v, sp), -, (v, s2)]:[r(1), r(3), r(6)] [cdi, n, -, 0, -, -, -, -]:[r(1), r(4), r(5), r(6)] [cdi, n, -, 0, -, -, -, -]:[r(1), r(4), r(5)] [cdi, n, -, 1, -, (v, sp), -, (v, s2)]:[r(1), r(4), r(6)] [cdi, n, -, 0, -, -, (v, sc), (v, s2)]:[r(1), r(5), r(6)] [cdi, n, c, 1, -, (v, sp), (v, sc), (v, s2)]:[r(1), r(6)] [cdi, n, -, 0, -, -, -, -]:[r(2), r(3), r(4), r(5), r(6)] [cdi, n, -, 0, -, -, -, (v, s2)]:[r(2), r(3), r(4), r(5)] [cdi, n, -, 0, -, -, -, -]:[r(2), r(3), r(4), r(6)] [cdi, n, -, 0, -, -, (v, sc), (v, s2)]:[r(2), r(3), r(4)] [cdi, n, -, 0, -, -, -, -]:[r(2), r(3), r(5), r(6)] [cdi, n, -, 1, -, (v, sp), -, (v, s2)]:[r(2), r(3), r(5)] [cdi, n, -, 0, -, -, -, -]:[r(2), r(3), r(6)] [cdi, n, -, 1, -, (v, sp), -, -]:[r(2), r(4), r(5), r(6)] [cdi, n, -, 1, -, (v, sp), -, (v, s2)]:[r(2), r(4), r(5)] [cdi, n, -, 1, -, (v, sp), -, (v, s2)]:[r(2), r(4), r(6)] [cdi, n, c, 1, -, (v, sp), (v, sc), (v, s2)]:[r(2), r(4)] [cdi, n, -, 0, -, -, (v, sc), -]:[r(3), r(4), r(5), r(6)] [cdi, n, -, 0, -, -, (v, sc), (v, s2)]:[r(3), r(4), r(5)] [cdi, n, -, 0, -, -, (v, sc), (v, s2)]:[r(3), r(5), r(6)] [cdi, n, c, 1, -, (v, sp), (v, sc), (v, s2)]:[r(3), r(5)] No ?- auto_restricted_domain(H),findall(A,( member(S,[sp,sc,s2]),(value_restriction(S)->A=(v,S);A='-')),L), (\+ \+ is_cdi_pairs(_,_)->Z=cdi;Z='-'), (extremal_restriction(U)->ER=U;ER='-'), (limited_agreement->LA=l;LA='-'), (is_nontrivial->NT=n;NT='-'),(is_single_peaked->Sp=1;Sp=0), Z\=cdi,nl,write([Z,NT,ER,Sp,LA|L]:H),fail. [-, n, -, 0, -, -, -, -]:[r(1), r(2), r(3), r(4), r(5), r(6)] [-, -, -, 1, l, (v, sp), (v, sc), -]:[r(1), r(2), r(3)] [-, -, -, 1, l, (v, sp), (v, sc), -]:[r(1), r(2), r(5)] [-, -, b, 1, l, (v, sp), (v, sc), (v, s2)]:[r(1), r(2)] [-, -, -, 1, l, (v, sp), (v, sc), -]:[r(1), r(3), r(4)] [-, -, b, 1, l, (v, sp), (v, sc), (v, s2)]:[r(1), r(3)] [-, -, -, 1, l, (v, sp), (v, sc), (v, s2)]:[r(1), r(4)] [-, -, -, 1, l, (v, sp), (v, sc), (v, s2)]:[r(1), r(5)] [-, -, b, 1, l, (v, sp), (v, sc), (v, s2)]:[r(1)] [-, -, -, 1, l, (v, sp), (v, sc), (v, s2)]:[r(2), r(3)] [-, -, -, 1, l, (v, sp), (v, sc), -]:[r(2), r(5), r(6)] [-, -, b, 1, l, (v, sp), (v, sc), (v, s2)]:[r(2), r(5)] [-, -, -, 1, l, (v, sp), (v, sc), (v, s2)]:[r(2), r(6)] [-, -, b, 1, l, (v, sp), (v, sc), (v, s2)]:[r(2)] [-, -, -, 1, l, (v, sp), (v, sc), -]:[r(3), r(4), r(6)] [-, -, b, 1, l, (v, sp), (v, sc), (v, s2)]:[r(3), r(4)] [-, -, -, 1, l, (v, sp), (v, sc), (v, s2)]:[r(3), r(6)] [-, -, b, 1, l, (v, sp), (v, sc), (v, s2)]:[r(3)] [-, -, -, 1, l, (v, sp), (v, sc), -]:[r(4), r(5), r(6)] [-, -, -, 1, l, (v, sp), (v, sc), (v, s2)]:[r(4), r(5)] [-, -, b, 1, l, (v, sp), (v, sc), (v, s2)]:[r(4), r(6)] [-, -, b, 1, l, (v, sp), (v, sc), (v, s2)]:[r(4)] [-, -, b, 1, l, (v, sp), (v, sc), (v, s2)]:[r(5), r(6)] [-, -, b, 1, l, (v, sp), (v, sc), (v, s2)]:[r(5)] [-, -, b, 1, l, (v, sp), (v, sc), (v, s2)]:[r(6)] [-, -, a, 1, l, (v, sp), (v, sc), (v, s2)]:[] No ?- % added: 29 Jul 2006 % n=3 condorcet ?- setup_model(alt:[a,b,c],soc:[1,2,3]). Yes ?- mode_of_simple_majority(A,on). A = condorcet Yes ?- test_restrictions_by_cdi('-', H), auto_scf( F,majority_set), (\+ \+ member(A->[],F)->write(empty);true), (\+ \+ member(A->[_,_,_],F)->write(circ);true),fail. [-, n, -, -, -, -, -]:[r(1), r(2), r(3), r(4), r(5), r(6)]empty [-, -, -, l, (v, sp), (v, sc), -]:[r(1), r(2), r(3)] [-, -, -, l, (v, sp), (v, sc), -]:[r(1), r(2), r(5)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(1), r(2)] [-, -, -, l, (v, sp), (v, sc), -]:[r(1), r(3), r(4)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(1), r(3)] [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(1), r(4)] [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(1), r(5)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(1)] [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(2), r(3)] [-, -, -, l, (v, sp), (v, sc), -]:[r(2), r(5), r(6)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(2), r(5)] [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(2), r(6)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(2)] [-, -, -, l, (v, sp), (v, sc), -]:[r(3), r(4), r(6)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(3), r(4)] [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(3), r(6)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(3)] [-, -, -, l, (v, sp), (v, sc), -]:[r(4), r(5), r(6)] [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(4), r(5)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(4), r(6)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(4)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(5), r(6)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(5)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(6)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[] No ?- test_restrictions_by_cdi('cdi', H), auto_scf( F,majority_set), (\+ \+ member(A->[],F)->write(empty);true), (\+ \+ member(A->[_,_,_],F)->write(circ);true),fail. [cdi, n, -, -, -, -, -]:[r(1), r(2), r(3), r(4), r(5)]empty [cdi, n, -, -, -, -, -]:[r(1), r(2), r(3), r(4), r(6)]empty [cdi, n, -, -, -, (v, sc), -]:[r(1), r(2), r(3), r(4)] [cdi, n, -, -, -, -, -]:[r(1), r(2), r(3), r(5), r(6)]empty [cdi, n, -, -, (v, sp), -, -]:[r(1), r(2), r(3), r(5)] [cdi, n, -, -, -, -, -]:[r(1), r(2), r(3), r(6)]empty [cdi, n, -, -, -, -, -]:[r(1), r(2), r(4), r(5), r(6)]empty [cdi, n, -, -, -, -, -]:[r(1), r(2), r(4), r(5)]empty [cdi, n, -, -, -, -, (v, s2)]:[r(1), r(2), r(4), r(6)] [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(1), r(2), r(4)] [cdi, n, -, -, -, (v, sc), -]:[r(1), r(2), r(5), r(6)] [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(1), r(2), r(6)] [cdi, n, -, -, -, -, -]:[r(1), r(3), r(4), r(5), r(6)]empty [cdi, n, -, -, -, -, -]:[r(1), r(3), r(4), r(5)]empty [cdi, n, -, -, (v, sp), -, -]:[r(1), r(3), r(4), r(6)] [cdi, n, -, -, -, -, (v, s2)]:[r(1), r(3), r(5), r(6)] [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(1), r(3), r(5)] [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(1), r(3), r(6)] [cdi, n, -, -, -, -, -]:[r(1), r(4), r(5), r(6)]empty [cdi, n, -, -, -, -, -]:[r(1), r(4), r(5)]empty [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(1), r(4), r(6)] [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(1), r(5), r(6)] [cdi, n, e, -, (v, sp), (v, sc), (v, s2)]:[r(1), r(6)] [cdi, n, -, -, -, -, -]:[r(2), r(3), r(4), r(5), r(6)]empty [cdi, n, -, -, -, -, (v, s2)]:[r(2), r(3), r(4), r(5)] [cdi, n, -, -, -, -, -]:[r(2), r(3), r(4), r(6)]empty [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(2), r(3), r(4)] [cdi, n, -, -, -, -, -]:[r(2), r(3), r(5), r(6)]empty [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(2), r(3), r(5)] [cdi, n, -, -, -, -, -]:[r(2), r(3), r(6)]empty [cdi, n, -, -, (v, sp), -, -]:[r(2), r(4), r(5), r(6)] [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(2), r(4), r(5)] [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(2), r(4), r(6)] [cdi, n, e, -, (v, sp), (v, sc), (v, s2)]:[r(2), r(4)] [cdi, n, -, -, -, (v, sc), -]:[r(3), r(4), r(5), r(6)] [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(3), r(4), r(5)] [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(3), r(5), r(6)] [cdi, n, e, -, (v, sp), (v, sc), (v, s2)]:[r(3), r(5)] No ?- % N=2 condorcet ?- setup_model(alt:[a,b,c],soc:[1,2]). Yes ?- mode_of_simple_majority(A,on). A = condorcet Yes ?- test_restrictions_by_cdi('-', H), auto_scf( F,majority_set), (\+ \+ member(A->[],F)->write(empty);true), (\+ \+ member(A->[_,_,_],F)->write(circ);true),fail. [-, n, -, -, -, -, -]:[r(1), r(2), r(3), r(4), r(5), r(6)]circ [-, -, -, l, (v, sp), (v, sc), -]:[r(1), r(2), r(3)] [-, -, -, l, (v, sp), (v, sc), -]:[r(1), r(2), r(5)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(1), r(2)] [-, -, -, l, (v, sp), (v, sc), -]:[r(1), r(3), r(4)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(1), r(3)] [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(1), r(4)] [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(1), r(5)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(1)] [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(2), r(3)] [-, -, -, l, (v, sp), (v, sc), -]:[r(2), r(5), r(6)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(2), r(5)] [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(2), r(6)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(2)] [-, -, -, l, (v, sp), (v, sc), -]:[r(3), r(4), r(6)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(3), r(4)] [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(3), r(6)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(3)] [-, -, -, l, (v, sp), (v, sc), -]:[r(4), r(5), r(6)] [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(4), r(5)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(4), r(6)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(4)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(5), r(6)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(5)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(6)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[] No ?- test_restrictions_by_cdi('cdi', H), auto_scf( F,majority_set), (\+ \+ member(A->[],F)->write(empty);true), (\+ \+ member(A->[_,_,_],F)->write(circ);true),fail. [cdi, n, -, -, -, -, -]:[r(1), r(2), r(3), r(4), r(5)]circ [cdi, n, -, -, -, -, -]:[r(1), r(2), r(3), r(4), r(6)]circ [cdi, n, -, -, -, (v, sc), -]:[r(1), r(2), r(3), r(4)]circ [cdi, n, -, -, -, -, -]:[r(1), r(2), r(3), r(5), r(6)]circ [cdi, n, -, -, (v, sp), -, -]:[r(1), r(2), r(3), r(5)]circ [cdi, n, -, -, -, -, -]:[r(1), r(2), r(3), r(6)]circ [cdi, n, -, -, -, -, -]:[r(1), r(2), r(4), r(5), r(6)]circ [cdi, n, -, -, -, -, -]:[r(1), r(2), r(4), r(5)]circ [cdi, n, -, -, -, -, (v, s2)]:[r(1), r(2), r(4), r(6)]circ [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(1), r(2), r(4)]circ [cdi, n, -, -, -, (v, sc), -]:[r(1), r(2), r(5), r(6)]circ [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(1), r(2), r(6)]circ [cdi, n, -, -, -, -, -]:[r(1), r(3), r(4), r(5), r(6)]circ [cdi, n, -, -, -, -, -]:[r(1), r(3), r(4), r(5)]circ [cdi, n, -, -, (v, sp), -, -]:[r(1), r(3), r(4), r(6)]circ [cdi, n, -, -, -, -, (v, s2)]:[r(1), r(3), r(5), r(6)]circ [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(1), r(3), r(5)]circ [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(1), r(3), r(6)]circ [cdi, n, -, -, -, -, -]:[r(1), r(4), r(5), r(6)]circ [cdi, n, -, -, -, -, -]:[r(1), r(4), r(5)] [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(1), r(4), r(6)]circ [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(1), r(5), r(6)]circ [cdi, n, e, -, (v, sp), (v, sc), (v, s2)]:[r(1), r(6)]circ [cdi, n, -, -, -, -, -]:[r(2), r(3), r(4), r(5), r(6)]circ [cdi, n, -, -, -, -, (v, s2)]:[r(2), r(3), r(4), r(5)]circ [cdi, n, -, -, -, -, -]:[r(2), r(3), r(4), r(6)]circ [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(2), r(3), r(4)]circ [cdi, n, -, -, -, -, -]:[r(2), r(3), r(5), r(6)]circ [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(2), r(3), r(5)]circ [cdi, n, -, -, -, -, -]:[r(2), r(3), r(6)] [cdi, n, -, -, (v, sp), -, -]:[r(2), r(4), r(5), r(6)]circ [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(2), r(4), r(5)]circ [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(2), r(4), r(6)]circ [cdi, n, e, -, (v, sp), (v, sc), (v, s2)]:[r(2), r(4)]circ [cdi, n, -, -, -, (v, sc), -]:[r(3), r(4), r(5), r(6)]circ [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(3), r(4), r(5)]circ [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(3), r(5), r(6)]circ [cdi, n, e, -, (v, sp), (v, sc), (v, s2)]:[r(3), r(5)]circ No ?- % (old part) % n=3, is_weak_Condorcet_winner for majority decision. % if is_social_ranking for majority decision, then empty instead of circ. ?- test_restrictions_by_cdi('-', H), auto_scf( F,majority_set), (\+ \+ member(A->[],F)->write(empty);true), (\+ \+ member(A->[_,_,_],F)->write(circ);true),fail. [-, n, -, -, -, -, -]:[r(1), r(2), r(3), r(4), r(5), r(6)]circ [-, -, -, l, (v, sp), (v, sc), -]:[r(1), r(2), r(3)] [-, -, -, l, (v, sp), (v, sc), -]:[r(1), r(2), r(5)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(1), r(2)] [-, -, -, l, (v, sp), (v, sc), -]:[r(1), r(3), r(4)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(1), r(3)] [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(1), r(4)] [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(1), r(5)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(1)] [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(2), r(3)] [-, -, -, l, (v, sp), (v, sc), -]:[r(2), r(5), r(6)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(2), r(5)] [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(2), r(6)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(2)] [-, -, -, l, (v, sp), (v, sc), -]:[r(3), r(4), r(6)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(3), r(4)] [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(3), r(6)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(3)] [-, -, -, l, (v, sp), (v, sc), -]:[r(4), r(5), r(6)] [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(4), r(5)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(4), r(6)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(4)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(5), r(6)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(5)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(6)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[] No ?- test_restrictions_by_cdi(cdi, H), auto_scf( F,majority_set), (\+ \+ member(A->[],F)->write(empty);true), (\+ \+ member(A->[_,_,_],F)->write(circ);true),fail. [cdi, n, -, -, -, -, -]:[r(1), r(2), r(3), r(4), r(5)]circ [cdi, n, -, -, -, -, -]:[r(1), r(2), r(3), r(4), r(6)]circ [cdi, n, -, -, -, (v, sc), -]:[r(1), r(2), r(3), r(4)] [cdi, n, -, -, -, -, -]:[r(1), r(2), r(3), r(5), r(6)]circ [cdi, n, -, -, (v, sp), -, -]:[r(1), r(2), r(3), r(5)] [cdi, n, -, -, -, -, -]:[r(1), r(2), r(3), r(6)]circ [cdi, n, -, -, -, -, -]:[r(1), r(2), r(4), r(5), r(6)]circ [cdi, n, -, -, -, -, -]:[r(1), r(2), r(4), r(5)]circ [cdi, n, -, -, -, -, (v, s2)]:[r(1), r(2), r(4), r(6)] [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(1), r(2), r(4)] [cdi, n, -, -, -, (v, sc), -]:[r(1), r(2), r(5), r(6)] [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(1), r(2), r(6)] [cdi, n, -, -, -, -, -]:[r(1), r(3), r(4), r(5), r(6)]circ [cdi, n, -, -, -, -, -]:[r(1), r(3), r(4), r(5)]circ [cdi, n, -, -, (v, sp), -, -]:[r(1), r(3), r(4), r(6)] [cdi, n, -, -, -, -, (v, s2)]:[r(1), r(3), r(5), r(6)] [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(1), r(3), r(5)] [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(1), r(3), r(6)] [cdi, n, -, -, -, -, -]:[r(1), r(4), r(5), r(6)]circ [cdi, n, -, -, -, -, -]:[r(1), r(4), r(5)]circ [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(1), r(4), r(6)] [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(1), r(5), r(6)] [cdi, n, e, -, (v, sp), (v, sc), (v, s2)]:[r(1), r(6)] [cdi, n, -, -, -, -, -]:[r(2), r(3), r(4), r(5), r(6)]circ [cdi, n, -, -, -, -, (v, s2)]:[r(2), r(3), r(4), r(5)] [cdi, n, -, -, -, -, -]:[r(2), r(3), r(4), r(6)]circ [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(2), r(3), r(4)] [cdi, n, -, -, -, -, -]:[r(2), r(3), r(5), r(6)]circ [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(2), r(3), r(5)] [cdi, n, -, -, -, -, -]:[r(2), r(3), r(6)]circ [cdi, n, -, -, (v, sp), -, -]:[r(2), r(4), r(5), r(6)] [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(2), r(4), r(5)] [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(2), r(4), r(6)] [cdi, n, e, -, (v, sp), (v, sc), (v, s2)]:[r(2), r(4)] [cdi, n, -, -, -, (v, sc), -]:[r(3), r(4), r(5), r(6)] [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(3), r(4), r(5)] [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(3), r(5), r(6)] [cdi, n, e, -, (v, sp), (v, sc), (v, s2)]:[r(3), r(5)] No ?- % n=2, is_a_rational_social_choice (i.e., the majority-SDF) % added: 29 Jun 2006. ?- [sproof_f],setup_model(_:[a,b,c],_:[1,2]). % sproof_f compiled 0.02 sec, 2,168 bytes ?- test_restrictions_by_cdi('cdi', H),auto_scf( F,majority_set), (\+ \+ member(A->[],F)->write(empty);true), (\+ \+ ((member(A->B,F),B=[_,_,_]),write(A;B))->write(c);true),fail. [cdi, n, -, -, -, -, -]:[r(1), r(2), r(3), r(4), r(5)]r(2), r(4);[a, b, c]c [cdi, n, -, -, -, -, -]:[r(1), r(2), r(3), r(4), r(6)]r(1), r(6);[a, b, c]c [cdi, n, -, -, -, (v, sc), -]:[r(1), r(2), r(3), r(4)]r(2), r(4);[a, b, c]c [cdi, n, -, -, -, -, -]:[r(1), r(2), r(3), r(5), r(6)]r(1), r(6);[a, b, c]c [cdi, n, -, -, (v, sp), -, -]:[r(1), r(2), r(3), r(5)]r(3), r(5);[a, b, c]c [cdi, n, -, -, -, -, -]:[r(1), r(2), r(3), r(6)]r(1), r(6);[a, b, c]c [cdi, n, -, -, -, -, -]:[r(1), r(2), r(4), r(5), r(6)]r(1), r(6);[a, b, c]c [cdi, n, -, -, -, -, -]:[r(1), r(2), r(4), r(5)]r(2), r(4);[a, b, c]c [cdi, n, -, -, -, -, (v, s2)]:[r(1), r(2), r(4), r(6)]r(1), r(6);[a, b, c]c [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(1), r(2), r(4)]r(2), r(4);[a, b, c]c [cdi, n, -, -, -, (v, sc), -]:[r(1), r(2), r(5), r(6)]r(1), r(6);[a, b, c]c [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(1), r(2), r(6)]r(1), r(6);[a, b, c]c [cdi, n, -, -, -, -, -]:[r(1), r(3), r(4), r(5), r(6)]r(1), r(6);[a, b, c]c [cdi, n, -, -, -, -, -]:[r(1), r(3), r(4), r(5)]r(3), r(5);[a, b, c]c [cdi, n, -, -, (v, sp), -, -]:[r(1), r(3), r(4), r(6)]r(1), r(6);[a, b, c]c [cdi, n, -, -, -, -, (v, s2)]:[r(1), r(3), r(5), r(6)]r(1), r(6);[a, b, c]c [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(1), r(3), r(5)]r(3), r(5);[a, b, c]c [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(1), r(3), r(6)]r(1), r(6);[a, b, c]c [cdi, n, -, -, -, -, -]:[r(1), r(4), r(5), r(6)]r(1), r(6);[a, b, c]c [cdi, n, -, -, -, -, -]:[r(1), r(4), r(5)] [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(1), r(4), r(6)]r(1), r(6);[a, b, c]c [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(1), r(5), r(6)]r(1), r(6);[a, b, c]c [cdi, n, e, -, (v, sp), (v, sc), (v, s2)]:[r(1), r(6)]r(1), r(6);[a, b, c]c [cdi, n, -, -, -, -, -]:[r(2), r(3), r(4), r(5), r(6)]r(2), r(4);[a, b, c]c [cdi, n, -, -, -, -, (v, s2)]:[r(2), r(3), r(4), r(5)]r(2), r(4);[a, b, c]c [cdi, n, -, -, -, -, -]:[r(2), r(3), r(4), r(6)]r(2), r(4);[a, b, c]c [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(2), r(3), r(4)]r(2), r(4);[a, b, c]c [cdi, n, -, -, -, -, -]:[r(2), r(3), r(5), r(6)]r(3), r(5);[a, b, c]c [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(2), r(3), r(5)]r(3), r(5);[a, b, c]c [cdi, n, -, -, -, -, -]:[r(2), r(3), r(6)] [cdi, n, -, -, (v, sp), -, -]:[r(2), r(4), r(5), r(6)]r(2), r(4);[a, b, c]c [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(2), r(4), r(5)]r(2), r(4);[a, b, c]c [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(2), r(4), r(6)]r(2), r(4);[a, b, c]c [cdi, n, e, -, (v, sp), (v, sc), (v, s2)]:[r(2), r(4)]r(2), r(4);[a, b, c]c [cdi, n, -, -, -, (v, sc), -]:[r(3), r(4), r(5), r(6)]r(3), r(5);[a, b, c]c [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(3), r(4), r(5)]r(3), r(5);[a, b, c]c [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(3), r(5), r(6)]r(3), r(5);[a, b, c]c [cdi, n, e, -, (v, sp), (v, sc), (v, s2)]:[r(3), r(5)]r(3), r(5);[a, b, c]c No ?- test_restrictions_by_cdi('-', H),auto_scf( F,majority_set), (\+ \+ member(A->[],F)->write(empty);true), (\+ \+ ((member(A->B,F),B=[_,_,_]),write(A;B))->write(c);true),fail. [-, n, -, -, -, -, -]:[r(1), r(2), r(3), r(4), r(5), r(6)]r(1), r(6);[a, b, c]c [-, -, -, l, (v, sp), (v, sc), -]:[r(1), r(2), r(3)] [-, -, -, l, (v, sp), (v, sc), -]:[r(1), r(2), r(5)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(1), r(2)] [-, -, -, l, (v, sp), (v, sc), -]:[r(1), r(3), r(4)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(1), r(3)] [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(1), r(4)] [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(1), r(5)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(1)] [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(2), r(3)] [-, -, -, l, (v, sp), (v, sc), -]:[r(2), r(5), r(6)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(2), r(5)] [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(2), r(6)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(2)] [-, -, -, l, (v, sp), (v, sc), -]:[r(3), r(4), r(6)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(3), r(4)] [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(3), r(6)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(3)] [-, -, -, l, (v, sp), (v, sc), -]:[r(4), r(5), r(6)] [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(4), r(5)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(4), r(6)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(4)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(5), r(6)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(5)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(6)] [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[] No ?- % n=3, the majority rule using is_social_ordering. ?- test_restrictions_by_cdi(cdi, H), auto_scf( F,majority),(is_non_manipulable_scf(F)->true;write('M')), show_scf_hr_1(F),fail. [cdi, n, -, -, -, -, -]:[r(1), r(2), r(3), r(4), r(5)] [cdi, n, -, -, -, -, -]:[r(1), r(2), r(3), r(4), r(6)] [cdi, n, -, -, -, (v, sc), -]:[r(1), r(2), r(3), r(4)] scf: aaaaaaaaaabbaabbaaaaaaaaaabbaabbaabbaabbbbbbbbbbaabbaabbbbbbbbbb [cdi, n, -, -, -, -, -]:[r(1), r(2), r(3), r(5), r(6)] [cdi, n, -, -, (v, sp), -, -]:[r(1), r(2), r(3), r(5)] scf: aaaaaaaaaabaaaacaaaaaaaaaabaaaacaabaaababbbbaabcaaacaaacaabccccc [cdi, n, -, -, -, -, -]:[r(1), r(2), r(3), r(6)] [cdi, n, -, -, -, -, -]:[r(1), r(2), r(4), r(5), r(6)] [cdi, n, -, -, -, -, -]:[r(1), r(2), r(4), r(5)] [cdi, n, -, -, -, -, (v, s2)]:[r(1), r(2), r(4), r(6)] scf: aaaaaaaaaabbaabcaaaaaaaaaabcaaccaabbaabcbbbbbcbcaabcaaccbcbccccc [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(1), r(2), r(4)] scf: aaaaaaaabaaaaaaaabaabaabbbb [cdi, n, -, -, -, (v, sc), -]:[r(1), r(2), r(5), r(6)] scf: aaaaaaaaaaccaaccaaaaaaaaaaccaaccaaccaaccccccccccaaccaacccccccccc [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(1), r(2), r(6)] scf: aaaaaaaacaaaaaaaacaacaacccc [cdi, n, -, -, -, -, -]:[r(1), r(3), r(4), r(5), r(6)] [cdi, n, -, -, -, -, -]:[r(1), r(3), r(4), r(5)] [cdi, n, -, -, (v, sp), -, -]:[r(1), r(3), r(4), r(6)] scf: aaaaabbbabbbabbcabbbbbbbbbbbbbbcabbbbbbbbbbbbbbcabbcbbbcbbbccccc [cdi, n, -, -, -, -, (v, s2)]:[r(1), r(3), r(5), r(6)] scf: aaaaababaaccabccababbbbbabccbbccaaccabccccccccccabccbbcccccccccc [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(1), r(3), r(5)] scf: aaaabaaacababbbabcaacabcccc [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(1), r(3), r(6)] scf: aaaabbabcabbbbbbbcabcbbcccc [cdi, n, -, -, -, -, -]:[r(1), r(4), r(5), r(6)] [cdi, n, -, -, -, -, -]:[r(1), r(4), r(5)] [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(1), r(4), r(6)] scf: aaaabbabcabbbbbbbcabcbbcccc [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(1), r(5), r(6)] scf: aaaaccaccaccccccccacccccccc [cdi, n, e, -, (v, sp), (v, sc), (v, s2)]:[r(1), r(6)] scf: aaacaccc [cdi, n, -, -, -, -, -]:[r(2), r(3), r(4), r(5), r(6)] [cdi, n, -, -, -, -, (v, s2)]:[r(2), r(3), r(4), r(5)] scf: aaaaabbaabbcaaccabbabbbbbbbbabbcabbcbbbbbbbbcbbcaaccabbccbbccccc [cdi, n, -, -, -, -, -]:[r(2), r(3), r(4), r(6)] [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(2), r(3), r(4)] scf: aaaabbabbabbbbbbbbabbbbbbbb [cdi, n, -, -, -, -, -]:[r(2), r(3), r(5), r(6)] [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(2), r(3), r(5)] scf: aaaabaaacababbbabcaacabcccc [cdi, n, -, -, -, -, -]:[r(2), r(3), r(6)] [cdi, n, -, -, (v, sp), -, -]:[r(2), r(4), r(5), r(6)] scf: aaaaabccacccacccabccbbbbcbcccbccaccccbccccccccccaccccbcccccccccc [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(2), r(4), r(5)] scf: aaaabcaccabcbbbcbcacccbcccc [cdi, n, -, -, (v, sp), -, (v, s2)]:[r(2), r(4), r(6)] scf: aaaabcaccabcbbbcbcacccbcccc [cdi, n, e, -, (v, sp), (v, sc), (v, s2)]:[r(2), r(4)] scf: aaababbb [cdi, n, -, -, -, (v, sc), -]:[r(3), r(4), r(5), r(6)] scf: bbbbbbbbbbccbbccbbbbbbbbbbccbbccbbccbbccccccccccbbccbbcccccccccc [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(3), r(4), r(5)] scf: bbbbbbbbcbbbbbbbbcbbcbbcccc [cdi, n, -, -, -, (v, sc), (v, s2)]:[r(3), r(5), r(6)] scf: bbbbccbccbccccccccbcccccccc [cdi, n, e, -, (v, sp), (v, sc), (v, s2)]:[r(3), r(5)] scf: bbbcbccc No ?- test_restrictions_by_cdi('-', H), auto_scf( F,majority),(is_non_manipulable_scf(F)->true;write('M')), show_scf_hr_1(F),fail. [-, n, -, -, -, -, -]:[r(1), r(2), r(3), r(4), r(5), r(6)] [-, -, -, l, (v, sp), (v, sc), -]:[r(1), r(2), r(3)] scf: aaaaaaaabaaaaaaaabaabaabbbb [-, -, -, l, (v, sp), (v, sc), -]:[r(1), r(2), r(5)] scf: aaaaaaaacaaaaaaaacaacaacccc [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(1), r(2)] scf: aaaaaaaa [-, -, -, l, (v, sp), (v, sc), -]:[r(1), r(3), r(4)] scf: aaaabbabbabbbbbbbbabbbbbbbb [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(1), r(3)] scf: aaababbb [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(1), r(4)] scf: aaababbb [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(1), r(5)] scf: aaacaccc [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(1)] scf: a [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(2), r(3)] scf: aaababbb [-, -, -, l, (v, sp), (v, sc), -]:[r(2), r(5), r(6)] scf: aaaaccaccaccccccccacccccccc [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(2), r(5)] scf: aaacaccc [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(2), r(6)] scf: aaacaccc [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(2)] scf: a [-, -, -, l, (v, sp), (v, sc), -]:[r(3), r(4), r(6)] scf: bbbbbbbbcbbbbbbbbcbbcbbcccc [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(3), r(4)] scf: bbbbbbbb [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(3), r(6)] scf: bbbcbccc [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(3)] scf: b [-, -, -, l, (v, sp), (v, sc), -]:[r(4), r(5), r(6)] scf: bbbbccbccbccccccccbcccccccc [-, -, -, l, (v, sp), (v, sc), (v, s2)]:[r(4), r(5)] scf: bbbcbccc [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(4), r(6)] scf: bbbcbccc [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(4)] scf: b [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(5), r(6)] scf: cccccccc [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(5)] scf: c [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[r(6)] scf: c [-, -, e, l, (v, sp), (v, sc), (v, s2)]:[] scf: No ?- ?- auto_restricted_domain(H),value_restriction(sp), auto_scf( F,majority),(is_non_manipulable_scf(F)->true;write('M')), show_scf_hr_1(F),write(H),fail. scf: aaaaaaaaaabaaaacaaaaaaaaaabaaaacaabaaababbbbaabcaaacaaacaabccccc[r(1), r(2), r(3), r(5)] scf: aaaaaaaabaaaaaaaabaabaabbbb[r(1), r(2), r(3)] scf: aaaaaaaacaaaaaaaacaacaacccc[r(1), r(2), r(5)] scf: aaaaaaaa[r(1), r(2)] scf: aaaaabbbabbbabbcabbbbbbbbbbbbbbcabbbbbbbbbbbbbbcabbcbbbcbbbccccc[r(1), r(3), r(4), r(6)] scf: aaaabbabbabbbbbbbbabbbbbbbb[r(1), r(3), r(4)] scf: aaaabaaacababbbabcaacabcccc[r(1), r(3), r(5)] scf: aaaabbabcabbbbbbbcabcbbcccc[r(1), r(3), r(6)] scf: aaababbb[r(1), r(3)] scf: aaaabbabcabbbbbbbcabcbbcccc[r(1), r(4), r(6)] scf: aaababbb[r(1), r(4)] scf: aaacaccc[r(1), r(5)] scf: aaacaccc[r(1), r(6)] scf: a[r(1)] scf: aaaabaaacababbbabcaacabcccc[r(2), r(3), r(5)] scf: aaababbb[r(2), r(3)] scf: aaaaabccacccacccabccbbbbcbcccbccaccccbccccccccccaccccbcccccccccc[r(2), r(4), r(5), r(6)] scf: aaaabcaccabcbbbcbcacccbcccc[r(2), r(4), r(5)] scf: aaaabcaccabcbbbcbcacccbcccc[r(2), r(4), r(6)] scf: aaababbb[r(2), r(4)] scf: aaaaccaccaccccccccacccccccc[r(2), r(5), r(6)] scf: aaacaccc[r(2), r(5)] scf: aaacaccc[r(2), r(6)] scf: a[r(2)] scf: bbbbbbbbcbbbbbbbbcbbcbbcccc[r(3), r(4), r(6)] scf: bbbbbbbb[r(3), r(4)] scf: bbbcbccc[r(3), r(5)] scf: bbbcbccc[r(3), r(6)] scf: b[r(3)] scf: bbbbccbccbccccccccbcccccccc[r(4), r(5), r(6)] scf: bbbcbccc[r(4), r(5)] scf: bbbcbccc[r(4), r(6)] scf: b[r(4)] scf: cccccccc[r(5), r(6)] scf: c[r(5)] scf: c[r(6)] scf: [] No ?- ?- auto_restricted_domain(H),value_restriction(sp),nl,write(H), auto_scf( F,majority), (is_non_manipulable_scf(F)->true;(write(m),fail)), (is_dictatorial_scf(F,_)->(write(d),fail);true), (citizens_sovereignty(F)->true;(write(ncs),fail)), show_scf_hr_0t(F),fail. [r(1), r(2), r(3), r(5)] scf: r1=r(1)aaa-a-aaa-a-aab-a-------aaa-c------- r1=r(2)aaa-a-aaa-a-aab-a-------aaa-c------- r1=r(3)aab-a-aab-a-bbb-b-------aab-c------- r1=r(4)------------------------------------ r1=r(5)aaa-c-aaa-c-aab-c-------ccc-c------- r1=r(6)------------------------------------ [r(1), r(2), r(3)]ncs [r(1), r(2), r(5)]ncs [r(1), r(2)]d [r(1), r(3), r(4), r(6)] scf: r1=r(1)a-aa-a------a-bb-ba-bb-b------a-bb-c r1=r(2)------------------------------------ r1=r(3)a-bb-b------b-bb-bb-bb-b------b-bb-c r1=r(4)a-bb-b------b-bb-bb-bb-b------b-bb-c r1=r(5)------------------------------------ r1=r(6)a-bb-c------b-bb-cb-bb-c------c-cc-c [r(1), r(3), r(4)]ncs [r(1), r(3), r(5)] scf: r1=r(1)a-a-a-------a-b-a-------a-a-c------- r1=r(2)------------------------------------ r1=r(3)a-b-a-------b-b-b-------a-b-c------- r1=r(4)------------------------------------ r1=r(5)a-a-c-------a-b-c-------c-c-c------- r1=r(6)------------------------------------ [r(1), r(3), r(6)] scf: r1=r(1)a-a--a------a-b--b------------a-b--c r1=r(2)------------------------------------ r1=r(3)a-b--b------b-b--b------------b-b--c r1=r(4)------------------------------------ r1=r(5)------------------------------------ r1=r(6)a-b--c------b-b--c------------c-c--c [r(1), r(3)]ncs [r(1), r(4), r(6)] scf: r1=r(1)a--a-a------------a--b-b------a--b-c r1=r(2)------------------------------------ r1=r(3)------------------------------------ r1=r(4)a--b-b------------b--b-b------b--b-c r1=r(5)------------------------------------ r1=r(6)a--b-c------------b--b-c------c--c-c [r(1), r(4)]ncs [r(1), r(5)]ncs [r(1), r(6)]ncs [r(1)]d [r(2), r(3), r(5)] scf: r1=r(1)------------------------------------ r1=r(2)-------aa-a--ab-a--------aa-c------- r1=r(3)-------ab-a--bb-b--------ab-c------- r1=r(4)------------------------------------ r1=r(5)-------aa-c--ab-c--------cc-c------- r1=r(6)------------------------------------ [r(2), r(3)]ncs [r(2), r(4), r(5), r(6)] scf: r1=r(1)------------------------------------ r1=r(2)-------a-aaa-------a-bcc-a-ccc-a-ccc r1=r(3)------------------------------------ r1=r(4)-------a-bcc-------b-bbb-c-bcc-c-bcc r1=r(5)-------a-ccc-------c-bcc-c-ccc-c-ccc r1=r(6)-------a-ccc-------c-bcc-c-ccc-c-ccc [r(2), r(4), r(5)] scf: r1=r(1)------------------------------------ r1=r(2)-------a-aa--------a-bc--a-cc------- r1=r(3)------------------------------------ r1=r(4)-------a-bc--------b-bb--c-bc------- r1=r(5)-------a-cc--------c-bc--c-cc------- r1=r(6)------------------------------------ [r(2), r(4), r(6)] scf: r1=r(1)------------------------------------ r1=r(2)-------a-a-a-------a-b-c-------a-c-c r1=r(3)------------------------------------ r1=r(4)-------a-b-c-------b-b-b-------c-b-c r1=r(5)------------------------------------ r1=r(6)-------a-c-c-------c-b-c-------c-c-c [r(2), r(4)]ncs [r(2), r(5), r(6)]ncs [r(2), r(5)]ncs [r(2), r(6)]ncs [r(2)]d [r(3), r(4), r(6)]ncs [r(3), r(4)]d [r(3), r(5)]ncs [r(3), r(6)]ncs [r(3)]d [r(4), r(5), r(6)]ncs [r(4), r(5)]ncs [r(4), r(6)]ncs [r(4)]d [r(5), r(6)]d [r(5)]d [r(6)]d []d No ?- % 5/9 re-exam. ?- auto_restricted_domain(H),value_restriction(sp),nl,write(H), auto_scf( F,majority), (is_non_manipulable_scf(F)->true;(write(m),fail)), (is_dictatorial_scf(F,_)->(write(d),fail);true), (citizens_sovereignty(F)->true;(write(ncs),fail)), show_scf_hr_0t(F),fail. [r(1), r(2), r(3), r(5)] scf: #r2: 111111222222333333444444555555666666 #r3: 123456123456123456123456123456123456 r1=r(1)aaa-a-aaa-a-aab-a-------aaa-c------- r1=r(2)aaa-a-aaa-a-aab-a-------aaa-c------- r1=r(3)aab-a-aab-a-bbb-b-------aab-c------- r1=r(4)------------------------------------ r1=r(5)aaa-c-aaa-c-aab-c-------ccc-c------- r1=r(6)------------------------------------ [r(1), r(2), r(3)]ncs [r(1), r(2), r(5)]ncs [r(1), r(2)]d [r(1), r(3), r(4), r(6)] scf: #r2: 111111222222333333444444555555666666 #r3: 123456123456123456123456123456123456 r1=r(1)a-aa-a------a-bb-ba-bb-b------a-bb-c r1=r(2)------------------------------------ r1=r(3)a-bb-b------b-bb-bb-bb-b------b-bb-c r1=r(4)a-bb-b------b-bb-bb-bb-b------b-bb-c r1=r(5)------------------------------------ r1=r(6)a-bb-c------b-bb-cb-bb-c------c-cc-c [r(1), r(3), r(4)]ncs [r(1), r(3), r(5)] scf: #r2: 111111222222333333444444555555666666 #r3: 123456123456123456123456123456123456 r1=r(1)a-a-a-------a-b-a-------a-a-c------- r1=r(2)------------------------------------ r1=r(3)a-b-a-------b-b-b-------a-b-c------- r1=r(4)------------------------------------ r1=r(5)a-a-c-------a-b-c-------c-c-c------- r1=r(6)------------------------------------ [r(1), r(3), r(6)] scf: #r2: 111111222222333333444444555555666666 #r3: 123456123456123456123456123456123456 r1=r(1)a-a--a------a-b--b------------a-b--c r1=r(2)------------------------------------ r1=r(3)a-b--b------b-b--b------------b-b--c r1=r(4)------------------------------------ r1=r(5)------------------------------------ r1=r(6)a-b--c------b-b--c------------c-c--c [r(1), r(3)]ncs [r(1), r(4), r(6)] scf: #r2: 111111222222333333444444555555666666 #r3: 123456123456123456123456123456123456 r1=r(1)a--a-a------------a--b-b------a--b-c r1=r(2)------------------------------------ r1=r(3)------------------------------------ r1=r(4)a--b-b------------b--b-b------b--b-c r1=r(5)------------------------------------ r1=r(6)a--b-c------------b--b-c------c--c-c [r(1), r(4)]ncs [r(1), r(5)]ncs [r(1), r(6)]ncs [r(1)]d [r(2), r(3), r(5)] scf: #r2: 111111222222333333444444555555666666 #r3: 123456123456123456123456123456123456 r1=r(1)------------------------------------ r1=r(2)-------aa-a--ab-a--------aa-c------- r1=r(3)-------ab-a--bb-b--------ab-c------- r1=r(4)------------------------------------ r1=r(5)-------aa-c--ab-c--------cc-c------- r1=r(6)------------------------------------ [r(2), r(3)]ncs [r(2), r(4), r(5), r(6)] scf: #r2: 111111222222333333444444555555666666 #r3: 123456123456123456123456123456123456 r1=r(1)------------------------------------ r1=r(2)-------a-aaa-------a-bcc-a-ccc-a-ccc r1=r(3)------------------------------------ r1=r(4)-------a-bcc-------b-bbb-c-bcc-c-bcc r1=r(5)-------a-ccc-------c-bcc-c-ccc-c-ccc r1=r(6)-------a-ccc-------c-bcc-c-ccc-c-ccc [r(2), r(4), r(5)] scf: #r2: 111111222222333333444444555555666666 #r3: 123456123456123456123456123456123456 r1=r(1)------------------------------------ r1=r(2)-------a-aa--------a-bc--a-cc------- r1=r(3)------------------------------------ r1=r(4)-------a-bc--------b-bb--c-bc------- r1=r(5)-------a-cc--------c-bc--c-cc------- r1=r(6)------------------------------------ [r(2), r(4), r(6)] scf: #r2: 111111222222333333444444555555666666 #r3: 123456123456123456123456123456123456 r1=r(1)------------------------------------ r1=r(2)-------a-a-a-------a-b-c-------a-c-c r1=r(3)------------------------------------ r1=r(4)-------a-b-c-------b-b-b-------c-b-c r1=r(5)------------------------------------ r1=r(6)-------a-c-c-------c-b-c-------c-c-c [r(2), r(4)]ncs [r(2), r(5), r(6)]ncs [r(2), r(5)]ncs [r(2), r(6)]ncs [r(2)]d [r(3), r(4), r(6)]ncs [r(3), r(4)]d [r(3), r(5)]ncs [r(3), r(6)]ncs [r(3)]d [r(4), r(5), r(6)]ncs [r(4), r(5)]ncs [r(4), r(6)]ncs [r(4)]d [r(5), r(6)]d [r(5)]d [r(6)]d []d No ?- % added: 20 May 2006 (for 3-alt s2 but partial) ?- auto_restricted_domain(H),value_restriction(s2),nl,write(H), auto_scf( F,majority), (is_non_manipulable_scf(F)->true;(write(m),fail)), (is_dictatorial_scf(F,_)->(write(d),fail);true), (citizens_sovereignty(F)->true;(write(ncs),fail)), show_scf_hr_0t(F),fail. [r(1), r(2), r(4), r(6)] scf: #r2: 111111222222333333444444555555666666 #r3: 123456123456123456123456123456123456 r1=r(1)aa-a-aaa-a-a------aa-b-b------aa-b-c r1=r(2)aa-a-aaa-a-a------aa-b-c------aa-c-c r1=r(3)------------------------------------ r1=r(4)aa-b-baa-b-c------bb-b-b------bc-b-c r1=r(5)------------------------------------ r1=r(6)aa-b-caa-c-c------bc-b-c------cc-c-c [r(1), r(2), r(4)]ncs [r(1), r(2), r(6)]ncs [r(1), r(2)]d [r(1), r(3), r(5), r(6)] scf: #r2: 111111222222333333444444555555666666 #r3: 123456123456123456123456123456123456 r1=r(1)a-a-aa------a-b-ab------a-a-cca-b-cc r1=r(2)------------------------------------ r1=r(3)a-b-ab------b-b-bb------a-b-ccb-b-cc r1=r(4)------------------------------------ r1=r(5)a-a-cc------a-b-cc------c-c-ccc-c-cc r1=r(6)a-b-cc------b-b-cc------c-c-ccc-c-cc [r(1), r(3), r(5)] ... ?- auto_restricted_domain(H),value_restriction(sc),nl,write(H), auto_scf( F,majority),(\+ \+ is_cdi_pairs(_,_)->write(c);true), (is_non_manipulable_scf(F)->true;(write(m),fail)), (is_dictatorial_scf(F,_)->(write(d),fail);true), (citizens_sovereignty(F)->true;(write(ncs),fail)), show_scf_hr_0t(F),fail. [r(1), r(2), r(3), r(4)]cncs [r(1), r(2), r(3)]ncs [r(1), r(2), r(4)]cncs [r(1), r(2), r(5), r(6)]cncs [r(1), r(2), r(5)]ncs [r(1), r(2), r(6)]cncs [r(1), r(2)]d [r(1), r(3), r(4)]ncs [r(1), r(3)]ncs [r(1), r(4)]ncs [r(1), r(5), r(6)]cncs [r(1), r(5)]ncs [r(1), r(6)]cncs [r(1)]d [r(2), r(3), r(4)]cncs [r(2), r(3)]ncs [r(2), r(4)]cncs [r(2), r(5), r(6)]ncs [r(2), r(5)]ncs [r(2), r(6)]ncs [r(2)]d [r(3), r(4), r(5), r(6)]cncs [r(3), r(4), r(5)]cncs [r(3), r(4), r(6)]ncs [r(3), r(4)]d [r(3), r(5), r(6)]cncs [r(3), r(5)]cncs [r(3), r(6)]ncs [r(3)]d [r(4), r(5), r(6)]ncs [r(4), r(5)]ncs [r(4), r(6)]ncs [r(4)]d [r(5), r(6)]d [r(5)]d [r(6)]d []d No ?- % added: 10 May 2006. ?- auto_restricted_domain(H), \+ \+ value_restriction(S), nl,forall(member(S,[sp,sc,s2]), value_restriction(S)->write(S;' ') ;write('--; ')),write(H),fail. --; sc; --; [r(1), r(2), r(3), r(4)] sp; --; --; [r(1), r(2), r(3), r(5)] sp; sc; --; [r(1), r(2), r(3)] --; --; s2; [r(1), r(2), r(4), r(6)] --; sc; s2; [r(1), r(2), r(4)] --; sc; --; [r(1), r(2), r(5), r(6)] sp; sc; --; [r(1), r(2), r(5)] --; sc; s2; [r(1), r(2), r(6)] sp; sc; s2; [r(1), r(2)] sp; --; --; [r(1), r(3), r(4), r(6)] sp; sc; --; [r(1), r(3), r(4)] --; --; s2; [r(1), r(3), r(5), r(6)] sp; --; s2; [r(1), r(3), r(5)] sp; --; s2; [r(1), r(3), r(6)] sp; sc; s2; [r(1), r(3)] sp; --; s2; [r(1), r(4), r(6)] sp; sc; s2; [r(1), r(4)] --; sc; s2; [r(1), r(5), r(6)] sp; sc; s2; [r(1), r(5)] sp; sc; s2; [r(1), r(6)] sp; sc; s2; [r(1)] --; --; s2; [r(2), r(3), r(4), r(5)] --; sc; s2; [r(2), r(3), r(4)] sp; --; s2; [r(2), r(3), r(5)] sp; sc; s2; [r(2), r(3)] sp; --; --; [r(2), r(4), r(5), r(6)] sp; --; s2; [r(2), r(4), r(5)] sp; --; s2; [r(2), r(4), r(6)] sp; sc; s2; [r(2), r(4)] sp; sc; --; [r(2), r(5), r(6)] sp; sc; s2; [r(2), r(5)] sp; sc; s2; [r(2), r(6)] sp; sc; s2; [r(2)] --; sc; --; [r(3), r(4), r(5), r(6)] --; sc; s2; [r(3), r(4), r(5)] sp; sc; --; [r(3), r(4), r(6)] sp; sc; s2; [r(3), r(4)] --; sc; s2; [r(3), r(5), r(6)] sp; sc; s2; [r(3), r(5)] sp; sc; s2; [r(3), r(6)] sp; sc; s2; [r(3)] sp; sc; --; [r(4), r(5), r(6)] sp; sc; s2; [r(4), r(5)] sp; sc; s2; [r(4), r(6)] sp; sc; s2; [r(4)] sp; sc; s2; [r(5), r(6)] sp; sc; s2; [r(5)] sp; sc; s2; [r(6)] sp; sc; s2; [] No ?- ?- auto_restricted_domain(H),length(H,N), value_restriction(sp). H = [r((1, 0)), r((1, 1)), r((1, 2)), r((1, 3)), r((2, 3)), r((3, 2)), r((3, 3)), r((..., ...))] N = 8 Yes */ % generating and testing on the value restricted domains % (depreciated) %------------------------------------------------- % added: 16-21 May 2006. tell_majo(V,N,[Lower,Upper]):- mode_of_analysis(Alt,Soc), % findall(1,possible_ranking_0(_,_),L), all_possible_rankings_0(L), tell_goal('majo_345.txt',( ( nl,write(Alt;Soc), nth1(N,L,_), length(H,N),(N==Lower), auto_restricted_domain_with_filter(H), %auto_restricted_domain(H), %value_restriction(V), V=vr,nl,write(V:N:H), auto_scf( F,majority) ), ( (is_non_manipulable_scf(F)->true;(write(m),fail)), (is_dictatorial_scf(F,_)->(write(d),fail);true), (citizens_sovereignty(F)->true;(write(ncs),fail)), show_scf_hr_0t(F) ),fail;true)). %------------------------------------------------- % auto generation of value restricted domains %------------------------------------------------- % 16,19, 22-29 May, 23 Jun 2006. %/* relative_domain_for_triple(T,L,RT,RT1):- (var(L)->admissible_rankings(L);true), triple_of_alternative(T), findall(K, ( member(R,L), relative_ranking_on_triple(R, T,_,K) ), RT), sort(RT,RT1). %*/ % a memory-expensive version using recursion. % added: 18 Jun 2006. % /* relative_domain_for_triple(T,L,RT,RT1):- (var(L)->admissible_rankings(L);true), triple_of_alternative(T), relative_domain_for_triple_1(T,L,RT,RT1). relative_domain_for_triple_1(_,[],[],[]). relative_domain_for_triple_1(T,[R|L],[K|KL],RT1):- relative_domain_for_triple_1(T,L,KL,RT0), relative_ranking_on_triple(R, T,_,K), append( [K], RT0, RT), sort(RT,RT1). % */ % value restriction for triples %------------------------------------------------- vr_domain_at_triple((VR,A),(X,Y,Z),H,L):- member(VR,[vr,sp,sc,s2]), CL=[1,2,3,4,5,6], triple_of_alternative((X,Y,Z)), vr_domain_at_triple_1((VR,A),(X,Y,Z),CL,H,L). vr_domain_at_triple_1(_,_,[],[],[]). vr_domain_at_triple_1(VR,T,[K|M],[R|H],[K|L]):- vr_domain_at_triple_1(VR,T,M,H,L), relative_ranking_on_triple_0(T,R,K), constraints_of_value_for_triple(VR,T,[R|H],[K|L]). vr_domain_at_triple_1(VR,T,[_|M],H,L):- vr_domain_at_triple_1(VR,T,M,H,L). constraints_of_value_for_triple((vr,_),_,_,L):- \+ involves_latin_square_0(_,L). constraints_of_value_for_triple((sp,A),(X,Y,Z),H,_):- member(A,[X,Y,Z]), \+ involves_an_alternative_of_value(worst,A,H). constraints_of_value_for_triple((sc,A),(X,Y,Z),H,_):- member(A,[X,Y,Z]), \+ involves_an_alternative_of_value(best,A,H). constraints_of_value_for_triple((s2,A),(X,Y,Z),H,_):- member(A,[X,Y,Z]), \+ involves_an_alternative_of_value(middle,A,H). involves_latin_square_0(Sq,L):- latin_square_0(Sq), subset(Sq,L). involves_an_alternative_of_value(worst,A,H):- member((_,_,A),H). involves_an_alternative_of_value(best,B,H):- member((B,_,_),H). involves_an_alternative_of_value(middle,C,H):- member((_,C,_),H). %relative_ranking_on_triple_0((X,Y,Z),Rxyz,K) % generating VR domains without commitment to the database %------------------------------------------------- auto_value_restricted_domain_by_triples(Domain,SL,SS):- auto_value_restricted_domain_by_triples_1(Y,SL,SS), transform_domain_triples_into_rankings( Y,_, Domain). auto_value_restricted_domain_by_triples_1(Y,SL,SS):- findall(T, triple_of_alternative(T),TL), auto_value_restriction_for_triples( SS,TL,Y), findall(V:T, member((V,T,_,_),Y), SL). % forall(member(X, SL),(nl,write(X))), % read(y), auto_value_restriction_for_triples( _, [],[]). auto_value_restriction_for_triples( SS,[T|TL],[(V,T,H,L)|Y]):- auto_value_restriction_for_triples( SS,TL,Y), ((var(SS);SS=vr)->V=vr; member(V,SS) ), vr_domain_at_triple((V,_),T,H,L). transform_domain_triples_into_rankings( Y,RL, Domain):- % findall(R, possible_ranking_0( R,_), RL), (var(RL)->all_possible_rankings_0(RL);true), transform_domain_triples_into_rankings_1( Y,RL, Domain). transform_domain_triples_into_rankings_1( _,[],[] ). transform_domain_triples_into_rankings_1( Y,[R|O], RD ):- transform_domain_triples_into_rankings_1( Y,O,D ), ( inconsistent_ranking_wrt_domain_of_triples( R, Y ,_) ->RD = D ; RD = [R|D] ). inconsistent_ranking_wrt_domain_of_triples( R, Y ,(T,L,K)):- member((_,T,_,L),Y), relative_ranking_on_triple(R,T,_,K), \+ member(K,L). % a restriction to maximal sizes for each triple for VR domains %------------------------------------------------- % (depreciated) %/* auto_value_restricted_domain_by_triples_max_d(Domain,SL,SS):- auto_value_restricted_domain_by_triples_max_1(Y,SL,SS), % findall(R, possible_ranking_0( R,_), RL), all_possible_rankings_0(RL), transform_domain_triples_into_rankings( Y,RL, Domain). auto_value_restricted_domain_by_triples_max_1(Y,SL,SS):- max_scheme_of_vr_domains_wrt_triples(Y,_), auto_value_restricted_domain_by_triples_1(Y,SL,SS). %*/ max_scheme_of_vr_domains_wrt_triples(Y,P):- findall(T, triple_of_alternative(T), TL), length(TL,P), length(Y0,P), V =vr, findall(X, (member(X,Y0),X=(V,_,_,[_,_,_,_])), Y). % generating VR domains without commitment to the database %------------------------------------------------- % modified: 28-9 May 2006 % modified: 18-9,23 Jun 2006. reuse of recursion data. :- dynamic auto_VR_domain_0/4. init_auto_VR_domain_0:- abolish(auto_VR_domain_0/4). exist_auto_VR_domain_0(L,TR,SL,SS):- clause( auto_VR_domain_0( L,TR,SL,SS), true ). % debug: 23-4 Jun 2006 (redundant collection of rankings) % negligence for the earlier 3-arity rules. % debug: 30 Jun 2006 (removed a redundant rule) auto_value_restricted_domain_by_triples_rec(L,SL,SS):- auto_value_restricted_domain_by_triples_rec(L,_,SL,SS). auto_value_restricted_domain_by_triples_max(L,SL,SS):- auto_value_restricted_domain_by_triples_max(L,_,SL,SS). % the semi-recursive construction with references of the tentative data. auto_value_restricted_domain_by_triples_rec(L,TR,SL,SS):- \+ exist_auto_VR_domain_0(_,TR,_,_), % findall(S,possible_ranking_0(S,_),TR), (var(TR)->all_possible_rankings_0(TR);true), auto_value_restricted_domain_by_triples_max(L,TR,SL,SS), display_first_encounter(L). auto_value_restricted_domain_by_triples_rec(L,TR,SL,SS):- \+ \+ exist_auto_VR_domain_0(_,_,_,_), % findall(S,possible_ranking_0(S,_),TR), (var(TR)->all_possible_rankings_0(TR);true), auto_VR_domain_ref(L,TR,SL,SS,rec). % the earlier, fully recursive, construction without references. auto_value_restricted_domain_by_triples_max(L,TR,SL,SS):- % findall(S,possible_ranking_0(S,_),TR), (var(TR)->all_possible_rankings_0(TR);true), auto_VR_domain_ref(L,TR,SL,SS,max). auto_VR_domain_ref(L,TR,SL,SS,_):- exist_auto_VR_domain_0(L,TR,SL,SS). auto_VR_domain_ref(L,TR,SL,SS,rec):- \+ exist_auto_VR_domain_0(L,TR,SL,SS), auto_VR_domain(L,TR,SL,SS), sort(L,L1), assert( auto_VR_domain_0( L1,TR,SL,SS) ). auto_VR_domain_ref(L,TR,SL,SS,max):- \+ exist_auto_VR_domain_0(L,TR,SL,SS), auto_VR_domain(1,L,TR,SL,SS), assert( auto_VR_domain_0( L,TR,SL,SS) ). % the subsidiary: a construction with references of recursion records. auto_VR_domain([R|L],[R|_],SL,SS):- exist_auto_VR_domain_0(L,_,SL,SS), \+ member(R,L), value_restriction_for_triples(SS,SL, [R]), display_suc_messeage(L,R). auto_VR_domain(L,[_|TR],SL,SS):- auto_VR_domain(L,TR,SL,SS). auto_VR_domain([],[],_,_). display_suc_messeage(L,R):- length([R|L],N), nl, write(N:' successfully expanded by adding a ranking :'), nl, write(R). display_first_encounter(L):- length(L,N), write('starting from a domain of the lower bound '), nl, write(N:L). % a run 19 Jun 2006. /* ?- abolish(auto_VR_domain_0/4). Yes ?- test_sup_vr_by_triples(P/N,5). start, [date(2006/6/19), time(12:2:9)] complete successfully expanded by adding a ranking : r((4, 4, 3))complete successfully expanded by adding a ranking : r((4, 3, 3))complete successfully expanded by adding a ranking : r((6, 4, 5))complete successfully expanded by adding a ranking : r((6, 4, 4))complete P = 21 N = 120 Yes ?- */ % a construction (probably correct) auto_VR_domain(1,[R|L],[R|TR],SL,SS):- value_restriction_for_triples(SS,SL, [R]), auto_VR_domain(1,L,TR, SL,SS). auto_VR_domain(1,L,[_|TR],SL,SS):- auto_VR_domain(1,L,TR, SL,SS). auto_VR_domain(_,[],[],_,_). % a problematic constructuin (not correct. first domain only.) auto_VR_domain(2,RL,[R|TR],SL,SS):- auto_VR_domain(2,L,TR, SL,SS), ( value_restriction_for_triples(SS,SL, [R]) ->(RL=[R|L] ) %; RL=L) ; RL=L ). % another problematic construction (order sensitive) /* auto_VR_domain(3,RL,[R|TR],SL,SS):- auto_VR_domain(3,L,TR, SL,SS), value_restriction_for_triples(SS,SL, [R]), RL=[R|L]. auto_VR_domain(3,L,[_|TR],SL,SS):- auto_VR_domain(3,L,TR, SL,SS). */ /* % 5/29 a run. ?- [sproof_f],setup_K_alt_domain(4,A), auto_value_restricted_domain_by_triples_max(L,SL,vr),length(L,N),N>8. % sproof_f compiled 0.02 sec, 80 bytes A = [a, b, c, d] L = [r((1, 5)), r((3, 5)), r((3, 4)), r((4, 5)), r((4, 4)), r((4, 3)), r((4, 2)), r((..., ...)), r(...)] SL = [sp: (a, b, c):b, sc: (a, b, d):a, sc: (a, c, d):a, sp: (b, c, d):b] N = 9 Yes ?- */ % a test of recursion. te_r([],[]). te_r([A|B],[A|D]):- te_r(B,D), member(A,[1,3,5]). te_r(B,[_|D]):- te_r(B,D). te_r1([],[]). te_r1(AB,[A|D]):- te_r1(B,D), (member(A,[1,3,5]) ->(AB=[A|B];AB=B) ; AB=B ). % the alternating scheme by Fishburn %------------------------------------------------- % added: 1 Jun 2006 :- dynamic is_alternating_scheme_active/2. is_alternating_scheme_active(1,yes). is_alternating_scheme_active(2,yes). %is_alternating_scheme_active(2,no). switch_alternating_scheme(I,yes->no):- retract(is_alternating_scheme_active(I,yes)), assert(is_alternating_scheme_active(I,no)). switch_alternating_scheme(I,no->yes):- retract(is_alternating_scheme_active(I,no)), assert(is_alternating_scheme_active(I,yes)). off_alternating_scheme:- forall( is_alternating_scheme_active(I,yes), switch_alternating_scheme(I,yes->no) ). % a generalized rule % added: 17 Jun 2006. However, this makes a bit slower. alternating_scheme(_,(_,X,_),X,_,_):- \+ is_alternating_scheme_active(_,yes). %/* alternating_scheme(V,(_,X,_),X,Parity,AS):- set_of_alternatives(A), nth1(K,A,X), (0 is K mod 2->Parity=even;Parity=odd), is_alternating_scheme_active(AS,yes), member((AS,Parity,V),[ (1,even, sc), (1,odd, sp), (2,even, sp), (2,odd, sc) ]). %*/ % /* alternating_scheme(V,(_,X,_),X,Parity,1):- is_alternating_scheme_active(1,yes), set_of_alternatives(A), nth1(K,A,X), (0 is K mod 2->Parity=even;Parity=odd), member((Parity,V),[ (even, sc), (odd, sp) ]). alternating_scheme(V,(_,X,_),X,Parity,2):- is_alternating_scheme_active(2,yes), set_of_alternatives(A), nth1(K,A,X), (0 is K mod 2->Parity=even;Parity=odd), member((Parity,V),[ (even, sp), (odd, sc) ]). % */ % VR domain by all triples for a set of rankings %------------------------------------------------- value_restriction_for_triples( SS, SL, RL):- findall(T, triple_of_alternative(T),TL), value_restriction_for_triples_1( SS, TL, SL, RL). value_restriction_for_triples( SS, SL, RL):- findall(T, triple_of_alternative(T),TL), value_restriction_for_triples_1_1( SS, TL, SL, RL). value_restriction_for_triples_1( _, [], [], _). value_restriction_for_triples_1( SS, [T|TL], [V:T:X|SL], RL):- value_restriction_for_triples_1( SS, TL, SL, RL), alternating_scheme(V,T,X,_,1), value_restriction_for_triples_2( SS, RL, T, V, X). value_restriction_for_triples_1_1( _, [], [], _). value_restriction_for_triples_1_1( SS, [T|TL], [V:T:X|SL], RL):- value_restriction_for_triples_1_1( SS, TL, SL, RL), alternating_scheme(V,T,X,_,2), value_restriction_for_triples_2( SS, RL, T, V, X). value_restriction_for_triples_2( SS, RL, T, Sx, W):- (SS == vr; SS == [vr]), T=(X,Y,Z), member(W,[X,Y,Z]), type_of_value_restriction( Sx,agree_on(C),_), value_restriction_in_rankings( Sx, (C,W), T, RL). value_restriction_for_triples_2( SS, RL, T, Sx, W):- % \+ (SS == vr), % debug: 23-4 Jun 2006 \+ (SS == vr; SS == [vr]), T=(X,Y,Z), member(W,[X,Y,Z]), member(Sx, SS), value_restriction_in_rankings( Sx, (_C,W), T, RL). /* % (alternative) check all the vr subrules alternative. value_restriction_for_triples_2( SS, RL, T, V, W):- T=(X,Y,Z), member(W,[X,Y,Z]), findall(Sx, ( type_of_value_restriction( Sx,agree_on(C),_), (SS=vr->member(Sx,[sp,sc,s2]);member(Sx, SS)), value_restriction_in_rankings( Sx, (C,W), T, RL) ), V0), V0 \= [], sort(V0,V). */ /* % (depreciated) a faster alternative. % but it can not be consistently used in current version. value_restriction_for_triples( vr, T, XL, vr):- \+ involves_latin_square_for_triple(XL,T), !. */ % an earlier version of value_restriction_for_triples. %------------------------------------------------- % revised: 18 Jun 2006. value_restriction_r( SS, SL, M):- member(M, [no, yes, max]), findall(T, triple_of_alternative(T),TL), value_restriction_r( SS, TL, SL, M). value_restriction_r( _, [], [],_). value_restriction_r( SS, [T|TL], [V1:T|SL],M):- value_restriction_r( SS, TL, SL,M), findall(Sx, ( type_of_value_restriction( Sx,agree_on(C),_), (var(SS)->true;member(Sx, SS)), value_restriction( Sx, C, T) ), V), (member(M,[yes,max])->V \= [];true), (M=max->relative_domain_for_triple(T,_,_,[_,_,_,_]);true), sort(V,V1). % generating VR domains with commitment to the database %------------------------------------------------- filter_on_size_of_domain(N/P):- % findall(1, possible_ranking_0(_,_), L), all_possible_rankings_0(L,P), % length(L,P), nth1(N,L,_). auto_vr_domains_of_size(N,H,SL,M):- auto_vr_domains_of_size(N,H,SL,M,[vr]). auto_vr_domains_of_size(N,H,SL,M,SS):- filter_on_size_of_domain(N/_), % auto_vr_domains_of_size_1_pre(N,M), auto_vr_domains_of_size_1(N,H,SL,M,SS), abolish(admissible_rankings/1), assert(admissible_rankings(H)). auto_vr_domains_of_size_1_pre(N,M):- mode_of_analysis(K-alternatives,_), E is 2^(K-1), (Nmember(M,[yes,max]) ; M=max ). auto_vr_domains_of_size_1(N,H,SL,yes,SS):- length(H,N), auto_value_restricted_domain_by_triples(H,SL,SS). auto_vr_domains_of_size_1(N,H,SL,max,SS):- length(H,N), auto_value_restricted_domain_by_triples_max(H,SL,SS). auto_vr_domains_of_size_old(N,H,SL,M):- length(H,N), member(M,[yes,max]), auto_restricted_domain(H), value_restriction_r(_,SL,M). display_domain_for_triples(H,SL):- nl,write(H), CollectVR = ( findall(Sx, value_restriction_in_rankings( Sx,_, T, H), SSx), sort(SSx,VR) ), forall( relative_domain_for_triple(T,H,_,RE), ( member(V:T,SL), (V \= vr -> VR =V ; CollectVR), nl,write(T:RE:VR) ) ). /* ?- length(H,8),auto_restricted_domain(H), value_restriction_r(_,SL,yes). H = [r((1, 5, 6)), r((1, 5, 5)), r((1, 5, 4)), r((1, 5, 3)), r((1, 5, 2)), r((1, 4, 6)), r((1, ..., ...)), r((..., ...))] SL = [[s2, sc, sp]: (a, b, c), [sc, sp]: (a, b, d), [sc, sp]: (a, b, e), [sc, sp]: (a, c, d), [sc, sp]: (a, c, e), [sc]: (a, d, e), [sc|...]: (b, ..., ...), [...|...]: (..., ...), ... :...|...] Yes ?- test_domain_for_triple(T,L,RT,RE),nl,write(T:RE),fail. (a, b, c):[1] (a, b, d):[1, 2, 5] (a, b, e):[1, 2, 5] (a, c, d):[1, 2, 5] (a, c, e):[1, 2, 5] (a, d, e):[3, 4, 5, 6] (b, c, d):[1, 2, 5] (b, c, e):[1, 2, 5] (b, d, e):[3, 4, 5, 6] (c, d, e):[3, 4, 5, 6] No ?- */ % generating s2 (separability into two groups) domains %------------------------------------------------- % 28-9 May, 1 Jun 2006. % (status: under construction or pending. not correct.) partition_of_alternatives_into_two_groups(A,[B,C]):- set_of_alternatives(A), list_projection(B,A,_), B\=A, B\=[], subtract(A,B,C). analyze_s2_restricted_domain([B,C],L):- \+ var(B), % usable only for the verification. % partition_of_alternatives_into_two_groups(_,[B,C]) (var(L)->auto_s2_restricted_domain(L);true), \+ ( member(R,L), unable_to_separate_into_two_groups([B,C],_,R) ). unable_to_separate_into_two_groups([B,C],(X,Y,Z),R):- member((T,U),[(B,C),(C,B)]), member(X,T), member(Y,U), member(Z,U), % Z\=Y, prefer_x_to_y_0(X,Y,R), prefer_x_to_y_0(Z,X,R). unable_to_separate_into_two_groups([B,C],(X,Y,Z),R):- member((T,_),[(B,C),(C,B)]), member(X,T), member(Y,T), member(Z,T), % Z\=Y, prefer_x_to_y_0(X,Y,R), prefer_x_to_y_0(Z,X,R). auto_s2_restricted_domain(L,[B,C]):- % findall(S,possible_ranking_0(S,_),TR), all_possible_rankings_0(TR), partition_of_alternatives_into_two_groups(_,[B,C]), auto_s2_domain(L,TR,[B,C]). auto_s2_domain([],[],_). auto_s2_domain([R|L],[R|TR],[B,C]):- \+ unable_to_separate_into_two_groups([B,C],_,R), auto_s2_domain(L,TR,[B,C]), filter_of_auto_s2_domain(R,L,[B,C]). auto_s2_domain(L,[_|TR],[B,C]):- auto_s2_domain(L,TR,[B,C]). filter_of_auto_s2_domain(R,L,[B,C]):- \+ ( involves_latin_square_for_triple([R|L],(X,Y,Z)), member(D,[B,C]), subset([X,Y,Z],D) ). % demo (1 Jun 2006) /* ?- setup_K_alt_domain(3,L). L = [a, b, c] Yes ?- auto_s2_restricted_domain(L,[B,C]). L = [r(1), r(3), r(5), r(6)] B = [a, b] C = [c] ; L = [r(1), r(3), r(5)] B = [a, b] C = [c] Yes ?- auto_s2_restricted_domain(L,[B,C]), involves_latin_square_for_triple(L,(X,Y,Z)). No ?- ?- setup_K_alt_domain(4,K). K = [a, b, c, d] Yes ?- auto_s2_restricted_domain(L,[B,C]), display_domain_for_triples(L,_). [r((1, 4)), r((1, 1)), r((2, 4)), r((2, 1)), r((3, 4)), r((3, 1)), r((4, 4)), r((4, 1))] (a, b, c):[1, 2, 3, 4]:[sc] (a, b, d):[1, 3, 5, 6]:[s2] (a, c, d):[1, 3, 5, 6]:[s2] (b, c, d):[1, 3, 5, 6]:[s2] L = [r((1, 4)), r((1, 1)), r((2, 4)), r((2, 1)), r((3, 4)), r((3, 1)), r((4, 4)), r((..., ...))] B = [a, b, c] C = [d] Yes ?- ?- length(L,9),auto_s2_restricted_domain(L,[B,C]), display_domain_for_triples(L,_), (involves_latin_square_for_triple(L,(X,Y,Z))->I=0;I=1). No ?- length(L,8),auto_s2_restricted_domain(L,[B,C]), display_domain_for_triples(L,_), (involves_latin_square_for_triple(L,(X,Y,Z))->I=0;I=1), nl,write(latin(I)),fail. [r((1, 2)), r((1, 1)), r((3, 2)), r((3, 1)), r((5, 4)), r((5, 3)), r((6, 4)), r((6, 3))] (a, b, c):[1, 3, 5, 6]:[s2] (a, b, d):[1, 3, 5, 6]:[s2] (a, c, d):[1, 2, 4, 6]:[s2] (b, c, d):[1, 2, 4, 6]:[s2] latin(1) [r((2, 2)), r((2, 1)), r((3, 4)), r((3, 3)), r((4, 4)), r((4, 3)), r((5, 2)), r((5, 1))] (a, b, c):[2, 3, 4, 5]:[s2] (a, b, d):[1, 2, 4, 6]:[s2] (a, c, d):[1, 3, 5, 6]:[s2] (b, c, d):[2, 3, 4, 5]:[s2] latin(1) [r((1, 4)), r((1, 3)), r((2, 4)), r((2, 3)), r((4, 2)), r((4, 1)), r((6, 2)), r((6, 1))] (a, b, c):[1, 2, 4, 6]:[s2] (a, b, d):[2, 3, 4, 5]:[s2] (a, c, d):[2, 3, 4, 5]:[s2] (b, c, d):[1, 3, 5, 6]:[s2] latin(1) [r((1, 4)), r((1, 3)), r((2, 4)), r((2, 3)), r((4, 2)), r((4, 1)), r((6, 2)), r((6, 1))] (a, b, c):[1, 2, 4, 6]:[s2] (a, b, d):[2, 3, 4, 5]:[s2] (a, c, d):[2, 3, 4, 5]:[s2] (b, c, d):[1, 3, 5, 6]:[s2] latin(1) [r((2, 2)), r((2, 1)), r((3, 4)), r((3, 3)), r((4, 4)), r((4, 3)), r((5, 2)), r((5, 1))] (a, b, c):[2, 3, 4, 5]:[s2] (a, b, d):[1, 2, 4, 6]:[s2] (a, c, d):[1, 3, 5, 6]:[s2] (b, c, d):[2, 3, 4, 5]:[s2] latin(1) [r((1, 2)), r((1, 1)), r((3, 2)), r((3, 1)), r((5, 4)), r((5, 3)), r((6, 4)), r((6, 3))] (a, b, c):[1, 3, 5, 6]:[s2] (a, b, d):[1, 3, 5, 6]:[s2] (a, c, d):[1, 2, 4, 6]:[s2] (b, c, d):[1, 2, 4, 6]:[s2] latin(1) ?- */ max_s2_restricted_domain(L,[B,C]):- % findall(S,possible_ranking_0(S,_),TR), all_possible_rankings_0(TR), partition_of_alternatives_into_two_groups(_,[B,C]), max_s2_domain(L,TR,[B,C]). max_s2_domain([],[],_). max_s2_domain(RL,[R|TR],[B,C]):- max_s2_domain(L,TR,[B,C]), ( unable_to_separate_into_two_groups([B,C],_,R) -> RL = L ; RL = [R|L] ). % a version %------------------------------------------------- max_s2_restricted_domain_1(L,SL):- % findall(S,possible_ranking_0(S,_),TR), all_possible_rankings_0(TR), max_s2_domain_1(L,TR,SL). max_s2_domain_1([],[],_). max_s2_domain_1([R|L],[R|TR],SL2):- max_s2_domain_1(L,TR,SL), value_restriction_t( s2, SL1, [R]), (var(SL)->SL2=SL1;findall((T,VR2), ( member( (T,VR), SL), member( (T,VR1), SL1), intersection( VR,VR1,VR2) ), SL2)), \+ member((_,[]),SL2). max_s2_domain_1(L,[_|TR],SL):- max_s2_domain_1(L,TR,SL). value_restriction_t( SS, SL, L):- findall(T, triple_of_alternative(T),TL), value_restriction_t( SS, TL, SL, L). value_restriction_t( _, [], [],_). value_restriction_t( Sx, [T|TL], [(T,VR)|SL],L):- value_restriction_t( Sx, TL, SL,L), findall((Sx,B), ( value_restriction_in_rankings( Sx, (_,B), T, L) ), VR). %value_restriction_t( Sx, [_|TL], SL,L):- % value_restriction_t( Sx, TL, SL,L). /* ?- [sproof_f], setup_K_alt_domain(3,_), auto_s2_restricted_domain(L,[B,C]), length(L,4),nl,write(L:[B,C]),fail. % sproof_f compiled 0.02 sec, 92 bytes [r(1), r(3), r(5), r(6)]:[[a, b], [c]] [r(2), r(3), r(4), r(5)]:[[a, c], [b]] [r(1), r(2), r(4), r(6)]:[[a], [b, c]] [r(1), r(2), r(4), r(6)]:[[b, c], [a]] [r(2), r(3), r(4), r(5)]:[[b], [a, c]] [r(1), r(3), r(5), r(6)]:[[c], [a, b]] No ?- [sproof_f], setup_K_alt_domain(3,_), auto_s2_restricted_domain(L,[B,C]), \+ analyze_s2_restricted_domain(_,L). % sproof_f compiled 0.02 sec, 1,048 bytes No ?- % 4-alternative case ?- max_s2_restricted_domain(L,[B,C]),length(L,N), nl,write(s2:[B,C]:N:L),fail. s2:[[a, b, c], [d]]:12:[r((1, 5)), r((1, 2)), r((2, 5)), r((2, 2)), r((3, 5)), r((3, 2)), r((4, 5)), r((4, 2)), r((5, 5)), r((5, 2)), r((6, 5)), r((6, 2))] s2:[[a, b, d], [c]]:12:[r((1, 5)), r((1, 4)), r((1, 3)), r((3, 5)), r((3, 4)), r((3, 3)), r((5, 4)), r((5, 3)), r((5, 2)), r((6, 4)), r((6, 3)), r((6, 2))] s2:[[a, b], [c, d]]:8:[r((1, 3)), r((1, 2)), r((3, 3)), r((3, 2)), r((5, 5)), r((5, 4)), r((6, 5)), r((6, 4))] s2:[[a, c, d], [b]]:12:[r((2, 5)), r((2, 4)), r((2, 3)), r((3, 4)), r((3, 3)), r((3, 2)), r((4, 4)), r((4, 3)), r((4, 2)), r((5, 5)), r((5, 4)), r((5, 3))] s2:[[a, c], [b, d]]:8:[r((2, 3)), r((2, 2)), r((3, 5)), r((3, 4)), r((4, 5)), r((4, 4)), r((5, 3)), r((5, 2))] s2:[[a, d], [b, c]]:8:[r((1, 5)), r((1, 4)), r((2, 5)), r((2, 4)), r((4, 3)), r((4, 2)), r((6, 3)), r((6, 2))] s2:[[a], [b, c, d]]:12:[r((1, 4)), r((1, 3)), r((1, 2)), r((2, 4)), r((2, 3)), r((2, 2)), r((4, 5)), r((4, 4)), r((4, 3)), r((6, 5)), r((6, 4)), r((6, 3))] s2:[[b, c, d], [a]]:12:[r((1, 4)), r((1, 3)), r((1, 2)), r((2, 4)), r((2, 3)), r((2, 2)), r((4, 5)), r((4, 4)), r((4, 3)), r((6, 5)), r((6, 4)), r((6, 3))] s2:[[b, c], [a, d]]:8:[r((1, 5)), r((1, 4)), r((2, 5)), r((2, 4)), r((4, 3)), r((4, 2)), r((6, 3)), r((6, 2))] s2:[[b, d], [a, c]]:8:[r((2, 3)), r((2, 2)), r((3, 5)), r((3, 4)), r((4, 5)), r((4, 4)), r((5, 3)), r((5, 2))] s2:[[b], [a, c, d]]:12:[r((2, 5)), r((2, 4)), r((2, 3)), r((3, 4)), r((3, 3)), r((3, 2)), r((4, 4)), r((4, 3)), r((4, 2)), r((5, 5)), r((5, 4)), r((5, 3))] s2:[[c, d], [a, b]]:8:[r((1, 3)), r((1, 2)), r((3, 3)), r((3, 2)), r((5, 5)), r((5, 4)), r((6, 5)), r((6, 4))] s2:[[c], [a, b, d]]:12:[r((1, 5)), r((1, 4)), r((1, 3)), r((3, 5)), r((3, 4)), r((3, 3)), r((5, 4)), r((5, 3)), r((5, 2)), r((6, 4)), r((6, 3)), r((6, 2))] s2:[[d], [a, b, c]]:12:[r((1, 5)), r((1, 2)), r((2, 5)), r((2, 2)), r((3, 5)), r((3, 2)), r((4, 5)), r((4, 2)), r((5, 5)), r((5, 2)), r((6, 5)), r((6, 2))] No ?- ?- [menu]. % menu compiled 0.00 sec, 0 bytes Yes ?- tell_goal('max_s2.txt', ( [sproof_f],setup_K_alt_domain(5,_), max_s2_restricted_domain(L,[B,C]),length(L,N), nl,write(s2:[B,C]:N:L),fail);true). % sproof_f compiled 0.02 sec, 68 bytes complete L = _G172 B = _G166 C = _G169 N = _G176 Yes ?- % file output start time , [date(2006/5/28), time(18:10:23)] %---------- start from here ------------% s2:[[a, b, c, d], [e]]:48:[r((1, 5, 6)), r((1, 5, 2)), r((1, 4, 6)), r((1, 4, 2)), r((1, 3, 6)), r((1, 3, 2)), r((1, 2, 6)), r((1, 2, 2)), r((2, 5, 6)), r((2, 5, 2)), r((2, 4, 6)), r((2, 4, 2)), r((2, 3, 6)), r((2, 3, 2)), r((2, 2, 6)), r((2, 2, 2)), r((3, 5, 6)), r((3, 5, 2)), r((3, 4, 6)), r((3, 4, 2)), r((3, 3, 6)), r((3, 3, 2)), r((3, 2, 6)), r((3, 2, 2)), r((4, 5, 6)), r((4, 5, 2)), r((4, 4, 6)), r((4, 4, 2)), r((4, 3, 6)), r((4, 3, 2)), r((4, 2, 6)), r((4, 2, 2)), r((5, 5, 6)), r((5, 5, 2)), r((5, 4, 6)), r((5, 4, 2)), r((5, 3, 6)), r((5, 3, 2)), r((5, 2, 6)), r((5, 2, 2)), r((6, 5, 6)), r((6, 5, 2)), r((6, 4, 6)), r((6, 4, 2)), r((6, 3, 6)), r((6, 3, 2)), r((6, 2, 6)), r((6, 2, 2))] s2:[[a, b, c, e], [d]]:48:[r((1, 5, 5)), r((1, 5, 4)), r((1, 5, 3)), r((1, 5, 2)), r((1, 2, 6)), r((1, 2, 5)), r((1, 2, 4)), r((1, 2, 3)), r((2, 5, 5)), r((2, 5, 4)), r((2, 5, 3)), r((2, 5, 2)), r((2, 2, 6)), r((2, 2, 5)), r((2, 2, 4)), r((2, 2, 3)), r((3, 5, 5)), r((3, 5, 4)), r((3, 5, 3)), r((3, 5, 2)), r((3, 2, 6)), r((3, 2, 5)), r((3, 2, 4)), r((3, 2, 3)), r((4, 5, 5)), r((4, 5, 4)), r((4, 5, 3)), r((4, 5, 2)), r((4, 2, 6)), r((4, 2, 5)), r((4, 2, 4)), r((4, 2, 3)), r((5, 5, 5)), r((5, 5, 4)), r((5, 5, 3)), r((5, 5, 2)), r((5, 2, 6)), r((5, 2, 5)), r((5, 2, 4)), r((5, 2, 3)), r((6, 5, 5)), r((6, 5, 4)), r((6, 5, 3)), r((6, 5, 2)), r((6, 2, 6)), r((6, 2, 5)), r((6, 2, 4)), r((6, 2, 3))] s2:[[a, b, c], [d, e]]:24:[r((1, 5, 6)), r((1, 5, 5)), r((1, 2, 3)), r((1, 2, 2)), r((2, 5, 6)), r((2, 5, 5)), r((2, 2, 3)), r((2, 2, 2)), r((3, 5, 6)), r((3, 5, 5)), r((3, 2, 3)), r((3, 2, 2)), r((4, 5, 6)), r((4, 5, 5)), r((4, 2, 3)), r((4, 2, 2)), r((5, 5, 6)), r((5, 5, 5)), r((5, 2, 3)), r((5, 2, 2)), r((6, 5, 6)), r((6, 5, 5)), r((6, 2, 3)), r((6, 2, 2))] s2:[[a, b, d, e], [c]]:48:[r((1, 5, 6)), r((1, 5, 5)), r((1, 5, 4)), r((1, 5, 3)), r((1, 4, 6)), r((1, 4, 5)), r((1, 4, 4)), r((1, 4, 3)), r((1, 3, 6)), r((1, 3, 5)), r((1, 3, 4)), r((1, 3, 3)), r((3, 5, 6)), r((3, 5, 5)), r((3, 5, 4)), r((3, 5, 3)), r((3, 4, 6)), r((3, 4, 5)), r((3, 4, 4)), r((3, 4, 3)), r((3, 3, 6)), r((3, 3, 5)), r((3, 3, 4)), r((3, 3, 3)), r((5, 4, 5)), r((5, 4, 4)), r((5, 4, 3)), r((5, 4, 2)), r((5, 3, 5)), r((5, 3, 4)), r((5, 3, 3)), r((5, 3, 2)), r((5, 2, 5)), r((5, 2, 4)), r((5, 2, 3)), r((5, 2, 2)), r((6, 4, 5)), r((6, 4, 4)), r((6, 4, 3)), r((6, 4, 2)), r((6, 3, 5)), r((6, 3, 4)), r((6, 3, 3)), r((6, 3, 2)), r((6, 2, 5)), r((6, 2, 4)), r((6, 2, 3)), r((6, 2, 2))] s2:[[a, b, d], [c, e]]:24:[r((1, 5, 3)), r((1, 5, 2)), r((1, 4, 3)), r((1, 4, 2)), r((1, 3, 3)), r((1, 3, 2)), r((3, 5, 3)), r((3, 5, 2)), r((3, 4, 3)), r((3, 4, 2)), r((3, 3, 3)), r((3, 3, 2)), r((5, 4, 6)), r((5, 4, 5)), r((5, 3, 6)), r((5, 3, 5)), r((5, 2, 6)), r((5, 2, 5)), r((6, 4, 6)), r((6, 4, 5)), r((6, 3, 6)), r((6, 3, 5)), r((6, 2, 6)), r((6, 2, 5))] s2:[[a, b, e], [c, d]]:24:[r((1, 3, 6)), r((1, 3, 5)), r((1, 3, 4)), r((1, 2, 6)), r((1, 2, 5)), r((1, 2, 4)), r((3, 3, 6)), r((3, 3, 5)), r((3, 3, 4)), r((3, 2, 6)), r((3, 2, 5)), r((3, 2, 4)), r((5, 5, 4)), r((5, 5, 3)), r((5, 5, 2)), r((5, 4, 4)), r((5, 4, 3)), r((5, 4, 2)), r((6, 5, 4)), r((6, 5, 3)), r((6, 5, 2)), r((6, 4, 4)), r((6, 4, 3)), r((6, 4, 2))] s2:[[a, b], [c, d, e]]:24:[r((1, 3, 4)), r((1, 3, 3)), r((1, 3, 2)), r((1, 2, 4)), r((1, 2, 3)), r((1, 2, 2)), r((3, 3, 4)), r((3, 3, 3)), r((3, 3, 2)), r((3, 2, 4)), r((3, 2, 3)), r((3, 2, 2)), r((5, 5, 6)), r((5, 5, 5)), r((5, 5, 4)), r((5, 4, 6)), r((5, 4, 5)), r((5, 4, 4)), r((6, 5, 6)), r((6, 5, 5)), r((6, 5, 4)), r((6, 4, 6)), r((6, 4, 5)), r((6, 4, 4))] s2:[[a, c, d, e], [b]]:48:[r((2, 5, 6)), r((2, 5, 5)), r((2, 5, 4)), r((2, 5, 3)), r((2, 4, 6)), r((2, 4, 5)), r((2, 4, 4)), r((2, 4, 3)), r((2, 3, 6)), r((2, 3, 5)), r((2, 3, 4)), r((2, 3, 3)), r((3, 4, 5)), r((3, 4, 4)), r((3, 4, 3)), r((3, 4, 2)), r((3, 3, 5)), r((3, 3, 4)), r((3, 3, 3)), r((3, 3, 2)), r((3, 2, 5)), r((3, 2, 4)), r((3, 2, 3)), r((3, 2, 2)), r((4, 4, 5)), r((4, 4, 4)), r((4, 4, 3)), r((4, 4, 2)), r((4, 3, 5)), r((4, 3, 4)), r((4, 3, 3)), r((4, 3, 2)), r((4, 2, 5)), r((4, 2, 4)), r((4, 2, 3)), r((4, 2, 2)), r((5, 5, 6)), r((5, 5, 5)), r((5, 5, 4)), r((5, 5, 3)), r((5, 4, 6)), r((5, 4, 5)), r((5, 4, 4)), r((5, 4, 3)), r((5, 3, 6)), r((5, 3, 5)), r((5, 3, 4)), r((5, 3, 3))] s2:[[a, c, d], [b, e]]:24:[r((2, 5, 3)), r((2, 5, 2)), r((2, 4, 3)), r((2, 4, 2)), r((2, 3, 3)), r((2, 3, 2)), r((3, 4, 6)), r((3, 4, 5)), r((3, 3, 6)), r((3, 3, 5)), r((3, 2, 6)), r((3, 2, 5)), r((4, 4, 6)), r((4, 4, 5)), r((4, 3, 6)), r((4, 3, 5)), r((4, 2, 6)), r((4, 2, 5)), r((5, 5, 3)), r((5, 5, 2)), r((5, 4, 3)), r((5, 4, 2)), r((5, 3, 3)), r((5, 3, 2))] s2:[[a, c, e], [b, d]]:24:[r((2, 3, 6)), r((2, 3, 5)), r((2, 3, 4)), r((2, 2, 6)), r((2, 2, 5)), r((2, 2, 4)), r((3, 5, 4)), r((3, 5, 3)), r((3, 5, 2)), r((3, 4, 4)), r((3, 4, 3)), r((3, 4, 2)), r((4, 5, 4)), r((4, 5, 3)), r((4, 5, 2)), r((4, 4, 4)), r((4, 4, 3)), r((4, 4, 2)), r((5, 3, 6)), r((5, 3, 5)), r((5, 3, 4)), r((5, 2, 6)), r((5, 2, 5)), r((5, 2, 4))] s2:[[a, c], [b, d, e]]:24:[r((2, 3, 4)), r((2, 3, 3)), r((2, 3, 2)), r((2, 2, 4)), r((2, 2, 3)), r((2, 2, 2)), r((3, 5, 6)), r((3, 5, 5)), r((3, 5, 4)), r((3, 4, 6)), r((3, 4, 5)), r((3, 4, 4)), r((4, 5, 6)), r((4, 5, 5)), r((4, 5, 4)), r((4, 4, 6)), r((4, 4, 5)), r((4, 4, 4)), r((5, 3, 4)), r((5, 3, 3)), r((5, 3, 2)), r((5, 2, 4)), r((5, 2, 3)), r((5, 2, 2))] s2:[[a, d, e], [b, c]]:24:[r((1, 5, 6)), r((1, 5, 5)), r((1, 5, 4)), r((1, 4, 6)), r((1, 4, 5)), r((1, 4, 4)), r((2, 5, 6)), r((2, 5, 5)), r((2, 5, 4)), r((2, 4, 6)), r((2, 4, 5)), r((2, 4, 4)), r((4, 3, 4)), r((4, 3, 3)), r((4, 3, 2)), r((4, 2, 4)), r((4, 2, 3)), r((4, 2, 2)), r((6, 3, 4)), r((6, 3, 3)), r((6, 3, 2)), r((6, 2, 4)), r((6, 2, 3)), r((6, 2, 2))] s2:[[a, d], [b, c, e]]:24:[r((1, 5, 4)), r((1, 5, 3)), r((1, 5, 2)), r((1, 4, 4)), r((1, 4, 3)), r((1, 4, 2)), r((2, 5, 4)), r((2, 5, 3)), r((2, 5, 2)), r((2, 4, 4)), r((2, 4, 3)), r((2, 4, 2)), r((4, 3, 6)), r((4, 3, 5)), r((4, 3, 4)), r((4, 2, 6)), r((4, 2, 5)), r((4, 2, 4)), r((6, 3, 6)), r((6, 3, 5)), r((6, 3, 4)), r((6, 2, 6)), r((6, 2, 5)), r((6, 2, 4))] s2:[[a, e], [b, c, d]]:24:[r((1, 4, 6)), r((1, 4, 5)), r((1, 3, 6)), r((1, 3, 5)), r((1, 2, 6)), r((1, 2, 5)), r((2, 4, 6)), r((2, 4, 5)), r((2, 3, 6)), r((2, 3, 5)), r((2, 2, 6)), r((2, 2, 5)), r((4, 5, 3)), r((4, 5, 2)), r((4, 4, 3)), r((4, 4, 2)), r((4, 3, 3)), r((4, 3, 2)), r((6, 5, 3)), r((6, 5, 2)), r((6, 4, 3)), r((6, 4, 2)), r((6, 3, 3)), r((6, 3, 2))] s2:[[a], [b, c, d, e]]:48:[r((1, 4, 5)), r((1, 4, 4)), r((1, 4, 3)), r((1, 4, 2)), r((1, 3, 5)), r((1, 3, 4)), r((1, 3, 3)), r((1, 3, 2)), r((1, 2, 5)), r((1, 2, 4)), r((1, 2, 3)), r((1, 2, 2)), r((2, 4, 5)), r((2, 4, 4)), r((2, 4, 3)), r((2, 4, 2)), r((2, 3, 5)), r((2, 3, 4)), r((2, 3, 3)), r((2, 3, 2)), r((2, 2, 5)), r((2, 2, 4)), r((2, 2, 3)), r((2, 2, 2)), r((4, 5, 6)), r((4, 5, 5)), r((4, 5, 4)), r((4, 5, 3)), r((4, 4, 6)), r((4, 4, 5)), r((4, 4, 4)), r((4, 4, 3)), r((4, 3, 6)), r((4, 3, 5)), r((4, 3, 4)), r((4, 3, 3)), r((6, 5, 6)), r((6, 5, 5)), r((6, 5, 4)), r((6, 5, 3)), r((6, 4, 6)), r((6, 4, 5)), r((6, 4, 4)), r((6, 4, 3)), r((6, 3, 6)), r((6, 3, 5)), r((6, 3, 4)), r((6, 3, 3))] s2:[[b, c, d, e], [a]]:48:[r((1, 4, 5)), r((1, 4, 4)), r((1, 4, 3)), r((1, 4, 2)), r((1, 3, 5)), r((1, 3, 4)), r((1, 3, 3)), r((1, 3, 2)), r((1, 2, 5)), r((1, 2, 4)), r((1, 2, 3)), r((1, 2, 2)), r((2, 4, 5)), r((2, 4, 4)), r((2, 4, 3)), r((2, 4, 2)), r((2, 3, 5)), r((2, 3, 4)), r((2, 3, 3)), r((2, 3, 2)), r((2, 2, 5)), r((2, 2, 4)), r((2, 2, 3)), r((2, 2, 2)), r((4, 5, 6)), r((4, 5, 5)), r((4, 5, 4)), r((4, 5, 3)), r((4, 4, 6)), r((4, 4, 5)), r((4, 4, 4)), r((4, 4, 3)), r((4, 3, 6)), r((4, 3, 5)), r((4, 3, 4)), r((4, 3, 3)), r((6, 5, 6)), r((6, 5, 5)), r((6, 5, 4)), r((6, 5, 3)), r((6, 4, 6)), r((6, 4, 5)), r((6, 4, 4)), r((6, 4, 3)), r((6, 3, 6)), r((6, 3, 5)), r((6, 3, 4)), r((6, 3, 3))] s2:[[b, c, d], [a, e]]:24:[r((1, 4, 6)), r((1, 4, 5)), r((1, 3, 6)), r((1, 3, 5)), r((1, 2, 6)), r((1, 2, 5)), r((2, 4, 6)), r((2, 4, 5)), r((2, 3, 6)), r((2, 3, 5)), r((2, 2, 6)), r((2, 2, 5)), r((4, 5, 3)), r((4, 5, 2)), r((4, 4, 3)), r((4, 4, 2)), r((4, 3, 3)), r((4, 3, 2)), r((6, 5, 3)), r((6, 5, 2)), r((6, 4, 3)), r((6, 4, 2)), r((6, 3, 3)), r((6, 3, 2))] s2:[[b, c, e], [a, d]]:24:[r((1, 5, 4)), r((1, 5, 3)), r((1, 5, 2)), r((1, 4, 4)), r((1, 4, 3)), r((1, 4, 2)), r((2, 5, 4)), r((2, 5, 3)), r((2, 5, 2)), r((2, 4, 4)), r((2, 4, 3)), r((2, 4, 2)), r((4, 3, 6)), r((4, 3, 5)), r((4, 3, 4)), r((4, 2, 6)), r((4, 2, 5)), r((4, 2, 4)), r((6, 3, 6)), r((6, 3, 5)), r((6, 3, 4)), r((6, 2, 6)), r((6, 2, 5)), r((6, 2, 4))] s2:[[b, c], [a, d, e]]:24:[r((1, 5, 6)), r((1, 5, 5)), r((1, 5, 4)), r((1, 4, 6)), r((1, 4, 5)), r((1, 4, 4)), r((2, 5, 6)), r((2, 5, 5)), r((2, 5, 4)), r((2, 4, 6)), r((2, 4, 5)), r((2, 4, 4)), r((4, 3, 4)), r((4, 3, 3)), r((4, 3, 2)), r((4, 2, 4)), r((4, 2, 3)), r((4, 2, 2)), r((6, 3, 4)), r((6, 3, 3)), r((6, 3, 2)), r((6, 2, 4)), r((6, 2, 3)), r((6, 2, 2))] s2:[[b, d, e], [a, c]]:24:[r((2, 3, 4)), r((2, 3, 3)), r((2, 3, 2)), r((2, 2, 4)), r((2, 2, 3)), r((2, 2, 2)), r((3, 5, 6)), r((3, 5, 5)), r((3, 5, 4)), r((3, 4, 6)), r((3, 4, 5)), r((3, 4, 4)), r((4, 5, 6)), r((4, 5, 5)), r((4, 5, 4)), r((4, 4, 6)), r((4, 4, 5)), r((4, 4, 4)), r((5, 3, 4)), r((5, 3, 3)), r((5, 3, 2)), r((5, 2, 4)), r((5, 2, 3)), r((5, 2, 2))] s2:[[b, d], [a, c, e]]:24:[r((2, 3, 6)), r((2, 3, 5)), r((2, 3, 4)), r((2, 2, 6)), r((2, 2, 5)), r((2, 2, 4)), r((3, 5, 4)), r((3, 5, 3)), r((3, 5, 2)), r((3, 4, 4)), r((3, 4, 3)), r((3, 4, 2)), r((4, 5, 4)), r((4, 5, 3)), r((4, 5, 2)), r((4, 4, 4)), r((4, 4, 3)), r((4, 4, 2)), r((5, 3, 6)), r((5, 3, 5)), r((5, 3, 4)), r((5, 2, 6)), r((5, 2, 5)), r((5, 2, 4))] s2:[[b, e], [a, c, d]]:24:[r((2, 5, 3)), r((2, 5, 2)), r((2, 4, 3)), r((2, 4, 2)), r((2, 3, 3)), r((2, 3, 2)), r((3, 4, 6)), r((3, 4, 5)), r((3, 3, 6)), r((3, 3, 5)), r((3, 2, 6)), r((3, 2, 5)), r((4, 4, 6)), r((4, 4, 5)), r((4, 3, 6)), r((4, 3, 5)), r((4, 2, 6)), r((4, 2, 5)), r((5, 5, 3)), r((5, 5, 2)), r((5, 4, 3)), r((5, 4, 2)), r((5, 3, 3)), r((5, 3, 2))] s2:[[b], [a, c, d, e]]:48:[r((2, 5, 6)), r((2, 5, 5)), r((2, 5, 4)), r((2, 5, 3)), r((2, 4, 6)), r((2, 4, 5)), r((2, 4, 4)), r((2, 4, 3)), r((2, 3, 6)), r((2, 3, 5)), r((2, 3, 4)), r((2, 3, 3)), r((3, 4, 5)), r((3, 4, 4)), r((3, 4, 3)), r((3, 4, 2)), r((3, 3, 5)), r((3, 3, 4)), r((3, 3, 3)), r((3, 3, 2)), r((3, 2, 5)), r((3, 2, 4)), r((3, 2, 3)), r((3, 2, 2)), r((4, 4, 5)), r((4, 4, 4)), r((4, 4, 3)), r((4, 4, 2)), r((4, 3, 5)), r((4, 3, 4)), r((4, 3, 3)), r((4, 3, 2)), r((4, 2, 5)), r((4, 2, 4)), r((4, 2, 3)), r((4, 2, 2)), r((5, 5, 6)), r((5, 5, 5)), r((5, 5, 4)), r((5, 5, 3)), r((5, 4, 6)), r((5, 4, 5)), r((5, 4, 4)), r((5, 4, 3)), r((5, 3, 6)), r((5, 3, 5)), r((5, 3, 4)), r((5, 3, 3))] s2:[[c, d, e], [a, b]]:24:[r((1, 3, 4)), r((1, 3, 3)), r((1, 3, 2)), r((1, 2, 4)), r((1, 2, 3)), r((1, 2, 2)), r((3, 3, 4)), r((3, 3, 3)), r((3, 3, 2)), r((3, 2, 4)), r((3, 2, 3)), r((3, 2, 2)), r((5, 5, 6)), r((5, 5, 5)), r((5, 5, 4)), r((5, 4, 6)), r((5, 4, 5)), r((5, 4, 4)), r((6, 5, 6)), r((6, 5, 5)), r((6, 5, 4)), r((6, 4, 6)), r((6, 4, 5)), r((6, 4, 4))] s2:[[c, d], [a, b, e]]:24:[r((1, 3, 6)), r((1, 3, 5)), r((1, 3, 4)), r((1, 2, 6)), r((1, 2, 5)), r((1, 2, 4)), r((3, 3, 6)), r((3, 3, 5)), r((3, 3, 4)), r((3, 2, 6)), r((3, 2, 5)), r((3, 2, 4)), r((5, 5, 4)), r((5, 5, 3)), r((5, 5, 2)), r((5, 4, 4)), r((5, 4, 3)), r((5, 4, 2)), r((6, 5, 4)), r((6, 5, 3)), r((6, 5, 2)), r((6, 4, 4)), r((6, 4, 3)), r((6, 4, 2))] s2:[[c, e], [a, b, d]]:24:[r((1, 5, 3)), r((1, 5, 2)), r((1, 4, 3)), r((1, 4, 2)), r((1, 3, 3)), r((1, 3, 2)), r((3, 5, 3)), r((3, 5, 2)), r((3, 4, 3)), r((3, 4, 2)), r((3, 3, 3)), r((3, 3, 2)), r((5, 4, 6)), r((5, 4, 5)), r((5, 3, 6)), r((5, 3, 5)), r((5, 2, 6)), r((5, 2, 5)), r((6, 4, 6)), r((6, 4, 5)), r((6, 3, 6)), r((6, 3, 5)), r((6, 2, 6)), r((6, 2, 5))] s2:[[c], [a, b, d, e]]:48:[r((1, 5, 6)), r((1, 5, 5)), r((1, 5, 4)), r((1, 5, 3)), r((1, 4, 6)), r((1, 4, 5)), r((1, 4, 4)), r((1, 4, 3)), r((1, 3, 6)), r((1, 3, 5)), r((1, 3, 4)), r((1, 3, 3)), r((3, 5, 6)), r((3, 5, 5)), r((3, 5, 4)), r((3, 5, 3)), r((3, 4, 6)), r((3, 4, 5)), r((3, 4, 4)), r((3, 4, 3)), r((3, 3, 6)), r((3, 3, 5)), r((3, 3, 4)), r((3, 3, 3)), r((5, 4, 5)), r((5, 4, 4)), r((5, 4, 3)), r((5, 4, 2)), r((5, 3, 5)), r((5, 3, 4)), r((5, 3, 3)), r((5, 3, 2)), r((5, 2, 5)), r((5, 2, 4)), r((5, 2, 3)), r((5, 2, 2)), r((6, 4, 5)), r((6, 4, 4)), r((6, 4, 3)), r((6, 4, 2)), r((6, 3, 5)), r((6, 3, 4)), r((6, 3, 3)), r((6, 3, 2)), r((6, 2, 5)), r((6, 2, 4)), r((6, 2, 3)), r((6, 2, 2))] s2:[[d, e], [a, b, c]]:24:[r((1, 5, 6)), r((1, 5, 5)), r((1, 2, 3)), r((1, 2, 2)), r((2, 5, 6)), r((2, 5, 5)), r((2, 2, 3)), r((2, 2, 2)), r((3, 5, 6)), r((3, 5, 5)), r((3, 2, 3)), r((3, 2, 2)), r((4, 5, 6)), r((4, 5, 5)), r((4, 2, 3)), r((4, 2, 2)), r((5, 5, 6)), r((5, 5, 5)), r((5, 2, 3)), r((5, 2, 2)), r((6, 5, 6)), r((6, 5, 5)), r((6, 2, 3)), r((6, 2, 2))] s2:[[d], [a, b, c, e]]:48:[r((1, 5, 5)), r((1, 5, 4)), r((1, 5, 3)), r((1, 5, 2)), r((1, 2, 6)), r((1, 2, 5)), r((1, 2, 4)), r((1, 2, 3)), r((2, 5, 5)), r((2, 5, 4)), r((2, 5, 3)), r((2, 5, 2)), r((2, 2, 6)), r((2, 2, 5)), r((2, 2, 4)), r((2, 2, 3)), r((3, 5, 5)), r((3, 5, 4)), r((3, 5, 3)), r((3, 5, 2)), r((3, 2, 6)), r((3, 2, 5)), r((3, 2, 4)), r((3, 2, 3)), r((4, 5, 5)), r((4, 5, 4)), r((4, 5, 3)), r((4, 5, 2)), r((4, 2, 6)), r((4, 2, 5)), r((4, 2, 4)), r((4, 2, 3)), r((5, 5, 5)), r((5, 5, 4)), r((5, 5, 3)), r((5, 5, 2)), r((5, 2, 6)), r((5, 2, 5)), r((5, 2, 4)), r((5, 2, 3)), r((6, 5, 5)), r((6, 5, 4)), r((6, 5, 3)), r((6, 5, 2)), r((6, 2, 6)), r((6, 2, 5)), r((6, 2, 4)), r((6, 2, 3))] s2:[[e], [a, b, c, d]]:48:[r((1, 5, 6)), r((1, 5, 2)), r((1, 4, 6)), r((1, 4, 2)), r((1, 3, 6)), r((1, 3, 2)), r((1, 2, 6)), r((1, 2, 2)), r((2, 5, 6)), r((2, 5, 2)), r((2, 4, 6)), r((2, 4, 2)), r((2, 3, 6)), r((2, 3, 2)), r((2, 2, 6)), r((2, 2, 2)), r((3, 5, 6)), r((3, 5, 2)), r((3, 4, 6)), r((3, 4, 2)), r((3, 3, 6)), r((3, 3, 2)), r((3, 2, 6)), r((3, 2, 2)), r((4, 5, 6)), r((4, 5, 2)), r((4, 4, 6)), r((4, 4, 2)), r((4, 3, 6)), r((4, 3, 2)), r((4, 2, 6)), r((4, 2, 2)), r((5, 5, 6)), r((5, 5, 2)), r((5, 4, 6)), r((5, 4, 2)), r((5, 3, 6)), r((5, 3, 2)), r((5, 2, 6)), r((5, 2, 2)), r((6, 5, 6)), r((6, 5, 2)), r((6, 4, 6)), r((6, 4, 2)), r((6, 3, 6)), r((6, 3, 2)), r((6, 2, 6)), r((6, 2, 2))] %---------- end of data ------------% % file output end time , [date(2006/5/28), time(18:10:27)] */ % obsolated auto_s2_restricted_domain(L):- % findall(S,possible_ranking_0(S,_),TR), all_possible_rankings_0(TR), auto_s2_domain(L,TR). auto_s2_domain([],[]). auto_s2_domain([R|L],[R|TR]):- auto_s2_domain(L,TR), forall( triple_of_alternative(T), value_restriction_in_rankings( s2,_, T, [R|L]) ). auto_s2_domain(L,[_|TR]):- auto_s2_domain(L,TR). %------------------------------------------------- % the experimental scripts %------------------------------------------------- setup_K_alt_domain(K,A):- Base=[a,b,c,d,e,f,g,h,i,j,k,l,m,n], length(A,K), append(A,_,Base), setup_model(alt:A,soc:[1,2,3]). :- dynamic vr_domains_for_triples_0/3. :- dynamic gen_vr_domains_recent_id/1. init_vr_domains_for_triples:- abolish(vr_domains_for_triples_0/3), abolish(gen_vr_domains_recent_id/1), assert(gen_vr_domains_recent_id(0)). update_vr_domains_recent_id(J):- retract(gen_vr_domains_recent_id(I)), J is I + 1, assert(gen_vr_domains_recent_id(J)). % a naive generation %------------------------------------------------- generate_vr_domains([N,H,SL],[M,T,J],SS):- stopwatch_0( auto_vr_domains_of_size_1(N,H,SL,M,SS), T), update_vr_domains_recent_id(J), assert( vr_domains_for_triples_0([H,SL,M],[T,J],SS)). % demo (2 Jun 2006) /* ?- generate_vr_domains([8,A,B],[max,Tm,J],vr). A = [r((1, 1)), r((2, 2)), r((2, 1)), r((5, 4)), r((5, 3)), r((5, 2)), r((5, 1)), r((..., ...))] B = [sc: (a, b, c):b, sc: (a, b, d):b, sp: (a, c, d):c, sp: (b, c, d):c] Tm = 0.016 J = 3 Yes Yes ?- generate_vr_domains([9,A,B],[max,Tm,J],vr). A = [r((1, 1)), r((2, 2)), r((2, 1)), r((5, 4)), r((5, 3)), r((5, 2)), r((5, 1)), r((..., ...)), r(...)] B = [sc: (a, b, c):b, sc: (a, b, d):b, sp: (a, c, d):c, sp: (b, c, d):c] Tm = 0 J = 2 Yes ?- generate_vr_domains([8,A,B],[max,Tm,J],[vr]). No ?- generate_vr_domains([8,A,B],[yes,Tm,J],[s2]). A = [r((1, 2)), r((1, 1)), r((2, 3)), r((2, 2)), r((4, 3)), r((4, 2)), r((6, 4)), r((..., ...))] B = [s2: (a, b, c), s2: (a, b, d), s2: (a, c, d), s2: (b, c, d)] Tm = 0 J = 6 Yes ?- generate_vr_domains([9,A,B],[max,Tm,J],[sp]). No ?- */ % a fast generating VR domains %------------------------------------------------- % an earlier code. SS=vr,[sp],[sp,sc], ..., etc. gen_vr_by_triples(SS, N, K, max):- setup_K_alt_domain(K,_), gen_vr_by_triples_max(SS, N). gen_vr_by_triples(SS, N, K):- setup_K_alt_domain(K,_), gen_vr_by_triples(SS, N). gen_vr_by_triples(SS, N):- tstamp(start,Ts), init_vr_domains_for_triples, forall( generate_vr_domains([N,_,_],[yes,Tm,J],SS), tell_gen_vr_domains_by_triples(yes,J,Tm,'gen_vr.txt') ), tell_gen_vr_domains_by_triples(yes,0,Ts,'gen_vr.txt'). gen_vr_by_triples_max(SS, N):- tstamp(start,Ts), init_vr_domains_for_triples, forall( generate_vr_domains([N,_,_],[max,Tm,J],SS), tell_gen_vr_domains_by_triples(max,J,Tm,'gen_vr_max.txt') ), tell_gen_vr_domains_by_triples(max,0,Ts,'gen_vr_max.txt'). % an earlier code. SS=[vr],[sp],[sp,sc], ..., etc. gen_vr_by_triples(SS):- init_vr_domains_for_triples, max_scheme_of_vr_domains_wrt_triples(Y,_Pt), forall( stopwatch_0( auto_value_restricted_domain_by_triples_1(Y,SL,SS), T), ( update_vr_domains_recent_id(J), assert( vr_domains_for_triples_0([Y,SL],[T,J],SS)) ,tell_gen_vr_domains_by_triples(max, J, 'gen_vr_max.txt') )), tell_gen_vr_domains_by_triples(0,'gen_vr_max.txt'). % another code gen_vr_by_triples_001(SS, Y,SL,L,N, K):- setup_K_alt_domain(K,_), gen_vr_by_triples_001(SS,Y,SL,L,N). gen_vr_by_triples_001(SS,Y,SL):- max_scheme_of_vr_domains_wrt_triples(Y,_Pt), stopwatch_0( auto_value_restricted_domain_by_triples_1(Y,SL,SS), T), assert( vr_domains_for_triples_0([Y,SL],[T,avr],SS)), tell_gen_vr_domains_by_triples(0,'gen_vr_001.txt'). gen_vr_by_triples_001(SS,Y,SL,L,N):- gen_vr_by_triples_001(SS,Y,SL), % findall(R, possible_ranking_0( R,_), RL), all_possible_rankings_0(RL), transform_domain_triples_into_rankings( Y,RL, L), length(L,N). tell_by_J(_,0):- !. tell_by_J(J1,BY):- (var(BY)->BY is 100;true), \+ 0 is J1 mod BY, !, fail. tell_by_J(_,_). tell_gen_vr_domains_by_triples(M, J, Ts, File):- member(M,[yes,max]), tell_by_J(J,0), tell_goal(File,( nl,write(start:Ts), forall( clause( vr_domains_for_triples_0([D,SL,M],[Time,J0],SS), _), ( nl,write([J0]), %display_domain_for_triples(D,_SL1), length(D,N), nl,write(N:D), forall( member(STX,SL),( member(STX,[(Sx:T:X),(Sx:T)]), relative_domain_for_triple(T,D,_,Rt), nl, tab(1), (var(X) -> Sxx=Sx ; Sxx=(Sx:X) ), write(T:Sxx:Rt) )), nl,write(time:Time;SS;M) ) ) )). tell_gen_vr_domains_by_triples(_, _,_, _). tell_gen_vr_domains_by_triples(J, File):- tell_by_J(J,1000), % findall(R, possible_ranking_0(R,_), L), all_possible_rankings_0(L), tell_goal(File, forall( clause( vr_domains_for_triples_0([Y,SL],[T,J0],SS), _), ( transform_domain_triples_into_rankings( Y,L, D), length(D,N), nl,write([J0]), display_domain_for_triples(D,SL), nl,write(time:T;SS;size:N) ) ) ). close_telling_file:- current_stream(A,write,B), \+ member( A, [1,2]), nl,write('close?':A), read(y), close(B), nl,write('closed.'). close_telling_file:- nl, write('no more.'). /* ?- setup_K_alt_domain(3,B). B = [a, b, c] Yes ?- generate_vr_domains([4|A],[max|B],[s2]). A = [[r(1), r(2), r(4), r(6)], [s2: (a, b, c)]] B = [0, 54] ; A = [[r(1), r(3), r(5), r(6)], [s2: (a, b, c)]] B = [2.562, 55] ; A = [[r(2), r(3), r(4), r(5)], [s2: (a, b, c)]] B = [5.578, 56] ; No ?- */ % generating a given size of vr domain. test_k_alt_domains(K,N,M,SS):- setup_K_alt_domain(K,_), init_vr_domains_for_triples, generate_vr_domains([N|_],[M|_],SS), tell_vr_domains_for_triples_0('test_k_alt.txt'), fail. test_k_alt_domains(_,_,_,_). tell_vr_domains_for_triples_0(File):- tell_goal(File, display_vr_domains_for_triples_0 ). display_vr_domains_for_triples_0:- forall( vr_domains_for_triples_0([H,SL,_],[T,J],SS), ( nl,write([J]), display_domain_for_triples(H,SL), nl,write(time:T;SS) ) ). % M=max is recommended. test_3_alt_domains(N,M,SS):- setup_model(alt:[a,b,c],soc:[1,2,3]), tell_goal('test_3_alt.txt',forall, auto_vr_domains_for_triples(N,_,_,M,SS) ). test_4_alt_domains(N,M,SS):- init_vr_domains_for_triples, setup_model(alt:[a,b,c,d],soc:[1,2,3]), forall( generate_vr_domains([N|_],[M|_],SS), tell_vr_domains_for_triples_0('test_4_alt.txt') ). test_5_alt_domains(N,M,SS):- setup_model(alt:[a,b,c,d,e],soc:[1,2,3]), forall( generate_vr_domains([N|_],[M|_],SS), tell_vr_domains_for_triples_0('test_5_alt.txt') ). /* ?- setup_model(alt:[a,b,c],soc:[1,2,3]), auto_vr_domains_for_triples(4,H,[[s2]:P],yes),fail. [[s2]: (a, b, c)]:[r(1), r(2), r(4), r(6)] (a, b, c):[1, 2, 4, 6] [[s2]: (a, b, c)]:[r(1), r(3), r(5), r(6)] (a, b, c):[1, 3, 5, 6] [[s2]: (a, b, c)]:[r(2), r(3), r(4), r(5)] (a, b, c):[2, 3, 4, 5] No ?- */ % testing sup of the size of VR domains %------------------------------------------------- :- dynamic sup_vr_0/3. init_sup_vr:- abolish(sup_vr_0/3), tstamp(start,Ts), assert(sup_vr_0((0,Ts,start))). finish_sup_vr:- tstamp(end,Ts), assert(sup_vr_0((0,Ts,end))). update_sup_vr(N,T,A):- clause(sup_vr_0(N,T,A0),true), (A0=A->true;( nl, write('#### an updating error has occurred at ':(N,T)), nl, write(recorded:(N,T,A0)), nl, write(writing:(N,T,A)) )), retract(sup_vr_0(N,T,A0)), assert(sup_vr_0(N,T,A)). update_and_save_sup_vr(N,T,A):- update_sup_vr(N,T,A), tell_goal( 'sup_vr.txt', display_sup_vr_0 ). display_sup_vr_0:- clause( sup_vr_0( 0,X,_ ), _), nl,write(0:X), fail. display_sup_vr_0:- forall( clause( sup_vr_0( N,Time,(SL,M,D) ), _), ( nl,write(N:D), display_relative_domains_for_triples(SL,D), nl,write(time:Time), (M=max->write([max]);true) ) ). display_relative_domains_for_triples([],_). display_relative_domains_for_triples([SD|SL],D):- display_relative_domains_for_triples(SL,D), member(SD,[(Sx,T,X),(Sx:T:X)]), % findall(Sx, % value_restriction_in_rankings( Sx,_, T, D), % SSx), % sort(SSx,VR), mode_of_analysis(M-alternatives,_), (M>6->Rt='*'; relative_domain_for_triple(T,D,_,Rt) ), nl, tab(1), write(T:Rt:Sx:X). % filters for test_sup_vr %------------------------------------------------- :- dynamic sup_vr_parity/1,sup_vr_parity/2. %sup_vr_parity( even, inhibit). %sup_vr_parity( odd, inhibit). sup_vr_parity( even). sup_vr_parity( odd). % the setting off_parity_of_test_sup_vr:- forall( sup_vr_parity(A), retract( test_sup_vr_parity( A, inhibit)) ). change_parity_of_test_sup_vr(P->Q):- sup_vr_parity( P), sup_vr_parity( P, inhibit), sup_vr_parity( Q), \+ sup_vr_parity( Q, inhibit), retract( sup_vr_parity( P, inhibit)), assert( sup_vr_parity( Q, inhibit)). :- dynamic sup_vr_mode/1. skip_mode_for_sup_vr(parity,on). skip_mode_for_sup_vr(lower_bound,on). filters_for_vr(N):- forall( skip_mode_for_sup_vr(M,on), \+ skip_sup_vr_if(M, N) ). skip_sup_vr_if(lower_bound,N):- skip_by_lower_bound(N). skip_sup_vr_if(parity,N):- skip_if_parity(_,N). skip_if_parity(even, N):- 0 is N mod 2, sup_vr_parity( even, inhibit). skip_if_parity(odd, N):- 1 is N mod 2, sup_vr_parity( odd, inhibit). skip_by_lower_bound(N):- skip_mode_for_sup_vr(lower_bound,on), mode_of_analysis(U-alternatives,_), lower_bound_for_maximal_consistent_set(U,Q), N < Q. % The Abello-Johnson's lower bound when U >4, % otherwise the Kelly-Craven-Fishburn lower bound. :- dynamic lower_bound/2. lower_bound(abello,off). lower_bound(kelly,on). switch_lower_bound(A,O->U):- member((O,U),[(off,on),(on,off)]), retract(lower_bound( A, O)), assert(lower_bound( A, U)). lower_bound_for_maximal_consistent_set(U,Q):- lower_bound(abello,on), U>4, !, Q is 3 * 2^(U-2) -4. lower_bound_for_maximal_consistent_set(U,Q):- lower_bound(kelly,on), Q is 2^(U-1). /* ?- off_alternating_scheme. Yes ?- switch_lower_bound(A,B). A = abello B = off->on ; A = kelly B = on->off ; A = abello B = on->off ; No ?- switch_lower_bound(kelly,B). B = off->on Yes ?- test_sup_vr_by_triples(N/P, 7). start, [date(2006/6/2), time(21:34:53)] */ % test sup of size of vr domain for current model. %------------------------------------------------- % lastely modified: 12, 18, 23-4 Jun 2006. test_sup_vr_by_triples(_, K):- \+ mode_of_analysis(K-_,_), setup_K_alt_domain(K,_), fail. test_sup_vr_by_triples(N/P, K):- mode_of_analysis(K-_,_), test_sup_vr_by_triples(N/P). test_sup_vr_by_triples(N/P):- % init_auto_VR_domain_0, init_sup_vr, % findall(R, possible_ranking_0(R,_), L), all_possible_rankings_0(L,P), length(L0,P), nth1(N,L0,_), filters_for_vr(N), % % earlier code with a misspecification. % filter_for_test_sup_vr(N,Y,_Pt), % max_scheme_of_vr_domains_wrt_triples(Y,_Pt), % for auto_v.._1 \+ ( mode_test_sup_vr_by_triples( M, on), length(D,N), test_sup_vr_by_triples_with_stopwatch(N, L,Time,(Y,M,D)), update_and_save_sup_vr(N,Time,(Y,M,D)) ), nl, finish_sup_vr, !. test_sup_vr_by_triples(_). :- dynamic mode_test_sup_vr_by_triples/2. mode_test_sup_vr_by_triples( yes, off). mode_test_sup_vr_by_triples( max, off). mode_test_sup_vr_by_triples( rec, on). switch_mode_test_sup_vr_by_triples( A->B):- clause(mode_test_sup_vr_by_triples( A, on),_), clause(mode_test_sup_vr_by_triples( B, off),_), retract(mode_test_sup_vr_by_triples( A, on)), assert(mode_test_sup_vr_by_triples( A, off)), retract(mode_test_sup_vr_by_triples( B, off)), assert(mode_test_sup_vr_by_triples( B, on)). test_sup_vr_by_triples_with_stopwatch(N,L,Time,(Y,yes,D)):- M=yes, stopwatch_0(( auto_value_restricted_domain_by_triples_1(Y,_,[vr]), transform_domain_triples_into_rankings( Y,L, D) ),Time), (var(N)->length(D,N);true), assert( sup_vr_0(N,Time,(Y,M,D)) ). test_sup_vr_by_triples_with_stopwatch(N, L,Time,(Y,max,D)):- M=max, stopwatch_0(( auto_value_restricted_domain_by_triples_max(D,L,Y,vr) ),Time), (var(N)->length(D,N);true), assert( sup_vr_0(N,Time,(Y,M,D)) ). test_sup_vr_by_triples_with_stopwatch(N, L,Time,(Y,rec,D)):- M=rec, stopwatch_0(( auto_value_restricted_domain_by_triples_rec(D,L,Y,vr) ),Time), (var(N)->length(D,N);true), assert( sup_vr_0(N,Time,(Y,M,D)) ). /* % a demo after augmented RAM (256Kx2-> 1G+256K). % 23-4 Jun 2006. ?- setup_K_alt_domain(6,_). Yes ?- test_sup_vr_by_triples_with_stopwatch(N, L,Time,(Y,max,D)). N = 45 L = [r((((1, 4), 5), 6)), r((((1, 4), 5), 5)), r((((1, 4), 5), 4)), r((((1, 4), 5), 3)), r((((1, 4), 5), 2)), r((((..., ...), 5), 1)), r(((..., ...), 6)), r((..., ...)), r(...)|...] Time = 13.078 Y = [sp: (a, b, c):b, sp: (a, b, d):b, sp: (a, b, e):b, sp: (a, b, f):b, sc: (a, c, d):c, sc: (a, ..., ...):c, sc: (..., ...):c, sp:... :..., ... :...|...] D = [r((((1, 2), 2), 3)), r((((1, 2), 1), 3)), r((((1, 2), 1), 2)), r((((1, 2), 1), 1)), r((((1, 1), 1), 2)), r((((..., ...), 1), 1)), r(((..., ...), 6)), r((..., ...)), r(...)|...] Yes ?- */ % depreciated %------------------------------------------------- test_sup_vr(N):- init_sup_vr, length(L,120),% 4-alternatives=> 24 nth1(N,L,_), \+ ( stopwatch_0( % auto_vr_domains_for_triples(N,A,B,yes), % find_latin_squareless_of_length(N,_), % depreciated % find_value_restricted_domain_of_length(N,_), % depreciated Time), update_and_save_sup_vr(N,Time,(A,B)) ), !. test_sup_vr(_). test_sup_vr(N,VR):- member(VR,[sp,sc,s2]), init_sup_vr, length(L,120),% 4-alternatives=> 24 nth1(N,L,_), \+ ( stopwatch_0( auto_vr_domains_for_triples(N,A,B,yes,VR), Time), update_and_save_sup_vr(N,Time,(A,B)) ), !. test_sup_vr(_,_). % (depreciated) find_latin_squareless_of_length(N,H):- length(H,N), auto_restricted_domain_with_filter(H). find_latin_squareless_of_length_1(N,H):- length(H,N), auto_restricted_domain(H), filter_on_restricted_domain(H,N), value_restriction_by_latin_square. find_value_restricted_domain_of_length(N,H):- length(H,N), auto_restricted_domain(H), value_restriction(_). filter_on_restricted_domain(H,N):- \+ violates_filter_on_restricted_domain(H,N). violates_filter_on_restricted_domain(H,_):- member(r((J,_)),H), \+ member(J,[1,2,4,6]). violates_filter_on_restricted_domain(H,N):- (var(N)->length(H,N);true), N >=4, member(J,[1,2,4,6]), \+ member(r((J,_)),H). filter_for_test_sup_vr(N,Y,Pt):- mode_of_analysis(K-alternatives,_), E is 2^(K-1), (Ntrue ; max_scheme_of_vr_domains_wrt_triples(Y,Pt) ). %:- setup_K_alt_domain(4,_). :- setup_model(alt:[a,b,c],soc:[1,2]). % end of program %-------------------------------------------------