1?-use_module(library(lists)).    2%:-prolog_flag(compiling,_,profiledcode).
    3
    4cleanTemporalOrderings([Plan,Ordering], ValidOrderings):-
    5	fetchTemporalReferences(Plan, TempRefs),!,
    6	append([t], TempRefs, FinalTempRefs),
    7	cleanTemp(FinalTempRefs, Ordering, ValidOrderings), 
    8	
    9	% Cut required when generating multiple solutions to avoid
   10	% backtrack possible cleaning options
   11	!.
   12	
   13cleanTemp( TempRefs, [], []).	
   14cleanTemp( TempRefs, [before(X,Y) | Tail] ,[ before(X,Y) | TailTemp]):-
   15	member(X, TempRefs),
   16	member(Y, TempRefs),
   17	cleanTemp( TempRefs, Tail,TailTemp ).	
   18	
   19cleanTemp( TempRefs, [before(X,Y) | Tail] ,[ before(X,Unknown ) | TailTemp ] ):-
   20	
   21	member(X,TempRefs),
   22	\+ member(Y, TempRefs),	
   23	
   24	member(before(Y, Unknown ), Tail),
   25	
   26	cleanTemp( TempRefs, Tail,TailTemp ).		
   27
   28cleanTemp( TempRefs, [before(X,Y) | Tail] , [ before(Unknown,Y ) | TailTemp] ):-
   29	member(Y,TempRefs),
   30	\+ member(X, TempRefs),	
   31	
   32	member(before(Unknown,X), Tail),
   33		
   34	cleanTemp( TempRefs, Tail,TailTemp ).		
   35
   36%delete rudundant temporal ordering
   37cleanTemp( TempRefs, [before(X,Y) | Tail] , TailTemp ):-
   38	cleanTemp( TempRefs, Tail,TailTemp ).		
   39	
   40fetchTemporalReferences([] ,[]).
   41fetchTemporalReferences([happens(A,F,T)|Tail], [ T | TempRefs]):-
   42	fetchTemporalReferences(Tail, TempRefs).
   43
   44fetchTemporalReferences([before(X,Y)|Tail], [ T | TempRefs]):-
   45	fetchTemporalReferences(Tail, TempRefs).
   46
   47
   48% --------------Tests ----------------------
   49
   50%test1_cleanTemporalOrderings(Result):-
   51%cleanTemporalOrderings([[happens(createFormelement(restrictedDrugs,radiobtn,[size=2]),t149,t149),happens(entry(form,element,guard),t121,t121),happens(edgeProgression(form2,formElement(test2,value)),t132,t132),happens(formSubmission(form2),t129,t129),happens(entry(form,element,woobe),t120,t120),happens(formEntry(form2,jw99),t125,t125),happens(formEntry(form1,jw99),t8,t8),happens(createFormelement(textboxform1,textbox,[multline,numlines(4)]),t115,t115),happens(formSubmission(form1),t14,t14),happens(edgeProgression(form1,formElement(correctDrugs,off)),t108,t108)],[before(t149,t136),before(t138,t149),before(t115,t146),before(t148,t115),before(t142,t108),before(t146,t14),before(t8,t148),before(t14,t142),before(t134,t140),before(t136,t129),before(t125,t138),before(t129,t134),before(t134,t132),before(t132,t131),before(t131,t),before(t125,t131),before(t107,t125),before(t121,t119),before(t120,t118),before(t119,t14),before(t115,t118),before(t118,t119),before(t115,t112),before(t114,t115),before(t110,t108),before(t112,t14),before(t8,t114),before(t14,t110),before(t108,t107),before(t8,t107)]], Result), write(Result).
   52		
   53%test2_clean(Z):-cleanTemp([t75,t45,t58,t29,t34],[before(t75,t92),before(t92,t34),before(t29,t75),before(t58,t60),before(t60,t29),before(t45,t58),before(t34,t)],Z).