let pre_post_to_term  (st_status, tr_status) =
  let pp_to_term an_array array_term func =
    let (authorized,forbidden,_) =
      Array.fold_left
        (fun (au_pred,fo_pred,i) b ->
           if b then
             begin
               (por(au_pred,prel(Rneq, zero_term(),
                                 (func array_term i))),
                fo_pred,
                i+1
               )
             end
           else
             (au_pred,
              pand(fo_pred,prel(Req, zero_term(),
                                (func array_term i))),
              i+1
             )
        )
        (pfalse,ptrue,0)
        an_array
    in
    authorized::[forbidden]

  in
  let tr = pp_to_term tr_status (host_trans_term ())  mk_offseted_array in
  let st = pp_to_term st_status (host_state_term ())  mk_offseted_array_states_as_enum in
  st@tr