% -*- Example Program <ex_1> Diagnosis of 1-cascaded ripple-adder cercuit -*-  
%     Copyright (C) 1997     Shohei Kato  

facts. 
val(Node2,V)	:- conn(Node1,Node2),val(Node1,V).
val(out(D),V) :- dev(D,and),ok(D),val(in(1,D),A),val(in(2,D),B),and(A,B,V).
val(out(D),V) :- dev(D,or),ok(D),val(in(1,D),A),val(in(2,D),B),or(A,B,V).
val(out(D),V) :- dev(D,xor),ok(D),val(in(1,D),A),val(in(2,D),B),xor(A,B,V).
val(out(D),1) :- dev(D,Ano),stuck_on(D).
val(out(D),0) :- dev(D,Ano),stuck_off(D).
and(0,0,0) :- true.
and(0,1,0) :- true.
and(1,0,0) :- true.
and(1,1,1) :- true.
xor(0,0,0) :- true.
xor(0,1,1) :- true.
xor(1,0,1) :- true.
xor(1,1,0) :- true.
or(0,0,0)  :- true.
or(0,1,1)  :- true.
or(1,0,1)  :- true.
or(1,1,1)  :- true.
dev(g1x,xor) :- true.
dev(g1z,xor) :- true.
dev(g11,and) :- true.
dev(g12,and) :- true.
dev(g1c,or)  :- true.
conn(in(1,x1),in(1,g1x)) :- true.
conn(in(1,y1),in(2,g1x)) :- true.
conn(in(1,x1),in(1,g11)) :- true.
conn(in(1,y1),in(2,g11)) :- true.
conn(out(g0c),in(2,g12)) :- true.
conn(out(g0c),in(2,g1z)) :- true.
conn(out(g1x),in(1,g1z)) :- true.
conn(out(g1x),in(1,g12)) :- true.
conn(out(g11),in(2,g1c)) :- true.
conn(out(g12),in(1,g1c)) :- true.
dev(g0c,or)  :- true.
val(in(1,x1),0) :- true.
val(in(1,y1),1) :- true.
val(out(g0c),0) :- true.
facts. 
hypotheses. 
ok(g1x) :- true.   0.500.
ok(g1z) :- true.   0.500.
ok(g11) :- true.   0.500.
ok(g12) :- true.   0.500.
ok(g1c) :- true.   0.500.
stuck_on(g1x) :- true.   0.170.
stuck_on(g1z) :- true.   0.170.
stuck_on(g11) :- true.   0.190.
stuck_on(g12) :- true.   0.190.
stuck_on(g1c) :- true.   0.220.
stuck_off(g1x) :- true.  0.330.
stuck_off(g1z) :- true.  0.330.
stuck_off(g11) :- true.  0.310.
stuck_off(g12) :- true.  0.310.
stuck_off(g1c) :- true.  0.280.
ok(g0c) :- true.   0.500.
stuck_on(g0c) :- true.   0.110.
stuck_off(g0c) :- true.   0.390.
hypotheses. 
consistency_condition. 
false :- ok(D),on(D).
false :- ok(D),off(D).
false :- on(D),off(D).
consistency_condition. 
observations. 
false :- val(out(g1z),1),val(out(g0c),1).
observations. 
