manual:chapter3:symbolic

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
manual:chapter3:symbolic [2021/03/22 13:12]
claudio
manual:chapter3:symbolic [2021/03/22 13:52] (current)
claudio [Using rules and attributes, examples]
Line 79: Line 79:
   * Optional two characters indicating a subset of the field (positive only, negative only, non-zero, etc.)   * Optional two characters indicating a subset of the field (positive only, negative only, non-zero, etc.)
  
-^ First digit 't' (type): ||+^ First one or two characters (type): ||
 ^ Value ^ Meaning ^ ^ Value ^ Meaning ^
-| * ((Will be automatically removed)) | Nothing is known about this variable | +''*'' ((Will be automatically removed)) | Nothing is known about this variable | 
-| R∞ | Variable is known to be real, may be infinity/NaN +''R∞'' | Variable is known to be real, may be infinite 
-| R | Variable is known to be real (and finite) | +''R'' | Variable is known to be real (and finite) | 
-| Z | Variable is known to be integer (and finite) | +''Z'' | Variable is known to be integer (and finite) | 
-| Z∞ | Variable is known to be integer, may be infinity/NaN +''Z∞'' | Variable is known to be integer, may be infinite 
-| O | Variable is known to be integer and odd (and finite) | +''O'' | Variable is known to be integer and odd (and finite) | 
-| E | Variable is known to be integer and even (and finite) | +''E'' | Variable is known to be integer and even (and finite) | 
-| C∞ | Variable is known to be complex, may be infinity/NaN +''C∞'' | Variable is known to be complex, may be infinite 
-| C | Variable is known to be complex (and finite) | +''C'' | Variable is known to be complex (and finite) | 
-| M | Variable is known to be a matrix | +''M'' | Variable is known to be a matrix | 
-| ? ((Internal use only)) | Variable is known to be of unknown type |+''?'' ((Internal use only)) | Variable is known to be of unknown type |
  
 +Notice that some combinations above are not valid, for example ''E∞'' is not valid since infinity cannot be odd or even. Also a matrix cannot be infinite.
  
-==== Obsolete section - soon to be removed ==== +Optional subset: ||
- +
-To add attributes to a variable, simply add a combination of subscript numbers after the variable name. For example, if ''A'' is a real number known not to be zero, simply write ''A₂₁'' in the expression (the exact meaning of the numbers will be explained in the next section). +
- +
-Notice that these attributes are only visible when editing the expression. Once the expression is in the stack, only the name of the variable will be visible, as the subscript numbers don't become part of the name of the variable. Ideally, the user should provide the same attributes to the same variables all throughout the expression (otherwise the system will think the variable represents different things in different parts of the same expression). +
- +
-Attributes are also useful within rules. If a variable (or wildcard special variable) has any attributes given within a rule definition, it will only match variables (or expressions) that have compatible attributes. For example a rule to cancel out factors in an expression could be: ''%%'%%.xX/.xX:->1%%'%%''. But this is not correct if the expression being canceled may be zero. Using attributes, we can write ''%%'%%.xX₂₁/.xX₂₁:->1%%'%%'' and now it will only match expressions that are known to be real and are known not to be zero. +
- +
-=== Default attributes === +
- +
-Variables that aren't given any attributes are by default assumed to be real if complex mode is disabled, and complex if complex mode is enabled. No other assumptions are made about their value (could be in any range, could be zero or infinite, etc.). +
- +
-=== Encoding of attributes === +
- +
-Attributes can be any number of up to 8 decimal digits. The value of zero is reserved for 'no attributes' and will be automatically removed from the variables. The newRPL algebraic engine uses only 3 digits (other digits may or may not be used in the future). +
- +
-The first 3 digits will be referred to as 't' (for type), 's' (sign) and 'p' (parity) from now on. They go after a variable in 'tsp' order, and trailing zeros can be omitted. +
- +
-The first digit provides hints about the type of variable: +
-First digit 't' (type): ||+
 ^ Value ^ Meaning ^ ^ Value ^ Meaning ^
