init(1).
trans(1,a,2).
trans(2,b,3).
trans(2,b,2).
final(3).

accept(S,[]) :- final(S).
accept(S,[H|T]) :- trans(S,H,S2), accept(S2,T).

check(Trace) :- init(S), accept(S,Trace).
