You are currently browsing the category archive for the ‘pomysły’ category.

 

Zaba+w+blocie1.jpg

 

    Jedzie, jedzie sobie samochód, kierowany sztuczną inteligencją AI. Jedzie sobie, jedzie i w swojej sztucznej duszy pogwizduje, bo pogoda piękna, droga sucha, każdy kierowca lubi muzykę podczas jazdy. W środku siedzi sobie tata z synami, jadą na ryby albo na wycieczkę w góry. Tymczasem chodnikiem idzie mamusia z małym dzieciątkiem.

    Nagle trrrach! Pęka opona! Albo nie, AI się zamyślił. O czym? O elektrycznej owcy się zamyślił AI i go to pochłonęło. Albo nie. AI w środku miał drobny bug. Albo nie, nie miało buga, sytuacja na drodze po prostu była tak wyjątkowa, że AI nie umiała właściwie w tej jednej sytuacji, w tej jednej na miliard, zareagować jak należy. I mamy poślizg. AI gorączkowo sensorami omiata otoczenie, jeszcze 3 milisekundy i albo tata z synami nigdy już nie dojada na ryby albo mamusia z dzieciątkiem zostanie wgnieciona w ścinane. Co robić?

    To co powyżej opisałem, to tak zwany trolley problem, zagadnienie abstrakcyjne z dziedziny etyki, które gwałtownie kilka lat temu uzyskało wpierw z powodów publicystycznych a obecnie z coraz bardziej praktycznych, pewną uwagę. Co prawda sam problem może nie jest bardzo praktyczny – zanim samochód kierowany AI wpadnie w poślizg, musi dojść do całej masy zdarzeń, których wykluczaniem zajmą się inżynierowie w pierwszym rządzie: a więc samochód taki nie będzie łamał przepisów, będzie miał zawsze właściwy bieg wchodząc w zakręt, będzie miał optymalną mieszankę i moc chwilową silnika, będzie zawsze miał dostosowaną prędkość do warunków jazdy, włączone światła, sprawne migacze i tysiąc innych okoliczności będzie w stanie optymalnym zanim dojdzie raz na miliard razy, do zbiegu okoliczności który umożliwi powstanie poślizgu i potencjalnie wypadku drogowego. Inżynierowie w pierwszej kolejności rozwiążą te problemy techniczne związane z optymalnym sposobem kierowania autem, a problemy etyczne z rodzaju nierozwiązywalnych dylematów typu trolley problems będą rzadkimi przypadkami. Jednak…
     W historyjce powyżej końcu AI wybrał którąś z obu złych, alternatyw. Ktoś zginął. Kto?

    Producenci samochodów nie mają tu żadnego wyboru. Już dziś, kiedy samochody AI są dosyć egzotycznym mimo wszystko wynalazkiem, nowinką techniczną, już dziś ich wybór jest określony. Samochód taki będzie zawsze i bezwzględnie chronił pasażerów a nie pieszych czy innych uczestników ruchu drogowego. Nikt i nigdy nie dokona innego wyboru, bo to pasażerowie a nie pieszy sa klientami firm produkujących auta. Nawet bez AI można by sobie wyobrazić całkiem zwykły samochód, Fiat 126P wyposażony w radar z przodu, który, kiedy stwierdzi że przed maską znajduje się człowiek, kieruje samochód 90 stopni w bok, bez względu nam to co tam jest – ściana, słup, czy inne auto. Nikt jednak nigdy takiego rozwiązania nie wprowadził, bo jak to? Kierowca mógłby doznać urazów, a nawet zginąć w takim wypadku, kosztem pieszego? Kto kupiłby taki samochód? Nawet obowiązkowych alkomatów nie udało sie wprowadzić, a Korwin-Mikke symbolicznie spalił się oblewając się benzyną (i to kilka razy!) w proteście przeciwko używaniu pasów podczas jazdy. Tak samo jest w wypadku samochodów kierowanych przez AI. Producenci aut, tak naprawdę nie mają tu żadnego wyboru, tym bardziej że tego typu auta, przynajmniej na początku, będą raczej luksusem, będą dedykowane na rynek premium, rynek bogatych ludzi.

    Co Ci ludzie kupią w pakiecie? Supernowoczesny design, piękny kolor maski, luksusowe wyposażenie i superkomputer pod maska, ale także AI wraz z zapewnieniem że będzie ich ona chronić, oraz odpowiednią licencję zabraniająca deasemblacji kodu AI oraz modyfikowania w sposób nieautoryzowany jej działania. Zupełnie jak właściciel ( są tacy co tak o sobie myślą! )  Windows ;-)
     Czy kierowca może odpowiadać za to że samochód AI go chronił? To nie jest jego decyzja! Jeśli zatem zginęła mama z dzieciątkiem a tata z synami przeżyli wypadek z początku wpisu, to nie sa niczemu winni. „Hola!” – krzyknie tu jednak prokurator Ziober – „mamusia z dzieciątkiem była znajomą mojego sąsiada! ABW – dawać mi tu AI na warsztat.” a na boku dodaje – „Dajcie mi AI a paragraf sam znajdę!” I tu zaczyna sie bardzo zabawna sprawa. Kierowca nie może odpowiadać za poczynania AI zainstalowanej w aucie, bowiem on jest tylko kompletnie nieświadomym użytkownikiem właściwie już nie rzeczy – samochodu, a usługi, usługi wożenia go autem przez oprogramowanie zgodnie z postanowieniami licencji producenta. Czy zatem winny jest producent? Kto to wie? Prokurator Ziobro już, już pochyla sie nad maską samochodu, AI w środku aż zwija się w sobie, uruchamiając garbage collector by zwolnić choć kilka megabajtów. W lewej ręce Ziobra błyszczy klucz dynamometryczny w prawej olejarka – czy będzie wymuszał zeznania za pomocą polewania lodowatym olejem po filtrach ściskanych kluczem? Wtem rozlega się gromkie „Stop!” – do akcji wkracza prawnik koncernu samochodowego: „Ziobrze – nie wolno Ci gmerać pod maską, zaś straszenie AI jest działaniem szkodliwym dla interesów Korporacji” tu prawnik doda – „partia sama przecież popierała CETA, SRETA, PYTA i CIPA – a wszystkie te umowy sygnowane przez rząd USA (USA!) chronią własność intelektualna i każą Ci zdać się na analizy eksperckie do których prawo, z uwagi na tajemnice kodu oprogramowania, ma tylko producent urządzenia i osobisty ojciec AI” – po czym kładąc rękę na masce oszalałej ze strachu AI czule doda szeptem – „ććć, ććć już dobrze moja maleńka, dziadek adwokat jest przy tobie!
      Jak to zatem będzie? Bo mamuśka przeżyła ale dzieciątko ginęło i co teraz? Czy AI ma być skazana na przepięcie na krześle elektrycznym? Kpiny. Pozostaje odszkodowanie. Mamuśce zapłacimy – za dziecko – w zależności od 4.3 $ do kilku milionów dolarów w zależności od przebiegu śledztwa, kraju i warunków ugody prawnej.
     Dokonajmy częściowego podsumowania: kierowca nie odpowiada za błąd AI, błąd trzeba dowieść, AI nie da sie ukarać prawnie np. karą śmierci czy więzienia, czyli jedynym, potencjalnym skutkiem kiedy już ktoś zdoła wygrać z koncernem w sądzie, będzie odszkodowanie czy ugoda prawna. Należy zatem sądzić ze kwoty te będą częścią pakietu który będzie wliczany w koszt auta, lub będzie częścią procedury homologacyjnej i będzie musiał być rezerwowany przez koncerny samochodowe na wypadek ponoszenia odpowiedzialności. Potencjalnej. W której od teoretycznej odpowiedzialności, poprzez sztuczki prawne do wypłat może być daleka droga. I w której kluczowym elementem będą zespoły eksperckie analizujące poprawność kodu, który nie będzie dostępny publicznie. Słabo to wygląda…
     Jeśli zatem dziś kupuje się samochód i jego wyposażenie, w przyszłości będzie się kupowało samochód, jego wyposażenie i ubezpieczenie powodujące de facto zwolnienie z odpowiedzialności prawnej za szkody wyrządzone z użyciem usługi związanej z kierowcą AI. I będzie to coraz powszechniejsza sytuacja, tak jak coraz powszechniejsze będzie użycie AI w życiu codziennym – w pociągach, samochodach, samolotach, w komputerach, w medycynie, w obsłudze masowej. Kto widzi w tym początek idylli niech może dla próby zechce skontaktować się z serwisem Google jak ma problem ;-) Większe szanse będzie miał jak będzie pisał na Berdyczów…

    No i teraz jakiś mądrala powie: „Ale, ale! Przecież AI jest lepsza niż ludzie w tych zadaniach w których udaje się już ja zastosować. Myli się mniej. I nawet jeśli na początku będzie mylić się w 1% przypadków, to w dłuższej perspektywie…” Czy w ubiegłych stuleciach ktoś nie narzekał: parowóz będzie jechał nawet gdy na drodze stanie człowiek, podczas gdy wóz konny, stanie, bo koń nie rozjedzie człowieka nawet jak woźnica pijany… Po pierwsze zwrot „w dłuższej perspektywie”: rozwiązania wprowadza się już dziś, a nie w dłuższej perspektywie. Nalezy o tym pamiętać. Wolałbym by ta perspektywa poprawy działania to było kilka godzin a nie kilka lat. Ale co chyba ważniejsze wołałbym by producent AI ponosił odpowiedzialność, tak jak obecnie producent auta ponosi odpowiedzialność za błędy techniczno/projektowe w jego układzie hamulcowym. Na rynku oprogramowania bynajmniej nie jest to standard! To właściwie nieznane rozwiązanie prawne! A prognozy sa pesymistyczne w tym zakresie – analizy stwierdzają że w przyszłości większość firm będzie zorganizowanych jak firmy produkujące oprogramowanie. I tak będzie tez wyglądała w coraz większym zakresie praca ludzka – będzie tak czy inaczej coraz bardziej podobna do pracy programisty. Czy rozwiązania prawne tez będą coraz bardziej podobne? To wizja prawdziwej dystopii…
     Niedawno okazało się, że to co bierzemy za cud techniki ma całkiem wyraźne ograniczenia, zaś zdumiewająco proste i zdawałoby się niewinne zmiany, potrafią obecnej AI i to tej spod znaku najlepszych, całkowicie popsuć działanie. Na drodze będzie to wyglądać jakby raz na milion godzin jazdy AI popełniała błąd. I nie jest to błąd wynikający z przypadku, a z samej istoty ograniczeń w jej działaniu. Świat jest po prostu zbyt złożony by objąć go istniejącą technologią w pełni. Człowiek także się myli. I ponosi za to odpowiedzialność. Czy producenci będą te informację ujawniać, poprawiać działanie systemów i płacić? Czy też postąpią jak Volgsvagen w sprawie emisji spalin?

    Czy to jest wpis o głupocie AI? O tym że AI to ZŁO? Czy jestem AI Luddystą? Broń boże. Ten wpis jest o tym, że ludzie podejmując swoje decyzje – że nie będzie kasjera tylko AI, że nie będzie kierowcy tylko AI, że nie będzie ochroniarza tylko karabin maszynowy sterowany przez AI, będą w coraz większym stopniu brać pod uwagę nie tylko fakt że AI pracuje 24 na dobę bez praw pracowniczych, szybciej, taniej i często efektywniej. Będą brali pod uwagę, także i to że jej błędy nie będą w prosty i oczywisty sposób prowadzić do bezpośredniej odpowiedzialności karnej czy być może finansowej, osoby korzystającej z działania AI.
     Jakże wygodnym mechanizmem jest zrzucanie winy za wszelkie machloje na „wolny rynek tak chciał”. Za chwilę będziemy słyszeć: „AI popełniła błąd, ale ludzie także je czynią, nic nowego” Tyle że ludzie ponoszą odpowiedzialność, a AI – słusznie – nie. Producenci AI robią wszystko by i im się upiekło. Stąd wróże w tej dystopii czasy kiedy wszystko działa lepiej, prościej, bezpieczniej i piękniej, w 99% wypadków a w pozostałym 1% – nic nie można z tym zrobić, a ten komu urwało rękę, cóż, ma pecha. 1% w czasach supermasowej i kompletnie homogenicznej obsługi to nie jest mało…

ModusPoens

W poprzednim wpisie przedstawiłem dosyć oczywisty fakt dotyczący zasady indukcji na grafie o jednej składowej spójnej. W obecnym, przejdziemy do nieco innej tematyki, wszakże wpis poprzedni nie był całkiem oderwany od dzisiejszego tematu. Mam nadzieję posługiwać się nim w przyszłości, był wiec to rodzaj przygotowania artyleryjskiego przed bitwą. Amunicji użyliśmy niewiele, a kaliber nie był zbyt wielki. Zobaczymy co dalej.

Na początek kilka słów o motywacji. W poprzednich kilku wpisach drapałem po wierzchu temat reprezentacji dowodów matematycznych jako grafu i próbowałem zdefiniować dla takich struktur grupy homologii tak by cechy dowodu ( konkretnie sprzeczność) miały jakieś homologiczne odzwierciedlenie. Niestety analizując temat dokładniej, dochodzę do wniosku ( o czym napiszę w kolejnych wpisach) że homologia nie wypali. Jest tak dlatego, ze struktura „triangulacji dowodów” jak ją nazwałem – nie jest struktura simplicjalną. Znalazłem błąd w swoim rozumowaniu, są kontrprzykłady, i trzeba stwierdzić, że tego typu podejście wygląda na skazane na daleko idące kłopoty ( co nie znaczy że homologia i logika nie dadzą się pożenić. Jestem przekonany że istnieje tu głęboki związek, np. przekonuje mnie do tego koincydencja faktu że istnieje tylko jeden rodzaj nieorientowalności rozmaitości i jeden rodzaj sprzeczności logicznej. )

Czas więc na kolejne podejście, bo sam pomysł „triangulacji dowodu” wydaje się nadal żywotny, kopie i kto wie, może coś sie z tego urodzi.

Zamierzamy pracować z dowodem matematycznym. Poniżej przedstawię ścisłą definicję tego co będę rozumiał pod tym pojęciem. Będzie ona oczywiście całkowicie klasyczna, zostanie jednak wypowiedziana w pewnej specyficznej terminologii. Aby ją wprowadzić musimy określić pewien obraz czym jest zbiór wyrażeń których ozywamy podczas dowodzenia twierdzenia matematycznego. Po pierwsze dowody powstają w ramach sformalizowanego rozumowania. Każdy dowód powstaje w ramach określonej teorii ta zaś posiada zwykle aksjomaty, operuje pewnego rodzaju obiektami pierwotnymi ( „rzeczy” o których mówi teoria, a których cechy definiują aksjomaty) oraz intensywnie czerpie z logiki określonego rodzaju ( np. logiki pierwszego rzędu FOL). Aksjomaty są relacjami które nakładamy na obiekty będące przedmiotem naszego rozumowania dowodowego, i zwykle w dowodzie nie używamy ich wszystkich, a tylko pewien podzbiór. Sytuacja ta ma prozaiczny powód – większość użytecznych teorii matematycznych posiada nieskończenie wiele aksjomatów. Jako przykład może posłużyć aksjomat indukcji, a używając prawidłowej terminologii: schemat aksjomatów indukcji. Jest to wyrażenie ( lub zdanie, wszakże w zapisie stosowanym zwykle, jest to zdanie wypowiedziane w logice wyższego rzędu niż FOL) które stwierdza, że „dla każdego zdania {T(n)} dotyczącego liczby naturalnej {n}, jeśli prawdziwe jest zdanie {T(0)} oraz {T(n) \Rightarrow T(n+1)} to prawdziwe jest {T(n)}„. Proszę zwrócić uwagę, ze schemat ów – rozwija sie na nieskończenie wiele aksjomatów, po jednym dla każdego zdania T o ile posiada ono cechy wymienione w owym schemacie aksjomatu. Oznacza to, że teoria korzystająca z owego schematu aksjomatów, w istocie posiada przeliczalną ilość aksjomatów. Rzecz jest znana i omówiona w każdym podręczniku podstaw matematyki.

W jaki sposób z schematu aksjomatów dostajemy konkretny aksjomat? Jakie jeszcze mogą lub są schematy aksjomatów?

Sprawa zwykle nie jest szczególnie drążona, wszakże stosowanie schematów aksjomatów jest powszechne. Dlaczego? W języku FOL nie jesteśmy w stanie wypowiedzieć treści kwantyfikowanej po zdaniach. Teoria matematyczna posługująca się językiem logiki pierwszego rzędu zawiera wyłącznie kwantyfikacje po obiektach, to jest po „rzeczach”. Np. w ramach teorii mnogości wypowiadamy zdania o zbiorach i elementach, ale nie o „twierdzeniach na temat zbiorów”. Tymczasem użycie tak prostej reguły jak

\displaystyle \phi \Rightarrow (\psi \Rightarrow \phi )

wymaga byśmy za {\phi} i {\psi} mogli podstawić dowolne zdania. Zwykle zapisuje się ów schemat aksjomatów systemu Hilberta, za pomocą zmiennych {\phi} i {\psi}, rozumiejąc przez to, że mamy do czynienia z nieskończenie wieloma aksjomatami, a {\phi} i {\psi} reprezentują każde możliwe zdanie. Stąd zapis takiego schematu zawiera zwykle kwantyfikator ogólny „dla każdego zdania {\phi} teorii T” {\phi \Rightarrow(\psi \Rightarrow \phi )} i można by wyobrażać sobie że mamy tu w istocie nieskończoną listę aksjomatów, po jednym dla każdego możliwego podstawienia zmiennych. W realnym rozumowaniu istnieje potrzeba użycia stosownej reguły dedukcji, pozwalającej zrealizować owo podstawienie, zasygnalizować je czytelnikowi dowodu. Zwykle ma ono postać zapisu „{\phi = q}” gdzie {q} jest juz zdaniem teorii, dotyczącym „rzeczy” i zapisanym w języku FOL.Jednak wyrażenie „{\phi=q}” nie jest prawidłowym wyrażeniem języka FOL. jest sztuczką syntaktyczną, zapisem mnemotechnicznym, odwołaniem sie do „indeksu w bazie danych aksjomatów” umyślnie oznaczonej „{\phi \Rightarrow(\psi \Rightarrow \phi )}” po to by z owej listy, wyfiltrować stosowny aksjomat dotyczący zdania „{q}„. Regułą taka, opisująca „podstawienie, oznaczmy ją chwilowo {P}, mogłaby mieć postać

