let compare v1 v2 = match v1, v2 with
| VarT _, VarL _ -> 1
| VarL _, VarT _ -> -1
| VarT (v1, id1, _,_), VarT (v2, id2, _,_) ->
let cmp = String.compare v1 v2 in
if cmp <> 0 then cmp
else
begin
match id1 , id2 with
| None , None -> 0
| Some _ , None -> 1
| None , Some _ -> (-1)
| Some id1 , Some id2 -> Pervasives.compare id1 id2
end
| VarL (v1, _), VarL (v2, _) -> Logic_var.compare v1 v2