let print_macros (states_l,trans_l) =
print_start_block "Some macros factorizing pre/post-conditions predicates";
fprintf !out_fmt "# define %s=(op,st) \\\n" macro_ligth;
fprintf !out_fmt " %s == op\\\n" curOp;
fprintf !out_fmt " && %s == st\\\n" curOpStatus;
fprintf !out_fmt " && (%s[ 0] != 0" curState;
for i=1 to (List.length states_l)-1 do
fprintf !out_fmt " ||\\\n %s[%2d] != 0" curState i
done;
fprintf !out_fmt ")\\\n";
fprintf !out_fmt " && (%s[ 0] != 0" curTrans;
for i=1 to (List.length trans_l)-1 do
fprintf !out_fmt " ||\\\n %s[%2d] != 0" curTrans i
done ;
fprintf !out_fmt ")\n";
fprintf !out_fmt "//\n";
fprintf !out_fmt "# define %s=(op,st) \\\n" macro_full;
fprintf !out_fmt " %s(op,et) \\\n" macro_ligth;
fprintf !out_fmt " && (\\forall int tr ; 0<=tr<%s && %s[tr]!=0 => %s[%s(tr)]!=0 && %s(tr)) \\\n" nbTrans curTrans curState transStop transCond;
fprintf !out_fmt " && (\\forall int st ; 0<=st<%s && %s[st]!=0=> \\\n" nbStates curState;
fprintf !out_fmt " (\\exists int tr ; 0<=tr<%s && %s(tr) && %s(tr)==st && %s[tr]!=0)) \\\n" nbTrans transCond transStop curTrans;
fprintf !out_fmt " && (\\forall int st ; \\\n";
fprintf !out_fmt " 0<=st<%s && \\\n" nbStates;
fprintf !out_fmt " (\\forall int tr ; \\\n";
fprintf !out_fmt " 0<=tr<%s => \\\n" nbTrans;
fprintf !out_fmt " (%s[tr]==0 || \\\n" curTrans;
fprintf !out_fmt " %s(tr)!=st || \\\n" transStop;
fprintf !out_fmt " !%s(tr)) \\\n" transCond;
fprintf !out_fmt " ) \\\n";
fprintf !out_fmt " => %s[st]==0 \\\n" curState;
fprintf !out_fmt " )\n";
fprintf !out_fmt "//\n";
fprintf !out_fmt "# define %s \\\n" macro_pure ;
fprintf !out_fmt " (\\forall int st ; 0<=st<%s && %s[st]==0 => \\\n" nbStates curState;
fprintf !out_fmt " (\\forall int tr ; 0<=tr<%s => \\\n" nbTrans;
fprintf !out_fmt " ( %s[tr]==0 || !%s(tr) \\\n" curTrans transCond;
fprintf !out_fmt " || %s(tr)!=st || \\old(%s[%s(tr)]==0)))) \\\n" transStop curState transStart;
fprintf !out_fmt " && (\\forall int end ; 0<=end<%s && %s[end]!=0 => \\\n" nbStates curState;
fprintf !out_fmt " (\\exists int tr ; 0<=tr<%s && %s[tr]!=0 && %s(tr) && \\\n" nbTrans curTrans transCond;
fprintf !out_fmt " end==%s(tr) && \\old(%s[%s(tr)]!=0)))\n" transStop curState transStart;
print_end_block "Some macros factorizing pre/post-conditions predicates"