\displaystyle P("\phi=q", "\phi\Rightarrow\phi") = " q \Rightarrow(\psi \Rightarrow q )"

Odczytalibyśmy ją jako „w schemacie „{\phi \Rightarrow(\psi \Rightarrow \phi )}” podstaw za {\phi} zdanie „{q}„. Zauważmy że sam symbol równości „{=}” użyty w nawiasach, nie oznacza że owo {\phi} staje się równe „{q}” na stałe a tylko mamy na myśli pewną konkretną realizację, selekcję, ze zbioru opisanego schematem aksjomatów. W terminologii informatycznej powiedzielibyśmy że zasięg leksykalny owego znaku „=” ograniczony jest wyłącznie do zapisu powyżej. Co więcej. wynik takiej operacji podstawienia nie jest zdaniem, a zaledwie kolejnym schematem który może zawierać, i zawiera w naszym przykładzie inne zmienne! Dopiero sekwencja podstawień eliminująca ze schematu wszystkie występujące w nim zmienne, daje w wyniku określone jednoznacznie przez użyte podstawienia, zdanie używanego w ramach teorii języka. Oczywiście jest wiele symbolik opisujących powyższą operację podstawienia. Wydaje mi sie jednak że zaproponowana jest w miarę wygodna i przejrzysta. Co więcej – wyrażenie „{\phi = q}” – choć nie jest zdaniem teorii ( a nawet nie jest zdaniem), będzie wprost występowało na liście wyrażeń używanych w dowodzie, podobnie jak schematy aksjomatów. Ale o tym poniżej.

Kolejnym obiektem który jest używany w procesie dowodowym sa tautologie. Przywołuje sie je czasami wprost – stwierdzając, że pewne zdanie jest prawdziwe niezależnie od prawdziwości występujących w nim zdań, a czasami jako schemat aksjomatów, z zmienną, jak opisano powyżej ( bo też i tautologie są nieprzebranym zbiorem „potencjalnych aksjomatów” zaś ich użycie w taki czy inny sposób jest zwykle kwestią estetyki i optymalizacji środków dowodowych). Ponieważ u podstaw prawdziwości tautologii leży sama logika, a w jej ramach najprostsza metoda sprawdzania prawdziwości – tabela wartościowania prawdy i fałszu, stwierdza sie zwykle że tautologie logiczne są konsekwencją zbioru pustego. Czyli że ich prawdziwość nie wymaga czynienia żadnych specyficznych założeń. Można by rzec, że posiadamy pewną regułę dedukcyjną T, od słowa tautologia, która pozwala nam wprowadzić do dowodu dowolne wyrażenie będące tautologią, a to poprzez wskazanie, ze jest owo wyrażenie konsekwencją zbioru pustego. Zapis wyglądałby następująco:

\displaystyle T(\emptyset ,t) \Rightarrow t

gdzie {\emptyset} to zbiór pusty zaś {t} to tautologia.

Widzimy że w takim zapisie, ze zbioru tautologii wybraliśmy zdanie {t}. Zapis ten jest w pewnym sensie patologiczny, gdyż reguła dedukcyjna dotycząca tautologii {T}, zawiera po obu stronach wyrażenia to samo zdanie {t}. Dlatego zapis ten, choć formalnie prawdziwy i zgodny z resztą terminologii ( o czym poniżej) nie będzie używany dalej zaś osiągniemy to kosztem dodania do naszego zapisu wszystkich tautologii jako dodatkowego, wyróżnionego zbioru tautologii o tym samym statusie co schematy aksjomatów. Nie musi być to od razu zbiór wszystkich tautologii używanej logiki. Wystarczy by zbiór ten zawierał te tautologie które są użyte w dowodzie który będziemy analizować.

Rozważyliśmy zatem trzy zbiory – zbiór aksjomatów A, zbiór tautologii T, oraz zbiór „indeksów”, wyrażeń postaci „{\phi=q}” oraz symbol {\emptyset}, które będę dalej nazywał zbiorem filtrów. Tutaj drobny komentarz, sygnalizujący rzecz nad którą sie zastanawiam, jednak nie umiem jej rozstrzygnąć. Zgodnie z teorią mnogości, zbiór pusty jest częścią każdego zbioru, tym samym należy też do zbiorów {T} i {A}. Być może rozsądniej byłoby rozważyć specjalny symbol na określenie tego rodzaju elementu którego konsekwencją sa tautologie, ale który sam nie jest konsekwencją żadnego rozumowania. Warto dodatkowo pamiętać, że w sensie ogólnym konsekwencją sprzecznego zbioru zdań ( np. teorii o sprzecznych aksjomatach) jest dowolne zdanie, a więc zbiór pełny zdań, a nie zbiór pusty.

Zacznijmy od formalnego przedstawienia opisanego powyżej budulca.

Mamy dany:

 

  • zbiór schematów aksjomatów {A},
  • zbiór tautologii {T},
  • zbiór filtrów {F}, który zawiera wyrażenia postaci „zmienna = zdanie”, oraz zbiór pusty {\emptyset}
  • zbiór L poprawnych syntaktycznie wyrażeń teorii

 

Definicja Zbioru Selektorów: Zbiór selektorów {S} to zbiór zawierający aksjomaty, tautologie i filtry.

Zbiór {Z = A \cup T} nazwiemy zbiorem zdań pierwotnych teorii. Element należący do zbioru selektorów {S} nazwiemy selektorem.

Chcielibyśmy nad zbiorem selektorów i zdań logiki bazowej zbudować mechanizmy umożliwiające rozumowanie dedukcyjne. Należy w tym celu zdefiniować reguły dedukcji, które w niezawodny sposób prowadzą od aksjomatów do poprawnych syntaktycznie wniosków. Pojawia się tu jednak pewien problem. Reguła dedukcji {R}, to funkcja, o 2 argumentach, która odwzorowuje zbiór selektorów {S} i zbiór zdań pierwotnych {Z} teorii, w zbiór poprawnych wyrażeń pewnego rodzaju. Nie są to jednak zdania, a jak widzieliśmy wyżej, schematy zdań, lub listy zdań, w zależności od przyjętego podejścia. Mamy zatem następującą definicję:

Reguły dedukcji: Regułą dedukcji jest to funkcja 2 argumentowa taka że, jeśli {x \in L}, {y \in S} to istnieje takie ( jednoznacznie wyznaczone) {z \in L} że

\displaystyle R(x,y) = z

Wyrażenie {x} nazywamy przesłanką, wyrażenie {y} nazwiemy selektorem, wyrażenie {z} to wniosek.

Ponieważ „nowe” zdania w teorii powstają wyłącznie w wyniku realizacji pewnej reguły dedukcji, a w powyższym wyrażeniu symbol „{=}” oznacza zwykłą równość, możemy każde wystąpienie zdania z zastąpić równoważnym wyrażeniem {R(x,y)}. Tym samym pojecie „zbiór zdań logiki bazowej” staje się czysto mnemotechnicznym wybiegiem, zaś każde zdanie teorii to po prostu odpowiednio zagnieżdżony ciąg reguł dedukcyjnych operujących na selektorach ( w pierwszym argumencie) oraz aksjomatach i tautologiach ( w drugim). Tym samym możemy stwierdzić, że zbiór zdań {L} jest zbyt duży dla naszych rozważań, zaś w tym co nastąpi będziemy rozważali wyłącznie wyniki iteracji reguł dedukcji na zbiorze {A \cup T}.

Zamiarem moim jest zbudowanie graficznej reprezentacji takich struktur, co ma też i taką zaletę, że choć wypowiadam wszystkie zdania poniżej w języku aksjomatów, dowodów itp. te same narzędzia powinny nadać sie do analiz systemów matematycznych gdzie zachodzi iteracja funkcji 2 argumentowych.

Podkreślmy w tym miejscu, że istotne cechy reguł dedukcyjnych:

 

  • reguły dedukcyjne są operacjami czysto syntaktycznymi
  • reguła dedukcyjna jest funkcją.
  • Zachodzą relacje jednoznaczności:
  • ( {R(a,b) =c} i {R(a,d) = c ) \Rightarrow b=d}
  • ( {R(a,b) =c} i {R(d,b) = c ) \Rightarrow a=d}
  • ( {R(a,b) =c} i {R(a,b) = d ) \Rightarrow c =d}
  • wynik działania reguły dedukcyjnej jest prawidłowym zdaniem języka L. Wolę jednak określić tą cechę w innych sposób. Zachodzi cecha przeniesienia typu zmiennej. Reguła dedukcyjna „przy użyciu selektora” przenosi typ z przesłanki na wniosek. Własność ta jest spełniona dla wszelkich reguł postaci modus ponens ( modus tollens itp.), zachodzi też dla wielu reguł rachunku sekwentów.

 

Uwaga – ostatnia cecha to pewnego rodzaju nadużycie. Niestety ściśle rzecz biorąc nie jest spełniona dla reguł polegających na podstawianiu czy też „filtrowaniu” jak wolałbym ten proces nazwać. W takim bowiem przypadku jako pierwszy argument występuje schemat aksjomatów, czyli lista zdań, zaś na etapie wyeliminowania wszystkich zmiennych, ostatni selektor wybiera z niej jedno zdanie, które zostaje zwrócone jako wniosek. Nie jest wykluczone, że jest to ślad czegoś ważniejszego, np. że reguły dedukcyjne powinny być odwzorowaniami zwracającymi nie tyle zdania, co całe listy zdań, zaś teoria powinna posiadać kanoniczne odwzorowanie pomiędzy jednoelementową listą zawierającą zdanie bez zmiennych a zbiorem zdań ( czyli pomiędzy jednoelementową listą i jej elementem) . Definicja taka dodałaby do teorii miłej symetrii, i miałaby sens, bowiem w wypadku podstawiania za jedną zmienną w schemacie w którym występuje ich kilka, wynik podstawienia nadal jest schematem a nie zdaniem.

W ogólności w teorii może występować więcej niż jedna reguła dedukcji, co będziemy sygnalizować przez ich ponumerowanie. Tym samym będziemy mówili o k-tej regule dedukcji {R_k}. Typowym przykładem może być tu system Hilberta gdzie mamy dwie reguły dedukcji: modus ponens i regułę podstawiania za zmienną. Istnieją systemy rachunków zdań gdzie reguł jest więcej ( lub mniej). W dalszych rozważaniach modus ponens ( zapisywana jako „mp”) i reguła podstawiania będą traktowane przeze mnie jako modelowy przykład takich reguł.

Zdefiniujmy co mamy na myśli operując pojeciem dowodu:

Definicja Dowodu: Dowód P twierdzenia t, to ciąg zdań {a_1,a_2 \cdots a_N =t}, o tej własności że dla każdego zdania {a_i} zachodzi jeden z elementów alternatywy:

  • {a_i \in A}, {a_i} jest schematem aksjomatu
  • {a_i \in T}, {a_i} jest tautologią,
  • {a_i \in F}, {a_i} jest elementem zbioru filtrów
  • ogólniej moglibyśmy napisać że {a_i \in S} – jest selektorem lub
  • istnieje liczba {p} oraz {j,k<i} takie że {a_i = R_p(a_j,a_k)} gdzie {R_p} to {p}-ta reguła dedukcji.
  • {a_N = t} nie jest filtrem.

wyrażenie t jest zdaniem ( bo nie jest filtrem) i nazywamy je tezą dowodu.

W ramach takiej definicji w dowodzie zostają zapisane jawnie wszystkie wyrażenia użyte w krokach dowodowych ( a nie tylko te które są zdaniami). Przez długość N dowodu P, rozumiemy ilość selektorów, czyli po prostu wyrażeń, które sie na niego składają.

