Commutator: Difference between revisions
(Created page with "<table border="1" cellpadding="5" cellspacing="0" rules="none" summary=""> <tr> <td> <table border="0" cellpadding="5" cellspacing="0" summary=""> <tr> <td valign="top"><apll>Z←{L} <i>f</i>⍫<i>g</i> R</apll></td> <td></td> <td></td> <td>applies the function <apll><i>g</i></apll> then <apll><i>f</i></apll> then <apll><i>g</i>⍣¯1</apll> and then <apll><i>f</i>⍣¯1</apll> to or between the arguments.</td> </tr> </table> <...") |
No edit summary |
||
Line 25: | Line 25: | ||
</tr> | </tr> | ||
</table> | </table> | ||
==Notation== | |||
The symbol chosen for this operator is the Del overstruck with Tilde (<apl>⍫</apl>), entered from the keyboard as Alt-’K’ or Alt-Shift-'k' (U+236B). | |||
==Introduction== | ==Introduction== | ||
Line 35: | Line 39: | ||
P←1 0 0 1 0 1 0 0 0 | P←1 0 0 1 0 1 0 0 0 | ||
R←1 2 3 4 5 6 7 8 9 | R←1 2 3 4 5 6 7 8 9 | ||
+\R-P\¯2-\P/+\¯1↓0,R | +\R- P\ ¯2-\ P/ +\ ¯1↓0,R | ||
1 3 6 4 9 6 13 21 30 | 1 3 6 4 9 6 13 21 30 | ||
</pre></apll> | </pre></apll> | ||
Line 43: | Line 47: | ||
<apll>f<sup>-1</sup> g<sup>-1</sup> f g</apll> | <apll>f<sup>-1</sup> g<sup>-1</sup> f g</apll> | ||
<p>where <apll> | <p>where <apll>f⍣¯1 ←→ P∘\</apll> <apll>g⍣¯1 ←→ ¯2∘(-\)</apll> <apll>f ←→ P∘/</apll> <apll>g ←→ +\</apll></p> | ||
<p>which can be re-written as</p> | <p>which can be re-written as</p> | ||
<apll>+\R-P∘/⍫(+\)¯1↓0,R</apll> | <apll><pre> +\R- P∘/⍫(+\) ¯1↓0,R | ||
1 3 6 4 9 6 13 21 30 | |||
</pre></apll> | |||
<p>For more information about inverses, see the [[Power#Inverses|Power Operator]]. | |||
==Implementation== | ==Implementation== |
Latest revision as of 10:57, 9 February 2024
|
||||
L is an optional array. | ||||
R is an array. | ||||
f is an arbitrary ambivalent function with an inverse. | ||||
g is an arbitrary monadic function with an inverse. |
Notation
The symbol chosen for this operator is the Del overstruck with Tilde (⍫), entered from the keyboard as Alt-’K’ or Alt-Shift-'k' (U+236B).
Introduction
The concept of the Commutator operator is taken from mathematical Group Theory from the 1830s.
For example, the algorithm for Partitioned Plus Scan where P is the Boolean partition vector (always with a leading 1), in modern notation looks like this:
P←1 0 0 1 0 1 0 0 0 R←1 2 3 4 5 6 7 8 9 +\R- P\ ¯2-\ P/ +\ ¯1↓0,R 1 3 6 4 9 6 13 21 30
An interesting observation on this one-liner is that it contains two interleaved pairs of inverses: P\ and P/ as one and ¯2-\ and +\ as the other. This interleaving of inverses exactly matches the template for the Commutator Operator:
f-1 g-1 f g
where f⍣¯1 ←→ P∘\ g⍣¯1 ←→ ¯2∘(-\) f ←→ P∘/ g ←→ +\
which can be re-written as
+\R- P∘/⍫(+\) ¯1↓0,R 1 3 6 4 9 6 13 21 30
For more information about inverses, see the Power Operator.
Implementation
This operator is implemented via the anonymous function:
{⍺←⍣0 ⋄ (⍵⍵ ⍺) ⍺⍺⍣¯1 ⍵⍵⍣¯1 (⍵⍵ ⍺) ⍺⍺ ⍵⍵ ⍵}