let str_term_dbg tab (ter : term) =
let rec f inter = function
| Var(n) ->
let int_type = var_type n in
let str_type = try List.assoc int_type !localtabletype with Not_found -> string_of_int int_type in
let str = try List.assoc n tab with Not_found -> "X" ^ (string_of_int (var_id n)) in
( str ^ "(" ^ (string_of_int n) ^ ")" ^ ":" ^ str_type )
| Atm(n) ->
(try List.assoc n tab
with Not_found -> "A"^(string_of_int (var_id n))^
(if var_type n=0 then "" else "_"^
string_of_int (var_type n)))
| PInv(t) -> "(" ^ (f false t) ^ ")'"
| SCrypt(m,k) -> "{" ^(f true m) ^ "}_" ^ (f false k)
| PCrypt(m,k) -> "#{"^(f true m) ^ "}_" ^ (f false k)
| Uplet(h::l) ->
if inter then
it_list (fun r t -> (r ^ "," ^ (f true t))) (f true h) l
else
"<" ^ (it_list (fun r t -> (r ^ "," ^ (f true t))) (f true h) l) ^ ">"
| Uplet([]) -> "<>"
| Xor(h::l) ->
if inter then
it_list (fun r t -> (r ^ "+" ^ (f false t))) (f false h) l
else
"(" ^ (it_list (fun r t -> (r ^ "+" ^ (f false t))) (f false h) l) ^ ")"
| Xor([]) -> "()"
| Exp(m,l) -> "Exp(" ^ (f false m) ^ "," ^
(it_list (fun s -> function
| (a,Pos) -> s ^ "*" ^ (f false a)
| (a,Neg) -> s ^ "/" ^ (f false a)
) "1" l) ^ ")"
in
f false ter