with(logic);
read(`.matrice.maple.trace`);

Init := proc (M, Pre, Post,n,m,R) 
local i, t, F;

	environ(2);
	R[0] := false; 
	for i from 1 to n do 
	if M[i] <> 0 then R[0] := R[0] &or a[i] fi od;

	for i from 1 to n do R[i]:=p[i] od;

	for t from 1 to m do
		F := false;
		for i from 1 to n do
			if Post[i,t]<>0 then F:= F &or a[i] fi
		od;

		for i from 1 to n do
			if Pre[i,t]<>0 and Post[i,t]=0 then
				R[i]:=R[i] &and F
			fi
		od;
	od;

	for i from 0 to n do
		bsimp(R[i])
	od	
end;

trappe := proc(n,R,T)

local i,j, Q;

for i from n by -1 to 1 do
	for j from 0 to i-1 do
		R[j] :=bsimp(subs(a[i]=R[i],a[j]=true,R[j]));
		
	od
od;
print('simplification ');
T := bsimp(R[0]);

end;


Init(M,Pre, Post,nb_places,nb_trans,R);
trappe(nb_places,R,T);
save T,`.Resultat.maple.trace`;
quit
