Sunday, March 27, 2011

Losowe kombinacje - optymalny hashswap.pl

Tym razem podam algorytm optymalny, klasyczny (nie mój! - mój jest tylko kod). Jest w zasadzie maksymalnie szybki, i minimalnie obciąża pamięć (modulo trywialności). Oto kod:


#!/usr/bin/perl
#
# hashswap.pl

print "\n\nThis program selects a random combination\n";
print "\tof k elements out of 1..n.\n\n";
print "Enter max ==> ";
chomp($n=<>); $m=$n+1;
print "Enter the combination size ==> ";
chomp($k=<>);
print "\n\n";

$start = times();
use integer;

for (1..$k)
{ $v = $_ + int(rand($m-$_));
if(!($w=$h{$v})) { $w = $v }
if(!($s=$h{$_})) { $s = $_ }
$h{$_}=$w; $h{$v}=$s ### swap
}
no integer;
$endT = times();
use integer;

for (1..$k) { print " $h{$_}" }

no integer;

print "\n\n\tcomputation time: ", $endT-$start, "\n\n";

# Koniec programu




Algorytm zawiera się głównie w pierwszej pętli, której tekst składa się w sumie z 6 linijek. Gdy chce ktoś mierzyć czas dla wielkich parametrów, to linijki pomiędzy instrukcją:

        $endT = times();

oraz instrukcją print, może usunąć (lub zakomentować).




A teraz podam ten sam program, tyle że swap będzie dokonany w stylu wczesnego minikomputera PDP:


#!/usr/bin/perl
#
# pdpswap.pl

print "\n\nThis program selects a random combination\n";
print "\tof k elements out of 1..n.\n\n";
print "Enter max ==> ";
chomp($n=<>); $m=$n+1;
print "Enter the combination size ==> ";
chomp($k=<>);
print "\n\n";

$start = times();
use integer;

for (1..$k)
{ $v = $_ + int(rand($m-$_));
if(!$h{$_}) { $h{$_} = $_ }
if($v != $_)
{ if(!$h{$v}) { $h{$v} = $v }
$h{$v} ^= $h{$_} ^= $h{$v} ^= $h{$_} ### swap
} }

no integer;
$endT = times();
use integer;

for (1..$k) { print " $h{$_}" }

no integer;

print "\n\n\tcomputation time: ", $endT-$start, "\n\n";

# Koniec programu

Losowe kombinacje (w perlu)

@Przemysławie: moja kobyłka u płotu. Sam zastawiłem na siebie tę pułapkę napisania nieoptymalnego algorytmu. Stosuję w nim linked list dla reprezentacji wybranej losowo kombinacji. Podaję ją uporządkowaną. Wierzę, że w perlu ten algorytm nie zżera pamięci; gorzej byłoby w innych językach.

Algorytm (a), o którym wspomniał @Dziki Wezyr, jest lepszy, chyba optymalny. Oba losują kolejne elementy kombinacji bez zwracania.

Podaję poniżej program w perlu. Nie ma żadnych dodatków, jest w tym sensie minimalny. Można go wpakować w pętlę, dodać mu liczniki i pomiary czasu, itd.




#!/usr/bin/perl
#
# A non-optimal program.

use integer;

print "\n\nThis program selects a random combination\n";
print "\tof k elements out of 1..n.\n\n";
print "Enter max ==> ";
chomp($n=<>);
print "Enter the combination size ==> ";
chomp($k=<>);
print "\n\n";

$nxt[0] = $n+1;

for (0..$k-1)
{ $a = int(rand($n-$_));
$b=0;
while ($a >= $b)
{ $b = $nxt[$last = $b];
++$a;
}
$nxt[$last] = $a;
$nxt[$a] = $b
}

while(($a=$nxt[$c]) != $n+1)
{ print " $a";
$c=$a
}

print "\n\n"








Dla wygody sportowców (:-) uzupełnię kod o pomiar czasu liczenia kombinacji (bez brania pod uwagę czasu inputu użytkownika oraz drukowania wyniku). Oto program z zegarkiem:




#!/usr/bin/perl
#
# A non-optimal program.