Z powyższej definicji wynika, że dla każdego dowodu P, mamy ciąg wyrażeń będący jego reprezentacją. Każdemu wyrażeniu {a_i} w dowodzie P przyporządkujmy liczbę naturalną { \#(P,a_i)} – numer miejsca na którym wyrażenie to występuje w dowodzie P. Każdy dowód to skończony ciąg wyrażeń, więc { \#(P,a_i)} jest dobrze zdefiniowane i przybiera wartości od 1 ( dla pierwszego wyrażenia dowodu) aż po { \#(P,t) =N} gdzie {t} to teza dowodu zaś {N} to jego długość.

Dla wygody, kiedy dowód jest ustalony, opuścimy symbol P w powyższym zapisie, czyli będziemy używać wyrażeń postaci { \#(a_i) = n}. Jeśli zdanie q nie występuje w dowodzie, napiszemy \#(q) = 0 . Czasami pewnie opuścimy nawiasy pisząc sam symbol \#a_i =n

W dalszym ciągu będę używał słowa „zdania” w znaczeniu – schematy aksjomatów, tautologie lub zdania właściwe logiki bazowej teorii. Tym samym nie będziemy pedantycznie analizować zagadnień sygnalizowanych w pt. 4 cech reguł dedukcji. Proszę pamiętać jednak że zdanie może oznaczać zarówno poprawne twierdzenie teorii jak i cały schemat zdań ( a więc wyrażenie zawierające zmienne).

Dowód składa się z wyrażeń, ale nowe zdania pojawiają sie w dowodzie wyłącznie jako wynik działania reguł dedukcyjnych. Jeśli w wyniku działania {R_k(q_i,q_j) = q_s} to wykonaniu reguły dedukcyjnej {R_k} przypiszemy taki sam numer jak zdaniu {q_s}. Mamy zatem {\#(P, R_k(q_i,q_j)=q_s) = \#(P,q_s)} i definicja numeru miejsca w dowodzie {\#} zostaje rozszerzona na realizacje ( wystąpienia) reguł dedukcyjnych. O ile w wypadku wyrażeń numeracja jest ciągła, od 1 do N o tyle numeracja wystąpień reguł dedukcyjnych może zawierać luki. Prawdziwe jest jednak poniższe, oczywiste stwierdzenie:

Stwierdzenie: dla danego dowodu P, numeracja użycia reguł dedukcyjnych jest cięgiem ściśle monotonicznym.

Jest to wniosek z faktu, że numeracja zdań w dowodzie jest ściśle monotoniczna, zaś reguły dedukcyjne otrzymują te same numery co zdania, z pominięciem wyrażeń ze zbioru filtrów oraz bezpośredniego użycia aksjomatów i tautologii.

Wydaje sie że wyposażeni w takie narzędzia możemy wypisać podstawowe pojecie jakim będziemy sie zajmować w dalszym ciągu wpisów:

Definicja Triangulacji dowodu:

Triangulacja dowodu P to odwzorowanie {\mathcal{F}} dowodu P w graf skierowany G. Każde wystąpienie reguły dedukcyjnej {R(p,q)=s} jest odwzorowane na trójkąt skierowany {(pqs) = (pq) \cup (qs) \cup (ps)}

W odwzorowaniu tym każdemu zdaniu dowodu {a_i} przypisany jest wierzchołek grafu G. Różnym zdaniom przypisujemy rożne wierzchołki, tym samym zdaniom przypisujemy te same wierzchołki.

Będziemy zajmowali sie własnościami grafów które sa obrazami dowodów w odwzorowaniu {\mathcal{F}}. W następnym wpisie podam przykłady triangulacji, oraz zastanowimy się na jakie sposoby łączą się trójkąty w owej triangulacji.

 

MathTextOntology-pasek

Rozważmy abstrakcyjny graf G. Nieformalnie abstrakcyjny graf matematyczny to obiekt złożony ze zbioru wierzchołków oraz zbioru krawędzi łączących wierzchołki. Wierzchołki połączone wspólną krawędzią nazwiemy sąsiadującymi.

W zastosowaniach zwykle wierzchołki posiadają jakieś konkretne cechy ( i zwykle mają etykietki ), zaś fakt łączenia wierzchołków krawędzią, zwykle ma jakąś interpretację. W ramach rozlicznych interpretacji, możemy mówić o posiadaniu przez wierzchołek określonej własności X. X będziemy tu traktowali jako predykat o dziedzinie w zbiorze wierzchołków, a wartościach w zbiorze {T,F} reprezentującym prawdę i fałsz. Tym samym jeśli wybierzemy pewien wierzchołek v grafu G, to możemy zapytać jaka jest wartość X(v), oraz powiemy że v ma własność X jeśli X(v) = T lub krócej będziemy pisać że X(v).

Przy takiej dosyć prostej terminologii, możemy sformułować w miarę oczywistą zasadę indukcji na grafie.

    Zasada indukcji na grafie.

Dany jest graf nieskierowany G, z jedna składową spójną. Załóżmy że zachodzą następujące własności:

  1. dla każdego wierzchołka v grafu G z tego że X(v) wynika, że X zachodzi dla każdego wierzchołka sąsiadującego z v.
  2. dla pewnego wierzchołka a zachodzi własność X

    Teza: X jest prawdziwe dla wszystkich wierzchołków grafu G.

Dowód ( niewprost):

Załóżmy że spełnione jest założenie (2), to znaczy istnieje wierzchołek a dla którego zachodzi X, oraz spełniona jest zasada (1), że z faktu że X zachodzi dla pewnego wierzchołka wynika ze zachodzi dla wszystkich połączonych z nim wierzchołków.  Mimo to twierdzimy że twierdzenie nie jest prawdziwe, to znaczy że  istnieje pewien wierzchołek d dla którego X nie jest prawdziwe.

Załóżmy że istnieje pewien wierzchołek s sąsiadujący z d dla którego X(s). Wówczas z (1) wynika że d ma cechę X podczas gdy w poprzednik kroku założyliśmy że d nie posiada cechy X. Sprzeczność. Wynika z tego że żaden wierzchołek sąsiadujący z d nie może posiadać cechy X.

Wierzchołki sąsiadujące z nimi także itp, itd.

Oznaczmy przez U zbiór wierzchołków które nie posiadają cechy X. Zbiór U jest niepusty bo zawiera co najmniej wierzchołek d, a także  wierzchołki sąsiadujące z d, wierzchołki sąsiadujące z tymi wierzchołkami itd. Innymi słowy zbiór U to składowa spójna grafu zawierająca d.

Jednak z założenia graf jest grafem spójnym, posiada więc jedna składową spójna.

W takim razie A należy do U.

Ale dla A zachodzi X.
Sprzeczność.
Co prawda zasada wydaje się w miarę oczywista, ale nie znalazłem jej w google ;-)

Po drugie, oczywista to ona pewnie jest dla grafów skończonych, ale z dowodu wydaje się wynikać, ze dla nieskończonych także, co więcej, prosty dowód nie narzuca jakichś ograniczeń na moce zbiorów wierzchołków…

hierarchiaKanonicznej

Na marginesie moich rozważań na temat homologii budowanych na przestrzeniach zdań logicznych, opisze poniżej pewien ogólny pomysł dotyczący postaci kanonicznych obiektów. Postać kanoniczna obiektu matematycznego to pojecie natury właściwie estetyczno -praktycznej i mam wrażenie że jego istnienie zostało nieco przeoczone przez główny nurt matematyki, co nie znaczy że jest niedocenione. Po prostu nie spotkałem sie z jakąś systemową jego analiza, może poza jednym przypadkiem jego książki Marko Petkovsek, Herbert Wilf and Doron Zeilberger „A=B”. Książka choć zdecydowanie dotyczy kombinatoryki to jednak w kilku zdaniach dyskutuje zagadnienie formy kanonicznej wyrażenia. W szczególności autorzy piszą „A canonical form is a clear-cut way of describing every object in the class, in a one-to-one way. So in order to find out whether object A equals object B, all we have to do is find their canonical forms, c(A) and c(B), and check whether or not c(A) equals c(B).” Widać wyraźnie że autorzy książki doceniają znaczenie postaci kanonicznej – w ich ujęciu jest to fundamentalna postać syntaktyczna pozwalająca na rozstrzyganie o równości czy równoważności obiektów. Z drugiej strony postacie kanoniczne nie wydają się ( poza aspektem praktycznym) być systemowo analizowane na gruncie matematyki w aspekcie syntaktycznym. Oczywiście szeroko opisywane i głęboko badane sa ich własności wewnętrzne, ilość parametrów związana z bardzo ważnym pojęciem przestrzeni moduli i inne tego typu, matematyczne własności. Zarazem własności czysto syntaktyczne, związane z przekształceniami „napisów” nie są o ile wiem, systemowe analizowane. Właściwie wydaje sie to być rzeczą trywialną, analizować taki aspekt sprawy, ale z jednej strony moje zainteresowania odnoszą sie bardziej do systemów logicznych, a w nich syntaktyka ma wiele do powiedzenia. Z drugiej zaś strony, z wykształcenia jestem fizykiem, zaś obszar moich zainteresowań obejmował kiedyś technikę grupy renormalizacji. Można bez przesady stwierdzić, ze pewne formy grupy renormalziacji to w istocie systemowe badanie symetrii wyrażeń algebraicznych pod wpływem odwzorowania iteracji – o czym kiedyś chciałem napisać, i kto wie, może jeszcze napiszę… Tym samym zagadnienie jest osadzone całkiem konkretnie.

Zdefiniujmy aktorów:

Mamy zbiór obiektów {A = \{ a_1,a_2, \cdots \}} Standardowe odwzorowanie D ze zbioru A w grupę przemienną G polega na rozpatrywaniu formalnych obiektów

\displaystyle S = \Sigma_i g_i a_i

które można oczywiście sumować, wypadku grupy addytywnej:

\displaystyle g_1 a_1 + g_2a_1 = (g_1+g_2)a_1

Stosowne przekształcenie może być także zdefiniowane dla grupy przemiennej multiplikatywnej:

\displaystyle P = \Pi_i g_i a_i

i można je mnożyć:

\displaystyle (g_1 a_1) (g_2 a_1) = (g_1 g_2) a_1

I oczywiście pojawia się problem czy można mnożyć elementy {a_1} i {a_2} tak by nadać sens wyrażeniom {a_1 a_2} – czasami jest to możliwe, przykład poniżej.

Jeśli istnieje zbiór {B = \{ b_1,b_2, \cdots \}} oraz rodzina odwzorowań {f: A \mapsto B} o stosownych własnościach ( łączność, element neutralny, generalnie odwzorowania muszą być monoidem) to możemy mówić o kategorii zbiorów „A” i wszystkich konsekwencjach wynikających z faktu że zbiory A,B… tworzą wraz z odwzorowaniami kategorię. Poniżej mówimy o przypadkach w których B jest podzbiorem zbioru A i prosiłbym czytelnika o takie właśnie nastrojenie umysłu ;-).

Jeśli odwzorowanie D „jest zgodne” z całą maszynerią kategorii, to przeprowadza elementy zbioru A i zbioru {B=f(A)} w elementy grupy G, zachowując „funkcyjność” czyli stosowne diagramy kategorii są zgodne. Tym samym D staje sie funktorem z kategorii zbiorów A,B… w kategorię grup.

O ile czegoś nie pokićkałem to standardowy obrazek ( a jak pokićkałem, łatwo to naprawić…) a przynajmniej taki był mój zamiar ( niczego nowego tu nie opisałem).

Lepiej się myśli na przykładach, więc załóżmy teraz że zbiory A czy B to coś w rodzaju rodziny wielomianów, albo zdań logiki, reprezentowanych w rozmaitym zapisie, zaś odwzorowania f pomiędzy nimi to jakiegoś rodzaju przekształcenia tych obiektów ( dodawanie wielomianów, mnożenie, łączenie zdań logiki za pomocą operatorów negacji, alternatywy, koniunkcji itp.). Przekształcenia sa rozmaite, a wśród nich istnieje arcyciekawa rodzina przekształceń: przekształcenia do postaci kanonicznej.

Postać kanoniczna to specyficzna forma „syntaktyczna” obiektów, określona przez jakiegoś rodzaju wymóg „wygody”, „jednoznaczności”, „urody” – pojecie w zasadzie tyle estetyczne co praktyczne. Ma ona jednak tą cechę, że:

  • postać kanoniczna jest pojęciem syntaktycznym ( chodzi o formę graficzną, powiedzmy przedstawienie {(x - x_0)(x - x_2)...(x - x_k)} w wypadku wielomianów).
  • każdy obraz obiektu ze zbioru A pod wpływem przekształcenia do postaci kanonicznej – nadal jest obiektem zbioru A ( czyli postać kanoniczna wielomianu, lub zdania logicznego, nadal jest wielomianem lub zdaniem logicznym). Tym samy jest to rodzina przekształceń z zbioru A do A.
  • przekształcenie kanoniczne {K:A \mapsto A} ma własność, że jeśli wyróżnimy elementy w postaci kanonicznej jako zbiór C, to są oczywiście są podzbiorem elementów A. Teraz {K:A \mapsto C} jest suriekcją na C ( ale nie na A! ).
  • postać kanoniczna nie jest pojęciem syntaktycznie jednoznacznym, i choć w praktyce jest zwykle jasne z jaką postacią kanoniczną mamy do czynienia, to dany zbiór obiektów może mieć kilka „przedstawień kanonicznych” użytecznych w rożnych kontekstach.
  • jeśli mamy rozmaite formy kanoniczne dla obiektów z zbioru A, powiedzmy {C_1, C_2} ( z uwagi na rozmaite potrzeby, np. wielomian raz możemy prezentować w postaci iloczynowej {( x - x_0)(x - x_1)...(x - x_k)} a raz jako sumę {\Sigma x^k a_k}. Dla zdań logiki raz możemy je prezentować w postaci alternatywo-koniunkcyjnej a raz – jak w przykładzie poniżej z mojego bloga gdzie wprowadzałem grupę oczepioną homologii – interesowała nas forma kanoniczna zdania {a} lub { \neq a} z całkowitym pominięciem bardziej złożonej struktury wewnętrznej ) to istnieje odpowiedniość pomiędzy tak powstałymi zbiorami {C_1} i {C_2} ( gdyż reprezentują te same obiekty w rozmaitych postaciach normalnych. )
  • Nawet jeśli postać kanoniczna została określona, zwykle miewamy do czynienia z pewną dozą dowolności związaną z przedstawieniem z dokładnością do pewnego zbioru przekształceń, jak uporządkowanie zmiennych, permutacje itp.  ( na przykład w wypadku wielomianów w dziedzinie rzeczywistej, możemy wymagać by pierwiastki {x_0,...x_k} w wyrażeniu {(x - x_0)(x - x_2)...(x - x_k)} były uporządkowane w sposób rosnący. W wypadku liczb zespolonych wymóg taki nie występuje i mamy pewną dowolność/niejednoznaczność syntaktyczną. Proszę zwrócić uwagę że jest to cecha wewnętrzna przestrzeni nad którą budujemy wielomiany a nie jest to bynajmniej kwestia konwencji! )

Mamy zatem strukturę zbioru wraz z przekształceniami jego elementów do postaci kanonicznej i zapytamy: czy możliwe jest prawidłowe zdefiniowanie funktora D z kategorii takich obiektów do kategorii grup?

Wydaje sie oczywiście że jest to możliwe. Na przykład:

  • dla zdań logicznych postać kanoniczna to powiedzmy postać alternatywo-koniunkcyjna. Każdy jednoznacznie określony przez zdania {p_{i_{k}}} ciąg koniunkcyjny {a_i = p_{i_{1}} \land p_{i_{2}} \land p_{i_{3}} \land \cdots \land p_{i_{k}} } odwzorujemy pod wpływem funktora D w pewien obiekt {g_i a_i} zaś elementy alternatywy mapujemy jako „sumy”. Teraz każdemu zdaniu w postaci {a_1 \lor a_2} itp. ( gdzie {a_i} jest w postaci czysto koniunkcyjnej) przypiszemy element {g_1 a_1 + g_2 a_2}. Elementy odwrotne to oczywiście negacje. Jak widać odwzorowaliśmy postać alternatywo-koniunkcyjną zdania logicznego w grupę addytywną. Proszę zwrócić uwagę, że struktura wewnętrzna części koniunkcyjnej nie została określona. Nie założyliśmy np. żadnej formy uporządkowania zdań {p_{i_{k}}} ( i prawdę mówiąc dla ogólnego zbioru zdań logiki taki porządek właściwie nie istnieje, choć oczywiście można by postulować jakieś półśrodki, jak złożoność syntaktyczna mierzona np. głębokością drzewa syntaktycznego, albo ilością znaków albo na inne, nierównoważne zresztą, sposoby). Analizując ten przykład dalej widzimy że wynikowa grupa jest grupa przemienna generowana przez „grupy zdań” w postaci czysto koniunkcyjnej ( a więc {a_i = p_{i_{1}} \land p_{i_{2}} \land p_{i_{3}} \land \cdots \land p_{i_{k}} }). Gdybyśmy ograniczyli się do obiektów o maksymalnie N elementach, grupa ta będzie miała skończoną liczbę generatorów, przy czym każdy możliwy ciąg koniunkcyjny zdań będzie generatorem. W następnym kroku możemy „zejść głębiej” i narzucić w takiej przestrzeni kolejną postać kanoniczną wyższego rzędu, np. wprowadzając porządek w kolejności zdań w postaci koniunkcyjnej itp.
  • dla wielomianów ustalmy że postać kanoniczna to zaprezentowanie wielomianu jako iloczynu {(x - x_0)^{s_0} (x - x_1)^{s_1} ...(x - x_k)^{s_k} }. W zbiorze C wielomianów w postaci kanonicznej operacja iloczynu nie wyprowadza poza zbiór C ( a operacja sumy – syntaktycznie wyprowadza). Zatem wielomian w postaci kanonicznej {w_1} odwzorujemy w obiekt {g_1 w_1} wielomian {w_2} w wielomian {g_2 w_2} zaś wielomian {(g_1 g_2) w_1 w_2} nadal będzie w postaci kanonicznej. Właściwie nie mamy tu elementów odwrotnych – tym samym odwzorowanie wprowadza monoid a nie grupę. Rozpatrzmy ten przykład nieco szerzej. Ogólny wielomian zwykle przestawiany jest jako suma monomianów {\Sigma a_k x^k}. W naszym przypadku dokonamy oszustwa i będziemy rozważać wyrażenia w postaci iloczynowej, o krok bliższej pełnej formie kanonicznej, jak {(x-x_4) (x-x_0) (x-x_0) (x - x_1)(x-x_0)}. Zwróćmy uwagę że wyrażenia {(x-x_0) (x-x_0) (x-x_0) = (x-x_0)^2 (x-x_0) = (x-x_0) (x-x_0)^2} to trzy rożne zapisy tego samego wielomianu w postaci kanonicznej {(x-x_0)^3}. Widzimy tutaj że „ogólny wielomian w postaci iloczynowej ma znacznie więcej „swobody syntaktycznej” niż wyrażenie kanoniczne {(x-x_0)^3}. Właśnie o tego typu rozróżnieniach rozmawiamy.
  • rozważmy jeszcze raz przestrzeń wielomianów nad liczbami rzeczywistymi, tym razem o ustalonych ( i uporządkowanych!) pierwiastkach {x_0 \cdots x_k }. Wszystkie tego typu wielomiany mają kanoniczną postać {(x - x_0)^{s_0} (x - x_1)^{s_1} \cdots (x - x_k)^{s_k} }. Wielomian w takiej przestrzeni jest jednoznacznie zadany przez podanie stopni pierwiastków czyli przez ciąg liczb { s_0 , s_1 , s_2 , \cdots s_k }. Przekształcenie D mapuje wielomian {w} na obiekt {g w} przemiennej grupy multiplikatywnej. Mnożenie wielomianów w tym wypadku polega na dodawaniu stopni stosownych pierwiastków. Tym samym przestrzeń taka, wielomianów w postaci kanonicznej o ustalonych pierwiastkach rzeczywistych, jest równoważna k-wymiarowemu monoidowi {Z_{+}^{k}} liczb dodatnich z operacją dodawania. Wydaje sie możliwe uogólnienie tej konstrukcji by uwzględnić ujemne „krotności” pierwiastków i tym samym w miejsce monoidu wprowadzić grupę. A pełna przestrzeń wielomianów o ustalonych k pierwiastkach( oszukujemy jak poprzednio, wszystkie niech będą w postaci iloczynowej, oszukujmy dalej, pierwiastki są uporządkowane! )? Ponieważ wyrażenia {(x-x_0)^2 (x-x_0)} i {(x-x_0) (x-x_0)^2} uważamy tym razem za różne, ma ona znacznie bardziej złożoną strukturę!

Jak widać mamy zatem sytuację że D odwzorowuje obiekty zbioru A na elementy grupy (monoidu) G, a zarazem elementy podzbioru A – te elementy które sa w postaci kanonicznej – na elementy podgrupy G.

Mamy obraz całego zbioru A pod wpływem funktora D, oraz obraz całego zbioru A pod wpływem złożenia {D( K (A \mapsto C ) ) \mapsto Sub(G)} gdzie {Sub(G)} oznacza podgrupę G. Inaczej { img(DK) \subseteq img(D)} – elementy złożenia odwzorowań {DK} są podzbiorem elementów D – gdzie wszystkie odwzorowania działają na zbiorze A.

Jeśli mamy podgrupę to zachodzi pytanie: *Jak wygląda iloraz grupy G przez podgrupę związaną z elementami w postaci kanonicznej?*

\displaystyle H_x \stackrel{?}{=} img(D) / img(DK)

I tu mamy jakąś analogię z homologią….

W przykładzie ze zdaniami logicznymi powyżej wspomniałem o postaci kanonicznej zdefiniowanej głębiej, na kolejnym poziomie syntaktycznym. Analogia do grup homologii jest tu tym wyraźniej widoczna, bowiem mamy kolejne odwzorowanie, kolejne grupy ilorazowe itp. Właściwie być może należałoby całą konstrukcję oprzeć na pojęciu ogólnej postaci syntaktycznej, następnie zdefiniować drzewo syntaktyczne i na każdym jego szczeblu definiować stosowne odwzorowania i grupy ilorazowe. Zagadnienie zaczyna w ten sposób być bliższe tematom z jakimi mają do czynienia informatycy podczas konstrukcji parserów…

Z mojego wpisu na blogu wynika, że w pewnych przypadkach dla zbiorów zdań logiki grupa ilorazowa jest nietrywialna. Sytuacja taka miała miejsce dla pewnych szczególnych postaci odwzorowania D – badałem strukturę związaną z regułą modus ponens – co dla tego co tu opisano jest bez znaczenia, zaś postać kanoniczna którą rozważałem była *związana z negacją* czyli z formą zdania {a} lub {\neg a} . Przypadek taki oznacza że zbiór zdań jest ( syntaktycznie!) sprzeczny. W przypadku homologii odczepionej grupa ta może być trywialna ( w zbiorze zdań nie występują zdania {a} i {\neg a}, zbiór zdań jest niesprzeczny). Może ona jednak być także złożona z 2 elementów ( występuje zdanie {a} i {\neg a}, teoria jest syntaktycznie sprzeczna), albo z n elementów ( czego nie pokazałem ale przypuszczam że tak jest w wypadku zdań w paradoksie „koła kłamców” gdzie pierwszy z kłamców mówi: „następny kłamie!”, następny mówi to samo… i tak n – 1 osób, zaś ostatnia osoba mówi „następny mówi prawdę!” ). Widać więc że dla pewnych form kanonicznych i pewnych zbiorów – grupa ilorazowa może być nietrywialna, a zdarzenie to jest związane z ważną cechą zbioru A – w wypadku logiki była to sprzeczność ( syntaktyczna).

Jak to jest w wypadku innych zbiorów obiektów i innych postaci kanonicznych?

 PS. Przypomniałem sobie że jednak temat postaci kanonicznej, kanoniczności przekształcenia itp. padł w pewnym konkretnym kontekście. I szukając w głowie gdzie i kiedy to było przypomniałem sobie dawną batalię z zawodowymi matematykami jaką stoczyłem przy okazji pytania jakie zadałem na mathoverflow, Miało ono postać: Jakie pojęcia nie są ściśle zdefiniowane we współczesnej matematyce?”  Jak sie okazuje są profesjonalni ( i świetni!)  matematycy którzy nie są w stanie zrozumieć takiego pytania! Tak czy śmak, pytanie odniosło wielki sukces, udzielono na nie ( wbrew opinii grupy „nierozumiejących” ale trzymających władzę…) 29 odpowiedzi, a obejrzano je ponad 9 tysięcy razy! Jedna z odpowiedzi dotyczyła pojęcia kanoniczności. Nie jest wykluczone jednak że popełniam tu błąd ekwiwokacji

Pinky: Móżdżku, co będziemy robić dzisiaj wieczorem?

Mózg: Dokładnie to samo, zawsze, Pinky: zdobędziemy władze nad światem!

ModusPoens2

W poprzednich odcinkach opisałem pomysł odwzorowania zbioru zdań dowodu w systemie formalnym, na strukturę topologiczną typu zbioru simplicjalnego ( czyli zbioru złożonego z „porządnie” posklejanych simpleksów). Ponieważ spostrzegłem wiele niejasności i sam nie mam pewności czy konstrukcja ta jest sensowna, postanowiłem że zacznę od nowa, od najprostszych przypadków. Wpis ten ma pokazać na kilku obrazkach istotę konstrukcji dla pewnych elementarnych i bardzo krótkich dowodów. Będę się przy tym starał opisać całą konstrukcję raz jeszcze ( a więc z konieczności będę się powtarzał) wszakże obecnie wyrobiłem sobie nieco inny obraz całej sytuacji i mam nadzieję że będzie on bardziej czytelny niż poprzednie wpisy.

Zacznijmy od tego czym system formalny i dowód w ramach takiego systemu. System formalny to zbiór zdań logicznych złożony z zdań wyróżnionych, zwanych aksjomatami,oraz pewnego zestawu reguł przekształcania napisów zwanych regułami inferencji, dedukcji lub wnioskowania. Reguły wnioskowania akceptują pewną formę zdań ( w sensie czysto graficznym, syntaktycznym, jako napisy) i pozwalają na podstawie takich argumentów, uznać że do systemu wolno nam dopisać kolejne, określone w swojej formie syntaktycznej przez „mechanikę reguły wnioskowania”, zdanie. Modelowym przykładem reguły wnioskowania jest reguła modus ponens, mająca postać: jeśli w zbiorze zdań występuje zdanie { P= ''A \rightarrow B'' }, oraz zdanie {Q=''A''} to możemy dopisać zdanie {S=''B''}. Symbolicznie będę tą regułę zapisywał w formie {MP(P,Q) =S} co jest oczywiście równoważne zapisowi {MP(A \rightarrow B,A) = B}. Powiedzmy tutaj jasno że modus ponens jest regułą syntaktyczną zaś zdania w cudzysłowach,a wiec faktyczna postać syntaktyczna zdań, jest kluczowa dla jej zastosowania. Nie ma sensu używanie reguły {MP(P,Q) = S} dla „abstrakcyjnych” zdań {P,Q,S}. Jeśli poprawnie zastosowano regułę modus ponens, zdania {P,Q,S} miały określona ( i wypisaną jawnie powyżej) postać syntaktyczną ( to znaczy istniały takie zdania {A,B} że {P=''A=B''}, {Q=''A''} … itp. cudzysłowu używam w tym kontekście po to by jednoznacznie określić co jest zdaniem o które nam chodzi – mianowicie na przykład wyrażenie {P=''A \rightarrow B''} oznacza że istnieją zdania {A i B} takie że zdanie {P} ma postać jak w cudzysłowie. )

Dowodem zdania {S} w systemie logicznym zawierającym aksjomaty i regułę dedukcyjną modus ponens jest uporządkowany ciąg zdań { \{ a_{0},a_{1},a_{2} \cdots ,a_{n} \} } gdzie {a_{n} = S}, zaś zdania numerowane od {1, \cdots n-1} to aksjomaty, tautologie lub wcześniej dowiedzione zdania. Ponieważ wcześniej dowiedzione twierdzenia mają dowody ( a więc ciągi zdań…), możemy przyjąć ( zastępując każde zdanie w powyższym ciągu jego dowodem) że zdania {a_{1}, \cdots a_{(n-1)}} to aksjomaty lub tautologie. Dla każdego podciągu uporządkowanego { \{ a_{0} \cdots , a_{k},a_{(k+1)} \} } istnieje reguła wnioskowania ( inferencji, dedukcji), która pozwala wyprowadzić zdanie {a_{(k+1)}} z zdań {a_{0},\cdots , a_{k}}. Jest to klasyczna definicja dowodu, czytelnik spotkał sie z nią zapewne wielokrotnie.

Pewnej uwagi wymaga kwestia uporządkowania zdań w dowodzie. Co do zasady aksjomat lub zdanie uprzednio dowiedzione może się pojawiać na liście w dowolnym miejscu i dowolną ilość razy. Nowe zdania ( takie których nie ma na liście ) pojawiają się wyłącznie dzięki stosowaniu reguł dedukcji, w naszym przypadku – wyłącznie modus ponens. Jednocześnie, jak wspomnieliśmy aksjomaty, są zdaniami. Jest to konwencja różna od zwyczajowo stosowanej, mianowicie zwykle rozważa sie schematy aksjomatów. Oznacza to że np. wyrażenie ( założone jako aksjomat na przykład w systemie logiki Hilberta)

\displaystyle \phi \Rightarrow ( \psi \Rightarrow \phi )

nie reprezentuje zdania logicznego ale cały zbiór zdań, powstałych przez zastąpienie występujących w nim zmiennych {\phi,\psi} przez wszelkie możliwe i poprawne składniowo kombinacje zdań elementarnych ( które oznaczamy {P,Q,S...}) uzyskane przez zastosowanie spójników logicznych ( alternatywa, koniunkcja, implikacja, negacja itp.). Tym samym zbiór aksjomatów jest oczywiście zbiorem nieskończonym, przeliczalnym, zaś jego numeracja może odpowiadać pewnej arbitralnej ale określonej konwencji na przykład zdefiniowanej za pomocą złożoności składniowej zdania itp. Nie jest to w tej chwili kwestia istotna, głównie z tego powodu, że standardowy dowód to skończony ciąg zdań, a zatem i zawiera skończoną liczbę „realizacji” schematu aksjomatu i każde z tych zdań może mieć przypisany kolejny numer ( a nawet możemy przypisać różne numery tym samym zdaniom, np. ten sam aksjomat może być zdaniem 2, 10 i 12 na liście). Zauważmy, że choć w dalszym ciągu wywodu będę używał pojęcia dowodu, jak zdefiniowane powyżej, nie ma tu potrzeby by ograniczać się do dowodów konkretnych i określonych twierdzeń. Możemy powiedzieć, ze badamy po prostu uporządkowane ze względu na regułę modus ponens ciągi zdań z wyróżnionym, skończonym podciągiem startowym zwanym zbiorem aksjomatów i tego typu ogólność będziemy stale utrzymywali.

Załóżmy że mamy zdania {P,Q,S} o budowie syntaktycznej jak wypisana powyżej. Zdaniom tym przyporządkujemy graf, w postaci jak na rysunku poniżej:

ModusPoens

Prosiłbym by czytelnik zwrócił uwagę, że graf jest skierowany, porządek ten zaś wynika z uporządkowania zdań w regule modus ponens. Przyjęliśmy mianowicie konwencję w której pierwsze zdanie to implikacja, drugie to przesłanka, a trzecie to następnik implikacji. Konwencja ta nie jest całkowicie arbitralna i choć właściwie nigdzie nie będziemy w dalszym ciągu się na nią powoływać ponad fakt, że została określona i będziemy konsekwentnie jej używać, to ma ona dalece idące konsekwencje koncepcyjne. Nie przemyślałem tego faktu dostatecznie głęboko, wszakże konwencja wynikająca z korespondencji Currego-Howarda każe odnieść modus ponens do pojęcia „aplikacji funkcji” i można w tym kontekście przyjąć że nasza konwencja oznacza iż podajemy wpierw funkcję ( której odpowiada implikacja) a następnie jej argument czyli przesłankę implikacji, zaś w wyniku otrzymujemy następnik implikacji. Tymczasem w grafie postępujemy odwrotnie i odwracamy kolejność strzałek tak by pierwsza była przesłanka ( argument funkcji) który zgodnie ze strzałkami trafia pod działanie funkcji ( implikacja) i w wyniku dostajemy następnik implikacji. Owo odwrócenie kolejności ma znaczenie dla dalszych rozważań – stawiając przesłankę i następnik po „przeciwnych stronach” obiektu który zostanie dalej zdefiniowany a zwany jest plakietką ( proszę czytelnika o cierpliwość, kolejny przykład wyjaśni co mam tu na myśli).

Przy tak zdefiniowanej reprezentacji graficznej reguły modus ponens możemy kolejne użycia jej w dowodzie przypisać kolejnym trójkątom a w wyniku otrzymamy graf złożony z zorientowanych trójkątów posklejanych wierzchołkami. Graf ten w swoich wierzchołkach zawiera zdania, zaś jego krawędzie to związek pomiędzy wierzchołkami polegający na tym że wystąpiły one w jednej regule modus ponens. W tym miejscu następuje pewien poważny przeskok koncepcyjny. Dotychczas rozważaliśmy grafy, teraz dołączmy do naszego postępowania także to co znajduje się pomiędzy ich krawędziami. Będziemy uważać, że rysunek powyżej przedstawia nie tyle graf z wierzchołkami i krawędziami co element powierzchni – czyli 2 wymiarowy simpleks i konsekwentnie, graf reprezentujący dowód stanie się „zlepkiem” takich simpleksów, czyli kompleksem simplicjalnym ( bo z konstrukcji złączenie następuje wyłącznie w wierzchołkach lub wzdłuż krawędzi – o tym za chwilę).

Podkreślmy że w zbiorze tym simpleks występuje tylko tam, gdzie 3 zdania będące jego wierzchołkami są użyte w pewnej regule modus ponens. Nie ma żadnej możliwości uzupełnienia krawędzi ( np. do postaci simplesków 3 wymiarowych czyli czworościanów posiadających pewną objętość) tam gdzie reguła modus ponenes nie występuje. Operacje wstawiania i usuwania krawędzi, są istotne dla dalszych uogólnień, na razie jednak nie jestem w stanie podać ich spójnej definicji.

Typową sytuacją w zbiorze o jakim piszemy jest wspólny wierzchołek pomiędzy dwoma regułami modus ponens, to jest następująca sytuacja: istnieją zdania {A,B,C,D,E} takie że {MP(A,B) =C} oraz {MP(C,D)=E}. Jak widać mamy tu dwa simpleksy {(B,A,C)} oraz {(D,C,E)} ( zwracam uwagę na zmienioną kolejność wierzchołków w geometrycznej reprezentacji w stosunku do kolejności w regule modus ponens!) które mają wspólny wierzchołek.

Inna możliwa sytuacja to wspólna krawędź:

\displaystyle MP(A,B)=C

\displaystyle MP(B,C)=D

W tym przypadku mamy simpleksy {(B,A,C)} oraz {(C,B,D)} posiadające wspólna krawędź {(B,C)} czyli wspólny simpleks jednowymiarowy. Przykład takich zdań to: {A=''(s \rightarrow q) \rightarrow s''}, {B=''s \rightarrow q''}, {C=''s''}, {D=''q''}. Proszę sprawdzić że relacja powyżej jest spełniona.

Ciekawym pytaniem jest czy możliwe jest zbudowanie czworościanu, czyli simpleksu 3-wymairowego, o właściwej strukturze syntaktycznej zdań tak by każda ściana reprezentowała modus ponens i czworościan był właściwie zorientowany ( na zewnątrz, regułą lewej dłoni). Innymi słowy czy możliwa jest następująca konstrukcja:

\displaystyle MP(A,B)=C

\displaystyle MP(B,C)=D

\displaystyle MP(A,B)=D

\displaystyle MP(C,A)=D

dla różnych zdań {A,B,C,D}. Podkreślmy że ostatni warunek jest tu istotny. Polecam czytelnikowi jako ćwiczenie z zabawy tautologiami próbę zbudowania takiego obiektu. Zwrócę tu dodatkowo uwagę, że choć jak przypuszczam w ogólności nie jest to możliwe ( regułą modus ponens nie jest tranzytywna, własność tranzytywności ma natomiast sama implikacja), to być może stosowna konstrukcja jest możliwa przy dodatkowym założeniu o prawdziwości występujących w niej zdań np. że prawdziwe jest zdanie „B i C” itp…

Przy przyjętych założeniach, powstały graf wyraża wyłącznie strukturę wynikła ze stosowania reguły modus ponens. Odwzorowanie powyższe, pomiędzy dowodem a kompleksem symplicjalnym całkowicie pomija wewnętrzną strukturę zdań. Nic więc dziwnego że właściwie niewiele z niego wynika. Chciałbym dodać do obrazu powyżej informację na temat sprzeczności w dowodzie.

Przypomnijmy że dowód jest sprzeczny, kiedy na liście jego zdań występuje zarówno zdanie {A} jak i {\neg A}. Oczywiście w praktyce szukamy dowodów niesprzecznych, nic jednak nie stoi na przeszkodzie by analizować i sprzeczne. Co więcej, we wszystkich rozważaniach rozpatrujemy jedynie konsekwencje syntaktyczne, tak więc nie mówimy np. o wartościowaniu zdań, nie analizujemy które z nich są prawdziwe itp. Nie ma więc przeszkód by analizować uporządkowane ciągi zdań zawierające także i wyrażenia {A} i {\neg A}. Przy takich założeniach ciąg zdań, który nazywamy dowodem nie jest ciągiem sprzecznym tak długo jak długo nie występuje w nim para zdań sprzecznych! O ile w logice czy teorii modeli zwykle stosuje sie natychmiastowe uogólnienie polegające na dołożeniu do danego zbioru zdań, wszystkich ich konsekwencji syntaktycznych lub semantycznych, i o sprzeczności mówi sie w kontekście takie, nieskończonego obiektu, o tyle tu podkreślmy wyraźnie rozmawiamy wyłącznie o skończonych zbiorach zdań. Tym samym zbiór zdań, wśród którego konsekwencji występują sprzeczności, będzie przez nas rozważany jako zbiór niesprzeczny tak długo, jak długo owe zdania sprzeczne nie zostaną jawnie wyprowadzone ( dołączone do zbioru, doklejone kompleksu simpleksów) regułą modus ponens.

Rozważmy bardzo prostą zabawkową teorie o następujących aksjomatach:

\displaystyle a_{0}. A \rightarrow A

\displaystyle a_{1}. A

Bezpośrednie zastosowanie {MP(a_{0},a_{1} )} dale w wyniku zdanie A. Przedstawimy tą sytuację za pomocą następującego grafu.

MP-A-A

Tak jak na pierwszym rysunku, relacja modus poens między zdaniami jest przedstawiona za pomocą ciągłych, skierowanych linii, zaś kierunek przepływa od przesłanki przez implikację do następnika implikacji. Tym razem jednak każde kolejne zdanie, poprzednio reprezentowane jako punktowy wierzchołek, zostało pokazane jako odcinek obdarzony kierunkiem. Można uznać że w naszym odwzorowaniu każdemu wierzchołkowi przyporządkowaliśmy uporządkowaną parę punktów. Nadal moglibyśmy odwoływać sie do obiektu na rysunku powyżej jako do simpleksu ( dokonując dodatkowych odwzorowań wierzchołków w grupę alternującą itp. wierze że taka konstrukcja jest możliwa, zapewne gdyby ja wykonać teoria zyskałaby na ścisłości ) wszakże dla prostoty przedstawienia konsekwencji takiego rozszerzenia będę obiekty jak na rysunku powyżej nazywał plakietkami.

Po pierwsze linie ciągłe nadal reprezentują regułę modus ponens i ich orientacja jest nadal ustalona w taki sam sposób jak wcześniej. Zwróćmy uwagę że zdanie {A} występuje na rysunku dwukrotnie – raz jako przesłanka a raz jako następnik. jest to jednak to samo zdanie, możemy zatem ‚skleić” naszą plakietkę. Przymnijmy że mówimy tu o „geometrycznej” czy „topologicznej” reprezentacji, a więc o powierzchni. Otrzymamy w wyniku figurę topologicznią izomorficzną z powierzchnią boczną walca. Zauważmy że cały efekt uzyskaliśmy dzięki stosownej orientacji zdania {A} w wierzchołku w którym występuje on jako następnik implikacji ( wniosek).

Jako kolejny przykład rozważmy następującą, inną, teorię:

\displaystyle b_0. A \rightarrow \neg A

\displaystyle b_1. A

Bezpośrednie zastosowanie {MP(b_{0},b_{1} )} daje oczywiście zdanie {\neg A}. Oczywiście „teoria” którą się tu bawimy jest jawnie sprzeczna ( i faktycznie regułą modus ponens produkuje nam sprzeczność syntaktyczną po jednokrotnym jej zastosowaniu). Tym razem reprezentacja graficzna ma następująca postać:

MP-A-notA

Proszę zwrócić uwagę na odwróconą kolejność wierzchołków reprezentujących zdanie {\neg A}, oraz na to że kierunki strzałek reprezentujących przepływ w regule wnioskowania są identyczne jak na obrazku dla trywialnej teorii niesprzecznej. Otrzymany obiekt zawiera, podobnie jak poprzedni graf, dwukrotnie to samo zdanie {A} tyle że „inaczej podłączone”. Przy takiej reprezentacji, sklejenie którego musimy dokonać ( biały punkt do białego, czarny do czarnego) daje nam klasyczną reprezentacje wstęgi Mobiusa czyli powierzchni nieorientowalnej.

Co więcej, możemy przyjąć, że krawędzie  plakietki indukują na niej orientację, przy czym orientacja wynika owa z faktu, ze w regule modus ponens przesłanka i implikacja są zdaniami dowiedzionymi ( bo występują w zbiorze zdań z numerami wcześniejszymi niż następnik implikacji ). Tym samym załóżmy że plakietki możemy zorientować zgodnie z kierunkami „większości strzałek” reguły modus ponens.

Cały pomysł jaki chciałbym przeanalizować opiera sie na konstatacji że moja intuicja podpowiada mi że w przedstawionej reprezentacji, dowodom syntaktycznie sprzecznym, odpowiadają powierzchnie nieorientowalne, zaś dowodom niesprzecznym – orientowalne.

Zauważmy że „sklejenie” plakietek które pokazano na rysunku, zachodzi wzdłuż krawędzie przerywanych reprezentujących zdania ( a nie wzdłuż krawędzi reprezentujących reguły modus ponens). Jeśli teoria jest sprzeczna to wśród zdań które generuje sa zdania {A} i {\neg A}. Oznacza to że istnieją dwie krawędzie o przeciwnych orientacjach, które zostaną sklejone. Każda z nich jest jednocześnie jedną z krawędzi plakietki reprezentującej odpowiedni modus ponens. Zauważmy, że choć w teorii mogą istnieć izolowane plakietki ( bo możemy wypisać niezwiązaną z innymi regułę modus ponens), to jednak fakt że teoria jest sprzeczna oznacza że co najmniej jedna plakietka ( co najmniej ta na rysunku powyżej) jest sklejona. Istnieje tym samym droga zamknięta przechodząca po plakietkach od krawędzi {A} do {\neg A}. Wzdłuż tej drogi niemożliwe jest określenie orientacji plakietek ( orientacja ta nie musi mieć nic wspólnego z orientacjami indukowanymi z reguły modus ponens. Być może ma – ale bynajmniej tego nie twierdzę, wymaga to analizy).

Odwrotnie, niech pewna składowa spójna powierzchni sklejonych plakietek będzie nieorientowalna. Istnieje wówczas droga zamknięta, oraz krawędź zdaniowa przez którą przechodzi ona po plakietkach ( bo plakietki są sklejone wyłącznie wzdłuż krawędzi zdaniowych), wzdłuż której nie można określić orientacji. Jednocześnie orientacje lokalne wzdłuż krzywej raz indukują na owej krawędzi zdaniowej orientację typu {A} a raz ( „z drugiej strony”) {\neg A} – czyli teoria jest sprzeczna.

W dalszej części chciałbym zająć się kwestią definicji odwzorowań charakterystycznych dla teorii homologii – są to odwzorowania i-tej ściany {d_i} simpleksu ( ang. face map ) i odwzorowania degeneracji {s_i} ( ang. degeneration map). Pierwsze z ich mapuje simpleks na ścianę przeciwległą do i-tego wierzchołka, drugie zaś mapuje simpleks n wymiarowy na zdegenerowany o (n+1) wymiarach, poprzez powtórzenie i-tego wierzchołka. Zagadnienia te nie sa oczywiste gdyż dopisanie lub eliminacja wierzchołków odpowiada eliminacji lub dopisywaniu zdań do reguł modus ponens.

wyciag.jpg     Średniowieczny podróżnik przemierza, na grzbiecie wielbłąda, Jedwabny Szlak. Wiezie cenne perkale, jedwabie i korzenne przyprawy do domu swego ojca – znanego kupca w Wenecji. Na jego drodze czają sie rozliczne niebezpieczeństwa, zbójcy, magowie władający dżinami, diabeł kuszący go nieczystym ciałem sprzedajnych kobiet, ale najstraszliwsze z nich to pustynia. Aby ją przebyć, nie wystarczy czyste sumienie, odwaga i dobre zwierzęta. Trzeba czegoś więcej. Trzeba mądrości. I zapasów wody. Na wielu odcinkach podróż przebiega od oazy do oazy, i jeśli w drodze pomiędzy nimi wody braknie, podróżnik nie da rady zawrócić, ani nie dojdzie do koniecznego dla uzupełnienia zapasów źródła. trzeba więc obserwować słońce, chmury, ptaki i skały. Mieć zaufanego przewodnika i racjonować zapasy. Przebędzie pustynie tylko ten, kto będzie miał dostatecznie dużo pełnych bukłaków i tykw, wypełnionych życiodajnym płynem. Komu bukłaki pękną, zginie. Życie podróżnika zależy od wody i tego czy zdoła na trasie podróży utrzymać w dobrej kondycji zwierzęta. Przejść da rady tylko karawana. Pojedynczy człowiek nie zdoła poprowadzić dosyć wielbłądów, nie uniknie ryzyka. Istnieje pewien minimalny rozmiar wielkości grupy podróżników – może jest to dziesięciu? może dwudziestu? Mniej ludzi nie zdoła pokonać pustyni…

    Ludzkość rozwija sie na planecie Ziemia od jakichś pół miliona lat. Opanowaliśmy wiele niszy, a kluczowym dla tego faktu, obok rozmaitych cech gatunkowych, jest oczywiście zdolność podróżowania. Czym byłyby nasze zdolności gdybyśmy egzystowali przypisani do miejsca jak drzewa? Dlaczego tak łatwo się nam podróżuje? Och, trywialna odpowiedź, ale bynajmniej nie mniej przez to prawdziwa jest taka: bo przejście z miejsca A do miejsca B nie wymaga nadmiernego wysiłku jeśli miejsca A i B są nieodległe. By przejść kilka metrów wystarczy zrobić kilka kroków. A każdą długą drogę lądową można podzielić na mniejsze kawałki i przejść etapami. Góry można ominąć, rzeki przepłynąć. Da sie żyć. Inaczej jest z podbojem kosmosu. Aby wystrzelić sztucznego satelitę, należy nadać mu pierwszą prędkość kosmiczną wynosząca około 7.9 kilometra na sekundę. Każde ciało które będzie miało prędkość mniejszą ( mówimy o ruchu bezwładnościowym, bez stałego napędu. ) wystrzelone – spadnie z powrotem na powierzchnię Ziemi. Stąd znacznie łatwiej dopłynąć nawet i do Ameryki niż wzlecieć na orbitę. Do Ameryki można płynąć powoli, na orbitę – trzeba szybko. Konieczne jest pokonanie bariery potencjału ziemskiego pola grawitacyjnego, a dopóki nie dysponuje sie technologią pozwalającą ją pokonać, wszelkie działania są bezskuteczne. nie pomoże ci dwa razy większa armata. Nie pomoże Ci legion biskupów modlących się o błogosławieństwo. I nie pomoże Ci dłuższy namysł. Chcesz polecieć – musisz mieć prędkość większa niż prędkość progowa.

Chcemy zamienić pewną ilość wody w parę. Stawiamy garnek na piecu i czekamy. No tak, jak poczekamy długo – wda wyparuje, my jednak jesteśmy niecierpliwi, chcemy by woda wyparowała jak najszybciej. Oczywiście musimy zacząć ją podgrzewać. Woda wrze. Paruje intensywnie. Aby ją odparować musimy jej dostarczyć pewnej ilości ciepła. Jeśli nie dostarczymy tej pewnej – progowej – ilości energii – woda nie wyparuje w całości. Ile energii jest konieczne – określa ciepło parowania wody ( stała przy zadanej temperaturze i ciśnieniu). Aby odparować 1 kg wody musimy dostarczyć około 2 257  kJ utrzymując wodę w temperaturze 100 stopni Celsjusza. Jeśli tej energii nie dostarczymy – to pomijając inne procesy ( np. powolne parowanie wynikające z naturalnej dyfuzji miedzy ośrodkiem gazowym a ciekłym) woda nie wyparuje.

Powyższe i wiele innych zjawisk mają pewien uniwersalny element – który nazywa sie efektem progowym. W bardzo wielu sytuacjach, aby jakieś zjawisko fizyczne ( lot kosmiczny, przełączenie w tranzystorze, zapłon gwiazdy ) bądź proces techniczny ( spalanie, wypiek, wybuch ) mogło mieć miejsce, rozpocząć działanie, konieczne jest pokonanie pewnej bariery. Pochodzenie tej bariery bywa rozmaite, odgrywa ona rozmaite role. W technice czasami bariery są pożytecznym zjawiskiem, na przykład umożliwiającym sterowanie ( włączanie i wyłączanie) danym procesem. W większości wszakże wypadków, wydaje sie że bariera konieczna do pokonania, by uzyskać pożądany efekt, jest zjawiskiem niepożądanym. Ileż łatwiejsze byłoby życie gdyby zjawiska zawsze były liniowe, a zwiększenie wysiłków zawsze przynosiłoby proporcjonalne zwiększenie efektów. Niestety tak nie jest. W większości wypadków jest zgoła odwrotnie – zanim nie pokonamy jakiejś bariery, efekt wydaje się być zgoła nieobecny, a nasze, nieraz kosztowne, starania, nie przynoszą żadnych użytecznych efektów. Bariery fizyczne i techniczne są zwykle wewnętrzną cechą procesów, niemożliwą, lub szalenie trudną do usunięcia lub ominięcia. To właśnie owe fizyczne bariery odpowiadają np. za brak kontrolowanej fuzji termojądrowej ( w tym wypadku jest to bariera odpychania kulombowskiego jąder atomowych ) czy brak tanich podróży w kosmos ( p. wyżej).

Wszakże obok barier fizycznych, istnieją  odbijają sie na naszym życiu  także inne bariery: niepełnosprawni zmagają sie z idiotycznie zaprojektowanymi elementami urbanistycznymi, członkowie mniejszości z ksenofobią i uprzedzeniami, granice awansu kobiet wyznaczane sa częściej przez role partykularne opinie co do społecznych niż przez realne kwalifikacje itp. Istnieją oczywiście starania nakierowane na przeciwdziałanie takim sytuacjom, i niektóre z nich przynoszą efekty! Właściwie to w odniesieniu do ostatnich kilku spraw, można by powiedzieć, że każda bariera – dotycząca niepełnosprawnych, mniejszości czy kobiet, a także rozliczne bariery ekonomiczne i gospodarcze, zwykle sa mniej lub łatwiej ale zawsze możliwe do pokonania jeśli postawimy sobie ich pokonanie za cel. Czasami zmiany sa śmiesznie wprost łatwe do wprowadzenia, a trywialne rozwiązanie nie dosyć ze istnieje to wymaga nieraz niewiele więcej niż odrobiny dobrej woli!

Wiele się mówi w Polsce, o wspomaganiu przedsiębiorczości. Wszakże od wielu, wielu lat, utrzymuje sie w Polsce istnienie bariery która z oczywistych powodów powinna zostać zniesiona. Mowa oczywiście o tzw. minimalnej składce na ZUS. Trudno o drugą rzecz bardziej szkodliwą dla przedsiębiorczości, a jednocześnie o bardziej kretyńską konstrukcję ekonomiczna. Oto na rynku przedsiębiorczości minimalna składką na ZUS jest właśnie progiem jaki musi pokonać przedsiębiorstwo ( a mówimy w tej skali zwykle o mikrofirmie złożonej z jednego pracodawcy, prowadzącego własną działalność gospodarczą). Człowiek taki stoi przed dylematem – rozruch firmy to same koszty, zysków nie ma albo sa zgoła mikroskopijne, I tak przez rok, dwa lata. W tym czasie podatki płaci sie proporcjonalnie do zysku, ale ZUS, w określonej i niemałej wysokości. Zakładając że człowiek taki nie jest krewnym bogatego człowieka ( nie mamy wówczas do czynienia z mikrofirmą ale z przybudówka większego kapitału), wybór jest tylko taki: zamykamy/poniechamy działalność gospodarczą albo działaby w szarej strefie oszukując państwo i nie płacąc podatków wcale.

Tymczasem rozwiązanie jest banalnie proste. Firmy które generują zbyt mały zysk, lub nie generują zysku wcale powinny zostać zwolnione z opłat w kwocie minimalnej składki na ZUS. Należy koniecznie usunąć efekt progowy. W jego miejsce należy wprowadzić stosowną składkę linową, o wysokości zależnej od zysku i tak dobranej by w wypadku osiągnięcia kwoty minimalnej dochodów odpowiadała minimalnej składce na ZUS. Po prostu zamiast progu – należy interpolować zmienny podatek tak by płacony był od pewnych minimalnych kwot zysku, a uzyskiwał wartość minimalnej składki na ZUS tam gdzie mowa o dochodach gwarantujących po opodatkowaniu – płacę minimalną. Zmiany takie mają same zalety:

  1. dotknięciem czarodziejskiej różdżki okazałoby sie że opłaca sie rejestrować niskodochodową działalność gospodarczą. Kto nie kupi spokoju i bezpieczeństwa od kontroli fiskalnej, jeśli będzie go to kosztowało tylko pewien procent zysku, powiedzmy 20 – 50 PLN miesięcznie?
  2. lepiej mieć bardzo niskie składki i prawo do bardzo niskiej emerytury, niż nie mieć składek i emerytury wcale. Dla ZUS także byłoby lepiej mieć większe – pomimo ze z drobnych kwot – wpływy niż nie mieć ich w ogóle!
  3. można czasowo odstąpić od ściągania składek na ZUS dla kwot poniżej opłacalności ściągania ( kwota ta mogłaby być zmienna i zależna od warunków ściągalności, zdolności organizacyjnych ZUS itp.). Urzędników nam nie brak – nie chodzi o to by dołożyć im roboty przy ściąganiu 1 PLN miesięcznie. Wszakże pomimo że można odpuścić takim przedsiębiorcom symboliczne składki – będą oni zarejestrowani. państwo będzie wiedzieć o ich działalności, będą oni objęci nadzorem gospodarczym ich działalność będzie sie cywilizować.
  4. kim sa tacy niskodochodowi przedsiębiorcy? To zwykle okresowo działający pracownicy na rynku budowlanym, ogrodniczym, ale także młodzież usiłująca żyć z korepetycji, prac w ogródkach, i własnych pomysłów. Zwłaszcza ci ostatni mogliby na takich zmianach zyskać, a niejeden z nich to bogaty w innowacyjne pomysły młody człowiek bez kapitału i dochodów! Ci ludzie obecnie działając w szarej strefie są podatni na oszustwa ze strony najmujących ich pracodawców, kredytodawców itp.. System pozbawiony progu dla niejednego z nich mógłby stać się początkiem poważniejszej działalności gospodarczej – nie wiemy może miałoby to dobroczynne skutki. System w którym muszą oni zaczynać po balcerowiczowsku – od oszustwa – jest systemowym tolerowaniem patologii.

Na koniec kąśliwa uwaga – kto nie chce niech nie czyta: dlaczego tego typu próg egzystuje a nikt z szacownych profesorów na stanowiskach ministrów  finansów nie zamierza problemu rozwiązywać. Odpowiedzi są jak zwykle dwie: (1) ministrowie to głupcy bez szerszych horyzontów intelektualnych. Po prostu pomimo całej swojej paplaniny są to ludzie kiepsko wykształceni, nierozumiejący matematyki, prymitywy, prostaki. Całe życie  szukają okazji do kariery i uzyskawszy ją skupiają sie na pobieraniu jak największych pensji i budowaniu dalszych awansów, analiza tego co dotyczy gospodarki przekracza ich zdolności rozumu. Posunięcia prawne kto©e forsują są zwykle projektami lobbystów, a ci reprezentują zwykle wielki prywatny biznes.  Odpowiedź ta jest niewątpliwie bardziej prawdopodobna. Odpowiedź (2) ministrowie finansów są powiązani z rozmaitymi instytucjami które korzystają z takiej sytuacji. Korzyść ta ma charakter np. mniejszej konkurencji,  utrzymywaniu w podległości ekonomicznej sporej części pracowników najemnych, w stanie bliskim spodziewanej penalizacji itp. metody kontroli społecznej. Odpowiedź ta jest mniej prawdopodobna, jak każda teoria zakradająca celowe działanie w miejscu zwykłe głupoty, wszakże i tu coś jest na rzeczy. Jak wiadomo podstawowym zmartwieniem przedsiębiorców w Polsce jest brak jeszcze tańszej siły roboczej – jakikolwiek spadek bezrobocia poniżej 10% skutkuje natychmiastową zmasowaną reakcją na prawa pracownicze i groźby otwarcia granic dla pracowników np. z Ukrainy.

MathTextOntology-pasek

 

 

     W tym wpisie opiszę na prostym przykładzie ;-) w jaki sposób wygenerować własny parser za pomocą antlr. Po zainstalowaniu i skonfigurowaniu zgodnie z instrukcją na stronie ( różne tam systemowe aliasy żeby wszystko się uruchamiało ze ścieżek bezszmerowo), uzyskujmy trzy elementy w systemie: zainstalowany program antlr o którym za chwilę napiszę więcej, program grun – a właściwie spreparowany alias systemowy pewnego złożonego polecenia pozwalający na uruchamianie kodu generowanego przez antlr ( o czym za chwilę) oraz oczywiście zainstalowaliśmy stosowną wersję java, jak napisano w instrukcji instalacji. Jak ktoś chce wykonać własnoręcznie to co opisałem poniżej, musi mieć zainstalowane wszystkie trzy komponenty. Nie będę opisywał tych szczegółów bo są dobrze ujęte na stronie antlr, a ponadto dla prostej nauki można użyć AntlrWorks który nie wymaga żadnych szczególnych konfiguracji i dostarcza „wszystko w jednym” i to dla rozmaitych systemów operacyjnych, a na dodatek obok tego co opisałem poniżej, sprawdza poprawności, koloruje i wyświetla diagramy składniowe dla podanej gramatyki.

    Przejdźmy do samego antlr. Wpis omawia antlr w wersji 4, czyli antlr4. W stosunku do antlr3 są spore różnice, in plus, więc kwestie antlr3 zostawmy na boku, zaznaczając tylko, że jak ktoś czyta gdziekolwiek artykuł o antlr powinien zadać sobie jako pierwsze pytanie o jakiej wersji mowa bo różnice sa spore.

    Antlr jest narzędziem które na wejściu przyjmuje definicję gramatyki języka i na jej podstawie generuje kod programu który potrafi ten język analizować. Nie będę wnikał tu zbyt głęboko w temat, ale właściwie mamy tu do czynienia z definicją gramatyki w postaci BNF zapisaną w specyficzny dla antlr sposób. Pominę także detale związane z poprawnością gramatyki i ograniczeniami jakie niesie antlr – szczegóły sa do odnalezienia w dokumentacji – antlr pozwala na gramatyki wprost lewo rekurencyjne – jak w przykłądzie poniżej, ale nie pozwala na gramatyki niejawnie lewo rekurencyjne ( generacja kodu kończy sie błędem).
