mirror of
https://github.com/c-cube/sidekick.git
synced 2025-12-06 03:05:31 -05:00
58 lines
1.9 KiB
OCaml
58 lines
1.9 KiB
OCaml
(**************************************************************************)
|
|
(* *)
|
|
(* Cubicle *)
|
|
(* Combining model checking algorithms and SMT solvers *)
|
|
(* *)
|
|
(* Sylvain Conchon and Alain Mebsout *)
|
|
(* Universite Paris-Sud 11 *)
|
|
(* *)
|
|
(* Copyright 2011. This file is distributed under the terms of the *)
|
|
(* Apache Software License version 2.0 *)
|
|
(* *)
|
|
(**************************************************************************)
|
|
|
|
open Format
|
|
|
|
type t =
|
|
| Tint
|
|
| Treal
|
|
| Tbool
|
|
| Tabstract of Hstring.t
|
|
| Tsum of Hstring.t * Hstring.t list
|
|
|
|
let hash t =
|
|
match t with
|
|
| Tabstract s -> Hstring.hash s
|
|
| Tsum (s, l) ->
|
|
let h =
|
|
List.fold_left
|
|
(fun h x -> 13 * h + Hstring.hash x) (Hstring.hash s) l
|
|
in
|
|
abs h
|
|
| _ -> Hashtbl.hash t
|
|
|
|
let equal t1 t2 =
|
|
match t1, t2 with
|
|
| Tabstract s1, Tabstract s2
|
|
| Tsum (s1, _), Tsum (s2, _) ->
|
|
Hstring.equal s1 s2
|
|
| Tint, Tint | Treal, Treal | Tbool, Tbool -> true
|
|
| _ -> false
|
|
|
|
let compare t1 t2 =
|
|
match t1, t2 with
|
|
| Tabstract s1, Tabstract s2 ->
|
|
Hstring.compare s1 s2
|
|
| Tabstract _, _ -> -1 | _ , Tabstract _ -> 1
|
|
| Tsum (s1, _), Tsum(s2, _) ->
|
|
Hstring.compare s1 s2
|
|
| Tsum _, _ -> -1 | _ , Tsum _ -> 1
|
|
| t1, t2 -> Pervasives.compare t1 t2
|
|
|
|
let print fmt ty =
|
|
match ty with
|
|
| Tint -> fprintf fmt "int"
|
|
| Treal -> fprintf fmt "real"
|
|
| Tbool -> fprintf fmt "bool"
|
|
| Tabstract s -> fprintf fmt "%s" (Hstring.view s)
|
|
| Tsum (s, _) -> fprintf fmt "%s" (Hstring.view s)
|