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