Jako przykład niech posłuży nam gramatyka wyrażeń numerycznych obejmujących liczby naturalne oraz ich dodawanie, odejmowanie, mnożenie i dzielenie, oraz nawiasy. Definicja takiej gramatyki ma postać pliku .g4 który wygląda następująco ( numery na początku wierszy nie są częścią pliku):

———————-Expr.g4—————–
(1) grammar Expr;
(2) progr: (expr NEWLINE)*
(3) ;
(4) expr: expr (‚*’|’/’) expr
(5)          | expr (‚+’|’-‚) expr
(6)          | INT
(7)          | ‚(‚ expr ‚)’
(8)          | expr NEWLINE
(9) ;
(10) NEWLINE : [\n]+ ;
(11) INT : [0-9]+ ;
—————————————

    Opiszmy jaki jest cel użycia takiej gramatyki i co z nią potrafi zrobić antlr, a przy okazji wyjaśnimy znaczenie poszczególnych linii pliku. Gramatyka pokazana powyżej nazywa sie Expr, co definiuje linia (1) pliku. Opisuje ona reguły interpretacji pewnego rodzaju tekstu – czyli zespołów znaków tekstowych. Wyrażenia te, jeśli są prawidłowo zbudowane, powinny dać sie zinterpretować w kontekście tej gramatyki, dla siebie powiedzielibyśmy że jako wyrażenia arytmetyczne, a dla programu – jako zgodne z gramatyką ciągi znaków. Wyrażenie takie to progr który jest pewną liczbą wyrażeń expr zakończonych znakami NEWLINE ( linie (2)-(3) pliku). Wyrażenie expr zdefiniowane w liniach (4)-(9) składa sie z wyrażeń typu expr NEWLINE – ( mamy tu jawnie lewą rekurencję)   lub   „nawias” expr „nawias” lub INT lub expr  ( „+” lub „-„ ) expr itp. Kreski pionowe na początku linii (5) i następnych oznaczają alternatywy. Na końcu w liniach (10) i (11) zdefiniowano co znaczy NEWLINE i INT w składni przypominającej wyrażenia regularne. Przykłady bardziej – niekiedy znacznie bardziej – złożonych gramatyk można znaleźć na tej stronie. Polecam zwłaszcza zerknięcie na gramatykę jakiegoś języka programowania jak choćby java czy python, oraz gramatykę opisująca plik csv.

    Program komputerowy analizujący wyrażenie zgodne z powyższą gramatyką, na przykład „(5*(3+4) -12)/(2+3*(6-3))”, powinien prawidłowo rozpoznać elementy wyrażenia, takie jak „(3+4)”, określić ich „znaczenie” i poprawność. Nazwijmy taki program analizatorem. Proces tworzenia analizatora który będzie dokonywał interpretacji takich wyrażeń ma wiele uniwersalnych cech, niezależnych od szczegółów gramatyki zdefiniowanej powyżej. Elementy te powtarzają się zarówno przy budowie analizatorów dla wyrażeń jak „(3+4)” jak i w przypadku analizatorów języka naturalnego, języka SQL, analizatorów sprawdzających konstrukcje języka C++ lub pliki xml. Twórcy antlr stworzyli narzędzie które w oparciu o definicję gramatyki, buduje szkielet programu, w jednym z kilku dostępnych języków, który programista może zmodyfikować dostosowując je w trakcie pracy do własnych potrzeb. Antlr jest zatem programem który generuje programy ( a raczej programem który generuje źródła innych programów). Tego rodzaj programów nazywa sie generatorami kodu, a w tym konkretnie przypadku mamy do czynienia z programem generującym analizatory ( sa oczywiście inne generatory, programy mogą generować szkielety stron www, szkielety GUI, szkielety baz danych i inne. Właściwie każdy IDE który posiada pewnego rodzaju wbudowaną „automatyzację” tworzenia kodu – na przykład dopisuje szkielety klas języka itp. jest tego rodzaju generatorem. Całkiem spora część kodu jest tym samym generowana). Program wygenerowany przez antlr ( domyślnie w java), nasz analizator, składa sie z dwu podstawowych elementów logicznych. Pierwszy z nich nazywa się lekserem. Lekser to program który dzięki wbudowanej gramatyce, takiej jak ta powyżej, jest w stanie prawidłowo rozpoznać elementy języka, zwane tokenami. Tokeny w naszym przykładzie to: złożone wyrażenia progr i expr, symbole operacji logicznych „+,-,*,/”, wyrażenie INT – reprezentowane w prostym tutaj przykładzie jako dowolnej długości ciąg znaków 0,1,2…9 = [0-9]+, oraz wyrażenie NEWLINE, obejmujące znaki nowej linii [\n]+ w dowolnej ilości. Lekser przegląda zatem strumień znaków jaki program analizuje i wykrzykuje z radością – „o! expr! „, „o! progr!”, „o! nawias!”.

     Lekser rozpoznaje ciągi znaków i przekazuje je do kolejnego elementu analizatora – parsera. Parser otrzymuje od leksera, z powodów nazwijmy to technicznych, numer pozycji w wyrażeniu gdzie zaczyna i kończy się dany element języka. Wtedy parser sprawdza czy spełnione sa reguły gramatyki. Prosta gramatyka jaką tu omawiam, nie ma zbyt wielu skomplikowanych aspektów, ale jednym z śladów złożoności z jaką musi poradzić sobie parser jest kwestia poprawnego otwarcia i domknięcia nawiasów. Parser zatem dokona sprawdzenia czy zgodnie z regułami gramatyki zapisanymi w linii o numerze (7) każdy nawias który został otwarty został także prawidłowo zamknięty, czy każdy operator „+” zawiera dwa wyrażenia expr z swojej prawej i lewej strony itp. Parser mówi „nawias mówisz? a gdzie drugi?”.

    Podsumujmy – lekser rozpoznaje, parser sprawdza.

    Jak używać antlr? Zapisujemy definicje gramatyki w pliku o nazwie zgodnej z nazwą gramatyki – w naszym przypadku będzie to plik Expr.g4. Najlepiej całą operację przeprowadzić w stworzonym uprzednio katalogu, gdyż antrl wygeneruje kilka plików z kodem i katalog zapełni się plikami. Następnie generujemy pareser/lexer poleceniem
