Inductiveunary_op : Set :=
| OpIdentity : unary_op(* identity, returns its value *)
| OpNeg : unary_op(* boolean negation *)
| OpRec : string -> unary_op(* create a record with a single field *)
| OpDot : string -> unary_op(* record field access *)
| OpRecRemove : string -> unary_op(* record remove the given fields *)
| OpRecProject : liststring -> unary_op(* record projects on the given fields *)
| OpBag : unary_op(* create a singleton bag *)
| OpSingleton : unary_op(* value within a singleton bag *)
| OpFlatten : unary_op(* flattens a bag of bags *)
| OpDistinct: unary_op(* distinct values in a bag *)
| OpOrderBy : SortCriterias -> unary_op(* sorts a collection of records *)
| OpCount : unary_op(* bag count *)
| OpToString : unary_op(* convert any data to a string *)
| OpToText : unary_op(* unspecified conversion from any data to a string *)
| OpLength : unary_op(* the length of a string *)
| OpSubstring : Z -> optionZ -> unary_op(* returns the substring starting with the nth character, for m characters (or the rest of the string) *)
| OpLike (pattern:string) : unary_op(* like expression (as in sql) *)
| OpLeft : unary_op(* create a left value *)
| OpRight : unary_op(* create a right value *)
| OpBrand : brands -> unary_op(* brands a value *)
| OpUnbrand : unary_op(* content of a branded value *)
| OpCast : brands -> unary_op(* coerce a branded value into one of its sub-brands *)
| OpNatUnary : nat_arith_unary_op -> unary_op(* arithmetic operations on natural floats *)
| OpNatSum : unary_op(* sum of natural floats in a bag *)
| OpNatMin : unary_op(* minimum of natural floats in a bag *)
| OpNatMax : unary_op(* maximum of natural floats in a bag *)
| OpNatMean : unary_op(* arithmetic mean of natural floats in a bag *)
| OpFloatOfNat : unary_op(* coercion from natural float to float *)
| OpFloatUnary : float_arith_unary_op -> unary_op(* arithmetic operations on floats *)
| OpFloatTruncate : unary_op(* truncate *)
| OpFloatSum : unary_op(* sum *)
| OpFloatMean : unary_op(* arithmetic mean *)
| OpFloatBagMin : unary_op(* minimum *)
| OpFloatBagMax : unary_op(* maximum *)
| OpForeignUnary
(fu:foreign_operators_unary) : unary_op(* foreign unary operators *)
.