Nawias Iversona

Nawias Iversona – nazwany na cześć Kennetha E. Iversona matematyczny zapis uogólniający deltę Kroneckera. Odwzorowuje on dowolne wyrażenie na funkcję zmiennych w tym wyrażeniu. Funkcja ta przyjmuje wartość 1 dla wartości zmiennych, dla których wyrażenie jest prawdziwe, w przeciwnym razie przyjmuje wartość 0. Zwykle oznacza się to poprzez umieszczenie wyrażenia w nawiasach kwadratowych:

[ P ] = { 1 jeżeli  P  jest prawdziwe; 0 w innym przypadku. {\displaystyle [P]={\begin{cases}1&{\text{jeżeli }}P{\text{ jest prawdziwe;}}\\0&{\text{w innym przypadku.}}\end{cases}}}

Inaczej mówiąc, nawias Iversona dla danego stwierdzenia jest funkcją charakterystyczną zbioru wartości, dla których to stwierdzenie jest prawdziwe.

Nawias Iversona umożliwia stosowanie notacji sumowania (w wykorzystaniem symbolu Σ) bez ograniczeń dotyczących indeksu sumowania. Dla dowolnej własności P ( k ) {\displaystyle P(k)} liczby całkowitej k {\displaystyle k} , można przepisać ograniczoną sumę k : P ( k ) f ( k ) {\displaystyle \sum _{k:P(k)}f(k)} do postaci nieograniczonej k f ( k ) [ P ( k ) ] {\displaystyle \sum _{k}f(k)\cdot [P(k)]} . W ramach tej konwencji nie trzeba definiować f ( k ) {\displaystyle f(k)} dla wartości k, dla których nawias Iversona jest równy 0; składnik f ( k ) [ fałsz ] {\displaystyle f(k)\cdot [{\bf {{\text{fałsz}}]}}} musi wynosić 0 niezależnie od tego, czy f ( k ) {\displaystyle f(k)} jest określone czy nie[1].

Notacja została pierwotnie wprowadzona przez Kennetha E. Iversona w stworzonym przez niego języku programowania APL[2][1]. Pierwotnie była ograniczona do pojedynczych operatorów relacyjnych umieszczonych w nawiasach. Donald Knuth zaproponował uogólnienie na dowolne stwierdzenia, zastosowanie nawiasów kwadratowych i wykorzystanie do sumowania, jako sposób na uniknięcie dwuznaczności wyrażeń logicznych umieszczonych w nawiasach[3].

Własności

Istnieje bezpośrednia zgodność pomiędzy arytmetyką wykorzystującą nawiasy Iversona, logiką i operacjami na zbiorach. Na przykład, niech A i B będą zbiorami, a P ( k 1 , ) {\displaystyle P(k_{1},\dots )} dowolną właściwością liczb całkowitych. Mamy wtedy: [ P Q ]   =   [ P ] [ Q ]     ; [ P Q ]   =   [ P ] + [ Q ] [ P ] [ Q ]     ; [ ¬ P ]   =   1 [ P ]     ; [ P  XOR  Q ]   =   | [ P ] [ Q ] |     ; [ k A ] + [ k B ]   =   [ k A B ] + [ k A B ]     ; [ x A B ]   =   [ x A ] [ x B ]     ; [ m   : P ( k , m ) ]   =   m [ P ( k , m ) ]     ; [ m   : P ( k , m ) ]   =   min { 1 , m [ P ( k , m ) ] } = 1 m [ ¬ P ( k , m ) ]     ; # { m | P ( k , m ) }   =   m [ P ( k , m ) ]     . {\displaystyle {\begin{aligned}[][\,P\land Q\,]~&=~[\,P\,]\,[\,Q\,]~~;\\[1em][\,P\lor Q\,]~&=~[\,P\,]\;+\;[\,Q\,]\;-\;[\,P\,]\,[\,Q\,]~~;\\[1em][\,\neg \,P\,]~&=~1-[\,P\,]~~;\\[1em][\,P{\scriptstyle {\mathsf {\text{ XOR }}}}Q\,]~&=~{\Bigl |}\,[\,P\,]\;-\;[\,Q\,]\,{\Bigr |}~~;\\[1em][\,k\in A\,]\;+\;[\,k\in B\,]~&=~[\,k\in A\cup B\,]\;+\;[\,k\in A\cap B\,]~~;\\[1em][\,x\in A\cap B\,]~&=~[\,x\in A\,]\,[\,x\in B\,]~~;\\[1em][\,\forall \,m\ :\,P(k,m)\,]~&=~\prod _{m}\,[\,P(k,m)\,]~~;\\[1em][\,\exists \,m\ :\,P(k,m)\,]~&=~\min {\Bigl \{}\;1\,,\,\sum _{m}\,[\,P(k,m)\,]\;{\Bigr \}}=1\;-\;\prod _{m}\,[\,\neg \,P(k,m)\,]~~;\\[1em]\#{\Bigl \{}\;m\,{\Big |}\,P(k,m)\;{\Bigr \}}~&=~\sum _{m}\,[\,P(k,m)\,]~~.\end{aligned}}}

Przykłady

Notacja umożliwia zapis ograniczeń zakresu sum (lub całek) w postaci osobnego składnika sumy, co zwalnia miejsce przy operatorze sumowania, a także, co ważniejsze, zwiększa elastyczność poprzez dopuszczenie szeregu przekształceń algebraicznych.

Zasada podwójnego zliczania

Mechanicznie wyprowadzamy dobrze znaną regułę dla sumy za pomocą nawiasów Iversona: k A f ( k ) + k B f ( k ) = k f ( k ) [ k A ] + k f ( k ) [ k B ] = k f ( k ) ( [ k A ] + [ k B ] ) = k f ( k ) ( [ k A B ] + [ k A B ] ) = k A B f ( k )   + k A B f ( k ) . {\displaystyle {\begin{aligned}\sum _{k\in A}f(k)+\sum _{k\in B}f(k)&=\sum _{k}f(k)\,[k\in A]+\sum _{k}f(k)\,[k\in B]\\&=\sum _{k}f(k)\,([k\in A]+[k\in B])\\&=\sum _{k}f(k)\,([k\in A\cup B]+[k\in A\cap B])\\&=\sum _{k\in A\cup B}f(k)\ +\sum _{k\in A\cap B}f(k).\end{aligned}}}

Wymiana indeksów w podsumowaniach

Znaną regułę j = 1 n k = 1 j f ( j , k ) = k = 1 n j = k n f ( j , k ) {\textstyle \sum _{j=1}^{n}\sum _{k=1}^{j}f(j,k)=\sum _{k=1}^{n}\sum _{j=k}^{n}f(j,k)} jest również łatwo wyprowadzić: j = 1 n k = 1 j f ( j , k ) = j , k f ( j , k ) [ 1 j n ] [ 1 k j ] = j , k f ( j , k ) [ 1 k j n ] = j , k f ( j , k ) [ 1 k n ] [ k j n ] = k = 1 n j = k n f ( j , k ) . {\displaystyle {\begin{aligned}\sum _{j=1}^{n}\,\sum _{k=1}^{j}f(j,k)&=\sum _{j,k}f(j,k)\,[1\leq j\leq n]\,[1\leq k\leq j]\\&=\sum _{j,k}f(j,k)\,[1\leq k\leq j\leq n]\\&=\sum _{j,k}f(j,k)\,[1\leq k\leq n]\,[k\leq j\leq n]\\&=\sum _{k=1}^{n}\,\sum _{j=k}^{n}f(j,k).\end{aligned}}}

Zliczenia

Funkcję tocjent Eulera φ ( n ) {\displaystyle \varphi (n)} , która zlicza liczbę dodatnich liczb całkowitych mniejszych niż n, które są względnie pierwsze z n, można wyrazić wzorem: φ ( n ) = i = 1 n [ nwd ( i , n ) = 1 ] , dla  n N + . {\displaystyle \varphi (n)=\sum _{i=1}^{n}[{\text{nwd}}(i,n)=1],\qquad {\text{dla }}n\in \mathbb {N} ^{+}.}

Uproszczenie przypadków specjalnych

Innym zastosowaniem nawiasu Iversona jest uproszczenie równań mających specjalne przypadki. Na przykład wzór 1 k n nwd ( k , n ) = 1 k = 1 2 n φ ( n ) {\displaystyle \sum _{1\leq k\leq n \atop {\text{nwd}}(k,n)=1}\!\!k={\frac {1}{2}}n\varphi (n)} obowiązuje dla n > 1 {\displaystyle n>1} , ale dla n = 1 {\displaystyle n=1} myli się o 1 2 {\displaystyle {\frac {1}{2}}} . Aby uzyskać tożsamość obowiązującą dla wszystkich dodatnich liczb całkowitych n (tj. wszystkich wartości, dla których φ ( n ) {\displaystyle \varphi (n)} jest zdefiniowana), można dodać składnik korygujący wykorzystujący nawias Iversona: 1 k n nwd ( k , n ) = 1 k = 1 2 n ( φ ( n ) + [ n = 1 ] ) {\displaystyle \sum _{1\leq k\leq n \atop {\text{nwd}}(k,n)=1}\!\!k={\frac {1}{2}}n{\Big (}\varphi (n)+[n=1]{\Big )}}

Popularne funkcje

Delta Kroneckera jest szczególnym przypadkiem nawiasu Iversona: δ i j = [ i = j ] . {\displaystyle \delta _{ij}=[i=j].} Funkcja charakterystyczna zbioru, oznaczana symbolami 1 A ( x ) {\displaystyle \mathbf {1} _{A}(x)} , I A ( x ) {\displaystyle \mathbf {I} _{A}(x)} lub χ A ( x ) {\displaystyle \chi _{A}(x)} , jest nawiasem Iversona, którego argumentem jest przynależność do zbioru: I A ( x ) = [ x A ] . {\displaystyle \mathbf {I} _{A}(x)=[x\in A].} Funkcję skokową Heaviside'a, funkcję signum[2] i wartość bezwzględną są również łatwo wyrazić za pomocą tej notacji: H ( x ) = [ x > 0 ] , sgn ( x ) = [ x > 0 ] [ x < 0 ] , {\displaystyle {\begin{aligned}H(x)&=[x>0],\\{\text{sgn}}(x)&=[x>0]-[x<0],\end{aligned}}} i | x | = x [ x > 0 ] x [ x < 0 ] = x ( [ x > 0 ] [ x < 0 ] ) = x sgn ( x ) . {\displaystyle {\begin{aligned}|x|&=x[x>0]-x[x<0]\\&=x([x>0]-[x<0])\\&=x\cdot {\text{sgn}}(x).\end{aligned}}} Funkcje porównawcze max i min (zwracające większy lub mniejszy z dwóch argumentów) można zapisać jako max ( x , y ) = x [ x > y ] + y [ x y ] {\displaystyle {\text{max}}(x,y)=x[x>y]+y[x\leq y]} i min ( x , y ) = x [ x y ] + y [ x > y ] . {\displaystyle {\text{min}}(x,y)=x[x\leq y]+y[x>y].} Funkcje podłoga i sufit można wyrazić jako x = n n [ n x < n + 1 ] {\displaystyle \lfloor x\rfloor =\sum _{n}n\cdot [n\leq x<n+1]} i x = n n [ n 1 < x n ] , {\displaystyle \lceil x\rceil =\sum _{n}n\cdot [n-1<x\leq n],} gdzie indeks n {\displaystyle n} przechodzi przez wszystkie liczby całkowite.

Trichotomia liczb rzeczywistych jest równoważna następującej tożsamości: [ a < b ] + [ a = b ] + [ a > b ] = 1. {\displaystyle [a<b]+[a=b]+[a>b]=1.} Funkcja Möbiusa ma następującą właściwość (która może posłużyć jako jej definicja rekurencyjna[4]) d | n μ ( d )   =   [ n = 1 ] . {\displaystyle \sum _{d|n}\mu (d)\ =\ [n=1].}

Sformułowanie w kategoriach zwykłych funkcji

W latach trzydziestych XIX wieku Guglielmo dalla Sommaja używał wyrażenia 0 0 x {\displaystyle 0^{0^{x}}} , aby przedstawić [ x > 0 ] {\displaystyle [x>0]} ; stosował także warianty tego zapisu, na przykład ( 1 0 0 x ) ( 1 0 0 x a ) {\displaystyle \left(1-0^{0^{-x}}\right)\left(1-0^{0^{x-a}}\right)} dla [ 0 x a ] {\displaystyle [0\leq x\leq a]} [3]. Zgodnie z jedną z konwencji, wyrażenie 0 0 x {\displaystyle 0^{0^{x}}} jest równe 1 dla x > 0, 0 dla x = 0, w pozostałych przypadkach jest niezdefiniowane.

Różnice notacyjne

Oprócz standardowych obecnie nawiasów kwadratowych [ · ] i stosowanych początkowo zwykłych nawiasów ( · ), stosowano także pogrubione nawiasy tablicowe, tzn. ⟦ · ⟧, a także inne nietypowe kroje nawiasów wraz z odpowiednim wyjaśnieniem.

Zobacz też

  • Funkcja logiczna
  • Konwersja typów w programowaniu komputerowym: wiele języków umożliwia używanie wielkości liczbowych lub wskaźników jako wielkości logicznych.
  • Funkcja wskaźnikowa

Przypisy

  1. a b Ronald L.R.L. Graham Ronald L.R.L., Donald ErvinD.E. Knuth Donald ErvinD.E., OrenO. Patashnik OrenO., Matematyka konkretna, Warszawa: Wydaw. Naukowe PWN, 1996, rozdział 2.1, ISBN 978-83-01-12124-2 [dostęp 2024-06-04] .
  2. a b A Programming Language [online], www.jsoftware.com [dostęp 2024-06-04] .
  3. a b Donald E.D.E. Knuth Donald E.D.E., Two notes on notation, [w:] arXiv, 1992, DOI: 10.48550/ARXIV.MATH/9205211, arXiv:math/9205211 .
  4. Ronald L.R.L. Graham Ronald L.R.L., Donald ErvinD.E. Knuth Donald ErvinD.E., OrenO. Patashnik OrenO., Matematyka konkretna, Warszawa: Wydaw. Naukowe PWN, 1996, rozdział 4.9, ISBN 978-83-01-12124-2 [dostęp 2024-06-04]  (pol.).