>antlr4 Expr.g4

Wykonanie tego polecania powoduje że w katalogu w którym je wykonaliśmy pojawi się sporo plików z kodem java.
Kompilujemy owe kody ( w katalogu gdzie to wszystko jest):
>javac *.java

    I już. Powstał nam prosty parser, który potrafi rozpoznać i sprawdzić poprawność wyrażeń arytmetycznych na liczbach naturalnych. Oczywiście od takiej prostej generacji do użytecznych działań daleka droga, ewentualny rozwój aplikacji ( prostego kalkulatora ?) wymagałby od nas grzebania po kodzie jaki wygenerował antlr i dostosowywania tego kodu do naszych potrzeb. W szczególności musielibyśmy napisać kod który zinterpretuje wyrażenia które rozpoznał lekser i sprawdził parser ( ale jeśli ktoś poda nam złe wyrażenie, np. nie domknie nawiasu – obsługę błędów już mamy!). Interpretacja oznacza w ostatnim zdaniu przejście od tego, że program rozumie iż (3+4) to prawidłowe wyrażenie w którym 3 i 4 to elementy INT, + to operator „+” zaś „(” i „)” to nawiasy, do użycia w miejsce + operatora dodawania zaś w miejsce 3 i 4 liczb integer. Antlr bowiem parsuje, czyli przetwarza, pliki tekstowe, i wszystko co sprawdza to znaki w takich plikach, po prostu napisy.

    Sprawdźmy jak to działa. stworzyłem plik tekstowy example.txt o następującej zawartości:

