let compare x y =
match x,y with
| Fixed c1, Fixed c2 -> Datatype.Int.compare c1 c2
| Fixed _, _ -> 1
| _, Fixed _ -> -1
| Interval (min1,max1), Interval(min2, max2) ->
let c1 = Datatype.Int.compare min1 min2 in
if c1 = 0 then Datatype.Int.compare max1 max2 else c1
| Interval _, _ -> 1
| _,Interval _ -> -1
| Bounded (min1,max1), Bounded(min2,max2) ->
let c1 = Datatype.Int.compare min1 min2 in
if c1 = 0 then Cil_datatype.Term.compare max1 max2 else c1
| Bounded _, _ -> 1
| _, Bounded _ -> -1
| Unbounded c1, Unbounded c2 -> Datatype.Int.compare c1 c2