let get_fresh_terms msg_term =
let rec get_fresh_terms_from_msg = function
Pair(t1,t2)
| Scrypt(t1,t2)
| Crypt(t1,t2)
| Cons(t1,t2) ->
(get_fresh_terms_from_msg t1)@(get_fresh_terms_from_msg t2)
| Delete(t1,t2) ->
(get_fresh_terms_from_msg t1)@(get_fresh_terms_from_msg t2)
| Inv(t) ->
get_fresh_terms_from_msg t
| Function(t1,l) ->
(get_fresh_terms_from_msg t1)
@(List.flatten (List.map get_fresh_terms_from_msg l))
| Set(l) ->
List.flatten (List.map get_fresh_terms_from_msg l)
| Base(_) -> []
| Prime(t) -> [t]
| Hash(_) ->
prerr_endline "Semantic_check.check_var: Impossible error: invalid hash type/term";
raise Not_found
in
List.flatten
(List.map
(function
Iknows(t) -> get_fresh_terms_from_msg t
| Unknown(_,lt) ->
List.fold_left
(fun l t -> l@(get_fresh_terms_from_msg t))
[] lt
| _ -> [])
msg_term)