% File "diagnosis": diagnostic support for the RCS
% First Release date: 04/16/04
%
% $Name:  $


%
% Observation Axioms
%
h(F,0) :- fluent(F), obs(F,0).
nh(F,0) :- fluent(F), obs(neg(F),0).

occurs(A,T) :- hpd(A,T).

%
% Reality Checks
%
:- fluent(F), time(T),
%   not nh(F,T), obs(neg(F),T).
   h(F,T), obs(neg(F),T).

:- fluent(F), time(T),
%   not h(F,T), obs(F,T).
   nh(F,T), obs(F,T).

diagnose.


%1{ has_leak(V) : of_type(V,valve) }1 :- diagnose.
%{ has_leak(V) : of_type(V,valve) } :- diagnose.
%#minimize {has_leak(V) : of_type(V,valve)}.

{ has_leak(V) : of_type(V,valve), stuck(Sw) : of_type(Sw,v_switch),
  stuck(V) : of_typev(V,R,valve), bad_circuitry(V) : of_type(V,valve) } :- diagnose.
%1{ has_leak(V) : of_type(V,valve), stuck(Sw) : of_type(Sw,v_switch),
%  stuck(V) : of_typev(V,R,valve), bad_circuitry(V) : of_type(V,valve) }1 :- diagnose.

#minimize { has_leak(V) : of_type(V,valve), stuck(Sw) : of_type(Sw,v_switch),
  stuck(V) : of_typev(V,R,valve), bad_circuitry(V) : of_type(V,valve) }.


:- has_leak(V), dummy_valve(V).
:- bad_circuitry(V), dummy_valve(V).


%%%%% For Typing Purposes only

type_cc(closea_fi12).
type_cc(closeb_ffi12).
type_cc(closeb_foi12).

type_cc(closea_li12).
type_cc(closeb_lfi12).
type_cc(closeb_loi12).

type_cc(close_lx12).
type_cc(close_lfx12).
type_cc(close_lox12).

type_cc(closea_ri12).
type_cc(closeb_rfi12).
type_cc(closeb_roi12).

type_cc(close_rx12).
type_cc(close_rfx12).
type_cc(close_rox12).

type_cc(opena_ffm5).
type_cc(openb_ffm5).
type_cc(opena_lfm5).
type_cc(openb_lfm5).
type_cc(opena_rfm5).
type_cc(openb_rfm5).

type_cc(closea_ffm5).
type_cc(closeb_ffm5).
type_cc(closea_lfm5).
type_cc(closeb_lfm5).
type_cc(closea_rfm5).
type_cc(closeb_rfm5).

    

%%%%%%%%%%%%%%             Facts                %%%%%%%%%%%%%%%%%

% of_type(D,R,Dev) is true iff device D from RCS R is of type Dev. 

% Switches

of_type(fha,fwd_rcs,v_switch).       % fha   = forward helium a 
of_type(fhb,fwd_rcs,v_switch).       % fhb   = forward helium b 
of_type(fi12,fwd_rcs,v_switch).      % fi12  = forward isolation 12 
of_type(fi345,fwd_rcs,v_switch).     % fi345 = forward isolation 345 
of_type(fm1,fwd_rcs,v_switch).       % fm1   = forward manifold 1 
of_type(fm2,fwd_rcs,v_switch).       % fm2   = forward manifold 2 
of_type(fm3,fwd_rcs,v_switch).       % fm3   = forward manifold 3 
of_type(fm4,fwd_rcs,v_switch).       % fm4   = forward manifold 4 
of_type(fm5,fwd_rcs,v_switch).       % fm5   = forward manifold 5 

of_type(lha,left_rcs,v_switch).      % lha   = left helium a 
of_type(lhb,left_rcs,v_switch).      % lhb   = left helium b 
of_type(li12,left_rcs,v_switch).     % li12  = left isolation 12 
of_type(li345a,left_rcs,v_switch).   % li345a= left isolation 345a 
of_type(li345b,left_rcs,v_switch).   % li345b= left isolation 345b 
of_type(lm1,left_rcs,v_switch).      % lm1   = left manifold 1 
of_type(lm2,left_rcs,v_switch).      % lm2   = left manifold 2 
of_type(lm3,left_rcs,v_switch).      % lm3   = left manifold 3 
of_type(lm4,left_rcs,v_switch).      % lm4   = left manifold 4 
of_type(lm5,left_rcs,v_switch).      % lm5   = left manifold 5 
of_type(lx12,left_rcs,v_switch).     % lx12  = left cross-feed isolation 12  
of_type(lx345,left_rcs,v_switch).    % lx345 = left cross-feed isolation 345  

of_type(rha,right_rcs,v_switch).     % rha   = right helium a 
of_type(rhb,right_rcs,v_switch).     % rhb   = right helium b 
of_type(ri12,right_rcs,v_switch).    % ri12  = right isolation 12 
of_type(ri345a,right_rcs,v_switch).  % ri345a= right isolation 345a 
of_type(ri345b,right_rcs,v_switch).  % ri345b= right isolation 345b 
of_type(rm1,right_rcs,v_switch).     % rm1   = right manifold 1 
of_type(rm2,right_rcs,v_switch).     % rm2   = right manifold 2 
of_type(rm3,right_rcs,v_switch).     % rm3   = right manifold 3 
of_type(rm4,right_rcs,v_switch).     % rm4   = right manifold 4 
of_type(rm5,right_rcs,v_switch).     % rm5   = right manifold 5 
of_type(rx12,right_rcs,v_switch).    % rx12  = right cross-feed isolation 12  
of_type(rx345,right_rcs,v_switch).   % rx345 = right cross-feed isolation 345 
 
% Valves
 
of_typev(ffha,fwd_rcs,valve). 
of_typev(foha,fwd_rcs,valve).
of_typev(ffhb,fwd_rcs,valve).
of_typev(fohb,fwd_rcs,valve).
of_typev(ffi12,fwd_rcs,valve).
of_typev(foi12,fwd_rcs,valve).
of_typev(ffi345,fwd_rcs,valve).
of_typev(foi345,fwd_rcs,valve).
of_typev(ffm1,fwd_rcs,valve).
of_typev(fom1,fwd_rcs,valve).
of_typev(ffm2,fwd_rcs,valve).
of_typev(fom2,fwd_rcs,valve).
of_typev(ffm3,fwd_rcs,valve).
of_typev(fom3,fwd_rcs,valve).
of_typev(ffm4,fwd_rcs,valve).
of_typev(fom4,fwd_rcs,valve).
of_typev(ffm5,fwd_rcs,valve).
of_typev(fom5,fwd_rcs,valve).

of_typev(lfha,left_rcs,valve). 
of_typev(loha,left_rcs,valve).
of_typev(lfhb,left_rcs,valve).
of_typev(lohb,left_rcs,valve).
of_typev(lfi12,left_rcs,valve).
of_typev(loi12,left_rcs,valve).
of_typev(lfi345a,left_rcs,valve).
of_typev(loi345a,left_rcs,valve).
of_typev(lfi345b,left_rcs,valve).
of_typev(loi345b,left_rcs,valve).
of_typev(lfm1,left_rcs,valve).
of_typev(lom1,left_rcs,valve).
of_typev(lfm2,left_rcs,valve).
of_typev(lom2,left_rcs,valve).
of_typev(lfm3,left_rcs,valve).
of_typev(lom3,left_rcs,valve).
of_typev(lfm4,left_rcs,valve).
of_typev(lom4,left_rcs,valve).
of_typev(lfm5,left_rcs,valve).
of_typev(lom5,left_rcs,valve).
of_typev(lfx12,left_rcs,valve).
of_typev(lox12,left_rcs,valve).
of_typev(lfx345,left_rcs,valve).
of_typev(lox345,left_rcs,valve).

of_typev(rfha,right_rcs,valve). 
of_typev(roha,right_rcs,valve).
of_typev(rfhb,right_rcs,valve).
of_typev(rohb,right_rcs,valve).
of_typev(rfi12,right_rcs,valve).
of_typev(roi12,right_rcs,valve).
of_typev(rfi345a,right_rcs,valve).
of_typev(roi345a,right_rcs,valve).
of_typev(rfi345b,right_rcs,valve).
of_typev(roi345b,right_rcs,valve).
of_typev(rfm1,right_rcs,valve).
of_typev(rom1,right_rcs,valve).
of_typev(rfm2,right_rcs,valve).
of_typev(rom2,right_rcs,valve).
of_typev(rfm3,right_rcs,valve).
of_typev(rom3,right_rcs,valve).
of_typev(rfm4,right_rcs,valve).
of_typev(rom4,right_rcs,valve).
of_typev(rfm5,right_rcs,valve).
of_typev(rom5,right_rcs,valve).
of_typev(rfx12,right_rcs,valve).
of_typev(rox12,right_rcs,valve).
of_typev(rfx345,right_rcs,valve).
of_typev(rox345,right_rcs,valve).

of_type(V,R,valve) :- of_typev(V,R,valve).

of_type(V,R,valve) :- dummy_valve(V,R).


% Dummy valves have been added between fuel/oxidizer tanks
% and the following junction node in order to correctly
% determine when the junction node is leaking.
 
dummy_valve(ffdummy,fwd_rcs).
dummy_valve(fodummy,fwd_rcs).
dummy_valve(lfdummy,left_rcs).
dummy_valve(lodummy,left_rcs).
dummy_valve(rfdummy,right_rcs).
dummy_valve(rodummy,right_rcs).



 
%%%%%%%%%%%%%%%%%%%%%%%%   End: Control Module   %%%%%%%%%%%%%%%%%%%%%%%%% 

hide dummy_valve(X,Y).
hide of_type(X,Y,Z).
hide of_typev(X,Y,Z).
hide type_cc(X).

