let rec termsAreEqual term1 term2 =
match term1,term2 with
| TTrue,TTrue
| TFalse,TFalse -> true
| TCall (a,None), TCall (b,None)
| TReturn a, TReturn b -> Kernel_function.equal a b
| TCall (f1,Some b1), TCall(f2, Some b2) ->
Kernel_function.equal f1 f2 && Datatype.String.equal b1.b_name b2.b_name
| TNot(TRel(rel1,t11,t12)), TRel(rel2,t21,t22)
| TRel(rel1,t11,t12), TNot(TRel(rel2,t21,t22)) ->
contradict_rel (rel1,t11,t12) (rel2,t21,t22)
| TNot(a),TNot(b) -> termsAreEqual a b
| TRel(rel1,t11,t12), TRel(rel2,t21,t22) ->
rel_are_equals (rel1,t11,t12) (rel2,t21,t22)
| _ -> false