print "\n\nThis program selects a random combination\n";
print "\tof k elements out of 1..n.\n\n";
print "Enter max ==> ";
chomp($n=<>);
print "Enter the combination size ==> ";
chomp($k=<>);
print "\n\n";

$start = times();
use integer;

$nxt[0] = $n+1;

for (0..$k-1)
{ $a = int(rand($n-$_));
$b=0;
while ($a >= $b)
{ $b = $nxt[$last = $b];
++$a;
}
$nxt[$last] = $a;
$nxt[$a] = $b
}

no integer;
$endT = times();
use integer;

while(($a=$nxt[$c]) != $n+1)
{ print " $a";
$c=$a
}

no integer;

print "\n\n\tcomputation time: ", $endT-$start, "\n\n";

Saturday, March 26, 2011

Test Greasemonkey TeX

Czy jeszcze cos' mam dodac'?

    [;2^4 - 4^2 \ne e^{\pi} - \pi^e;]

No i jak?

W preview nic dobrego sie/ nie pokazalo, wiec jest na razie niedobrze. Musze/ poczytac' dokumentacje/ Greasemonkey (o losie! :-).

Friday, March 25, 2011

Diakrytyki w TeX via klawiatura

Sprawdzę czy Greasemonkey TeX daje sobie radę z Polish Programmer Keyboard:

        [; Ą\ Ć\ Ę\ Ł\ Ń\ Ó\ Ś\ Ź\ Ż ;]


        [; ą\ ć\ ę\ ł\ ń\ ó\ ś\ ź\ ż ;]

No, jak tam? - hm..., średnio, czyli do kitu, lepiej tego unikać. Nie pokazało się Ą/ą, oraz zamiast Ę/ę widzę zwykłe E/e. Małe litery pokazały się u mnie jako duże.

Czy zostało coś jeszcze do powiedzenia? Oczywiście [;\TeX;] oraz [;LaTeX;] mają własne metody prezentowania diakrytyków (wygodniej jednak byłoby wstukiwać je jak w zwykłych tekstach).

Wednesday, March 23, 2011

Wielkie Liczby, Cz 2

Spis rzeczy




Uwagi historyczne: styl logiczny i styl klasyczny


Temat Wielkich Liczb wystąpił przy okazji teorii funkcji rekursywnych, stworzonej przez uczniów Hilberta (i samego mistrza też?): Wilhelma Ackermanna i Gabriella Sudana, oraz przez jedną z nawybitniejszych matematyczek wszech czasów, Rozsę Peter (nie była uczniem Hilberta). Właśnie ona zaproponowała, by temat funkcji rekursywnych traktować jako samodzielną teorię. Otóż Hilbert postawił problem istnienia rekursywnej funkcji, która nie byłaby pierwotnie rekursywną. Najpierw Sudan, a wkrótce i niezależnie Ackerman (nieco bardziej elegancko), podali takie funkcje. Skonstruowali funkcje rekursywne, które rosną szybciej niż jakakolwiek funkcja pierwotnie rekursywna. Używali 3 argumentów. Rozsa Peter zastąpiła 3 argumenty w funkcji Ackermanna przez 2. Ostatecznie funkcję tę uprościł Raphael Robinson, przez podanie elegantszych warunków początkowych. Tradycyjnie dalej nazywa się ją funkcją Ackermanna (czasem dodają nazwisko Peter). Uderza ekonomia ostatecznej definicji. Reprezentuje ona ciekawy, lecz nieco dziwny obiekt, który mi się podoba, ale odczuwam potrzebę także naturalniejszego podejścia, wykorzystującego konstrukcję przekątną, która musiała istnieć w Analizie Matematycznej chyba na długo przed Cantorem. Cantor stosował metodę przekątnej w teorii mnogości.

Metoda wspomnianych logików polegała na budowaniu wyrażenia, które w czasie rekurencji ogromniało, zawierając coraz więcej podwyrażeń, produkujących w czasie iteracji dalsze liczne podpodwyrażenia. Konstrukcja w końcu się zatrzymuje, bo każde wyrażenie ma parametry, które traktowane jako jeden parametr, stale maleje w leksykograicznym porządku. Porządek jest taki, że w dół można iść tylko skończenie wiele razy.

