title(A):- A=[ '% Modeling Signaling Games by Prolog : ' ,'% Bayesian Perfect Equilibria and Dempster-Shafer Equilibria' ,'% file: dse0.pl (for SWI-Prolog 5.0.9)' ,'% created: 20--24 Jun 2004.(a modified version of gbayes01 augmented with beleq03)' ,'% previous version: gbayes01.pl(26 Dec 2003), beleq03.pl(18 Mar 2004)' ,'% modified: 13,14 Jul 2004. (position of dynamic for SWI-Prolog 5.2.13. )' ,'% ---------------------------' ,'% main: consistency_test/0.' ,'% display_consistency_results(yes).' ,'% display_consistency_results(all).' ,'% figure.' ]. reference(A):- A=[ '% references:', '% [1] R. Gibbons (1992). Game Theory for Applied Economics.', '% [2] S. Muto (2001). Gemu Riron Nyuumon. Nikkei Bunko.(Japanese)', '% [3] J. Eichberger and D. Kelsey (1999). Education signalling and uncertainty. In M.J. Machina and B. Munier(eds.), Beliefs, Interactions and Preferences in Decision Making, pp.135-157. Kluwer Academic.', '% [4] M.J. Ryan (2002). Violations of belief persistence in Dempster-Shafer equilibrium, Games and Economic Behaviour 39:167-174.' ]. figure:- Figure=[ '% 1,1 0,1 ', '% |U 1 |U ', '% | L [t1] R | ', '% 1,0 +-----+--------+--------+------+ 0,4 ', '% D : | : D ', '% : |[0.5] : ', '% 2 [ ] N 2 ', '% : |[0.5] : ', '% : L | R : ', '% 0,1 +-----+--------+--------+------+ 1,1', '% U | 1 | U ', '% |D [t2] |D ', '% 0,4 1,0 ', '% Fig. A signaling game of Ryan(2002). ', '% Player 1 is Nature. The payoffs above are of Player 2 and Player 3.' ], forall(member(L,Figure),(nl,write(L))). %===================================== % Signaling games %===================================== % descriptive modeling. player(player_1). player(player_2). possible_type_of(player_1, type_1). possible_type_of(player_1, type_2). % possible type should be irrelevant to strategy space. %pure_strategy_of(player_1:T,left):-possible_type_of(player_1, T). %pure_strategy_of(player_1:T,right):-possible_type_of(player_1, T). pure_strategy_of(player_1,left). pure_strategy_of(player_1,right). pure_strategy_of(player_2,up). pure_strategy_of(player_2,down). % The player_2's mental model what hypothesizes player_1's decision rule. :- dynamic strategy_of/4. strategy_of(player_1, T,right,Q):- strategy_of(player_1, T,left,P), Q is 1 - P. strategy_of(player_1, type_1,left,1). strategy_of(player_1, type_2,left,1). % randomized strategies %----------------------------- possible_strategy_of(player_1, type_1,left,P):- % member(P,[0,1]). %alternatives: % member(P,[0,0.5,1]). probability(0.1,P). % probabilities(2,[W,_]),P is W/100. possible_strategy_of(player_1, type_2,left,P):- % member(P,[0,1]). % member(P,[0,0.5,1]). probability(0.5,P). possible_strategy_of(player_2, down,P):- member(P,[0,1]). % member(P,[0,0.5,1]). % probability(0.5,P). %===================================== % beliefs and the updating rule %===================================== %------------------------------------------- % (1) probabilistic (Bayesian) model %------------------------------------------- prior_probability_of(type_1,0.5). %prior_probability_of(type_1,0.75). %prior_probability_of(type_1,1/3). %prior_probability_of(type_1,0.999999999999). %prior_probability_of(type_1,1). prior_probability_of(type_2,Q):- prior_probability_of(type_1,P), Q is 1 - P. knowledge(upper_node->player_2 is type_1). knowledge(lower_node->player_2 is type_2). bayes_updating_of(player_2, P->(Q=B/B0), at(Node:T), observing(LeftOrRight), reason(prob(B,for(T)),prob(BN,if_not)) ):- strategy_of(player_1, T,LeftOrRight,S), knowledge(Node->player_2 is T), collect_probs_of_consistent_states(LeftOrRight,_,B0), prior_probability_of(T,P), bayes_rule(B0,P,S,B,Q), BN is B0 - B. bayes_rule(B0,P,S,B,Q):- B0 > 0, B is P * S, Q is B / B0. bayes_rule(0,_,_,0.5,0.5). % posterior of measure-0 event. collect_probs_of_consistent_states(LeftOrRight,BL,B0):- findall(B1, ( strategy_of(player_1, T1,LeftOrRight,P1), prior_probability_of(T1,S1), B1 is P1 * S1 ), BL), sum(BL,B0). /* % for the entry-deterence model (#4) ?- bayes_updating_of(player_2, Update,Where,Data,Why). Update = 0.5->0=0/0.5 Where = at(upper_node:type_1) Data = observing(left) Why = reason(prob(0, for(type_1)), prob(0.5, if_not)) ; Update = 0.5->1=0.5/0.5 Where = at(lower_node:type_2) Data = observing(left) Why = reason(prob(0.5, for(type_2)), prob(0, if_not)) ; Update = 0.5->1=0.5/0.5 Where = at(upper_node:type_1) Data = observing(right) Why = reason(prob(0.5, for(type_1)), prob(0, if_not)) ; Update = 0.5->0=0/0.5 Where = at(lower_node:type_2) Data = observing(right) Why = reason(prob(0, for(type_2)), prob(0.5, if_not)) ; No ?- */ %===================================== % payoffs for pure strategy profile %===================================== payoff([_, _, _], nature, 0). %/* % #1 %--- a signaling game in Ryan(2002) payoff([type_1, left, up], player_1, 1). payoff([type_1, left, up], player_2, 1). payoff([type_1, left, down], player_1, 1). payoff([type_1, left, down], player_2, 0). payoff([type_1, right, up], player_1, 0). payoff([type_1, right, up], player_2, 1). payoff([type_1, right, down], player_1, 0). payoff([type_1, right, down], player_2, 4). payoff([type_2, left, up], player_1, 0). payoff([type_2, left, up], player_2, 1). payoff([type_2, left, down], player_1, 0). payoff([type_2, left, down], player_2, 4). payoff([type_2, right, up], player_1, 1). payoff([type_2, right, up], player_2, 1). payoff([type_2, right, down], player_1, 1). payoff([type_2, right, down], player_2, 0). %*/ /* % #2 %---a signaling game in Gibbons(1992), figure 4.4.2. payoff([type_1, left, up], player_1, 3). payoff([type_1, left, up], player_2, 2). payoff([type_1, left, down], player_1, 2). payoff([type_1, left, down], player_2, 0). payoff([type_1, right, up], player_1, 1). payoff([type_1, right, up], player_2, 0). payoff([type_1, right, down], player_1, 0). payoff([type_1, right, down], player_2, 1). payoff([type_2, left, up], player_1, 1). payoff([type_2, left, up], player_2, 0). payoff([type_2, left, down], player_1, 1). payoff([type_2, left, down], player_2, 1). payoff([type_2, right, up], player_1, 2). payoff([type_2, right, up], player_2, 1). payoff([type_2, right, down], player_1, 0). payoff([type_2, right, down], player_2, 0). */ /* % #3 %---a signaling game in Gibbons(1992), figure 4.2.2. payoff([type_1, left, up], player_1, 1). payoff([type_1, left, up], player_2, 3). payoff([type_1, left, down], player_1, 4). payoff([type_1, left, down], player_2, 0). payoff([type_1, right, up], player_1, 2). payoff([type_1, right, up], player_2, 1). payoff([type_1, right, down], player_1, 1). payoff([type_1, right, down], player_2, 0). payoff([type_2, left, up], player_1, 2). payoff([type_2, left, up], player_2, 4). payoff([type_2, left, down], player_1, 0). payoff([type_2, left, down], player_2, 1). payoff([type_2, right, up], player_1, 1). payoff([type_2, right, up], player_2, 0). payoff([type_2, right, down], player_1, 1). payoff([type_2, right, down], player_2, 2). */ /* % #4 %--- an entry-deterence game in Muto(2000). payoff([type_1, right, up], player_1, 0). payoff([type_1, right, up], player_2, 5). payoff([type_1, right, down], player_1, 0). payoff([type_1, right, down], player_2, 5). payoff([type_1, left, up], player_1, 2). payoff([type_1, left, up], player_2, 3). payoff([type_1, left, down], player_1, -2). payoff([type_1, left, down], player_2, 1). payoff([type_2, right, up], player_1, 0). payoff([type_2, right, up], player_2, 5). payoff([type_2, right, down], player_1, 0). payoff([type_2, right, down], player_2, 5). payoff([type_2, left, up], player_1, 3). payoff([type_2, left, up], player_2, 0). payoff([type_2, left, down], player_1, 1). payoff([type_2, left, down], player_2, 1). */ %================================ % (Standard) expected utilities %================================ average([Q,Ud,Uc],U=Ueq):- W1 is integer(Q * 100), W2 is integer((1-Q) * 100), % to avoide nemerical error. Ueq = (W1 * Ud + W2 * Uc) /100, U is Ueq. % first order averages expected_utility_0(player_2, if(T,LOR),down(Q),utility(U=Ueq)):- payoff([T, LOR, down], player_2, Ud), payoff([T, LOR, up], player_2, Uc), possible_strategy_of(player_2, down,Q), average([Q,Ud,Uc],U=Ueq). expected_utility_0(player_1, (T,LOR),if(belief(type_1:P),down(Q)),utility(U=Ueq)):- rational_choice_of(player_2, if(LOR),belief(type_1:P),down(Q),utility(_)), payoff([T, LOR, down], player_1, Ud), payoff([T, LOR, up], player_1, Uc), average([Q,Ud,Uc],U=Ueq). % second order averages expected_utility_of(player_2, if(LOR),belief(type_1:P),down(Q),utility(U=Ueq)):- bayes_updating_of(player_2, _->(P=_),at(_:type_1),observing(LOR),_), expected_utility_0(player_2, if(type_1,LOR),down(Q),utility(_=Uw/100)), expected_utility_0(player_2, if(type_2,LOR),down(Q),utility(_=Ut/100)), average([P,Uw,Ut],_=Ueq/100), U is Ueq/10000. expected_utility_of(player_1, (T,left(P)),assess(ASSESS),utility(U=Ueq)):- expected_utility_0(player_1, (T,left),if(Be,De),utility(_=Ue/100)), expected_utility_0(player_1, (T,right),if(Bx,Dx),utility(_=Ux/100)), ASSESS=[if(left,Be,De),if(right,Bx,Dx)], possible_strategy_of(player_1, T,left,P), average([P,Ue,Ux],_=Ueq/100), U is Ueq/10000. %================================ % rational choices %================================ rational_choice_of(player_2, if(LOR),belief(type_1:P),down(Q),utility(U)):- member(LOR,[right, left]), EU=expected_utility_of(player_2, if(LOR),belief(type_1:P),down(Q),utility(U=_)), max(U,EU). /* % for the entry-deterence model (#4) ?- rational_choice_of(player_2, E,B,D,U). E = if(right) B = belief(type_1, 1) D = down(0) U = utility(5) ; E = if(right) B = belief(type_1, 1) D = down(1) U = utility(5) ; E = if(left) B = belief(type_1, 0) D = down(1) U = utility(1) ; No ?- */ % modified: 20 Jun 2004. bugfix. rational_choice_of(player_1, (T,left(P)),assess(ASSESS),utility(U=Ueq)):- possible_type_of(player_1, T), EU=expected_utility_of(player_1, (T,left(P)),assess(ASSESS),utility(U=Ueq)), setof((T,P,U=Ueq),EU,Bag), max(U,member((T,P,U=Ueq),Bag)). /* % for the entry-deterence model (#4) ?- rational_choice_of(player_1, A,B,C). A = type_1, left(0) B = assess([if(left, belief(type_1:0), down(1)), if(right, belief(type_1:1), down(0))]) C = utility(0= (0* (100* -2+0*2)+100* (0*0+100*0))/10000) ; A = type_1, left(0) B = assess([if(left, belief(type_1:0), down(1)), if(right, belief(type_1:1), down(1))]) C = utility(0= (0* (100* -2+0*2)+100* (100*0+0*0))/10000) ; A = type_2, left(1) B = assess([if(left, belief(type_1:0), down(1)), if(right, belief(type_1:1), down(0))]) C = utility(1= (100* (100*1+0*3)+0* (0*0+100*0))/10000) ; A = type_2, left(1) B = assess([if(left, belief(type_1:0), down(1)), if(right, belief(type_1:1), down(1))]) C = utility(1= (100* (100*1+0*3)+0* (100*0+0*0))/10000) ; No ?- */ %========================== % consistency test %========================== consistent_if(P,P,yes):-!. consistent_if(_,_,no). :- dynamic consistency/4. % modified: 20 Jun 2004. bugfix. consistency_test(type_1:P1,type_2:P2):- strategy_of(player_1, T,left,P0), rational_choice_of(player_1, (T,left(P)),assess(ASSESS),utility(_)), ( member((ON,P,X),[(if(right,B,D),0,a),(if(left,B,D),1,b)]) ; (P >0, P <1, X=c) ), member(ON,ASSESS), subtract(ASSESS,[ON],[OFF]), consistent_if(P,P0,Y), CON = consistency(Y,(type_1:P1,type_2:P2),(T,left(hypo:P0,best:P)),(ON,OFF)), (clause(CON,true)->true;assert(CON)), fail. consistency_test(_,_). %:- dynamic strategy_of/4. consistency_test:- abolish(consistency/4), scan_strategies_of_player_1(type_1:P1,type_2:P2), update_strategies_of_player_1(type_1:P1,type_2:P2), consistency_test(type_1:P1,type_2:P2), fail. consistency_test:- display_models, nl,display_half_line, write('results'), display_half_line, display_consistency_results(yes). display_models:- nl,display_half_line, write('model'), display_half_line, P=prior_probability_of(T,Q), findall((T,Q),P,PRIORs), nl,write(priors:PRIORs), S1=possible_strategy_of(player_1, T,A,R), S2=possible_strategy_of(player_2, A,R), forall(setof(R,S1,SR1),(nl,write(strategies(1,T,A):SR1))), forall(setof(R,S2,SR2),(nl,write(strategies(2,A):SR2))). display_half_line:- write('--------------------'). scan_strategies_of_player_1(type_1:P1,type_2:P2):- possible_strategy_of(player_1, type_1,left,P1), possible_strategy_of(player_1, type_2,left,P2). update_strategies_of_player_1(type_1:P1,type_2:P2):- retractall(strategy_of(player_1, type_1,left,_)), retractall(strategy_of(player_1, type_2,left,_)), assert(strategy_of(player_1, type_1,left,P1)), assert(strategy_of(player_1, type_2,left,P2)), !. display_strategies_of_player_1(type_1:P1,type_2:P2):- S1=strategy_of(player_1, type_1,left,P1), S2=strategy_of(player_1, type_2,left,P2), nl,write(S1),nl,write(S2). % modified: 20 Jun 2004. bugfix. display_consistency_results(all):- scan_strategies_of_player_1(type_1:P1,type_2:P2),%nl,write('Prob(left)->'), display_strategies_of_player_1(type_1:P1,type_2:P2), consistency(Y,(type_1:P1,type_2:P2),(T,left(hypo:P0,best:P)),(IN,OUT)), IN=if(AI,BI,DI):in, OUT=if(AN,BN,DN):off, nl, tab(1),write((T,'best reply':left(P),assumed:P0,consistency:Y)), nl, tab(1),write('strategies of opponent:'), nl, tab(2),write(AI->DI:BI), nl, tab(2),write(AN->DN:BN), fail. display_consistency_results(yes):- scan_strategies_of_player_1(type_1:P1,type_2:P2), findall(T,consistency(yes,(type_1:P1,type_2:P2),(T,_),_),Bag), sort(Bag,[type_1,type_2]), display_strategies_of_player_1(type_1:P1,type_2:P2), consistency(yes,(type_1:P1,type_2:P2),(T,left(hypo:P0,best:P)),(ON,OFF)), ON=if(AI,BI,DI), OFF=if(AN,BN,DN), nl, tab(1),write((T,'best reply':left(P),assumed:P0,consistency:yes)), nl, tab(2),write('opponent strategies:'), nl, tab(3),write((AI->DI:BI)), nl, tab(3),write((AN->DN:BN)), fail. display_consistency_results(_). test_a:- member(X,[a,b,c]), test(X,Y), write(Y), fail. test(a,1). test(b,2). test(c,3). :- title(A),forall(member(B,A),(nl,write(B))). %:-figure. %******************************************************************** % Modeling Dempster-Shafer Equilibrium of Signaling Games %******************************************************************** % reference: Ryan(2002). %================================ % Choquet expected utilities %================================ choquet_expected_utility_of(player_2, if(LOR),belief(type_1:P),down(Q),utility(U=Ueq)):- updating_beliefs_of_player_2(conditional_on(player_2s_act), LOR), choquet_expected_utility_0(player_2, if(type_1,LOR),down(Q),utility(_=Uw/100)), choquet_expected_utility_0(player_2, if(type_2,LOR),down(Q),utility(_=Ut/100)), choquet_integral([P,Uw,Ut],_=Ueq/100), U is Ueq/10000. choquet_expected_utility_of(player_1, (T,left(P)),assess(ASSESS),utility(U=Ueq)):- choquet_expected_utility_0(player_1, (T,left),if(Be,De),utility(_=Ue/100)), choquet_expected_utility_0(player_1, (T,right),if(Bx,Dx),utility(_=Ux/100)), ASSESS=[if(left,Be,De),if(right,Bx,Dx)], possible_strategy_of(player_1, T,left,P), choquet_integral([P,Ue,Ux],_=Ueq/100), U is Ueq/10000. /* ranking and cumulating events */ % renshu ranked_states(player1:T,act(A),states(SL),payoffs(PL)):- pure_strategy_of(player_1,A), possible_type_of(player_1,T), setof((U,Y),U^Y^payoff([T,A,Y],player_1,U),R), reverse(R,R1), findall([S],member((U,S),R1),SL), findall(U,member((U,S),R1),PL). ranked_states(player_2,act(A),states(SL),payoffs(PL)):- pure_strategy_of(player_2,A), setof((U,[T,X]),U^T^X^payoff([T,X,A],player_2,U),R), reverse(R,R1), findall(S,member((U,S),R1),SL), findall(U,member((U,S),R1),PL). % ranking of events leveled_event(player_1:T,act(A),event(E),payoff(U),rank(K/N)):- possible_type_of(player_1, T), pure_strategy_of(player_1, A), setof(U,X^payoff([T,A,X],player_1,U),R), length(R,N), reverse(R,R1), nth1(K,R1,U), findall([X],payoff([T,A,X],player_1,U),E0), sort(E0,E). leveled_event(player_2,act(A),event(E),payoff(U),rank(K/N)):- pure_strategy_of(player_2,A), setof(U,T^X^payoff([T,X,A],player_2,U),R), length(R,N), reverse(R,R1), nth1(K,R1,U), findall([T,X],payoff([T,X,A],player_2,U),E0), sort(E0,E). /* Choquet Integral Representation */ a_level_of_ceu(player_1:T,act(F),rank(1/N),[A,[A],[X],[B],[X*B]],V):- possible_type_of(player_1, T), pure_strategy_of(player_1, F), leveled_event(player_1:T,act(F),event(A),payoff(X),rank(1/N)), prior_belief_of((player_1,F),A,B), V is X * B. a_level_of_ceu(player_1:T,act(F),rank(K/N),[Y,[A|O],[X|Z],[B|C],[V|U]],E):- possible_type_of(player_1, T), pure_strategy_of(player_1, F), a_level_of_ceu(player_1:T,act(F),rank(K0/N),[W,O,Z,C,U],E0), (K0=N->!,fail;K is K0 + 1), leveled_event(player_1:T,act(F),event(A),payoff(X),rank(K/N)), C=[B0|_], append(A,W,AW), sort(AW,Y), prior_belief_of((player_1,F),Y,B), V = X * (B-B0), E is E0 + V. a_level_of_ceu(player_2:observed(D),act(F),rank(1/N),[A,[A],[X],[B],[X*B]],V):- pure_strategy_of(player_1, D), pure_strategy_of(player_2, F), leveled_event(player_2,act(F),event(A),payoff(X),rank(1/N)), updated_belief_of_player_2_conditional_on_player_1s_act(A/D,_,B), V is X * B. a_level_of_ceu(player_2:observed(D),act(F),rank(K/N),[Y,[A|O],[X|Z],[B|C],[V|U]],E):- % pure_strategy_of(player_1, D), % You should backtrack `without' observated act specified! pure_strategy_of(player_2, F), a_level_of_ceu(player_2:observed(D),act(F),rank(K0/N),[W,O,Z,C,U],E0), (K0=N->!,fail;K is K0 + 1), leveled_event(player_2,act(F),event(A),payoff(X),rank(K/N)), C=[B0|_], append(A,W,AW), sort(AW,Y), updated_belief_of(player_2,conditional_on:player_1s_act,Y/D,_,B), V = X * (B-B0), E is E0 + V. ceu_of(player_1:Type,Act,[Levels,Events,Payoffs,Beliefs,Terms_of_CEU],CEU_Value):- possible_type_of(player_1, Type), pure_strategy_of(player_1, Act), a_level_of_ceu( player_1:Type, act(Act), rank(Levels/Levels), [_,Events,Payoffs,Beliefs,Terms_of_CEU], CEU_Value ). ceu_of(player_2:observed(D),Act,[Levels,Events,Payoffs,Beliefs,Terms_of_CEU],CEU_Value):- pure_strategy_of(player_1, D), pure_strategy_of(player_2, Act), a_level_of_ceu( player_2:observed(D), act(Act), rank(Levels/Levels), [_,Events,Payoffs,Beliefs,Terms_of_CEU], CEU_Value ). %================================ % Choquet rational choices %================================ % which are uncertainty averse when convex capacities (UACEU) choquet_rational_choice_of(player_2, observed(D),A,R,ceu(U)):- pure_strategy_of(player_1, D), max(U, ceu_of(player_2:observed(D),A,[_,_,_,_,R],U)). choquet_rational_choice_of(player_1, type(T),A,R,ceu(U)):- possible_type_of(player_1, T), max(U,ceu_of(player_1:T,A,[_,_,_,_,R],U)). set_of_choquet_rational_choices_of(player_2,observed(X), R,Ys):- pure_strategy_of(player_1,X), findall([U,Y], ( choquet_rational_choice_of(player_2,observed(X),Y,_,ceu(U)) ), R), findall(Y,member([U,Y],R),Ys). set_of_choquet_rational_choices_of(player_1,type(T), R,Xs):- possible_type_of(player_1,T), findall([U,X], ( choquet_rational_choice_of(player_1,type(T),X,_,ceu(U)) ), R), findall(X,member([U,X],R),Xs). %==================================================== % Dempster-Shafer Equilibrium for Signaling Games %==================================================== % (Ryan,2002; Eichberger and Kelsey, 1999) % equilibrium under Dempster-Shafer rational beliefs. % For each (updated-)belief of players, % it should have a support which consists of the opponents' % Choquet rational plays(i.e., the support contained in the best reply profile). ds_equilibrium_plays([Y1,Y2,Y3,Y4],RB1,RB2s):- dse_condition(1,_,Y1), dse_condition(2,_,Y2), dse_condition(3,RB1,Y3), dse_condition(4,RB2s,Y4). violate_for_dse(condition(1),[prior(player_1),X,M]):- pure_strategy_of(player_1,X), modularity(prior(player_1,X),M), member(M,[submodular,nonlinear]). violate_for_dse(condition(1),[prior(player_2),M]):- modularity(prior(player_2),M), member(M,[submodular,nonlinear]). violate_for_dse(condition(2),[updated(player_2),X,Y]):- pure_strategy_of(player_1,X), event_of((player_2,X),Y), \+ updated_belief_of(player_2,conditional_on:player_1s_act,Y/X,_,_). dse_condition(N,C,no):- member(N,[1,2]), violate_for_dse(condition(N),C), !. dse_condition(N,[],yes):- member(N,[1,2]). dse_condition(3,[in_belief_of_player_2,support:B1,br:R1,nbr_in_support:O1],Y):- support_of((player_2,prior), B1), findall([T,X,ceu(U)], ( member([T,X],B1), choquet_rational_choice_of(player_1,type(T),X,_,ceu(U)) ), R1), findall([T,X],(member([T,X],B1),\+ member([T,X,_],R1)),O1), (O1=[]->Y=yes;Y=no). dse_condition((4,X),[in_belief_of_player_1,support:B2,br:R2,nbr_in_support:O2],Y):- support_of((player_1,X), B2), findall([Y,ceu(V)], ( member([Y],B2), choquet_rational_choice_of(player_2,observed(X),Y,_,ceu(V)) ), R2), findall([Y],(member([Y],B2),\+ member([Y,_],R2)),O2), (O2=[]->Y=yes;Y=no). dse_condition(4,[in_belief_of_player_1,left:(HL,YL),right:(HR,YR)],Y):- dse_condition((4,left),[_|HL],YL), dse_condition((4,right),[_|HR],YR), (member(no,[YL,YR])->Y=no;Y=yes). /* ?- ds_equilibrium_plays(Conditions,[A_______,B,C,D],[E________,F:G,H:I]). Conditions = [yes, yes, yes, yes] A_______ = in_belief_of_player_2 B = support:[[type_1, left], [type_2, right]] C = br:[[type_1, left, ceu(1)], [type_2, right, ceu(1)]] D = nbr_in_support:[] E________ = in_belief_of_player_1 F = left G = [support:[[down]], br:[[down, ceu(1.33333)]], nbr_in_support:[]], yes H = right I = [support:[[down]], br:[[down, ceu(1.33333)]], nbr_in_support:[]], yes ; No ?- */ %---------------------------------------------------------------- % Ryan's Refinement: Robust DSE %---------------------------------------------------------------- dse_condition((5,X),[in_belief_of_player_2,S,M,S1],Y):- belief_persistence(S,X,M,S1,Y). dse_condition(5,[in_belief_of_player_2,left:(BPL,YL),right:(BPR,YR)],Y):- dse_condition((5,left),[in_belief_of_player_2|BPL],YL), dse_condition((5,right),[in_belief_of_player_2|BPR],YR), (member(no,[YL,YR])->Y=no;Y=yes). robust_ds_equilibrium_plays([Y1,Y2,Y3,Y4,Y5],C3,C4,C5):- ds_equilibrium_plays([Y1,Y2,Y3,Y4],C3,C4), dse_condition(5,C5,Y5). % belief persistence (minimal change in theory) %--------------------------------------------------- % In the light of new information, any rational belief system would satisfies % the minimal change principle, i.e., unless empty, the support of conditional belief should % be the intersection of observed event and support of prior belief. belief_persistence(S,A,M,S1,Y):- support_of((player_2,prior),S), support_of((player_2,observed(A)),S1), findall([T,A],member([T,A],S),M), ((M=[];sort(M,S))->Y=yes;Y=no). /* ?- belief_persistence(S,A,M,S1,Y). S = [[type_1, left], [type_2, right]] A = right M = [[type_2, right]] S1 = [[type_1, right], [type_2, right]] Y = no ; S = [[type_1, left], [type_2, right]] A = left M = [[type_1, left]] S1 = [[type_1, left], [type_2, left]] Y = no ; No ?- */ %---------------------------------------------------------------- % update rule(2) : convex capacities and D-S update rule %---------------------------------------------------------------- % cited & Modified from: beleq03. %---------------------- % state space %---------------------- states_of(player_2, [ [type_1, left], [type_1, right], [type_2, left], [type_2, right] ] ). states_of((player_1, left), [[down],[up]]). states_of((player_1, right), [[down],[up]]). event_of(Player,E):- states_of(Player,A), subset_of(E,_,A). proper_subset_of(Y,S):- subset_of(Y,_,S), Y \= S. complement_of(Event,Comp,Player):- states_of(Player,W), event_of(Player,Event), subtract(W,Event,Comp). %-------------------------------------------------- % Support of Nonadditive Probability Measure %-------------------------------------------------- % cited & modified from: beleq03 (Mar 2004) % definition of support by Dow and Werlang(1994). % also in Eichberger and Kelsey(1999). % supp(P):=A s.t. P(A*)=0 and for all subset B of A, P(B*)>0. % where C* denotes complement of event C. event_whose_complement_is_measure_zero(S,player_1,A):- complement_of(S,C,(player_1,A)), prior_belief_of((player_1,A), C,0). event_whose_complement_is_measure_zero(S,player_2,prior):- complement_of(S,C,player_2), prior_belief_of(player_2, C,0). event_whose_complement_is_measure_zero(S,player_2,observed(D)):- complement_of(S,C,player_2), updated_belief_of_player_2_conditional_on_player_1s_act(C/D,_,0). /* ?- event_whose_complement_is_measure_zero(S,P,A),nl,write(P-A-S),fail. player_1-left-[[down]] player_1-left-[[down], [up]] player_1-right-[[down]] player_1-right-[[down], [up]] player_2-prior-[[type_1, left], [type_2, right]] player_2-prior-[[type_1, left], [type_2, left], [type_2, right]] player_2-prior-[[type_1, left], [type_1, right], [type_2, right]] player_2-prior-[[type_1, left], [type_1, right], [type_2, left], [type_2, right]] player_2-prior-[[type_1, left], [type_1, right], [type_2, left], [type_2, right]] player_2-prior-[[type_1, left], [type_1, right], [type_2, left], [type_2, right]] player_2-observed(right)-[[type_1, right], [type_2, right]] player_2-observed(right)-[[type_1, right], [type_2, left], [type_2, right]] player_2-observed(left)-[[type_1, left], [type_2, left]] player_2-observed(left)-[[type_1, left], [type_2, left], [type_2, right]] player_2-observed(right)-[[type_1, left], [type_1, right], [type_2, right]] player_2-observed(left)-[[type_1, left], [type_1, right], [type_2, left]] player_2-observed(left)-[[type_1, left], [type_1, right], [type_2, left], [type_2, right]] player_2-observed(right)-[[type_1, left], [type_1, right], [type_2, left], [type_2, right]] No */ support_of((Player,B), S):- event_whose_complement_is_measure_zero(S,Player,B), \+ ( proper_subset_of(Y,S), event_whose_complement_is_measure_zero(Y,Player,B) ). /* ?- support_of(A,B). A = player_1, left B = [[down]] ; A = player_1, right B = [[down]] ; A = player_2, prior B = [[type_1, left], [type_2, right]] ; A = player_2, observed(right) B = [[type_1, right], [type_2, right]] ; A = player_2, observed(left) B = [[type_1, left], [type_2, left]] ; No ?- */ %---------------------- % Dempster-Shafer rule %---------------------- % v(union(A,-B)) - v(-B) % v_ds(A|B) = ------------------------ % 1 - v(-B) updated_belief_of(player_2,conditional_on:event,E/D,Yq,Y):- prior_belief_of(player_2,E,_Y1), prior_belief_of(player_2,D,_Y2), complement_of(D,F,player_2), union(E,F,G0), sort(G0,G), prior_belief_of(player_2,F,Y3), \+ Y3 is 1, prior_belief_of(player_2,G,Y4), Yq = (Y4 - Y3)/(1-Y3), Y is Yq. updated_belief_of(player_2,conditional_on:player_1s_act,E/Act,Yq,Y):- pure_strategy_of(player_1, Act), states_of(player_2,A), findall([Type,Act],member([Type,Act],A),B), updated_belief_of(player_2,conditional_on:event,E/B,Yq,Y). updated_belief_of_player_2_conditional_on_player_1s_act(E/Act,Yq,Y):- updated_belief_of(player_2,conditional_on:player_1s_act,E/Act,Yq,Y). /* % for Ryan(2002)'s signaling game (#1) ?- updated_belief_of(player_2,conditional_on:event,[[type_2,left]]/[[type_1,left],[type_2,left]],B,C). B = (0.5-0.25)/ (1-0.25) C = 0.333333 Yes ?- updated_belief_of(player_2,conditional_on:act_of_player_1,[T,X]/left,B,C),C>0. T = [type_2, left] X = [type_2, right] B = (0.5-0.25)/ (1-0.25) C = 0.333333 ; T = [type_1, right] X = [type_2, left] B = (0.5-0.25)/ (1-0.25) C = 0.333333 ; T = [type_1, left] X = [type_2, right] B = (0.75-0.25)/ (1-0.25) C = 0.666667 ; T = [type_1, left] X = [type_2, left] B = (1-0.25)/ (1-0.25) C = 1 ; T = [type_1, left] X = [type_1, right] B = (0.75-0.25)/ (1-0.25) C = 0.666667 ; No ?- updated_belief_of(player_2,conditional_on:player_1s_act,[T,X]/left,B,C),C>0. T = [type_2, left] X = [type_2, right] B = (0.5-0.25)/ (1-0.25) C = 0.333333 ; T = [type_1, right] X = [type_2, left] B = (0.5-0.25)/ (1-0.25) C = 0.333333 ; T = [type_1, left] X = [type_2, right] B = (0.75-0.25)/ (1-0.25) C = 0.666667 ; T = [type_1, left] X = [type_2, left] B = (1-0.25)/ (1-0.25) C = 1 ; T = [type_1, left] X = [type_1, right] B = (0.75-0.25)/ (1-0.25) C = 0.666667 ; No ?- */ %-------------------------------------------- % modeling prior beliefs by % convex capacity (belief function). %-------------------------------------------- % See Ryan(2002). prior_belief_of((player_1,A), E,Q):- prior_belief_0((player_1,A), E,Q). % It is assumed that the beliefs of Player 1 are constant over own choices, no matter what. /* ?- findall(W, setof(A-Q,(member(A,[left,right]),prior_belief_of((player_1,A), _,Q)),W), Z). W = _G181 A = _G157 Q = _G158 Z = [[left-0, right-0], [left-1, right-1], [left-0, right-0], [left-1, right-1]] Yes ?- */ % Ryan(2002)'s capacity for Player 2's prior belief. prior_belief_of(player_2, E,Q):- prior_belief_1(player_2, E:P), findall(X, ( prior_probability_of(Type,P0), augmented_capacity(Type,E,W), X = W * P0 ), Y), %nl,write(Y), sum(Y,Z), Q is (P+Z)/2. augmented_capacity(Type,Event,P):- (var(Event)->event_of(player_2,Event);true), possible_type_of(player_1, Type), states_of(player_2,A), setof([Type|X],member([Type|X],A),TX), (subset(TX,Event)->P=1;P=0). %augmented_capacity(_,_,0). %---------------------- % prior belief of Player 2: % convex capacity over Player 1's types and choices. %---------------------- prior_belief_0(player_2,[],0). prior_belief_0(player_2, [[type_2, right]],0.5). %prior_belief_0(player_2, [[type_2, left]],0). %prior_belief_0(player_2, [[type_2, left], [type_2, right]],0). %prior_belief_0(player_2, [[type_1, right]],0). %prior_belief_0(player_2, [[type_1, right], [type_2, right]],0). %prior_belief_0(player_2, [[type_1, right], [type_2, left]],0). %prior_belief_0(player_2, [[type_1, right], [type_2, left], [type_2, right]],0). prior_belief_0(player_2, [[type_1, left]],0.5). %prior_belief_0(player_2, [[type_1, left], [type_2, right]],0). %prior_belief_0(player_2, [[type_1, left], [type_2, left]],0). %prior_belief_0(player_2, [[type_1, left], [type_2, left], [type_2, right]],0). %prior_belief_0(player_2, [[type_1, left], [type_1, right]],0). %prior_belief_0(player_2, [[type_1, left], [type_1, right], [type_2, right]],0). %prior_belief_0(player_2, [[type_1, left], [type_1, right], [type_2, left]],0). prior_belief_0(player_2, [[type_1, left], [type_1, right], [type_2, left], [type_2, right]],1). %---------------------- % prior belief of Player 1: % convex capacity over Player 2's choices conditional on the own possible choice. %---------------------- prior_belief_0((player_1, left), [],0). prior_belief_0((player_1, left), [[down]],1). prior_belief_0((player_1, left), [[up]],0). prior_belief_0((player_1, left), [[down],[up]],1). prior_belief_0((player_1, right), [],0). prior_belief_0((player_1, right), [[down]],1). prior_belief_0((player_1, right), [[up]],0). prior_belief_0((player_1, right), [[down],[up]],1). % default assignment % (1) using the additive expansion. %---------------------- prior_belief_1(Player, Event:P):- event_of(Player,Event), addtition_of_prior_beliefs_0(Player, Event:P). addtition_of_prior_beliefs_0(Player, Event:P):- findall(Q, ( member(S,Event), prior_belief_0(Player, [S],Q) ), R), sum(R,P). % (2) using the lower probability and the monotonicity. % not used here! %---------------------- prior_belief_1b(Player, Event:P):- event_of(Player,Event), set_prior_belief_0_if_exists(Player, Event:P). set_prior_belief_0_if_exists(Player, Event:P):- prior_belief_0(Player, Event:P), !. set_prior_belief_0_if_exists(Player, Event:P):- use_lower_monotone_rule(Player, Event:P1), (var(P)->P=P1;P is P1). use_lower_monotone_rule(Player, Event:P):- max(P, ( prior_belief_0(Player, F:P), subset(F,Event) ) ). %--------------------------------------------------- % b.p.a. via Mevious inversion %--------------------------------------------------- % mass(B) = sum(for(subset(A,B)), (-1)^|B-A| * v(A)). % cited & modified from: beleq03 mass(E,G,Y,(BEL,Player)):- (var(BEL)->BEL=prior_belief_of;true), Goal=..[BEL,Player,F:B], event_of(Player,E), E \= [], findall(A, ( subset_of(F,_,E), Goal, movius(F,E,K), A = K * B ), G), sum(G,Y). movius(X,Y,Z):- subtract(Y,X,W), length(W,M), Z = (-1)^M. /* ?- mass(A,_,C,(prior_belief_of,player_2)),C>0. A = [[type_2, right]] C = 0.25 ; A = [[type_2, left], [type_2, right]] C = 0.25 ; A = [[type_1, left]] C = 0.25 ; A = [[type_1, left], [type_1, right]] C = 0.25 ; No ?- */ %--------------------------------------------------- % test of modularity for pairwise events %--------------------------------------------------- % cited from: beleq03 modularity(prior(P),[E,F],[G,H],REL,Z):- prior_belief_of(P,E,Y1), prior_belief_of(P,F,Y2), union(E,F,G), intersection(E,F,H), prior_belief_of(P,G,Y3), prior_belief_of(P,H,Y4), case_of_pairwise_modularity([Y1,Y2,Y3,Y4],REL,Z). modularity(updated(player_2,D),[E,F],[G,H],REL,Z):- updated_belief_of_player_2_conditional_on_player_1s_act(E/D,_,Y1), updated_belief_of_player_2_conditional_on_player_1s_act(F/D,_,Y2), union(E,F,G), intersection(E,F,H), updated_belief_of_player_2_conditional_on_player_1s_act(G/D,_,Y3), updated_belief_of_player_2_conditional_on_player_1s_act(H/D,_,Y4), case_of_pairwise_modularity([Y1,Y2,Y3,Y4],REL,Z). case_of_pairwise_modularity([Y1,Y2,Y3,Y4], REL, Z):- X1 is Y1 + Y2, X2 is Y3 + Y4, case_of_pairwise_modularity1(X1,X2, REL0, Z), REL0 =.. [OP, X1, X2], REL =.. [OP, Y1 + Y2, Y3 + Y4]. case_of_pairwise_modularity1(X1,X2, REL, modular):- num_eq(X1,X2),!, REL=(X1 = X2). case_of_pairwise_modularity1(X1,X2, REL, supermodular):- \+ num_eq(X1,X2), X1X2,!, REL=(X1 > X2). num_eq(X,Y):- Z is (X - Y)^2, Z < 10^(-10). % total test of modularity %--------------------------------- modularity(P,Z):- member(P, [ prior((player_1,left)), prior((player_1,right)), prior(player_2), updated(player_2,left), updated(player_2,right) ] ), findall(Y, ( modularity(P,_,_,_,Y) ), W), sort(W,W1), case_of_modularity(W1,Z). case_of_modularity([modular],modular):-!. case_of_modularity(G,supermodular):- \+ member(submodular,G),!. case_of_modularity(G,submodular):- \+ member(supermodular,G),!. case_of_modularity(_G,nonlinear). /* ?- modularity(A,B). A = prior((player_1, left)) B = modular ; A = prior((player_1, right)) B = modular ; A = prior(player_2) B = supermodular ; A = updated(player_2, left) B = modular ; A = updated(player_2, right) B = modular ; No ?- */ %================= % common programs %================= % sum % ----------------------------------------------------------- % sum([],0). sum([X|Members],Sum):- sum(Members,Sum1), Sum is Sum1 + X. % maximal solution for given goal clause : a naive solver %--------------------------------------------------------- max(X,Goal):- % X: the objective variable, % Goal: the objective function and constraints, setof((X,Goal),Goal,Z), member((X,Goal),Z), \+ ( member((Y,_),Z), Y > X ). % probability % ----------------------------------------------------------- % probability(W,P):- N1 is integer(1/W) + 1, length(L,N1),nth1(K,L,_), K1 is K - 1, P is K1/(N1 - 1). /* % allocation % ----------------------------------------------------------- % allocation(N,A,[X|Y]):- allocation(N,A,A,[X|Y]). allocation(0,_,0,[]). allocation(N,A,B,[X|Y]):- integer(A), length([X|Y],N), allocation(_N1,A,B1,Y), K is A - B1 + 1, length(L,K), nth0(X,L,X), B is B1 + X. % % probability (percentile) by using allocation % ----------------------------------------------------------- % probabilities(0,[]). probabilities(N,[X|Y]):- integer(N), length([X|Y],N), allocation(N,100,[X|Y]). */ % a sequence of binary choice for a list: %-------------------------------------------------- list_projection([],[],[]). list_projection([X|Y],[_A|B],C):- X = 0, list_projection(Y,B,C). list_projection([X|Y],[A|B],[A|C]):- X = 1, list_projection(Y,B,C). % % subset_of/3 : subset-enumeration % ----------------------------------------------------------- % subset_of(A,N,As):- length(As,L), length(D,L), list_projection(D,As,B), length(B,N), sort(B,A). %------------- % demos %------------- /* % for the second example, figure 4.4.2, of Gibbons(1992). [(L,L),(L->u,R->d),p=0.5,q]. % pure strategies case. % without condition 5 applied. ?- consistency_test. strategy_of(player_1, type_1, left, 1) strategy_of(player_1, type_2, left, 1) consistency(yes), (type_1, left(hypo:1, best:1)), on:if(left, belief(type_1:0.5), down(0)), off:[if(right, belief(type_1:0.5), down(0))] consistency(yes), (type_1, left(hypo:1, best:1)), on:if(left, belief(type_1:0.5), down(0)), off:[if(right, belief(type_1:0.5), down(1))] consistency(yes), (type_2, left(hypo:1, best:1)), on:if(left, belief(type_1:0.5), down(0)), off:[if(right, belief(type_1:0.5), down(1))] Yes % for the first example, figure 4.2.2 of Gibbons(1992). [(R,L),(L->u,R->d)],[(L,L),(->u)] % pure strategies case. % without condition 5 applied. ?- consistency_test. strategy_of(player_1, type_1, left, 0) strategy_of(player_1, type_2, left, 1) consistency(yes), (type_1, left(hypo:0, best:0)), on:if(right, belief(type_1:0), down(1)), off:[if(left, belief(type_1:0), down(0))] consistency(yes), (type_2, left(hypo:1, best:1)), on:if(left, belief(type_1:0), down(0)), off:[if(right, belief(type_1:0), down(1))] strategy_of(player_1, type_1, left, 1) strategy_of(player_1, type_2, left, 1) consistency(yes), (type_1, left(hypo:1, best:1)), on:if(left, belief(type_1:0.5), down(0)), off:[if(right, belief(type_1:0.5), down(1))] consistency(yes), (type_2, left(hypo:1, best:1)), on:if(left, belief(type_1:0.5), down(0)), off:[if(right, belief(type_1:0.5), down(1))] Yes ?- */ /* %-------------------------------- % case of pure strategies %-------------------------------- ?- consistency_test. strategy_of(player_1, type_1, left, 0) strategy_of(player_1, type_2, left, 1) consistency(yes), (type_1, left(hypo:0, best:0)), if(right, belief(type_1:1), down(0)) consistency(yes), (type_1, left(hypo:0, best:0)), if(right, belief(type_1:1), down(1)) consistency(yes), (type_2, left(hypo:1, best:1)), if(left, belief(type_1:0), down(1)) strategy_of(player_1, type_1, left, 1) strategy_of(player_1, type_2, left, 1) consistency(yes), (type_1, left(hypo:1, best:1)), if(left, belief(type_1:0.5), down(0)) consistency(yes), (type_2, left(hypo:1, best:1)), if(left, belief(type_1:0.5), down(0)) Yes ?- display_consistency_results(all). strategy_of(player_1, type_1, left, 0) strategy_of(player_1, type_2, left, 0) consistency(no), (type_1, left(hypo:0, best:1)), if(left, belief(type_1:0.5), down(0)) consistency(no), (type_2, left(hypo:0, best:1)), if(left, belief(type_1:0.5), down(0)) strategy_of(player_1, type_1, left, 0) strategy_of(player_1, type_2, left, 1) consistency(yes), (type_1, left(hypo:0, best:0)), if(right, belief(type_1:1), down(0)) consistency(yes), (type_1, left(hypo:0, best:0)), if(right, belief(type_1:1), down(1)) consistency(yes), (type_2, left(hypo:1, best:1)), if(left, belief(type_1:0), down(1)) strategy_of(player_1, type_1, left, 1) strategy_of(player_1, type_2, left, 0) consistency(yes), (type_1, left(hypo:1, best:1)), if(left, belief(type_1:1), down(0)) consistency(no), (type_2, left(hypo:0, best:1)), if(left, belief(type_1:1), down(0)) strategy_of(player_1, type_1, left, 1) strategy_of(player_1, type_2, left, 1) consistency(yes), (type_1, left(hypo:1, best:1)), if(left, belief(type_1:0.5), down(0)) consistency(yes), (type_2, left(hypo:1, best:1)), if(left, belief(type_1:0.5), down(0)) Yes ?- %---------------------------------------------------------------- % case where 0.1 x n probabilities and prior for type_1 is 0.75. %---------------------------------------------------------------- ?- prior_probability_of(A,B). A = type_1 B = 0.75 ; A = type_2 B = 0.25 ; No ?- consistency_test. strategy_of(player_1, type_1, left, 0) strategy_of(player_1, type_2, left, 1) consistency(yes), (type_1, left(hypo:0, best:0)), if(right, belief(type_1:1), down(0)) consistency(yes), (type_1, left(hypo:0, best:0)), if(right, belief(type_1:1), down(0.1)) consistency(yes), (type_1, left(hypo:0, best:0)), if(right, belief(type_1:1), down(0.2)) consistency(yes), (type_1, left(hypo:0, best:0)), if(right, belief(type_1:1), down(0.3)) consistency(yes), (type_1, left(hypo:0, best:0)), if(right, belief(type_1:1), down(0.4)) consistency(yes), (type_1, left(hypo:0, best:0)), if(right, belief(type_1:1), down(0.5)) consistency(yes), (type_1, left(hypo:0, best:0)), if(right, belief(type_1:1), down(0.6)) consistency(yes), (type_1, left(hypo:0, best:0)), if(right, belief(type_1:1), down(0.7)) consistency(yes), (type_1, left(hypo:0, best:0)), if(right, belief(type_1:1), down(0.8)) consistency(yes), (type_1, left(hypo:0, best:0)), if(right, belief(type_1:1), down(0.9)) consistency(yes), (type_1, left(hypo:0, best:0)), if(right, belief(type_1:1), down(1)) consistency(yes), (type_2, left(hypo:1, best:1)), if(left, belief(type_1:0), down(1)) strategy_of(player_1, type_1, left, 1) strategy_of(player_1, type_2, left, 1) consistency(yes), (type_1, left(hypo:1, best:1)), if(left, belief(type_1:0.75), down(0)) consistency(yes), (type_2, left(hypo:1, best:1)), if(left, belief(type_1:0.75), down(0)) Yes ?- %---------------------------------------------------------------- % case where 0.1 x n probabilities and prior for type_1 is 1/3. %---------------------------------------------------------------- ?- prior_probability_of(A,B). A = type_1 B = 1/3 ; A = type_2 B = 0.666667 ; No ?- consistency_test. strategy_of(player_1, type_1, left, 0) strategy_of(player_1, type_2, left, 1) consistency(yes), (type_1, left(hypo:0, best:0)), if(right, belief(type_1:1), down(0)) consistency(yes), (type_1, left(hypo:0, best:0)), if(right, belief(type_1:1), down(0.1)) consistency(yes), (type_1, left(hypo:0, best:0)), if(right, belief(type_1:1), down(0.2)) consistency(yes), (type_1, left(hypo:0, best:0)), if(right, belief(type_1:1), down(0.3)) consistency(yes), (type_1, left(hypo:0, best:0)), if(right, belief(type_1:1), down(0.4)) consistency(yes), (type_1, left(hypo:0, best:0)), if(right, belief(type_1:1), down(0.5)) consistency(yes), (type_1, left(hypo:0, best:0)), if(right, belief(type_1:1), down(0.6)) consistency(yes), (type_1, left(hypo:0, best:0)), if(right, belief(type_1:1), down(0.7)) consistency(yes), (type_1, left(hypo:0, best:0)), if(right, belief(type_1:1), down(0.8)) consistency(yes), (type_1, left(hypo:0, best:0)), if(right, belief(type_1:1), down(0.9)) consistency(yes), (type_1, left(hypo:0, best:0)), if(right, belief(type_1:1), down(1)) consistency(yes), (type_2, left(hypo:1, best:1)), if(left, belief(type_1:0), down(1)) strategy_of(player_1, type_1, left, 1) strategy_of(player_1, type_2, left, 1) consistency(yes), (type_1, left(hypo:1, best:1)), if(left, belief(type_1:0.333333), down(0.2)) consistency(yes), (type_2, left(hypo:1, best:1)), if(left, belief(type_1:0.333333), down(0.2)) Yes ?- */