:- dynamic light/1, down/1, up/1, ok/1. /* house wiring */ light(l1). light(l2). down(s1). down(s2). up(s3). ok(l1). ok(l2). ok(cb1). ok(cb2). connect_to(l1,w0). connect_to(w0,w1) :- up(s2). connect_to(w0,w2) :- down(s2). connect_to(w1,w3) :- up(s1). connect_to(w2,w3) :- down(s1). connect_to(l2,w4). connect_to(w4,w3) :- up(s3). connect_to(p1,w3). connect_to(w3,w5) :- ok(cb1). connect_to(p2,w6). connect_to(w6,w5) :- ok(cb2). connect_to(w5,outside). lit(L) :- light(L), ok(L), live(L). live(outside). live(Y) :- connect_to(Y,Z), live(Z).