let unify (name1 : string) (message1 : string) (name2 : string) (message2 : string) (untyped_variable : bool) : (string * string * string * string) list =
        if(message1="" || message2=""then []
        else(   Hashtbl.clear automtat_to_unify_format;
                Hashtbl.clear unify_format_to_automat;
(*        prerr_string (sender_format name1 message1); prerr_string ";*)
                let ((_,mu),u) = (to_unify_format_sender name1 message1 untyped_variable) in
                let ((_,mv),v) = (to_unify_format_reciever name2 message2 untyped_variable) in
(*                prerr_string (message1^"^mu^"^(str_term_dbg [] u)^");
                prerr_string (message2^"^mv^"^(str_term_dbg [] v)^");*)

                if(u=v) then [("","","","")]
                else if(mu="" || mv=""then []
                else(
                        let (res,t) = unification u v name1 name2 ([], FreeVar 100, []) in
                (*        if(res<>[]) then *) (* ( prerr_string (name1^"^mu^"^name2^"^mv^"^(string_of_bool (res<>[]))^")) ;*)
                (*        List.iter (fun (a,b,c,d) -> prerr_string(a^"^b^"^c^"^d)) res; prerr_string (");*)
                        (* test [] " u v ([] ,FreeVar 100, []);*)
                (*        List.iter (fun (a,b,c,d) -> prerr_string (a^"^b^"^c^"^d^") ) res;*)
                        if(res=[] && t) then [("","","","")] else res
                )
        )