STRIPS filter readme (for STRIPS filter that includes Prime Implicates algorithm) Code written by Eyal Amir, edited by Megan Nance, using Zres Prime Implicates algorithm (Laurent Simon and Alvaro del Val) First, a brief description of the code. It performs filtering of belief states represented literally in list form. For example '(and made-of-wood (or in-desk out-of-desk) (not (or spherical square))). Each element of a list starting with "and" or "or" is meant to be in the conjunction or disjunction. The second element of a list beginning with "not" (there should only be one other element) is meant to be the expression that's negated. Fluents can be words (like 'ostritch ) or lists (like '(capital-of russia) ) as long as the words "and", "or", and "not" aren't used in the fluent names. The values of true and false are represented as 'true-value and 'false-value. Action/observation pairs are passed to the filter in an external file. For a STRIPS domain, every action has a single rule, and there are no conditions effects. The STRIPS filter operates under the assumption that if we are passing a certain action to the filter, then the preconditions for that action are already met. Thus, when filtering we will also assume that the effects will occur, since the preconditions are met. In this version of the STRIPS filter, we allow for both deterministic and nondeterministic actions. In order to still filter correctly with nondeterministic actions, we must find the prime implicates of the belief state, which is done using zres. The user can indicate whether or not the prime implicates algorithm is active. If it is active, the algorithm will be run when filtering over a nondeterministic action, and when the initial belief state or state constraints need to be put into prime implicate form. In order to correctly use Zres, the user will need to define three global variables, which are listed in the STRIPS-filter function. The first variable is to define the path for Zres, the second is to define the path for the input for Zres (which will be a .cnf file), and the third is to define the path for the output for Zres (which will *always* be the input path with ".out-o.cnf" appended to the end of it). The procedure to call to invoke the filter is main. The procedure itself takes no parameters, but will pass the following parameters to STRIPS-filter, which will then call STRIPS-filter-ret: 1)-domain file that contains the domain definition (external, .pddl extension) 2)-sequence file(external, .seq extension) that contains action/observation pairs, 3)-initial belief state(external, .bel extension) 4)-file to write end belief state to(external, .bel extension) 5)-variable to indicate if domain is already propositional—T, needs to be propositionalized—nil, or if substitution should be used—‘substitution 6)-an objects file(external, .obj extension),only used if domain needs to be propositionalized 7)-an integer to indicate how many action/observation pairs should be filtered before subsumption is run on the current belief state (if 0 is passed in, subsumption is never run) 8)-a variable to indicate whether prime implicates should be found; if so, pass in T, else, pass in nil 9)-a variable to inidicate if there are domain/state constraints; if so, pass in T, else pass in nil 10)-domain/state constraints file(.pddl), if needed