% Finite state transducer. 
% without epsilon-transitions.

fst(TapeInput,TapeOutput):-
	initial_fst(S),
	fst(TapeInput,S,TapeOutput).

fst([],S,[]):- 
	final_fst(S).

fst([H|T],S,[H1|T1]):-
	trans_tab_fst(S,H,H1,NS),
	fst(T,NS,T1).

% FST transition table:
% trans_tab/4
% trans_tab(State, Input, Output, New State)

trans_tab_fst(1,a,b,1).
trans_tab_fst(1,b,a,1).

initial_fst(1).
final_fst(1).
