Dependence table with all properties of an expression
This functionality does not run in MATLAB.
property::depends(...) returns a table which
contains all information about the properties of the whole input.
This table can be used to determine any change of the properties of
The returned table is mainly used inside the MuPAD® library, to ensure the validity of remembered results of the remember mechanism.
A MuPAD expression can have different properties at different times, without changing its value.
Note: The kernel remember mechanism cannot determine the change of the properties and returns wrong results, when the result depends on the properties of the input.
In this case the extended remember mechanism provided by
be used together with
A compare of the dependence table at different times detects changes of the properties of an expression.
The first call to the defined function
DEPENDS that keeps the dependence information:
DEPENDS := table(): has_changed := proc(ex) begin if not contains(DEPENDS, ex) or property::depends(ex) <> DEPENDS[ex] then DEPENDS[ex] := property::depends(ex); TRUE else FALSE end_if end_proc: has_changed(sin(x*PI)):
The properties has not changed:
Every change is detected:
assume(x, Type::Integer): has_changed(sin(x*PI))
assume(x, Type::PosInt): has_changed(sin(x*PI))
assume(x >= 0): has_changed(sin(x*PI))
delete DEPENDS, has_changed:
The next example shows the problems with the kernel remember mechanism:
pos := proc(x) option remember; begin is(x > 0) end: pos(x)
UNKNOWN was stored for the input
is returned, although the properties of
x are changed:
assume(x > 0): pos(x); assume(x < 0): pos(x)
This problem can only be solved by the extended remember mechanism together
is less than zero):
pos := proc(x) begin is(x > 0) end: pos := prog::remember(pos, property::depends): pos(x)
After changing the properties of the input, the defined function recomputes the result:
assume(x > 0): pos(x); unassume(x): pos(x)
Any MuPAD expression
Table that can be compared with another dependence table