let rec bad_eq_terms a b =
    match a , b with
      | Tconst k1 , Tconst k2 -> k1 = k2 (* strings,int and bools *)
      | Tvar x , Tvar y -> Var.equal x y
      | Tapp(f,xs) , Tapp(g,ys) when f=g ->
          (try List.for_all2 bad_eq_terms xs ys
           with _ -> false)
      | Tif(x,y,z) , Tif(x',y',z') ->
          bad_eq_terms x x' && bad_eq_terms y y' && bad_eq_terms z z'
      | _ -> a==b