/* NDFA : a non-deterministic finite automaton */

 


 

/* accepting a string of words */

 

 accepte(X,Y) :-

            initial(Q) ,

            accepte1(Q,X,Y).

 

 accepte1(Q,[Word|Words],[Lemma|Lemmas]) :-

            t(Q,Q1,Lemma),

            assoc(Word,Lemma),

            accepte1(Q1,Words,Lemmas).

 

 accepte1(Q,[],[]) :- final(Q).

 

/* the transitions */

 

 t(q0,q0,any_Word).      

 t(q0,q1,bear).

 t(q0,q1,take).

 t(q1,q2,the).       

 t(q2,q3,brunt).

 t(q3,q4,of).

 t(q4,q4,any_Word).

 

/* linking words and lemmas */

       

 assoc(bear, bear).

 assoc(bearing,bear).

 assoc(bears, bear).

 assoc(bore, bear).

 assoc(borne,bear).

 

 assoc(take, take).

 assoc(taking,take).

 assoc(takes, take).

 assoc(took, take).

 assoc(taken,take).

 

 assoc(the,the).

 assoc(brunt,brunt).

 assoc(of, of).

 assoc(Variable,any_Word).

 

/* initial and final states */

 

 initial(q0).

 final(q4).