———–example.txt—————–
((2+7*(13-10/7)/8)*12 -3*(5+7))/5
((2+7*(13-10/7)/8)/12 -3*(5+7))/6
———————————————

i za pomocą polecenia:
>grun Expr prog -gui example.txt

wygenerowałem następujący obrazek:

antlr4_parse_tree

    Jak widać w ostatnim poleceniu wskazałem jawnie że wierzchołek parsowania ma postać dyrektywy progr z gramatyki ( jak się wskaże co innego drzewo wygląda inaczej – i jest błędne dla podanego przykładu – co jak rozumiem oznacza, że przykład nie spełnia założenia, czyli że jest czym innym niż elementem, progr. ), czego kod wygenerowany z antlr sam nie rozpozna.

    Antlr generuje kod w java który zawiera lekser i parser. Programy te nie tylko wykonują to co opisaliśmy powyżej – to rola leksera i parsera – ale także reprezentują dostarczony strumień znaków w postaci drzewa jakie widzimy ma obrazku powyżej – jest to tak zwane drzewo parsowania. W drzewie tym, reguły złożone gramatyki, takie jak progr i expr reprezentowane są jako korzenie drzewa, zaś tokeny proste, jak NEWLINE, INT i nawiasy – są liśćmi. Obok leksera i parsera antlr generuje także kod walkera i listenera. Walker potrafi przeglądać drzewo – od lewej do prawej, i generować zdarzenia których oczekuje lekser i potrafi je zinterpretować. Na przykład walker trafiając na wyrażenie „3+4” wygeneruje zdarzenia „wchodzę w wyrażenie „+”, końcowy liść – „3”, końcowy liść „4”, wychodzę z wyrażenia”. Listener może zinterpretować te sygnały i wykonać operację arytmetyczną na koniec wypisując „wynik: 7”, ale może także zamienić nasze wyrażenie do postaci: „wyrażenie to: trzy plus cztery”. Oba te zachowania, i wiele innych, są możliwe, relatywnie łatwe do wykonania, wymagają jednak modyfikacji kodu czego nie będę tu pokazywał – odsyłam do strony antlr. Warto wszakże zwrócić uwagę, że choć z ludzkiego punktu widzenia pierwszy rodzaj działania to wyliczanie, czyli ewaluacja, a drugi to „tłumaczenie na język pisany”, to w sensie koncepcyjnym nie ma tu właściwie żadnej różnicy – zamieniamy symbole jednego rodzaju na symbole innego rodzaju. W taki sam sposób właściwie działa kompilator, translator i interpreter i koloryzator składni.  Antlr jest używany także przy analizie składni zapytań w wyszukiwarkach np. Twitter.

 

Jeśli słomiany zapał mi nie opadnie – wpis będzie miał kontynuację..

lod-datasets_2011-09-19_1000px

    Jak to często bywa, znalazłem w necie coś ciekawego. Tym razem jest to koncepcja Semantic Web. Zamierzam coś niecoś o tym napisać, aby jednak móc bawić sie w te sprawy, zacznę od krótkiego wpisu na temat instalacji Open Link Virtuoso Server. Jest to baza danych czy wręcz platforma aplikacyjna, wyposażona w hybrydowy motor baz danych oraz dużą liczbę rozmaitych api i konektorów od wbudowanego webserwera do obsługi z 20 protokołów sieciowych jak WebDAW, SOAP i inne tego typu rzeczy. Słowem jest t produkt zapewniający dużą łatwość jeśli chodzi o możliwość integracji. Ja używałem go wyłącznie w temacie któremu chce poświęcić tu kilka wpisów – mianowicie Semantic Web – i w tym kontekście nie będę opisywał wszystkich opcji i możliwości jakie samo oprogramowanie posiada. Właściwie nie napisze o tym prawie nic, zaś zainteresowaniach odsyłam do strony producenta i Wikipedii. Nadmienię tylko że oprogramowanie posiada darmową wersję Open Source i wersję komercyjną z wsparciem itp.

    Używam Linux Mint, i w moim przypadku instalacja sprowadzała się do wyszukania słowa virtuoso w katalogu oprogramowania w Synapticu i zaznaczeniu kilku czekboksów. Następnie wydałem polecenie install selected i po 10 minutach miałem działający serwer Open Link Virtuoso w wersji 6.1. Ci którzy używają innych dystrybucji Linuxa z łatwością znajdą oprogramowanie w swoich repozytoriach lub na koniec mogą dodać repozytoria Open Link Virtuoso jak opisano tutaj! Ci z czytelników którzy z jakichś powodów pozostają na przestarzałych platformach jak Windows, zmuszeni sa do pobrania plików z programami instalacyjnymi z internetu, i wykonania instalacji ( pamiętajmy – nadal dystrybucja oprogramowania w postaci plików wykonywalnych jest podstawowym źródłem propagacji wirusów i backdoorów. To najgorsza metoda instalacji oprogramowania jaka może istnieć – a jej istnienie wynika wyłącznie z faktu że systemy Microsoft działają tak jakby internet nie istniał).

    W moim przypadku instalacja przebiegła bezproblemowo, podałem hasło dba dla administratora systemu i serwer był od razu dostępny. Dla osób zainteresowanych w poznaniu tej platformy polecam zainstalować raczej więcej niż mniej pakietów – do instalacji poza serwerem sa także paczki z dokumentacją i demonstracyjną bazą danych itp. Dla celów tych wpisów, wystarczy jednak właściwie to co w podstawowej paczce.

    Konfiguracja serwera, choć od razu gotowa i działająca, warta jest odrobiny uwagi. Plik konfiguracyjny znajduje sie w katalogu /etc/virtuoso-opensource-6.1 i nazywa się virtuoso.ini. Opis jego zawartości można znaleźć tutaj . W paczkach dodatkowych znajdują się narzędzia takie jak isql-vt który umożliwia prace z linii komend, interfejs webowy pozwalający na prace przez przeglądarkę, czy tak zwany conductor który pozwala przez przeglądarkę administrować serwerem. Właściwie nie wprowadzałem żadnych zmian w konfiguracji poza jedną. Domyślnie serwer ma restrykcyjnie ustawione ścieżki w których można operować poprzez rozmaite interfejsy, co uniemożliwia np. zapis plików z wynikami query w dogodnych katalogach. Dlatego w pliku konfiguracyjnym virtuoso.ini dodałem katalog /home do zmiennej DirsAllowed, oraz zrestartowałem serwis. Oczywiście każdy powinien sobie skonfigurować te rzeczy wg. własnego uznania, a z pewnością w wypadku serwerów należy rozważyć tu kwestie bezpieczeństwa itp. W wypadku instalacji testowej pewna doza otwartości ułatwia jednak prace.

Połączenie za pomocą isql-vt wymaga konfiguracji w pliku odbc.ini, a jest ona w moim wypadku następująca:

[VOS]
Driver = /usr/lib/odbc/virtodbc.so
Description = Virtuoso OpenSource Edition
Address = localhost:1111

    W tym momencie możemy połączyć sie do serwera czy to przez interface webowy w przeglądarce za pomocą adresu http://localhost:8890/conductor/ czy to za pomocą isql-vt:

isql-vt 1111 dba hasło

     W tym miejscu zaznaczę od razu, że Ci z czytelników którzy chcą jedynie zapoznać się z samą koncepcją oraz wymyślić kilka własnych zapytań, a nie chcą tracić czasu i zasobów na instalację dedykowanego serwera, mogą użyć w celach testowych niezwykle ciekawych i dostępnych zasobów w internecie. Zaletą tego podejścia jest to że można zacząć natychmiast, i bez jakiejkolwiek instalacji u siebie. Gorąco polecam zabawę tym zasobem. Jest to tak zwany endpoint umożliwiający odpytywanie gigantycznej bazy danych Wikipedii, za pomocą języka sparql – bazy danych realizującej koncepcję Semantic Web. Baza ta pracuje pod motorem Virtuoso. W szczególności obrazek który otwiera ten wpis pochodzi właśnie z tej strony, zaś jego autorami są Richard Cyganiak (DERI, NUI Galway) and Anja Jentzsch (HPI) . Nota bene, jest to pierwszy przypadek że obrazek ilustrujący tego bloga nie jest mojego autorstwa ( chyba że wliczymy screenshot z video trailera Stalingrad, jako twór cudzy ;-)

    Instalując własny serwer zyskujemy możliwość pracy z własnymi danymi, w szczególności możemy pobrać z internetu dane udostępniane przez jeden z kilku serwisów. W dalszej części będziemy posługiwać się danymi z projektu Gutenberg, zaś jak je zaimportować do Virtuoso opiszę w następnym wpisie.

    Jesteśmy właściwie gotowi do użycia serwera. Kolejnym krokiem jest wykonanie importu danych. Zanim jednak napisze coś na ten temat, przedstawię w następnym wpisie koncepcję Semantic Web.