Wśród logików, zajmujących się rekursywnością i szybkością rośnięcia funkcji, liczy się między innymi Andrzej Gregorczyk.

Następcy wspomnianych wyżej matematyków dodali chyba niewiele, i nie wiem co było ich matematycznym celem (czy taki mieli). Wspomnę Knutha i Conway'a. Niektórzy skręcili w kierunku klasycznym. Widać też, że klasyczne podejście i logiczne są zbieżne.

Poniżej opiszę podejście klasyczne, ale koncepcyjnie jaśniej, niż jest to w spotkanej przeze mnie literaturze. Podkreślę i opiszę explicite ważne elementy konstrukcji, te które się koncepcyjnie liczą najbardziej.

UWAGA  Nietrudno, po mojej tu nitce dojść do kłębka informacji na dany temat, zawartego w wikipedii.

Podejście koncepcyjne: arytmetyka, funkcje, kompozycja, operatory


Budowanie wielkich liczb, a raczej szybko rosnących funkcji, związane jest na początku z działaniami arytmetycznymi: następnik  [;\nu(n) := n+1;],  dodawanie, mnożenie, wreszcie potęgowanie, na przykład:  [;\delta(n) := n^n;].  - to etap 1. Etap 2 polega na wprowadzeniu funkcji, zamiast izolowanych liczb. Jakoś należy przy definiowaniu funkcji operacje arytmetyczne iterować na wielką skalę; ale tak po prostu, to nie ma jak. Pomaga, na trzecim etapie, pojęcie kompozycji funkcji. Właśnie, jako etapm 3, wielokrotne iterowanie kompozycji pozwala przyspieszyć budowę szybko rosnących funkcji. Zajmijmy się tym etapem, czyli kompozycją.

Rozpatrujemy funkcje postaci  [;f\ g\ \dots : \mathbf Z^+\rightarrow\mathbf Z^+;],  zbioru nieujemnych liczb całkowitych  [;\mathbf Z^+ := \{0\ 1\ 2\ \dots\};]  w siebie. Kompozycją (albo superpozycją) dwóch funkcji  [;f\ g;]  nazywamy funkcję  ,  zdefiniowaną jak następuje:

               

Na przykład:
  • [;(\nu\circ\nu)(n) = n+2;]

  • [;(\delta\circ\delta)(n) = \left(n^n\right)^{n^n};]

Następnie zdefiniujmy potęgę  [;\bigcirc^n;]  dowolnej funkcji  [;f;]  względem kompozycji. Zaczynamy od funkcji identycznościowej  [;\iota : \mathbf Z^+\rightarrow\mathbf Z^+;],  danej wzorem:

                [;\iota(n) := n;]

Oczywiście:

                [;\iota\circ f = f \circ\iota = f;]

dla dowolnej funkcji  [;f : \mathbf Z^+\rightarrow\mathbf Z^+;].  Teraz już możemy przystąpić do definicji potęgi  [;\bigcirc^n;]:

                [;\bigcirc^0 f = \iota;]
                [;\bigcirc^n f = (\bigcirc^{n-1} f)\circ f = f\circ (\bigcirc^{n-1} f);]

dla dowolnego  [;n > 0;].  Na przykład  [;\bigcirc^3 f = f\circ f\circ f;].

W szczególności:
  • [;\left(\bigcirc^3 \nu\right)\left(n\right) = n+3;]

  • [;\left(\bigcirc^k \nu\right)\left(n\right) = n+k;]

  • [;\left(\bigcirc^n \nu\right)\left(n\right) = 2\cdot n;]

  • [;\left(\bigcirc^3 \delta\right)\left(n\right) = \left(\left(n^n\right)^{n^n}\right)^{\left(n^n\right)^{n^n}};]

Zauważmy, że akcent przesunął się z definiowania funkcji, czyli przyporządkowania liczbom liczb, na definiowanie operatorów, czyli na przyporządkowywanie funkcjom funkcji:

                [;\Omega : \hom(\mathbf Z^+\ \mathbf Z^+) \rightarrow \hom(\mathbf Z^+\ \mathbf Z^+);]

