let report fmt = function | UnknownConstr e -> fprintf fmt "unknown constructor %a" Hstring.print e | DuplicateAssign s -> fprintf fmt "duplicate assignment for %a" Hstring.print s | DuplicateName e -> fprintf fmt "duplicate name for %a" Hstring.print e | DuplicateUpdate s -> fprintf fmt "duplicate array update for %a (You may want to use a case construct)" Hstring.print s | UnknownVar x -> fprintf fmt "unknown variable %a" Hstring.print x | UnknownArray a -> fprintf fmt "unknown array %a" Hstring.print a | UnknownName s -> fprintf fmt "unknown name %a" Hstring.print s | UnknownGlobal s -> fprintf fmt "unknown global %a" Hstring.print s | DuplicateInit a -> fprintf fmt "duplicate initialization for %a" Hstring.print a | NoMoreThanOneArray -> fprintf fmt "sorry, no more than one array" | ClashParam x -> fprintf fmt "%a already used as a transition's parameter" Hstring.print x | MustBeAnArray s -> fprintf fmt "%a must have an array type" Hstring.print s | MustBeOfType (s, ty) -> fprintf fmt "%a must be of type %a" Hstring.print s Hstring.print ty | MustBeNum s -> fprintf fmt "%a must be of type int or real" Term.print s | MustBeOfTypeProc s -> fprintf fmt "%a must be of proc" Hstring.print s | IncompatibleType (args1, ty1, args2, ty2) -> fprintf fmt "types %a and %a are not compatible" print_htype (args1, ty1) print_htype (args2, ty2) | NotATerm s -> fprintf fmt "%a is not a term" Hstring.print s | WrongNbArgs (a, nb) -> fprintf fmt "%a must have %d arguments" Hstring.print a nb | Smt (Smt.DuplicateTypeName s) -> fprintf fmt "duplicate type name for %a" Hstring.print s | Smt (Smt.DuplicateSymb e) -> fprintf fmt "duplicate name for %a" Hstring.print e | Smt (Smt.UnknownType s) -> fprintf fmt "unknown type %a" Hstring.print s | Smt (Smt.UnknownSymb s) -> fprintf fmt "unknown symbol %a" Hstring.print s