drewno-pasek.jpg

    Wszelkie fakty opisane w tym wpisie sa całkowicie fikcyjne i nie dotyczą rzeczywistości materialnej, nawet w 10%. Jednak wpis ten, według głębokiego przekonania autora, w 300% oddaje stan umysłu fikcyjnych postaci których podobieństwo do postaci realnych, być może wywołane zbieżnością imion jest czystym złudzeniem. Innymi słowy można by rzec że przedstawione charaktery fikcyjne i fantasmagoryczne sposoby myślenia oddane sa z niezwykłą precyzją ;-) jednak dotyczą postaci wyłącznie fikcyjnych. Nie znam przecież osobiście ani Rostowskiego ani Balcerowicza, ani żadnego członka rządu, a już tym bardziej nie wiem dlaczego podejmują takie a nie inne decyzje, bo nie jest w zwyczaju władzy w Polsce tłumaczyć sie ze swoich decyzji, poddawać je konsultacjom, czy choćby nawet o nich publicznie dyskutować. W istocie – jak sądzę przekonanie podziela to całkiem spora cześć społeczeństwa kraju – prawdziwe powody większości decyzji rządowych sa całkowicie inne niż te, które sa deklarowane publicznie. Pozwalam więc sobie puścić wodze fantazji, czyniąc bohaterami poniższego wpisu osoby całkowicie fikcyjne. Dla ustalenia uwagi osadzimy bulwersujące koncepcję opisane poniżej w dwu państwach – Pasmanterii – wielkim kraju leżącym w Azji, słynącym z taniej siły roboczej, wielkiego wzrostu gospodarczego i zamordystycznych rządów podziwianych przez cały demokratyczny świat, oraz w Kopalsce, kraju słynącym z bogatych złóż kopalin, węgla i siarki oraz z ministrów finansów nieodmiennie zabiegających o stanowiska pacy w bankach komercyjnych i międzynarodowych instytucjach finansowych.

    Jeszcze 30 lat temu, w szkole, uczono mnie że metr to miara długości o wartości określonej przez wzorzec metra przechowywany w Sevres pod Paryżem . Sytuacja taka – istnienie tak zwanych etalonów, materialnych reprezentantów wielkości wzorcowych – trwał na tym świecie przez całe wieki. W jakimś 20 leciu międzywojennym, minister który by chciał usystematyzować miary i wagi w Kopalsce, wsiadał w kolaskę, lub w automobil, a może raczej wysyłał delegację sekretarzy – koleją – oni zaś jechali do Paryża. Po przedstawieniu listów uwierzytelniających i dokonaniu opłat skarbowych, uzyskiwali dostęp do etalonu metra. Za pomocą brzeszczota przycinali własne miarki do stosownej wielkości i wracali do kraju. Koszty takiej operacji były w istocie niewielkie – delegacja dla kilku sekretarzy ministra: sute obiady i odwiedziny w kilku kabaretach, skromny posiłek stolarza który jako jedyny umiał przyciąć deseczkę precyzyjnie, koszty biletów 1-wszej klasy dla sekretarzy i 3-ciej klasy dla stolarza – oraz oczywiście opłaty skarbowe itp. Warto pamiętać, ze system taki był nie dosyć że skuteczny to jeszcze rozumiany i lubiany przez ministrów ( paryska kuchnia!). Tak by mogło to wyglądać w naszym fikcyjnym świecie stworzonym na użytek tej dykteryjki. W praktyce wykonywano w jakichś warsztatach laboratoryjnych kopię etalonu i wysyłano odpowiednio zabezpieczoną do kraju przeznaczenia.

    A dziś?

    Dawniej wzorzec był rzeczą materialna, wymagał właściwego przechowywania, sporządzony był z drogocennych materiałów (by zapewnić niską rozszerzalność termiczną), poza tym jednak trwał, był, miał wszelkie cechy stołu czy krzesła. Obecnie jest zgoła inaczej – a sytuacja ta związana jest, tak, tak, z postępem w dziedzinie nauki, techniki i handlu. Wszystko zaczęło sie od tego, że przypomniałem sobie właśnie że 1m = „the length of the path travelled by light in vacuum during a time interval of 1/299,792,458 of a second.” Jakie są zalety takiej definicji? Łatwo je wymienić – jednostka metra została zdefiniowana za pomocą procesu fizycznego który w każdym miejscu na kuli ziemskiej przebiega w identyczny sposób. Jak zbudować etalon metra ze stopu platyny i irydu wiedzieli metalurdzy, nawet jednak gdy dysponowano stosowną wiedzą, wizyta w Sevres pod Paryżem była niezbędna by dokonać porównania. Współcześnie wszystko co niezbędne do wykonania pomiarów, włącznie z samym procesem „cechowania” metra można dokonać nie ruszczejąc się z miejsca. Co więcej, w definicji metra występuje ułamek – liczba wymierna – 1/299,792,458. Oznacza to że w ciągu 1s światło przebywa 299,792,458 metrów i jest to dokładna liczba a pomiar zależy jedynie od dokładności z jaką mierzymy odległości i czas, czego nie można powiedzieć o wzorcu materialnym, gdzie wchodzi w grę cała masa dodatkowych czynników ( jak choćby dokładność z jaką postawiono „kreski” na etalonie). Współczesna technika od dawna już wymaga dokładności pomiarów, zarówno odległości jak i czasu, które nie mieszczą się w głowach ministrom finansów. Na przykład system GPS działa uwzględniając efekty wynikające z Ogólnej Teorii Względności, oraz użytkuje relatywnie dokładne zegary atomowe – a jednak cześć błędu wyznaczania pozycji w jego wypadku – wynikający z niedokładności pomiaru czasu w zegarze atomowym – wynosi około 2m. 

    W teorii zatem nie trzeba podróżować od Paryża ( to dla kręgów rządowych spora wada!), wystarczy mieć własny wzorzec i można mierzyć metr z dowolną dokładnością. W praktyce łatwo sobie wyobrazić, że nie jest tak prosto. Trzeba dysponować wieloma przyrządami i wieloraką wiedzą. Nie jestem w stanie wymienić wszystkich potrzebnych rzeczy, dziedzin wiedzy i materiałów, jednak te które przychodzą mi na myśl, to: dostatecznie stabilny budynek laboratorium w którym przeprowadzamy pomiary, stosowne zegary atomowe i precyzyjne źródła światła, najlepiej lasery. Konieczne jest posiadanie aparatury próżniowej raczej wysokiej jakości, co oznacza konieczność produkcji rozmaitego rodzaju cylindrów ciśnieniowych i sprężarek, a nie jest całkowicie zadaniem błahym. Zapewne niektóre z urządzeń, w celu zapewnienia dostatecznej dokładności powinny być wyposażone w kriogeniczne chłodzenie ( choć nie przypuszczam, by było konieczne stosowanie nadprzewodników, przynajmniej gdy tworzymy wzorzec metra z myślą o przemyśle czy handlu ). Oczywiście praca urządzeń wymaga posiadania stosownego personelu, składającego aparaturę do kupy, utrzymującego jej dobrostan, czy wreszcie dokonującego reperacji. Oznacza to że potrzeba całego sztabu ludzi, sporej grupy specjalistów, inżynierów itp. Na koniec należy dokonać pomiarów, akwizycji danych, ich analizy i interpretacji. Zapewne pomogą tym komputery, nie zastąpią jednak całkowicie ludzkiej pracy i żmudnej eliminacji źródeł błędów. I rzeczywiście w Polsce – taka instytucja istnieje realnie – jednak z powodu braku właściwego finansowania prowadzi działalność gospodarczą – w postaci sprzedaży norm itp.  Proszę jednak nie zapominać że to o czym piszemy to swobodna fikcja historyczna nie mająca zapewne wiele wspólnego z rzeczywistą sytuacja ludzi czy instytucji, a raczej z pewnym fantastycznym pomysłem o czym dalej. Cała ta aparatura i zespół zapewne musieliby osiąść w fikcyjnej Kopolsce w jakimś Instytucie Miernictwa, Miar i Wag itp. zapewne w Sewrkach pod Warwszawą ( niestety…Warwszawa, jak wile stolic z rzadka tylko działa dla dobra własnego kraju – Kopolski, częściej działając dla dobra Warwszawy. Nieodmiennie cechą mieszkańców stolicy, jak wszystkich stolic świata, jest owczy pęd do przejadania cudzych pieniędzy i stawiania pomników bliskich sercom elity miasta,  jak plastikowe palmy, filetowe krowy itp. ).

    Nad delegacją sekretarzy ministra podróżujących do Sevres pod Paryżem unosiłby sie zapewne duch Grabskiego, niestety nad Fikcyjnym Instytutem Miar Kopolski unosiłby się już zapewne duch Balcerowicza lub Rostowskiego. Koszty działania takiej instytucji wyniosłyby zapewne 100 milionów złotych rocznie, a i ta kwota byłaby rozpatrywana jako znacząca rozrzutność, zwłaszcza wobec konieczności organizacji szampańskich imprez w rodzaju Kopolska Euro 2012 czy Zimowych Igrzysk Olimpijskich w Zakopconem i Kokotowie. Co prawda przez całe 100 lat udało się utrzymywać tą szkodliwe dla budżetu ( wydatki!) i biznesu ( kontrole! homologacje!) instytucję, jednak w 2012 roku, w dzień uroczystego otwarcia Euro 2012 Instytut w Kopolsce udało sie usunąć z listy wydatków finansowanych przez rząd. Pierwszy powód był taki, że po prawdzie żaden z ministrów nie miał zielonego pojęcia czym zajmuje się rzeczona instytucja. W istocie zaś Minister Finansów ograniczał ogólnie nakłady na naukę, jako kosztowną fanaberię, która na wiele sposobów przyczynia sie do zguby narodów. A sa one takie: powiększając ogólne nieszczęście ( człowiek oczytany z rzadka tylko bywa beztrosko szczęśliwy. CBOS bada Beztroską Szczęśliwość vs,. Zatroskanie i owo zatroskanie sprawia że Kopolska nie jest aż tak atrakcyjnym miejscem inwestycji zagranicznych! ), podnosząc koszty edukacji ( podręczniki! i co może jeszcze darmowe?), oraz obniżając zaufanie do elit stołecznych ( jak wiadomo nauka to forma krytykanctwa. Nic tak nie utrudnia wprowadzanie reform jak swoboda dyskusji, demokracja itp. chyba że chodzi o krytykę likwidacji OFE, wtedy to nie. ) Drugim powodem likwidacji Instytutu Miernictwa Miar i Wag Kopolski był precyzyjny rachunek ekonomiczny ( autorstwa miejscowego profesora Balcudowicza), a opierał się on o genialnie prostą konstatację. Skoro inne kraje mają swoje Urzędy Miar i Wag – Kopolska własnego nie potrzebuje bo może stosowne ekspertyzy zakupić za granicą, w krajach, których rządy są  na tyle naiwne że łożą na takie szkodliwe socjalne działania. „W sumie” – rozumował Balcudowicz – „zysk jest potrójny. Wzrasta PKB – bo mamy wymianę handlową, to raz! Wzmacniamy własną gospodarkę bo zaoszczędzone pieniądze można przeznaczyć np. na śnieg Zakpocponem podczas Igrzysk Zimowych co zelektryzuje turystykę i da w konsekwencji większe przychody ze sprzedaży skór baranich. Po trzecie – obniża konkurencyjność gospodarek państw konkurencyjnych – bowiem to one muszą łożyć an tę całą naukę i technikę, a my nie!”. Tak tedy udało sie połączyć w jednej decyzji o obniżeniu finansowania nauki dwa iście makiaweliczne cele – szkodzenie konkurentom i troskę o rodzimy dynamiczny rozwój przedsiębiorczości.

    Pewnym cieniem na ogólnej radości z organizacji Euro 2012 położył się fakt, że pracownicy Urzędu Miar i Wag w Sewrkach nie chcieli poddać się bez walki. Założyli komitet protestacyjny i ogłosili natychmiast strajk głodowy. „Dosyć knowań lobbystów osłabiających konkurencyjność gospodarki” – pisali w prasie eksperci ekonomiczni Niezależnego Instytutu Sobiepański, profesorowie Rybczyński i Orczyński. Jednak informacji o samym strajku głodowym nie podano w żadnym z dzienników i gazet całkowicie niezależnych od rządu a to z powodu prośby ministrów Finansów by nie psuć tak doniosłej w historii kraju chwili. Oto po raz pierwszy Kopalska wystawiała imprezkę dla całego świata i obiecała wziąć na siebie rachunek za koszta! I rzeczywiście – z początku nękały ministrów telefony z Sewrków pod Warwszawą gdzie instytut miał swoją siedzibę. Po kilku jednak miesiącach telefony sie nagle urwały, i sprawy dalej nie drążono. Właściwie nie wiadomo o losach Sewrków nic więcej, bowiem w ramach programów oszczędnościowych zlikwidowano zarówno plany budowy metra do Sewrków jak i linie autobusów podmiejskich. Tytułem dygresji dodajmy że w budżecie na rok 2020 planowana jest rządowa wyprawa krajoznawcza, w skład której mają wchodzić Warwszawscy urzędnicy, przedstawiciele magistratu i geodeci, a to w celu oceny stanu kształtu ziem w tych okolicach w tym określenia kto je zamieszkuje. Może ręka przyszłego geodety natrafi na resztki sprężarek które onegdaj, w epoce kiedy nie liczono sie z wydatkami, służyły tylko temu by wysysać podatki z prywatnego przedsiębiorcy?

    Powyższa cześć opowieści, dotycząca Kopolski i jej makiawelicznych planów obciążania kosztami nauki krajów ościennych, nosiła znamiona humorystyczne, można by więc nazwać ja częścią komiczną. Jak to w sztuce przejdziemy teraz do części tragicznej.

    W dalekiej Pasmanterii produkującej towary dziewiarskie, a to gumę do majtek nawijana na szpule, perkale w belach i szaliki na metry, od wielu już lat prowadzono aktywną politykę neoliberalną. Ustalono że największym skarbem człowieka jest pieniądz, a kiedy już takie ustalenia powzięto, reszta poszła łatwo. Kraj ów, z dawna pogrążony w stagnacji i marazmie, doznał ożywczego rozbudzenia kiedy dla początku zamknięto w więzieniach z 200 czy 300 milionów obywateli ( obywatele są w Pasmanterii niewielcy, nieco pożółkli i niesłychanie tani) po czym zachęcono ich przykładem i dobrotliwą perswazją, tudzież ściśle kontrolowanym – przez specjalistów oczywiście – wydawaniem jedzenia, do jeszcze wydajniejszej pracy. Uzyskane fundusze członkowie władz rządzącej Partii Pasmanterii zabrali dla siebie – bowiem tylko prywatny kapitał może dać prawdziwy wzrost gospodarczy – by przeznaczyć na inwestycje w nowe, tym razem już prywatne ośrodki gospodarczego odosobnienia. Tym razem jednak działano już w neoliberalnym założeniu, ze skoro gospodarka najlepiej ma sie przy braku krępujących przepisów, to i wydawanie jedzenia jest niepotrzebnym kosztem działalności przedsiębiorstw i powinno być zmartwieniem pracowników co będą jedli. Zastosowano sprawdzone wzorce budowy społeczeństwa w pełni neoliberalnego i zaiste, każdy mógł dostać za umiarkowaną opłatę wędkę ( ale nie rybę!), a to w nadziei że chcąc złowić coś na obiad, kupi jeszcze, przymuszony głodem i żyłkę i haczyki i robaki. Przyznacie że strategia taka ma spore szanse powodzenia skoro osoba która w nią dała się wciągnąć, była tak naiwny że kupiła wcześniej wędkę bez żyłki i haczyków…

    Działania takie odniosły tak wilki sukces, zwłaszcza w tym, ze produkty z Pasmanterii były tańsze niż cokolwiek wyprodukowanego gdziekolwiek na całym świecie, że inne kraje zachęcone przychylnością lokalnych władz, zaczęły inwestować w Pasmanterii swoje fundusze. Pasmanteria urosła do rangi gospodarczego mocarstwa, a to dzięki całkowitej likwidacji jakichkolwiek zobowiązań państwa wobec obywatela, co przyciągnęło rzutki biznes z całego świata, bowiem nic tak nie poprawia zysków w biznesie jak rezygnacja z niepotrzebnych skrupułów. I faktycznie zaprawdę trudno było na całym świecie znaleźć kraj w którym nie noszono by majtek z gumka z pasmanterii czy szalika odciętego z beli szalików Made by Pasmanteria, zaś profesor Balcudowicz osobiście deklarował, że gdyby nie historyczne ograniczenia jakim podlega społeczeństwo ( tzw. (c)hamo robotus) w Kopolsce, już dawno zbudowałby w niej dryga Pasmanterie. Pasmanteria utrzymywała kontakty gospodarcze z całym światem, w tym oczywista także z Kopolska, a nawet jej przedstawiciele zostali zaproszeni na rzeczone obchody Euro 2012 w Kopolsce, zas ich naprędce stworzona drużyna złożona z emerytowanych pracowników fabryki gumki do majtek zdołała pokonać reprezentację gospodarzy w stosunku 5:2 co ciekawe nie strzelając przeciwnikom ani jednej bramki – gdyż tak nakazuje Pasmanteryjny dobry obyczaj! I właśnie wtedy w Pasmanterii specjaliści od Marketingu i Promocji goszczący w Kopolsce, w bliżej nieokreślony sposób wywiedzieli sie prawdy o sytuacji w Instytucie mierniczym Miar i Wag w Sewrkach pod Warszawą i wpadli na iście szatański plan.

    Do każdej beli perkalu, do każdego sznurka z koralikami, do każdej szpuli gumki do majtek, byle tylko eksportowanego do dalekiej Kopalski, zaczęto dołączać gratis – 20-30 metrów krawieckich. Pasmanteria przedukuje jak wiadomo głownie na eksport, zaś Kopalska głównie importuje. Skutek tej genialnej operacji był zaś taki, że cały rynek Kopalski został zalany nie tylko tanią gumka do majtek, ale i spora ilością darmowych metrów krawieckich produkcji Pasmanteryjnej.

    Nie minęło wiele czasu, gdy zatroskani patrioci z Konfederacji Pracodawców Prywatnych podnieśli protest. „Plan Balcudowicza nie działa!” – wołali przedsiębiorcy – „Nie opłaca sie nam zarabiać! Dławią nas bowiem nadmierne koszty!” – konstatowali ze zgrozą – „Dlaczego mamy kupować drogie metry krawieckie z krajów ościennych, skoro do każdej nieledwie zakupionej gumki do majtek, dostajemy Pasmanteryjny metr – za darmo! Dosyć wspierania obcego kapitału! Dosyć kupowania za granica za dewizy – metrów krawieckich.” Tu głos zabrał profesor Balcudowicz, ów wielki nauczyciel narodu, i z uśmiechem powiedział: „A nie mówiłem? Oto jak światło ekonomii rozprasza ciemnotę i gnuśność! Czyż nie powiedziałem Wam, ze Wolny Rynek rozwiążę wszelkie problemy ( w dłuższej perspektywie oczywiście)?” I dalej wyjaśnił że przecież oto widomym znakiem jak efektowna jest gospodarka neoliberalna oparta zasadzie braku zasad, jest to że nie tylko każdego stać na kilometry gumek do majtek, więc pomimo że co chwila pękają, to jeszcze każdy ma teraz własny – metr krawiecki – za darmo! „Hura!” zakrzyknęli Prywatni Przedsiębiorcy oczekujący nadal na zlikwidowanie ZUS „hura!” – w charakterystyczny dla siebie, intelektualnie powściągliwy, sposób zgodził sie profesor i podali sobie ręce. Zaś minister Rozstówski zanotował śliniąc ołówek, w swoim sztambuchu „+0.3 do PKB, z tytułu ograniczenia importu nieracjonalnie drogich metrów krawieckich z państw ościennych opętanych łożeniem na działania socjalne jak nauka i R&D „. „To będzie razem 7.5%” – skonstatował z zadowoleniem patrząc w sufit.

    Jak wiadomo, nawet w naszym realnym świecie, firmy lokalizują produkty. Czekolada, kawa czy środki czystości na rynek polski i niemiecki nie są takie same. Niby kupujemy te same marki, ale za swoje pieniądze, dostajemy jednak jakby nie to samo. Jak widać logistycznie to prosty i wdrożony proces, nawet w naszym całkiem realnym świecie, a co dopiero w fikcyjnej rzeczywistości Kopalski i Pasmanterii!

    Ponieważ Pasmanteria produkuje gumkę do majtek głownie na eksport, a płatności zachodzą „od metra”, jest rzeczą zrozumiałą, że przy obrocie gumami do majtek idącym w milady metrów, „zmniejszenie” metra o 1 milimetr, daje Pasmanterii całkiem pokaźny zysk! I to mieli na uwadze specjaliści z Centralnego Komitetu Marketingu i Promocji Pasmanterii Ludowej. Niepostrzeżenie, tajni pracownicy poumieszczani w przedsiębiorstwach Pasmanterii, przed pakowaniem rzeczonych gratisów – metrów krawieckich – ucinali z każdego po 1 mm. Do spisku włączono oczywiście członków Partii pasmanterii i poniektórych, patriotycznie nastawionych przedsiębiorców. Grono to było całkiem spore, tak jednak oddane sprawie neoliberalizmu na świecie, że przez bodaj 20 czy 30 lat nikt w Kopalsce nie dowiedział się o tych faktach! Każdy transport gumy, jeśli opiewał 10 km nawinięte na szpulkę – czyli 10 000 m – w istocie był krótszy o 10 m. Każdy szalik, długi na 2 m, dawał wymierne oszczędności przędzy jedwabnej, płaszcze były krótsze, buty ciaśniejsze, poradzono sobie jednak zmieniając numeracje tak by każdy dostawał to co chciał – a to mniejszy numer płaszcza, a to większy buta. Skoro poniechano relacji miedzy faktycznym rozmiarem ubrania a numeracją – o numeracji zaczęły decydować potrzeby emocjonalne klienta!

    Pojawiły sie nawet prace ekonomiczne, znanych teoretyków neoliberalizmu, dowodzące że nikt w ten sposób nie doznawał uszczerbku. Rzeczywiście – nikt w Kopolsce nie był w stanie tego sprawdzić – bo i jak, skoro niemal wszystkie metry krawieckie pochodziły z Pasmanterii i były krótsze o 1mm od „the length of the path travelled by light in vacuum during a time interval of 1/299,792,458 of a second.” – czego zresztą i tak nikt w Kopolsce nie rozumiał. Na ekspedycję do Sewrek pod Warwszawą, gdzie może jeszcze jest jaki uczony z dawnego Urzędu Miar i Wag, trzeba by poczekać do 2020 roku więc na razie nic z tego. Skoro zadowolenie klienta jest kategorią subiektywną, czyż można mówić tu o szkodzie? Przecież za taki wzrost kosztów z tytułu większej długości materiałów w ubraniach ktoś musiałby zapłacić – i musiałby być tym kimś właśnie klient, bo któż inny? Czyż alternatywa nie byłoby po prostu podniesienie ceny szalika, majtek czy płaszcza, gdyby miał on obiektywnie mieć długość 1m, a więc o 1mm więcej niż obecnie? Cóż zresztą znaczy słowo obiektywnie, w ekonomii, gdzie jak wiadomo każdy ma własną krzywą użyteczności a wartość dóbr materialnych wynika z popytu? Nie sposób zaprzeczyć że na owe brakujące 1mm szalika nie ma popytu żadnego – nie możemy tedy mówić o kradzieży, bo kradzież oznacza przywłaszczenie rzeczy o jakiejś wartości! 1mm szalika dla klienta wartości nie ma żadnej! Podnoszono nawet głosy że jest to działanie w istocie dobroczynne, bowiem w istocie obniżanie kosztów przynosi zysk producentowi nie przynosząc szkody konsumentowi ( bo i jaka tu szkoda? Czytelniku czy gdybyś dostał krawat krótszy 1 lub 2 atomy doznałbyś szkody?) Grono ekspertów ekonomii przy IMF uznało, że takie działanie to czysty postęp gospodarczy, a przy tym jaki ekologiczny!

    Warto pamiętać, że ekologiczny dobroczynny spisek ów, zorganizowany był i w taki sposób, że w razie wpadki zawsze można powiedzieć że gratis to gratis i że został zmniejszony po to by być tańszy…a w promocjach reklamacji nie uwzględnia się. Zresztą o jakiej wpadce może być tu mowa? O kontroli metrów krawieckich w całek Kopolsce? Przecież po pierwsze kontrole to rzecz kosztowna i z dawna w związku z czym zarzucona, po szczegółowych dowodach profesora Rostówskeigo że przynoszą one więcej szkody gospodarce niż pożytku. Po drugie kto miałby to zrobić? Sanepid w Kopolsce wyznaje zasadę „co cię nie zabije to dozwolone” jak państwo pamiętacie może z „afery solnej” która pokazała że nie liczą się normy przemysłowe i znaki CE, HACAP itp. tylko to czy dodatek do żywności jest szkodliwy czy nie. Cement, gips, tłuczeń kamienny, piasek w soli, kaszy i cukrze – wszystko sa to nieszkodliwe a przez to całkowicie dozwolone dodatki spożywcze, tzw. wypełniacze – orzekł Sanepid w Kopolsce. Oczywiście rzecz cała w proporcjach – 60% tłucznia wapiennego w soli to wartość cokolwiek spora i może wywoływać pewne sensacje żołądkowe – pamiętajmy jednak że ekonomia sama reguluje te sprawy i w soli zamiatanej miotła ze składu na wolnym powietrzu tłucznia nie będzie więcej niż 10-15%. Zaś krytykanckie pomysły malkontentów, że poniektórzy będą dosypywali do soli piasek dla zysku można od razu odrzucić – piasek, zwłaszcza tzw. frakcje płukane, sa surowcem drogim. No i nie zapominajmy że często wina leży po stronie konsumenta, który nie sprawdza dokładnie co je. Ale uciekliśmy w nieistotne dygresje.

    Całą operacja zakończyła sie sporym sukcesem – zaś przemysł Pasmanterii zanotował spore oszczędności w relacjach handlowych z Kopolską. Nic jednak nie trwa wiecznie. Rzecz sie przedostała do gazet. Bynajmniej nie w Koplsce, w Kopolsce gazety odmówiły publikacji tekstów tak jawnie godzących w zmysł ekonomiczny narodu. Rzecz rozdmuchały gazety zagraniczne państw, które hołdowały wydatkom na naukę i utrzymywały własne Urzędy Miar i Wag, miały własne i rzetelnie działające Sanepidy, Sądy i Komisje, i oczywiście oczekiwały od przedsiębiorców i kooperantów obiektywnej zgodności z jednostkami wyznaczonymi przez systemy metryczne. Opublikowano w zagranicznej prasie całą serię artykułów w których przedstawiały powyżej opisaną sytuację jako przykład zgubnego braku zasad kontrolowanych przez silne instytucje rządowe.

    Prawda, rzad w Kopolsce nigdy nie przyznał sie do popełnienia błędu, a to w trosce o morale społeczeństwa. Głos jednak zabrał profesor Bacludowicz, ów wielki nauczyciel narodu, który powiedział „”A nie mówiłem? Oto jak światło ekonomii rozprasza ciemnotę i gnuśność! Czyż nie powiedziałem Wam, ze Wolny Rynek rozwiążę wszelkie problemy ( w dłuższej perspektywie oczywiście)? „. Mimo to sprawy nie pozostawiono samej sobie. Przez krótki czas sytuacja wisiała na włosku kiedy dziennikarze puścili kaczkę, że MSZ Kopolski rozważa wypowiedzenie wojny Pasmanterii. Szybko jednak okazało sie że szefowi MSZ Kopolski chodziło o wojnę w tym znaczeniu  – które MSZ Kopolski czy Pasmanterii – będzie miał więcej lajkujących na na twitterze. Pomimo takiej eskalacji konfliktu, szefowie finansów obu krajów doprowadzili do spotkania. W tajnej rozmowie na najwyższym szczeblu z przedstawicielami Pasmanterii Ludowej, minister Rozstówski zapytał wprost: „A metry krótsze o 1mm? Ładnie to tak?” i pogroził palcem, na co Wysoki szósty sekretarz urzędu ds. kontaktów z krajami trzeciego świata, w randze starszego referenta – przewodniczący delegacji Pasmanterii na bilateralne rozmowy z rządem Kopolski – odparł: „Trzeba było kupować za granica metry, a nie używać gratisów!” a potem szczerze rozłożył ręce i z uśmiechem rzekł: „I co? Wojnę nam wypowiecie? ;-)”

    Na całe szczęście Kopolska zdobyła prawa do organizacji Zimowych Igrzysk Olimpijskich w Zakopconem – Zakopcone 2015. Pasmanteria obiecała udzielić Kopolsce kredyty na ich organizację i dodatkowo dostawy po preferencyjnych cenach materiałów budowlanych w metrażu, o sprawie 1mm dłużej już nie mówiono. Całą rzecz tedy zakończono ugodą i do wojny, na twitterze n alajki, oczywiście, nie doszło więc przyparta do muru Pasmanteria zdołała wyjść z konfliktu  twarzą. Strategia szefa MSZ Kopolski jeszcze raz okazała swą szatańską skuteczność.

    Wszystko dobre co sie dobrze kończy, jak to mówią…

    felicjan.jpg

    Wpadła mi w ręce książka Johna.D.Barrowa „Jak wygrać na loterii. Czyli z matematyką na co dzień” wydana przez Wydawnictwo Literackie, o której napisano na okładce że „Trudno sobie wyobrazić łatwiejszy, bardziej przyjazny i zabawny wstęp do matematyki…”. I faktycznie książka sprawiła mi sporo radości zarówno z powodu treści ( o czym za chwilę), jak i z powodu tłumaczenia o którym, z litości, więcej nic nie wspomnę.