gdzie  [;\hom(\mathbf Z^+\ \mathbf Z^+);] oznacza zbiór wszystkich funkcji  [;\mathbf Z^+;]  w siebie. Operatorem jest na przykład potęga  [;\bigcirc^n;].

Wprowadzenie operatorów jest naszym czwartym etapem. Przypomnę je:
  1. operacje arytmetyczne

  2. fukcje

  3. kompozycja funkcji

  4. operatory

Teraz z kolei, dodam szybko, możnaby stosować kompozycję operatorów, i operatory operatorów, itd. Nie chce mi się tych konstrukcji uważać za nowe etapy. Zamiast tego raz na zawsze zauważmy, że operatory też są funkcjami (choć o innym zbiorze argumentów i wartości), więc dalsze kroki możemy koncepcyjnie uważać za znajome, za te same etapy, co już naszkicowane.

Możemy rozpatrywać także operatory dwóch zmiennych (ich zmienne przebiegają przez zbiór funkcji), jak na przykład  [;\Delta;],  gdzie:

                [;h = \Delta^g f;]

wtedy i tylko wtedy, gdy:

                [;h(n) =

\left(\bigcirc^{g(n)} f\right)(n);]

Innymi słowy:

                [;\left(\Delta^g f\right)(n) :=

\left(\bigcirc^{g(n)} f\right)(n);]

Z operatora dwuargumentowego możemy uzyskać szereg operatorów jednoargumentowych (podobnie jest z operacjami arytmetycznymi), jak na przykład operatory (jednej zmiennej)  [;\Delta^{\iota};]  oraz  [;\Theta;],  zdefiniowane następująco:

                [;\left(\Delta^{\iota} f\right)(n) := \left(\bigcirc^n f\right)(n);]
                [;\left(\Theta f\right)(n) :=

\left(\bigcirc^{f(n)} f\right)(n);]

Ten pierwszy jest regularniejszy, a drugi bardziej chciwy (daje szybciej szybciej rosnące funkcje).

Zastosowania


Potęga kompozycyjna


Zacznijmy od operatora potęgi kompozycyjnej:
  1. [;\beta(n) := \left(\bigcirc^n \nu\right)\left(n\right) = 2\cdot n;]

  2. [;\left(\bigcirc^k \beta\right)\left(n\right) = 2^k\cdot n;]

  3. [;\gamma(n) := \left(\bigcirc^n \beta\right)\left(1\right) = 2^n;]

  4. [;\left(\bigcirc^k \gamma\right)\left(n\right) = 2^{2^{\dots^{2^n}}};]   (k dwójek)

  5. [;\Gamma(n) := \left(\bigcirc^n \gamma\right)\left(1\right) = 2^{2^{\dots^{2^2}}};]   (n dwójek)


Kolejne wartości  [;\Gamma(n);],  dla  [;n = 0\ 1\ \2\dots;],  wynoszą:

        [;1\quad 2\quad 4\quad 16\quad 65536\quad 2^{65536}\quad 2^{2^{65536}}\quad \dots;]




Wyłoniła się regularność. Możemy zdefiniować ciąg eleganckich, coraz szybszych funkcji  [;\beta_n;],  poczynając od  [;\beta;]:
  • [;\beta_0:=\beta;]

  • [;\beta_n (k) := \left(\bigcirc^k\beta_{n-1}\right)(1);]   dla   [;n>0;]

Tak więc  [;\gamma = \beta_1,\quad\Gamma=\beta_2;].  Następne funkcje  [;G:=\beta_3,\dots;]  będą już potworne czyli monstrualne.

Skromna przekątna


