Monty Hall puzzle

The Monty Hall puzzle is paradox that describes the choice participants had to makein the TV games show hosted by Monty Hall.

% Based on Monty Hall problem on https://github.com/friguzzi/cplint 1/3::prize(1) ; 1/3::prize(2) ; 1/3::prize(3). select_door(1). member(X,[X|T]). member(X,[H|T]) :- member(X,T). 0.5::open_door(A) ; 0.5::open_door(B) :- member(A, [1,2,3]), member(B, [1,2,3]), A < B, \+ prize(A), \+ prize(B), \+ select_door(A), \+ select_door(B). open_door(A) :- member(A, [1,2,3]), member(B, [1,2,3]), \+ prize(A), prize(B), \+ select_door(A), \+ select_door(B). win_keep :- select_door(A), prize(A). win_switch :- member(A, [1,2,3]), \+ select_door(A), prize(A), \+ open_door(A). query(prize(_)). query(select_door(_)). query(win_keep). query(win_switch).

An alternative representation (credit to Richard de Rozario):

/************************************ There is 1/3 chance that I picked a car. I picked a goat, if I did not pick a car. There is 1/2 chance that I picked goat1, if I picked a goat. I picked goat2, if I picked a goat and did not pick goat1. There is 1/2 chance that goat1 is revealed, if I picked a car. Goat1 is revealed, if I picked goat2. There is 1/2 chance that goat2 is revealed, if I picked a car. Goat2 is revealed, if I picked goat1. Switching gets me a car, if I picked a goat and a goat was revealed. Switching gets me a goat, if switching did not get me a car. *************************************/ 1/3::picked_car. picked_goat:- not(picked_car). 1/2::picked_goat1:- picked_goat. picked_goat2:- picked_goat, not(picked_goat1). 1/2::revealed_goat1:- picked_car. revealed_goat1:- picked_goat2. 1/2::revealed_goat2:- picked_car. revealed_goat2:- picked_goat1. revealed_goat:- revealed_goat1 ; revealed_goat2. switched_gets_car:-picked_goat, revealed_goat. switched_gets_goat:- not(switched_gets_car). query(switched_gets_car). query(switched_gets_goat).

Check out also the Scam School episode on the Monty Hall puzzle.