let update_received_fresh_terms generic_state_vars lhs current_state_vars = 
  let received_fresh_terms =
    List.flatten
      (List.map
         (function
             Iknows(t) -> get_received_fresh_terms t 
           | Ifequal(t1,t2) -> (get_received_fresh_terms t1)@(get_received_fresh_terms t2)
           | Ifcontains(t1,t2) -> (get_received_fresh_terms t1)@(get_received_fresh_terms t2)
           | _ -> [])
         (List.map get_if_term lhs))
  in
  List.map2
    (fun g_var c_var ->
      if (List.exists (fun x -> Base x = g_var) received_fresh_terms) then
        g_var
      else
        c_var)
    generic_state_vars current_state_vars