Pora na sprawdzenie skromnej przekątnej  [;\Delta^{\iota};]:
  1. [;\left(\Delta^{\iota} \nu\right)(n) = \left(\bigcirc^n \nu\right)(n) = \beta(n) = 2\cdot n;]     czyli     [;\Delta^{\iota} \nu = \beta;]

  2. [;\left(\Delta^{\iota} \beta\right)(n) = \left(\bigcirc^n \beta\right)(n) = n\cdot 2^n = n\cdot\gamma(n);]

  3. [;\left(\Delta^{\iota} \beta\right)(n) = \gamma(n+k);]     dla     [;n=2^k;];   czyli:

  4. [;\left(\Delta^{\iota} \beta\right)\circ\gamma = \gamma\circ(\gamma+\iota);]

  5. [;\left(\Delta^{\iota} \gamma\right)(n) = \left(\bigcirc^n \gamma\right)(n) = 2^{2^{\dots^{2^n}}};]   (n dwójek)

  6. [;\left(\Delta^{\iota} \gamma\right)(n) = \Gamma(n+k);]     dla     [;n=\Gamma(k);];   czyli:

  7. [;\left(\Delta^{\iota} \gamma\right)\circ\Gamma = \Gamma\circ(\Gamma+\iota);]



Zachodzi ogólne twierdzenie:

TWIERDZENIE 0

                [;(\Delta^{\iota} \beta_n)\circ\beta_{n+1} = \beta_{n+1}\circ(\beta_{n+1}+\iota);]

dla dowolnego  [;n=0\ 1\ \dots;].


DOWÓD

        [;\left(\left(\Delta^{\iota} \beta_n\right)\circ\beta_{n+1}\right)(k) = \left(\Delta^{\iota} \beta_n\right)\left(\beta_{n+1}\left(k\right)\right);]

        [;=\left(\bigcirc^{\beta_{n+1}\left(k\right)} \beta_n\right)\left(\beta_{n+1}\left(k\right)\right) = \left(\bigcirc^{\beta_{n+1}\left(k\right)} \beta_n\right)\left(\left(\bigcirc^k\beta_n\right)\left(1\right)\right);]

        [;=\left(\bigcirc^{\beta_{n+1}\left(k\right)+k} \beta_n\right)\left(1\right) = \beta_{n+1}\left(\beta_{n+1}\left(k\right)+k\right);]

        [;=\left(\beta_{n+1}\circ\left(\beta_{n+1}+\iota\right)\right)\left(k\right);]

KONIEC DOWODU

Twierdzenie to pokazuje między innymi, że funkcja  [;\Delta^{\iota}\beta_n;]  jest nieco szybsza od  [;\beta_{n+1};].  Przy tym słowo nieco należy rozumieć w sensie koncepcyjnym, bo naiwnie to o wiele.

Sunday, March 20, 2011

Wielkie Liczby, Cz 1

Zaczynam zawsze serie notek od Cz 0 (i na niej na ogół kończę). Czyżbym teraz rozpoczął od Cz 1, a nie Cz 0? Ależ skąd! Cz 0 dałem na buzza bezpośrednio. Podałem w niej najprostsze funkcje, że tak powiem - bezpośrednie, dosyć szybko rosnące. Bo nie chodzi tak naprawdę o wielkie liczby, lecz o szybko rosnące funkcje. W szczególności wspomniałem silnię, [;n!;], oraz potęgę [;\Delta(n):=n^n;]. Ta ostatnia oczywiście rośnie znacznie szybciej. Jednak silnia dopuszcza prostszą definicję rekurencyjną:

  • [;0!:=1;]

  • [;\forall_{n>0}\quad n!:=n\cdot(n-1)!;]


Dla  [;\Delta(n);]  nie widzę równie prostej definicji rekurencyjnej, w której występowałaby tylko jedna zmienna. Gdyby jednak pogodzić się z potęgowaniem, to można wprowadzić znacznie szybciej rosnącą funkcję  [;\nabla(n);]  dla  [;n=1\ 2\ ...;],  jakby silnię eksponencjalną:

  • [;\nabla(1):=1;]

  • [;\forall_{n>0}\quad \nabla(n):=n^{\nabla(n-1)};]


- wizualnie:

    [;1\quad 2^1\quad 3^{2^1}\quad 4^{3^{2^1}}\quad 5^{4^{3^{2^1}}}\quad\dots;]

czyli

    [;1\quad 2\quad 9\quad 262144\quad 5^{262144}\quad\dots;]

Matematycy nie są tak chciwi. Na ogół wolą prostotę, na przykład wieżę dwójkową  [;w(n);],  gdzie

  • [;w(0):=1;]

  • [;\forall_{n>0}\quad w(n):=2^{w(n-1));]


