| | 246 | * `round(e,t)`: returns value in numerical type `t` that is "closest" to the given value `e` |
| | 247 | * add argument for rounding mode? |
| | 248 | * exception if out of range? |
| | 249 | * `floor(e)` : given a real or floating number, returns the greatest `Integer` less than or equal to it. |
| | 250 | * `ceil(e)` : given a real or floating number, returns the least `Integer` greater than or equal to it. |
| | 251 | * `abs(e)`: given any numeric expression e, returns the absolute value; result is same type as `e`. |
| | 252 | * `pow(e,n)`: power operator |
| | 253 | * given any numeric expression e and expression `n` of any integral type, returns e to the n-th power. |
| | 254 | * `n` must evaluate to a nonnegative integer. |
| | 255 | * `herbrand(e)`: "Herbrandize" a numeric value. |
| | 256 | * given a numeric value of type `T`, returns the value as type `Herbrand[T]`, a trivial symbolic expression consisting of a single node. |
| | 257 | * `eval(e)` : evaluate a Herbrand expression |
| | 258 | * given a value of type `Herbrand[T]`, returns the value of type `T` obtained by evaluating all the delayed operations |
| | 259 | * exceptions may be thrown if evaluating any of the delayed operations results in an exception |
| | 260 | |
| | 261 | |
| | 262 | |
| | 269 | * `mem_reach(ptr)`, where `ptr` is an expression with a pointer type. |
| | 270 | * This represents the set of all memory units reachable from `ptr`, including the memory unit pointed to by `ptr` itself. |
| | 271 | * `mem_union(mem1,mem2)`, where `mem1` and `mem2` are expressions of type `Mem`. |
| | 272 | * This is the union of the two memory sets. |
| | 273 | * `mem_isect(mem1,mem1)` : set intersection |
| | 274 | * `mem_comp(mem1)` : set complement (everything not in `mem1`) |
| | 275 | * `mem_slice(a,dom)` |
| | 276 | * where `a` is an expression of array type and `dom` is an expression of `Domain` type. |
| | 277 | * The dimension of the array must match the dimension of the domain. This represents all memory units which are the cells in the array indexed by a tuple in `dom`. |
| | 278 | |
| | 281 | Should these be language primitives or library functions (or does it matter)? |
| | 282 | |
| | 283 | * need concrete sequence |
| | 284 | * `seq_add(a,e)` : array obtained by adding element e to the end of the array. Original array a is not modified. |
| | 285 | * `seq_append(a1,a2)` : array obtained by concatenating two arrays. Original array not modified. |
| | 286 | * `seq_remove(a,i)` : array obtained by removing element at position i from a. Original array a not modified. |
| | 287 | * `seq_insert(a,i,x)` : array obtained by inserting an element x at position i in a. |
| | 288 | * `seq_length(a)` : returns length of array a (an `Integer`) |
| | 289 | |