-| 0 ((Will be automatically removed)) Nothing is known about this variable | +''0'' Value is known not to be zero ((This is valid for real AND complex numbers)) 
-| 1 | Variable known to be finite (cannot be infinity or NaN) | +''≥0'' Value is known not to be negative (therefore it's >=0) | 
-| 2 | Variable is known to be real, may be infinity/NaN +''>0'' Value is known not to be negative and not to be zero (therefore it's >0) 
-Variable is known to be real (and finite) | +''≤0'' Value is known not to be positive (therefore it's ≤0) | 
-Variable is known to be complex, may be infinity/NaN +''<0'' Value is known not to be positive and not to be zero (therefore it's <0) |
-Variable is known to be complex (and finite) | +
-Variable is known to be a matrix | +
-| 8 ((Internal use only)) | Variable is known to be of unknown type |+
  
-The second digit provides insight about the sign and range of values. It is meaningful only for real numbers (except for the zero hint)other types don't need or use this digit.+The subsets above are only applicable to real numbers and integers, with the exception of ''≠0'' which also applies to complex numbers. Other types cannot have subsets (for examplecannot define what's a positive complex, or a negative matrix).
  
-^ Second digit 's' (sign): || +==== Using rules and attributes, examples ====
-^ Value ^ Meaning ^ +
-| 0 ((Will be removed/omitted)) | Nothing is known about the sign or range of this value | +
-| 1 | Value is known not to be zero ((This is valid for real AND complex numbers)) | +
-| 2 | Value is known not to be < 0 (therefore it's >=0) | +
-| 3 | Value is known not to be < 0 and not to be zero (therefore it's >0) | +
-| 4 | Value is known not to be > 0 (therefore it's %%<=%%0) | +
-| 5 | Value is known not to be > 0 and not to be zero (therefore it's <0) |+
  
-The third digit provides insight about the parity of the number, and whether real is an integer or not. Much like the 's' digit, this is only meaningful for real values.+Here are few examples where using attributes is useful to decide whether to apply a rule or not.
  
-Third digit 'p' (parity): || +Rule ^ Effect ^ 
-^ Value ^ Meaning ^ +| ''%%'%%ABS(.xX:R∞≥0:):->.xX:R∞≥0:%%'%%'' Simplify absolute value of an expression that is known to be real ≥0 
-((Will be removed/omitted)) Nothing is known regarding parity of this value | +''%%'%%ABS(.xX:R∞<0:):->-.xX:R∞<0:%%'%%'' Simplify absolute value of an expression that is known to be real <0 |
-| 1 | Value if known to be an integer | +
-| 2 | Value is known to be odd +
-Value is known to be an odd integer | +
-| 4 | Value is known to be even | +
-| 5 | Value is known to be an even integer |+
  
- +The above rules, for example, it can be applied to expressions with different attributes in its variables giving different results:
-==== Using rules and attributesexamples ==== +
- +
-^ Rule ^ Effect ^ +
-| ''%%'%%ABS(.xX₂₂):->.xX%%'%%'' | Simplify absolute value of an expression that is known to be real >=0 |+
  
 ^ Test cases ^ Result ^ Explanation ^ ^ Test cases ^ Result ^ Explanation ^
-| ''Y*ABS(X₂₃)'' | ''Y*X₂₃'' | The expression matches because ''X'' is known to be a real >0 | +| ''Y*ABS(X)'' | ''Y*ABS(X)'' | No rules are applied because X doesn't fit within the subsets defined in the rules | 
-| ''Y*ABS(-4)'' | ''Y*ABS(-4)'' | The expression doesn't match because ''-4'' is known to be a real <0 | +| ''Y*ABS(X:R>0:)'' | ''Y*X'' | The expression matches the first rule because ''X'' is known to be a real >0 | 
-| ''Y*ABS(X₂₃+1)'' | ''Y*(X₂₃+1)'' | The expression matches because ''X+1'' is known to be a real >0 | +| ''Y*ABS(-4)'' | ''Y*(-(-4))'' | The expression matches the second rule because ''-4'' is known to be a real <0 | 
-| ''Y*ABS(X₂₃-1)'' | ''Y*ABS(X₂₃-1)'' | The expression doesn't match because ''X-1'' could be <0 for 0<x<1 | +| ''Y*ABS(X:R>0:+1)'' | ''Y*(X+1)'' | The expression matches the first rule because ''X+1'' is known to be a real >0 | 
-| ''Y*ABS%%((X₂₃-1)%%^2)'' | ''Y*(X₂₃-1)^2'' | The expression matches because ''(X-1)^2'' is known to be >=0 |+| ''Y*ABS(X:R>0:-1)'' | ''Y*ABS(X-1)'' | The expression doesn't match either rule because ''X-1'' could be <0 for 0<x<1 | 
 +| ''Y*ABS%%((X:R>0:-1)%%^2)'' | ''Y*(X-1)^2'' | The expression matches because ''(X-1)^2'' is known to be >=0 
 +| ''Y*ABS%%((X-1)%%^2)'' | ''Y*(X-1)^2'' | The expression matches because ''(X-1)^2'' is known to be >=0 regardless of X |
  
  
  • manual/chapter3/symbolic.1616443957.txt.gz
  • Last modified: 2021/03/22 13:12
  • by claudio