- wizualnie

    [;1\quad 2\quad 2^2\quad 2^{2^2}\quad 2^{2^{2^2}}\quad 2^{2^{2^{2^2}}}\dots;]

czyli

    [;1\quad 2\quad 4\quad 16\quad 65536\quad 2^{65536}\quad\dots;]




Chodziłem do 8 klasy razem z Julkiem Burginem, który podarował mi wtedy piękne polskie wydanie "Kalejdoskopu Matematycznego", Hugona Steinhausa. Steinhaus definiuje w nim ogromne liczby obrazowo (oryginalna była właśnie obrazowość, bo temat był poważnie rozwinięty wcześniej, przez logików, w kontekście teorii funkcji rekursywnych i obliczalności). Zaczyna Steinhaus od  [;n;]  narysowanego w trójkącie, co definiuje, jako  [;n^n;].  Ja jednak piszę [;\Delta(n);]. Następnie definiuje/rysuje Steinhaus  [;n;]  wewnątrz kwadratu, co - Steinhaus mówi nam - oznacza to samo, co  [;n;]  narysowane w  [;n;]  trójkątach (dostajemy trójkątną cebulę). Będę tu pisał  [;\square(n);]. Zatem

  • [;\square(2) = \Delta(\Delta(2)) = \Delta(4) = 256;]

  • [;\square(3) = \Delta(\Delta(\Delta(3))) = \Delta(\Delta(27)) = \left(27^{27}\right)^{27^{27}};]

  • itd. :-)


Widzimy, że funkcja  [;\square(n);]  rośnie całkiem żwawo. Steinhaus na tym nie poprzestaje. Mógłby z kolei wprowadzić n w pięciokącie, potem w sześciokącie, ... Zlenił się, i poprzestal na następnym kroku, jako, że chodziło mu tylko o edukację wstępną i rozrywkę. Zatem nie mówi o pięciokącie, lecz o kółku/okręgu. Tak więc definuje  [;n;]  w kółku, jako  [;n;]  narysowane w  [;n;]  kwadratach. Będę pisał  [;\bigcirc(n);].  Na przykład:

    [;\bigcirc(2) = \square(\square(2)) = \square(256) = \dots;]

koszmar! :-) Mamy bowiem  256  w  256  trójkątach, czyli  [;256^{256}=65536;]  w  255  trójkątach, czyli  [;65536^{65536};]  w  254  trójkątach, itd. itd. itd. ...

Thursday, March 17, 2011

Hipokryzja nowoczesnego niewolnictwa

W starożytności właściciele niewolników co najwyżej byli dumni, całkiem otwarcie, z posiadania niewolników, czyli ludzi, którzy musieli na nich pracować. Nic pięknego, ale przynajmniej posiadacze niewolników sprawę stawiali otwarcie.

Kiedyś państwa były własnością króli (z grubsza mówiąc). Król nie ściągał podatku dla biednych lub dla dobra powszechnego, lecz bez kłamania ściągał podatki dla siebie.

Dziś biurokratyczna hołota, zniewalająca społeczeństwo, ocieka hiprokryzją. Oni ściągają podatki jakoby nie dla dalszego, jeszcze silniejszego podporządkowania sobie społeczeństwa, o nie, skądże - oni muszą zawsze bełkotać o "wyższych i szlachetnych" celach, jak pomoc biednym, edukacja, nauka, opieka zdrowotna... Przy tym niszczą każdą z tych dziedzin, skazując na nędzę i zależność od rządu jak najwięcej oduczonych od pracowania ludzi (takich najłatwiej kontrolować, i tak głupków zwanymi "liberałami" głupków).

Biurokratyczny system tworzy fortuny z niczego, z czystego złodziejstwa finansowego, a ludzie męczą się, cierpią. Przykładem jest sforsowana przez Billa Clintona super machlojka pożyczek bankowych na domy, która była bodajże bezpośrednim, może wręcz głównym powodem obecnego kryzysu gospodarczego.

