/**
 * SVPAlib
 * theory
 * Apr 21, 2015
 * @author Loris D'Antoni
 */
package theory;

import java.util.List;

/**
 * BooleanAlgebraSubst: A Boolean Alegbra with substitution
 * @param <P> The type of predicates forming the Boolean algebra
 * @param <F> The type of functions S->S in the Boolean Algebra 
 * @param <S> The domain of the Boolean algebra
 */
public abstract class BooleanAlgebraSubstAndOutputs<P, PL, F, S> extends BooleanAlgebraSubst<P, F, S>{
	
	/**
	 * hacky for now
	 */
	public abstract List<P> getCartesianPredicate(PL p);
	
	/**
	 * get the restricted output based on <code>p</code> and <code>f</code>
	 * @return \psi(y) = \exists x. \phi(x) \wedge f(x)=y
	 */
	public abstract PL getRestrictedOutput(P p, List<F> fs);
	
}

@@ -234,16 +234,79 @@
 algebra%0A
+ * @param %3CPL%3E The type of predicates over lists of variables %0A
  * @para
@@ -532,64 +532,475 @@
 %09 * 
-hacky for now%0A%09 */%0A%09public abstract List%3CP%3E getCartesian
+Returns a list of P predicates whose conjunction expresses the PL p%0A%09 * e.g.: for %5Cphi(x, y) = (x = 1) %5Cwedge (x = y), computes %5Cpsi(x) = %5Bx = 1, x = 1%5D%0A%09 */%0A%09public abstract List%3CP%3E getCartesianPredicate(PL p);%0A%09%0A%09/**%0A%09 * Returns a list of list of P predicates whose disjunction expresses the PL p%0A%09 * e.g.: for %5Cphi(x, y) = (0 %3C x %3C 3) %5Cwedge (x = y), computes %5Cpsi(x) = %5B%5Bx = 1, x = 1%5D, %5Bx = 2, x = 2%5D, %5Bx = 3, x= 3%5D%5D%0A%09 */%0A%09public abstract List%3CList%3CP%3E%3E getMonadic
 Pred

Add to interface of BooleanAlgebraSubstAndOutputs