Książka zawiera 100 2-3 stronicowych esejów o matematyce i życiu, takie „rozmaitości” czy „pot pouri” na rozmaite tematy. Dowiadujemy sie zatem że słupy wysokiego napięcia mają kształt jaki mają z powodu niebanalnych własności wielościanów wypukłych. Okazuje sie że 9 punktów na kartce narysowanych w wierzchołkach sieci kwadratowej, tak by zajmowały pozycje w kwadracie 3×3 można połączyć 4-rema liniami w bardzo sprytny sposób, którego większość z ludzi nie zgadnie za cholerę. Zostaniemy pouczeni ze relacja „jest lepszy niż” nie jest przechodnia i że może mieć to niebanalne konsekwencje dla demokracji na całym świecie, a także w jednym z rozdziałów poznamy w jaki sposób tak zaprojektować „referendum” by bez żadnego oszustwa i w całkowicie jawny sposób wygrał nasz kandydat – wszakże pod warunkiem że jest choć jeden od niego mniej lubiany. I tak dalej, i tak dalej. lekkie, łatwe i przyjemne. I zachęcające do myślenia.
No i znalazłem tam taki, miły memu sercu, problem: „był to dzień obrony mojej pracy doktorskiej. […] Jeden z profesorów znalazł w mojej pracy trzydzieści dwa błędy ortograficzne, drugi – dwadzieścia trzy[..] Pytanie brzmiało: „Ile niezauważonych przez żadnego z egzaminatorów błędów mogło tam jeszcze pozostać?”” Problem ten od dawna mnie trapi, bowiem kiedy sam przeglądam swoje teksty znajduję za każdym razem inną liczbę błędów. Co więcej, wygląda na to jakby błędy nigdy się nie kończyły… No ale czytajmy dalej: „Obaj profesorowie przez chwilę porównywali swoje wydruki i okazało się że znaleźli szesnaście takich samych błędów”. Dalej niech przemówi matematyka ( powtarzam tu rozumowanie autora książki, J.D.Barrowa).

    Załóżmy że w pracy było N błędów. Profesor A znalazł A błędów. Niech prawdopodobieństwo znajdywania błędów przez A wynosi p, wówczas:

A = pN

    Podobnie dla profesora B, znajdującego błędy z prawdopodobieństwem q, mamy:

B = qN

    Wspólnie znaleźli C identycznych błędów:

C = pqN

    ponieważ pracowali niezależnie ( a więc mnożymy prawdopodobieństwa). Z tych trzech równań, możemy wyliczyć, ze całkowita liczba błędów w pracy, N, jest równa:

N = \frac{AB}{C}
i nie zależy od prawdopodobieństw p i q.

    No i tu brew mi sie uniosła. Czyli jeśli będziemy mieli 2 szanownych luminarzy nauki, jeden z nich znajdzie 2 błędy, drugi też 2, zaś wspólny na ich listach będzie jeden wyraz, to całkowita liczba błędów będzie wynosiła 4? Hm. I to niezależnie jak będą starannie szukać? Byle oczywiście szukali ( p, q muszą być różne od zera).

    Jak już kilka razy pisałem jestem wierzącym ( ale słabo praktykującym ) entuzjasta Sage. Stąd postanowiłem rzecz rozwiązać jak na aspirującego hackera przystało, czyli za pomocą Programowania w Pythonie ( od razu uprzedzam, proszę się nie śmiać, ja litościwie spuściłem zasłonę milczenia na pracę tłumaczki tej książki, Wy możecie ścierpieć, że nie umiem programować).
Zacząłem zatem, tak: wygenerowałem losowy tekst składający sie z 10000 znaków 0 i 1, przy czym 0 występował w nim z prawdopodobieństwem 0.9 zaś 1 z prawdopodobieństwem 0.1 ( i inaczej niż się złośliwe spodziewacie, właśnie to 1 jest błędem, choć dla osoby jak ja przyznam mogłoby być odwrotnie). Operacja taka może zostać zrealizowana za pomocą poniższego kodu w Sage ( Python w notebooku w przeglądarce):

P = [0.9, 0.1]
  X = GeneralDiscreteDistribution(P)
  Text=[X.get_random_element() for _ in range(10000)]

    W wyniku dostajemy listę zer i jedynek pod zmienną Text, o długości 10000 znaków zawierająca losową liczbę jedynek. W dalszej części użyłem tylko jednej takiej listy ( generacja była jednorazowa) zawierającej 988 1-dynek czyli błędów, na losowych pozycjach. Następnie napisałem taką funkcję:

def EEstimation(TexT,NIter=100,p=0.5,q=0.5):
  RT=len(TexT)
  NE = sum(TexT);NE
  ERR=[]
  PA = [p,1-p]
  PB = [q,1-q]
  A = GeneralDiscreteDistribution(PA)
  B = GeneralDiscreteDistribution(PB)
  for _ in range(NIter):
      NA = []
      NB = []
      for i in range(RT):
          if TexT[i] == 1:
             if A.get_random_element() > 0:
                NA=NA+[i]
          if B.get_random_element() > 0:
                NB=NB+[i];
  NC=list(Set(NA).intersection(Set(NB)))
  if len(NC) <> 0:
      ERR=ERR+[(NE-(len(NA)*len(NB))/len(NC))^2]
  return(sqrt(sum(ERR)))

    Idea jest taka, że dla danego tekstu z błędami TexT dokonujemy NIter=100 krotnego przeglądnięcia tekstu i jeśli napotkamy na błąd ( TexT[i] = 1) wówczas profesor A losuje czy go znalazł z prawdopodobieństwem 1-p, zaś profesor B losuje z prawdopodobieństwem 1-q. Jeśli znalazł, w liście NA ( odpowiednio NB) zapisywany jest numer pozycji z błędem. Następnie wyliczamy jak liczna jest cześć wspólna tego co znaleźli i jeśli jej długość jest różna od zera, wyliczamy kwadrat różnicy między prawdziwą liczbą błędów ( NE) a jej estymacją ze wzoru wyprowadzonego wyżej i zapamiętujemy w liście ERR. na końcu funkcja oblicza pierwiastek kwadratowy z sumy takich kwadratów różnic, co pokazuje oczywiście jak dobrze swoją pracę wykonali profesorowie. Tego typu eksperyment, nawet dla ustalonego tekstu TexT za każdym razem daje inne wyniki, bo i inne są wyniki losowań dla panów A i B. Stąd konieczność powtarzania ich pracy – w tym wypadku 100 razy.

    Chcąc zyskać setki odsłon i tysiące czytelników postanowiłem wykonać także wykres, pokazujący jak wyniki pracy pary recenzentów, zależą od prawdopodobieństwa znalezienia błędu. Ponieważ sytuacja jest symetryczna, każdy z recenzentów pełnie identyczną rolę, załóżmy że profesor B ma określoną skuteczność, zaś skuteczność profesora A zmienia się co 0.1. Realizujemy to następującym kodem:

for i in range(111):
    PL=PL+[(float(i/110),float(EEstimation(Text,100,float(i/110),0.2)))]

    W tym wypadku założona skuteczność profesora B wynosiła 0.8. Oto wyniki dla skuteczności wynoszącej 0.7, 0.8, 0.5 i 0.1 Coś tu nie gra ( po kliknięciu otworzy się większa wersja obrazka).

JMol2d

    Oczywiście są to pewnego rodzaju przekroje przez ogólną „powierzchnię stanu” recenzentów, parametryzowaną liczbami p i q, gdzie n osi pionowej znajduje się pierwiastek z sumy kwadratów odchyleń. Oczywiście jeśli rację miałby J.D.Barrow, dostalibyśmy całkowicie płaską powierzchnię. Postanowiłem sobie taką powierzchnię narysować i w tym celu posłużyłem sie następująca iteracją ( a trwało to około godziny!):

PL = []
  for i in range(111):
      for j in range(111):
         PL=PL+[(float(i/110),float(j/110),float(EEstimation(Text,100,float(i/110),float(j/110))))]

    No i oto co wyszło ( walczyłem chwilkę z ideą że może uda mi się na wordpress umieścić cały aplet jmoll, który pozwala na interakcję z rysunkiem. niestety nic z tego. Niestety nie udało sie też uruchomić appletu przez Gdrive, pozostaje mi więc jedynie pokazać statyczne obrazki… Proszę kliknąć dla większej wersji obrazka ):

JMol

    Jak widać z niezależności od p i q – nici! Nie dosyć że zależność jest widoczna to jeszcze ma fajny regularny kształt. O czym to świadczy? Ano o tym, że kwadrat odchylenia, czyli błąd przewidywania prawdziwej liczby N, niebanalnie zależy od p i q. Widać wyraźnie że dla pewnych p i q, mamy maksimum. No i teraz sam nie wiem. Estymatory sa obciążone? Powinienem ten pierwiastek z kwadratu dzielić przez jakieś wielkości zależne od ilości znalezionych błędów?

    A może jest zupełnie inaczej – dla kiepskiej skuteczności profesorów poszukujących błędów w pracy, prawdopodobieństwo że znajdą te same błędy jest bardzo niskie. W takim wypadku, nawet dla 988 błędów w pracy, szanse że zbiór C zawiera dużą liczbę elementów jest niewielkie, co sprawia że odchylenie od prawdziwej liczby błędów rośnie. Czyli dla małych iloczynów pq przeszacowujemy ilość błędów?

Czyli nadal nie wiem ile tych błędów było…

„Jak wygrać na loterii? Czyli z matematyka na co dzień” John.D.Barrow,

Wydawnictwo literackie , 2011

Enter your email address to follow this blog and receive notifications of new posts by email.

Dołącz do 256 obserwujących.

%d blogerów lubi to: