:- compile('ops.pro'). gen_app :- Comp_List = [bsc1, rf1, rf2, rf3, rf4, rf5, bs1, bs2, bs10, bs100, bs104], assoc_insert([], comp, Comp_List, D1), assoc_insert(D1, comptype, [bsc, bs, rifu], D2), assoc_insert(D2, port, [ up, down ], D3), assoc_insert(D3, signaltype, [ available_traffic, ais_received, bcch_missing, bcf_bie_alarm_in, bcf_bie_far_end, bts_omu_link_fail, fault_rate_monito, lapd_link_failure, pcm_failure, pcm_line_remote_e, poll_status ], D4), assoc_insert(D4, signalclass, [poll_signal, farend_signal, status_signal], D5), assoc_insert(D5, pseudo, [a], D6), % Pseudo Argument for Indexing D = D6, assoc_insert([], signal, [comp, port, comp, signaltype], R1), assoc_insert(R1, class, [signaltype, signalclass], R3), assoc_insert(R3, ab, [comp], R6 ), assoc_insert(R6, output, [comp, signaltype], R7), assoc_insert(R7, output_poll, [comp], R8), assoc_insert(R8, send_states, [pseudo], R9), assoc_insert(R9, compute_output, [pseudo], R10), assoc_insert(R10, message_lost, [comp], R11), assoc_insert(R11, signal_discarded, [comp], R12), R=R12, Fixed=[ fix(output, 2) ], gen_incon_init, % Output-Poll ist erf"ullt, wenn ein Poll-Signal ausgegeben wurde. findall( OutputPollRule, ( type(Co, bs), gen_incon(Fixed, D, R, (compute_output(a) ---> (output_poll(Co) <--> (output(Co, bts_omu_link_fail) ior (output(Co, bcch_missing) ior (output(Co, available_traffic) ior output(Co, lapd_link_failure)))))), OutputPollRule)), OutputPollRules), % Gilt send_states, so muss jede Base Station ein Statussignal senden. findall(SendStatesRule, (type(Co, bs), gen_incon(Fixed, D, R, (send_states(a) ---> signal(Co, up, Co, poll_status)), SendStatesRule)), SendStatesRules), % Gilt signal_discarded, so muss eine Meldung erfolgt sein findall(SignalDiscarded, (type( Co, bs ), gen_incon(Fixed, D, R, (signal_discarded(Co) ---> (output_poll(Co) ior message_lost(Co))), SignalDiscarded)), SignalDiscardedRules), % Erkl"arung eines empfangenen Poll-Signals findall(I1a, (type( Co, bs ), gen_incon(Fixed, D, R, (compute_output(a) ---> (output_poll(Co) ---> neg( signal( bsc1, down, Co, poll_status)))), I1a)), LI1a), % Senden von Far_end Signalen findall( I1b, ( class( S, farend_signal ), type( Co, bs ), gen_incon( Fixed, D, R, ( compute_output(a) ---> (output( Co, S ) ---> (signal( Co, up, Co, S ) iand neg(signal_discarded(Co)) ))), I1b)), LI1b), % Signale ueber feste Verbindungen findall(I2a, (type(Co, bs ), class( S, X ), (X = farend_signal ; X = status_signal ), conn(Cx, up, C, down), gen_incon( Fixed, D, R, ( signal( Cx, up, Co, S ) ---> signal( C, down, Co, S ) ), I2a)), LI2a), % findall( I2b, % ( conn( Cx, up, C, down ), conn( Cy, up, C, down ), not ( Cx = Cy ), % type( Co, bs ), class( S, X ), % ( X = farend_signal ; X = status_signal ), % % gen_incon( Fixed, D, R, % ( signal( Cx, up, Co, S ) % ---> % ( signal( C, down, Co, S ) % iand neg( signal( Cy, up, Co, S)) )), I2b)), % LI2b), findall( I3, ( type( C, bs ), type( Co, bs ), not( C = Co ), class( S, X ), ( X = farend_signal ; X = status_signal ), gen_incon( Fixed, D, R, ( signal( C, down, Co, S ) ---> signal( C, up, Co, S ) ), I3)), LI3), % Propagierung ueber Richtfunkstrecke % findall( I4, % ( type( C, rifu ), type( Co, bs ), class( S, X ), % ( X = farend_signal ; X = status_signal ), % % gen_incon( Fixed, D, R, % ( ( signal( C, down, Co, S ) % iand neg( ab( C )) ) % <--> signal( C, up, Co, S ) ), I4)), % LI4), % % Eine Richtfunkstrecke ist korrekt, wenn: % % findall( I5, % ( type( C, rifu ), type( Co, bs ), class( S, farend_signal ), % % gen_incon( Fixed, D, R, % ( signal( C, down, Co, S ) % % ---> neg( ab( C )) ), I5)), % LI5), % Eine Richtfunkstrecke ist abnormal, wenn: findall( I6, ( type( C, rifu ), type( Co, bs ), (class(S, status_signal); class(S, farend_signal)), gen_incon( Fixed, D, R, (neg(ab(C)) ---> (signal(C, down, Co, S) ---> signal(C, up, Co, S))), I6)), LI6), % findall( I7, % ( type( C, rifu ), type( Co, bs ), % (class(S, status_signal); class(S, farend_signal)), % % gen_incon( Fixed, D, R, % (ab(C) ---> % (neg(signal(C, up, Co, S)))), % I7)), % LI7), % Ein Fehlermodell fuer RIFUs % Soll ein Signal ueber eine defekte RIFU uebertragen werden, % so geht es verloren. findall(I8, (type(C, rifu), type(Co, bs), class(S, status_signal), gen_incon(Fixed, D, R, (ab(C) ---> (signal(C, down, Co, S) ---> signal_discarded(Co))), I8)), LI8), init_program, write_program([OutputPollRules, SendStatesRules, SignalDiscardedRules, LI1a,LI1b, LI2a, LI3, LI6, LI8]), write_decl(D, R), write_fixedpred([pred(output, 2)]), findall(output(X, Y), output(X, Y), Z), write_initial(Z). comp :- consult('b_gen_dn.pro'), consult('b_assoc.pro'), consult('b_gen_in.pro'), consult('b_progra.pro'), consult('tv32.pro'), gen_app, halt. class(pcm_failure, unknown_signal). class(bts_omu_link_fail, poll_signal). class(bcch_missing, poll_signal). class(available_traffic, poll_signal). class(lapd_link_failure, poll_signal). class(bcf_bie_far_end, farend_signal). class(ais_received, unknown_signal). class(bcf_bie_alarm_in, unknown_signal). class(pcm_line_remote_e, unknown_signal). class(fault_rate_monito, unknown_signal). class( poll_status, status_signal). type(rf1, rifu). type(rf2, rifu). type(rf3, rifu). type(rf4, rifu). type(rf5, rifu). type(bs10, bs). type(bs1, bs). type(bs2, bs). type(bs100, bs). type(bs104, bs). type(bsc1, bsc). conn( rf1, up, bsc1, down ). conn( bs10, up, rf1, down ). conn( rf3, up, rf1, down ). conn( rf2, up, bs10, down ). conn( bs1, up, rf2, down ). conn( bs2, up, rf3, down ). conn( rf4, up, bs2, down ). conn( bs100, up, rf4, down ). conn( rf5, up, bs100, down ). conn( bs104, up, rf5, down ). double_conn(C) :- conn(Cx, up, C, down ), conn(Cy, up, C, down ), Cx \== Cy. :- comp.