defAs( oppRevFp( R ), int( R, circ( opp( id ), R ) ) ). defAs(double([]),z). defAs(double([R|T]), un( [ oppRevFp( R ), oppRevFp( rev(R) ), double(T) ] ) ). defAs(together([P|T]), un( arcs(P), int( rA(P), un( double(T), int( lA(P), un(T) ) )))). defAs( inBoth([R]), int( rA(R), rA(rev(R)) ) ). defAs( inBoth([R,S|T]), un( [ int( rA(R), rA(S)), int( rA(R), rA(rev(S))), int( rA(rev(R)), rA(S)), inBoth([R|T]), inBoth([S|T]) ] )). defAs(twice([]),z). defAs(twice([R|S]), un( [ rA(mult( R)), rA(mult(rev(R))), inBoth([R|S]), twice(S) ] )). defFoAs( 'Placeholders'([P|T]), z_un( together([P|T]), int(P,twice(T)) ) ). % Richiedere che PlaceHolders([P|T]), e` tanto come % richiedere che (chiamando *segnaposto* le componenti % di coppie in P): % - sia subdiagonale P (z_arcs(P)); % - se R e` una delle relazioni in T, per nessun segnaposto % @ che figuri a 1^ componente di una coppia *,y in R, % R contenga altre coppie x,y con la stessa 2^ % componente % @ che figuri a 2^ componente di una coppia y,* in R, % R contenga altre coppie y,x con la stessa 1^ % componente % (z_int(rA(P),double(T)); % - nessuna coppia in una relazione R di T abbia segnaposto % ad ambo i lati (z_int([rA(P), lA(P), un(T)]); % - se R e` una delle relazioni in T, nessun segnaposto % @ figuri due volte a 1^ componente, rispettivam. 2^, % in R % @ figuri sia a 1^ componente che a 2^ componente in R % @ figuri sia a 1^ componente sia in R che in una relaz S % distinta da R in T % @ figuri a 1^ componente in R e a 2^ in una relaz S % distinta da R in T % (z_int(P,twice(P)).