1- use_module(library(oset)).
    8listModesForAction(Parsed,Action,Modes) :-
    9
   10	listSuccessModeForAction(Parsed,Action,SuccessModes),
   11	listInferrableFailureModesForAction(Parsed,Action,FailureModes1),
   12	listExplicitFailureModesForAction(Parsed,Action,FailureModes2),
   13	listWOPRFailureModesForAction(Parsed,Action,FailureModes3),
   14
   15	append(FailureModes1,FailureModes2,FailureModes1And2),
   16	append(FailureModes1And2,FailureModes3,FailureModes123),
   17	append(SuccessModes,FailureModes123,Modes).
 Modes = FailureModes1
   20requiresFormalization(Atom) :-
   21	hasSubstring(Atom,' ').
   22
   23listSuccessModeForAction(_,_,[success]).
   24
   25listInferrableFailureModesForAction(Parsed,Action,FailureModes) :-
   26	Action =.. [P|B],
   27	argt(Parsed,[domainFile(DomainFile),domain(Domain),problemFile(ProblemFile),problem(Problem),solutionFile(SolutionFile),solution(Solution),verbFile(VerbFile),verb(Verb)]),
   28	actions(Domain,DurativeAction),
   29	DurativeAction = durativeAction(P,Parameters,Duration,Preconditions,Postconditions),
   30	view([durativeAction(P,parameters(Parameters),duration(Duration),preconditions(Preconditions),postconditions(Postconditions))]),
   31	oset_power(Preconditions,PowerSetOfPreconditions),
   32	oset_power(Postconditions,PowerSetOfPostconditions),
   33	findall(FailureMode,
   34		(   
   35		    member(PreconditionsUnsatisfied,PowerSetOfPreconditions),
   36		    member(PostconditionsUnsatisfied,PowerSetOfPostconditions),
   37		    (	
   38			FailureMode = failureEffects(attemptedAction(Action,preconditionsViolated(PreconditionsUnsatisfied)),Effects) ;
   39			FailureMode = failureEffects(neg(attemptedAction(Action,preconditionsViolated(PreconditionsUnsatisfied))),Effects) ;
   40			FailureMode = failureEffects(attemptedAction(Action,postconditionsViolated(PostconditionsUnsatisfied)),Effects) ;
   41			FailureMode = failureEffects(neg(attemptedAction(Action,postconditionsViolated(PostconditionsUnsatisfied))),Effects) ;
   42			FailureMode = failureEffects(attemptedAction(Action,incorrectlyDesignedPreconditions(PreconditionsUnsatisfied)),Effects) ;
   43			FailureMode = failureEffects(neg(attemptedAction(Action,incorrectlyDesignedPreconditions(PreconditionsUnsatisfied))),Effects) ;
   44			FailureMode = failureEffects(attemptedAction(Action,incorrectlyDesignedPostconditions(PostconditionsUnsatisfied)),Effects) ;
   45			FailureMode = failureEffects(neg(attemptedAction(Action,incorrectlyDesignedPostconditions(PostconditionsUnsatisfied))),Effects)
   46		    )
   47		),
   48	       FailureModes).
   49
   50listExplicitFailureModesForAction(_,_,FailureModes) :-
   51	FailureModes = [].
   52
   53listWOPRFailureModesForAction(_,_,FailureModes) :-
   54	FailureModes = [].
   58generateContingencyPlansForPlan(WorldState0,PlanSteps,ContingencyPlans) :-
   59	[at(StartTime,Action,Duration)|RemainingPlanSteps] = PlanSteps,
   60	listModesForAction(Action,Modes),
   61	findall(ContingencyPlan,
   62		(member(Mode,Modes),
   63		 updateWorldStateWithMode(WorldState0,Mode,WorldState1),
   64		 generateContingencyPlansForPlan(WorldState1,RemainingPlanSteps,ContingencyPlans),
   65		 member(ContingencyPlan,ContingencyPlans)),
   66		ContingencyPlans).
   67
   68updateWorldStateWithMode(WorldState0,Mode,WorldState1) :-
   69	WorldState1 = WorldState0.
   72	
 generateContingencyPlansForPlan(WorldState0, Plan, ContingencyPlans)
   73	
   79generateContingencyPlans(Domain,ContingencyPlans) :-
   80	planSteps(Domain,PlanSteps),
   81	seer(PlanSteps),
   82	generateContingencyPlansForPlan([],PlanSteps,ContingencyPlans).
   92displayModes(Parsed,Action) :-
   93	listModesForAction(Parsed,Action,Modes),
   94	view(Modes)