let matching1 (f,t)=
let rec
match_rec s = function
(Var(x), t) -> add_subst1 s (x,t)
| (Operation(op_f,sons_f),Operation(op_t,sons_t)) ->
if op_f = op_t then
(List.fold_left match_rec s
(List.combine sons_f sons_t))
else raise Match_exc1
| _ -> raise Match_exc1
in
match_rec [] (f,t)