exists([(Feat1-Val1)|_],Feat1,Val1):-!. exists([_|T],Param2,K):-exists(T,Param2,K),!. extends(_,[]):-!. extends(A,A):-!. extends(List1,[(Bas2-Val2) | Remain2]):- exists(List1,Bas2,X),extends(X,Val2),extends(List1,Remain2),!. delete([],_,[]). delete([(Feat1-_)|Remain],Feat1,Remain):-!. delete([Mem1|Remain],Feat1,[Mem1|Kalan]):-delete(Remain,Feat1,Kalan). mgu(A,A,A):-!. mgu([],List2,List2). mgu([(Feat1-Val1)|Remain1],List2,[(Feat1-M)|N]):- exists(List2,Feat1,X),!,mgu(Val1,X,M),delete(List2,Feat1,D),mgu(Remain1,D,N). mgu([(Feat1-Val1)|Remain1],List2,[(Feat1-Val1)|N]):- mgu(Remain1,List2,N). lgs(A,A,A):-!. lgs([],_,[]). lgs([(Feat1-Val1)|Remain1],List2,[(Feat1-M)|N]):- exists(List2,Feat1,X),lgs(Val1,X,M),!,lgs(Remain1,List2,N). lgs([(Feat1-Val1)|Remain1],List2,N):- exists(List2,Feat1,X),!,lgs(Remain1,List2,N). lgs([_|Remain1],List2,N):- lgs(Remain1,List2,N).