Identity element: Difference between revisions
m (→Support: Domain for GCD identity element is not full) |
m (→Support: Identity of And should be 1 (was 0), Or should be 0 (was 1)) |
||
Line 47: | Line 47: | ||
| [[Root]] || <source lang=apl inline>√</source> || <source lang=apl inline>1</source> || {{Yes}} || {{No}} || | | [[Root]] || <source lang=apl inline>√</source> || <source lang=apl inline>1</source> || {{Yes}} || {{No}} || | ||
|- | |- | ||
| [[And]]/[[LCM]] || <source lang=apl inline>∧</source> || <source lang=apl inline> | | [[And]]/[[LCM]] || <source lang=apl inline>∧</source> || <source lang=apl inline>1</source> || {{Yes}} || {{Yes}} || | ||
|- | |- | ||
| [[Or]]/[[GCD]] || <source lang=apl inline>∨</source> || <source lang=apl inline> | | [[Or]]/[[GCD]] || <source lang=apl inline>∨</source> || <source lang=apl inline>0</source> || {{Yes}} || {{Yes}} || Non-negative reals only | ||
|- | |- | ||
| [[Less]] || <source lang=apl inline><</source> || <source lang=apl inline>0</source> || {{Yes}} || {{No}} || [[Boolean]]s only | | [[Less]] || <source lang=apl inline><</source> || <source lang=apl inline>0</source> || {{Yes}} || {{No}} || [[Boolean]]s only |
Revision as of 02:42, 2 June 2020
The identity element for a dyadic function is a value inherent to that function. It is defined as the value which would preserve the other argument of the dyadic function application, possibly only for a well-defined subset of the function's domain.
Left and right identities
Since the identity element preserves the other argument, it can be a left and/or a right identity. For example, Add (+
) has the left and right identity element 0
because N≡N+0
and N≡0+N
for all arrays N
in the domain of +
. However, the identity of Divide (÷
), 1
, is only a right identity because while N≡N÷1
is true for all N
in the domain of ÷
, this isn't so for N≡1÷N
, and no alternative identity element value exists which would fulfil the condition.
If a function f
has both a left identity element and a right identity element (call them l
and r
), then they must be the same. This is because l f r
r
, since l
is a left identity, and l f r
l
, since r
is a right identity, so l
r
.
Reduction over a length-0 axis
If a reduction (using one of /
, ⌿
, \
, or ⍀
) is performed over an axis of length 0, the resulting array is filled with identity elements. For example, the sum of an empty list is 0
, while the columnar sum of a two-column matrix with no rows is 0 0
:
+/0⍴0 0 +/0 2⍴0 0 0
Support
Dialects differ in their support for such reductions. All define identity elements for most scalar primitives, and some stop there (e.g. SAX), while others (e.g. Dyalog APL and APL2) define identity elements for various mixed functions.
The identity element value for each function is defined in terms of the prototype P
of the array Y
:
Function name | Glyph | Value | Left | Right | Notes |
---|---|---|---|---|---|
Add | + |
0 |
Yes | Yes | |
Subtract | - |
0 |
No | Yes | |
Multiply | × |
1 |
Yes | Yes | |
Divide | ÷ |
1 |
No | Yes | |
Residue | | |
0 |
Yes | No | |
Minimum | ⌊ |
∞ |
Yes | Yes | the maximum representable number |
Maximum | ⌈ |
-∞ |
Yes | Yes | the minimum representable number |
Power | * |
1 |
No | Yes | |
Circle function | ○ |
¯9 |
Yes | No | |
Binomial | ! |
1 |
Yes | No | |
Root | √ |
1 |
Yes | No | |
And/LCM | ∧ |
1 |
Yes | Yes | |
Or/GCD | ∨ |
0 |
Yes | Yes | Non-negative reals only |
Less | < |
0 |
Yes | No | Booleans only |
Less Or Equal | ≤ |
1 |
Yes | No | Booleans only |
Equal to | = |
1 |
Yes | Yes | Booleans only |
Greater Or Equal | ≥ |
1 |
No | Yes | Booleans only |
Greater | > |
0 |
No | Yes | Booleans only |
Not Equal | ≠ |
0 |
Yes | Yes | Booleans only |
Reshape | ⍴ |
⍴P |
Yes | No | |
Catenate | , |
P⍴⍨ρ∘⊂⍨0,⍨¯1↓ρP |
Yes | No | 1≤≢⍴Y
|
Rotate | ⌽ |
0 or 0⍴⍨¯1↓⍴P |
Yes | No | |
Rotate First | ⊖ |
0 or 0⍴⍨1↓⍴P |
Yes | No | |
Transpose | ⍉ |
⍳≢⍴P |
Yes | No | |
Pick | ⊃ |
⍬ |
Yes | No | |
Drop | ↓ |
⍬ or 0×⍴P |
Yes | No | |
Take | ↑ |
⍬ or ⍴P |
Yes | No | |
Squad Index | ⌷ |
⍬ or ⍳¨⍴P |
Yes | No | |
Without | ~ |
0⌿P |
No | Yes | 1≤≢⍴Y
|
Matrix Divide | ⌹ |
∘.=⍨⍳≢P |
No | Yes | |
Encode | ⊤ |
0 |
No | Yes | |
Union | ∪ |
0⌿P |
Yes | Yes | 1≤≢⍴Y
|
Replicate | / |
1 |
Yes | No | 1≤≢⍴Y
|
Expand | \ |
∘.=⍨⍳≢P |
Yes | No | 1≤≢⍴Y
|
Inner products | +.× ∨.∧ |
∘.=⍨⍳≢P |
Yes | Yes | |
Inner product | ∧.∨ |
∘.≠⍨⍳≢P |
Yes | Yes |
External links
Documentation
APL features [edit] | |
---|---|
Built-ins | Primitives (functions, operators) ∙ Quad name |
Array model | Shape ∙ Rank ∙ Depth ∙ Bound ∙ Index (Indexing) ∙ Axis ∙ Ravel ∙ Ravel order ∙ Element ∙ Scalar ∙ Vector ∙ Matrix ∙ Simple scalar ∙ Simple array ∙ Nested array ∙ Cell ∙ Major cell ∙ Subarray ∙ Empty array ∙ Prototype |
Data types | Number (Boolean, Complex number) ∙ Character (String) ∙ Box ∙ Namespace ∙ Function array |
Concepts and paradigms | Conformability (Scalar extension, Leading axis agreement) ∙ Scalar function (Pervasion) ∙ Identity element ∙ Complex floor ∙ Array ordering (Total) ∙ Tacit programming (Function composition, Close composition) ∙ Glyph ∙ Leading axis theory ∙ Major cell search ∙ First-class function |
Errors | LIMIT ERROR ∙ RANK ERROR ∙ SYNTAX ERROR ∙ DOMAIN ERROR ∙ LENGTH ERROR ∙ INDEX ERROR ∙ VALUE ERROR ∙ EVOLUTION ERROR |