% Prolog code for the electrical environment.
% This is the code discussed in Section 5.3 of Poole and Mackworth, Artificial
% Intelligence: foundations of computational agents, Cambridge, 2017.
% See http://artint.info
% Copyright (c) David Poole and Alan Mackworth 2017. This program
% is released under GPL, version 3 or later; see http://www.gnu.org/licenses/gpl.html
% The dynamic declaration prevents undefined predicate errors.
:- dynamic lit_l1/0, lit_l2/0, light_l1/0, light_l2/0, ok_l1/0, ok_l2/0,
ok_cb1/0, ok_cb2/0, live_outside/0, live_l1/0, live_l2/0,
live_w0/0, live_w1/0, live_w2/0, live_w3/0, live_w4/0,
live_w5/0, live_w6/0, up_s1/0, up_s2/0, up_s3/0,
down_s1/0, down_s2/0, down_s3/0.
% see https://artint.info/2e/html/ArtInt2e.Ch5.S3.html for meanings of symbols
light_l1.
light_l2.
ok_l1.
ok_l2.
ok_cb1.
ok_cb2.
live_outside.
live_l1 :- live_w0.
live_w0 :- live_w1, up_s2.
live_w0 :- live_w2, down_s2.
live_w1 :- live_w3, up_s1.
live_w2 :- live_w3, down_s1.
live_l2 :- live_w4.
live_w4 :- live_w3, up_s3.
live_p_1 :- live_w3.
live_w3 :- live_w5, ok_cb1.
live_p_2 :- live_w6.
live_w6 :- live_w5, ok_cb2.
live_w5 :- live_outside.
lit_l1 :- light_l1, live_l1, ok_l1.
lit_l2 :- light_l2, live_l2, ok_l2.
down_s1.
up_s2.
up_s3.
% some queries:
% ?- light_l1.
% ?- lit_l1.
% ?- lit_l2.