% Solution to Exercise 9.1 for Abductive Reasoning, question 1 % HC, 2-oct-2007 % The following 5 program program lines are sufficient ;-) :- use_module(library(chr)). handler powerSupply. constraints state/2. % state(component, {up,down}) % Integrity constraints: state(X,up), state(X,down) ==> fail. state(X,Y) \ state(X,Y) <=> true. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% has_power(n1):- state(pp1,up), state(w1,up). has_power(n2):- state(w2,up), has_power(n1). has_power(n3):- state(w3,up), has_power(n2). has_power(n4):- state(w5,up), has_power(n1). has_power(v1):- state(w6,up), has_power(n2). has_power(v2):- state(w7,up), has_power(n3). has_power(v3):- state(4,up), has_power(n3). has_power(v4):- state(w8,up), has_power(n4). has_power(v5):- state(w9,up), has_power(n4). %% Since there is no good treatment of negation, %% we must produce explicit negative has_not_power has_no_power(n1):- state(pp1, down). has_no_power(n1):- state(w1, down). has_no_power(n2):- state(w2,down). has_no_power(n2):- has_no_power(n1). has_no_power(n3):- state(w3,down). has_no_power(n3):- has_no_power(n2). has_no_power(n4):- state(w5,down). has_no_power(n4):- has_no_power(n1). has_no_power(v1):- state(w6,down). has_no_power(v1):- has_no_power(n2). has_no_power(v2):- state(w7,down). has_no_power(v2):- has_no_power(n3). has_no_power(v3):- state(w4,down). has_no_power(v3):- has_no_power(n3). has_no_power(v4):- state(w8,down). has_no_power(v4):- has_no_power(n4). has_no_power(v5):- state(w9,down). has_no_power(v5):- has_no_power(n4). /****************************************************** tests ********************************************************/ observe_all_butV3:- has_power(v1), has_power(v2), has_no_power(v3), has_power(v4), has_power(v5). observe_all_butV1V3:- has_no_power(v1), has_power(v2), has_no_power(v3), has_power(v4), has_power(v5). observe_V4V5:- has_no_power(v1), has_no_power(v2), has_no_power(v3), has_power(v4), has_power(v5).