Gdyby chodziło o zabranie pieniędzy bogatym, i danie tych pieniędzy biednym, na edukację, itd, to dlaczego koniecznie trzeba te pieniądze najpierw dać rządowi ??? !!! Dlaczego jedyna metoda pomagania ludziom musi (według zasmarkanych "liberalów") zawsze prowadzić poprzez podatki na biurokrację, dlaczego? Dlaczego nie chcą się nauczyć z doświaczenia wielu dziesięcioleci? Skąd taki brak wyobraźni, takie ograniczenie i otumanienie? Odpowiedź jest prosta. Bo wcale nie są zainteresowanie w celach, które hipokrytycznie głoszą. Są zainteresowani wyłącznie w kontrolowaniu czyli zniewalaniu bliźnich. Taka jest prawda OBIEKTYWNA.

Przecież bogaci mogliby, i tak by czynili, pod presją społeczną wydawać te pieniądze bezpośrednio na jedzenie i mieszkania dla biednych, na stypendia dla studentów, na laboratoria szkolne i akademickie, ... Instytucje by to publicznie kwitowały. Z łatwością znaleźliby się zapaleńcy, którzy by te publiczne informacje z Internetu zebrali, zorganizowali w przejrzyste tabele, ... i z powrotem opublikowali w Internecie. Bez żadnej marnacji na urząd podatkowy i parlamentarzystów (:-) efekt byłby stokroć lepszy, bo nie pasłoby się raka biurokracji. Prawdopodobnie przekazaliby bogaci na zbożne cele o wiele więcej niż w sumie na podatki i na filantropię. Prześcigaliby się. Staraliny się być na czele filantropistów. Bowiem nie musieliby wydawać tyle na prawników i ksiegowych. Przede wszystkim dlatego, że zamiast bawić-chrzanić się z urzędem podatkowym, wielu ambitnie bawiłoby się właśnie w filantropię.

Przecież w Kongresie Amerykańskim Demokraci narzekają, że bogaci często na podatki wydają ... ZERO. Że płacą mniejszy procent od klasy średniej. Oczywiście że tak. To ich zabawa. Od tego maja prawników. Od tego mają też między innymi demokratycznych parlamentarzystów, żeby im się - bogatym - krzywda nie stała.




Co jakiś czas rząd niby próbuje się zredukować. To tak jakby rak co jakiś czas robił sobie po brzegach minichemoterapię i lokalne operacje chirurgiczne. Jak pisałem na Poland-L w 1990 roku, jedyna metoda na raka biurokracji, to odciąć dopływ krwii, zamożyć, czyli pozbawić podatków. Wszystko co niby dla ludzi robi rząd, ludzie mogą sto razy lepiej robić sami. Gdy na przykład chodzi o ubezpieczenia lekarskie, to przecież i tak ludzie ludzi ubezpieczają. Więc sami powinni to robić, bez rządu i bez wielkich firm ubezpieczeniowych, bez marnowania ponad 95% swoich pieniędzy na raka biurokratycznego, bez niszczenia jakże ważnej relacji z lekarzami. Gdy chodzi o edukacje, to Obama chce wydać biliony dolarów nie na polepszenie nauczanie (o czym zielonego pojęcia nie ma), lecz na rozbudowany system oceny efektywności edukacji, by biurokratycznie i skomplikowanie bawić się w przelewanie pieniędzy pomiędzy stanami. Uczniom i rodzcom potrzebna jest edukacja, a nie ocena skuteczności edukacji przez biurokratów. Wszystko jedno biliony ich dolarów - rodziców, i innych obywateli - pojdzie na biurokrację wypełniającą formularze oceniające "efektywność", potrzebną wyłącznie biurokracji, a nie uczniom. To jest bardzo skuteczny sposób okradania społeczeństwa.

W każdej dziedzinie życia społecznego ludzie mogą i powinni organizować się sami, bez rządowego raka, który każde działanie ludzi zatruwa. Zamiast wkładać być obrotnym (wiedzieć w których stać rządowych kolejkach po to i sio i wszystko), zamiast kręcić i oszukiwać i kraść w systemie biurokratycznym, to powinni rząd odsunąć, kroczek po kroczku, i działać samodzielnie, jak dojrzali ludzie dorośli, a nie jak Homo Sovieticus.