Systemy iteracyjne Podstawy programowania wykład 2 Pojęcie iteracji Systemy rzeczywistości, tj. wyróŜnione struktury relacyjne (często z relacją porządku), w których realizowane jest powtarzalne wykonywanie tych samych operacji lub wchodzenie w te same relacje nazywamy systemami iteracyjnymi. W ujęciu algebraicznym przez iterację moŜna rozumieć ten sam typ skończonej ilości złoŜeń operacji (niekonieczne tych samych operacji) w algebrach naleŜących do klasy wszystkich analogicznych (dokładniej: podobnych z dokładnością do homomorfizmu) algebr częściowych (podalgebr sytemu iteracyjnego), a w ujęciu logicznym ten sam typ złoŜeń operacji i relacji w strukturze relacyjnej naleŜącej do klasy wszystkich analogicznych (dokładniej: podobnych z dokładnością do homomorfizmu) struktur relacyjnych (podsystemów sytemu iteracyjnego). Przykład iteracji Np. dla homomorficznych algebr A1 = < U1, f1, f2 >, A2 = < U2, g1, g2 >, gdzie pierwsze operacje są jednoargumentowe, a drugie dwuargumentowe, złoŜenia f(x1, x2) = f2(x1,f1(x2)) i g(x1, x2) = g2(x1, g1(x2)) mają ten sam typ. Gdy oznaczymy ten typ przez i, to piszemy i{f1, f2} = f, i{g1, g2} = g. Iterację i jednej funkcji f zapisujemy if. PoniewaŜ kaŜda struktura relacyjna indukuje zbiór iteracji, więc system iteracyjny moŜemy utoŜsamiać z indukującą iteracje strukturą relacyjną. Bardziej precyzyjne określenie iteracji Wprowadzone wcześniej pojęcie iteracji moŜna bardziej precyzyjnie określić za pomocą klasy abstrakcji. Dowolną klasę wszystkich izomorficznych podsystemów systemu iteracyjnego nazywamy iteracją. Liczby kardynalne są iteracjami: Niech <U, R> jest systemem iteracyjnym, w którym U jest dowolnie ustalonym nieskończonym zbiorem, a rodzina relacji R jest pusta. Wtedy, dowolny podzbiór U wyznacza podsystem tego systemu iteracyjnego, a iteracja jako klasa wszystkich izomorficznych podsystemów jest klasą wszystkich równolicznych zbiorów, tj. jest liczbą kardynalną. Podobnie: liczby porządkowe są iteracjami. „Kreskowy” system zliczania przedmiotów - izomorficzne podsystemy zliczania przedmiotów - jednoelementowy podsystem - dwuelementowy podsystem - trzyelementowy podsystem Iteracje w „kreskowym” systemie zliczania przedmiotów są modelem liczb naturalnych. Systemy pomiarowe jako systemy iteracyjne Mechanizm pomiaru - mechanizm ustalający w danym stanie dokonywania pomiaru wystąpienie kolejnej jednostki pomiaru. Włączenie mechanizmu pomiaru za kaŜdym razem powiększa na skali pomiaru wynik pomiaru o następną jednostkę. Nie wystąpienie następnej jednostki pomiaru oznacza jego zakończenie. Pomiar jest więc iterowaniem jednostek pomiaru. ZłoŜenie jednostek pomiaru - wynik skończonej ilości niezaleŜnych pomiarów, np. jednostka miary pola powierzchni cm2 = cm*cm, jednostka siły N = kg* m /s. Wielkości są niezaleŜne, gdy nie mogą się wzajemnie określać tak, aby do wyznaczenia którejś jednostki wystarczał pomiar pozostałych jednostek. Zbór niezaleŜnych wielkości wymiarowych wraz z operacjami i relacjami tworzy przestrzeń wymiarową. Jest ona systemem iteracyjnym. Klasa wszystkich izomorficznych podprzestrzeni tej przestrzeni jest iteracją. Wielkości określone przez operacje nazywamy ekstensjonalnymi, a określone przez relacje intensjonalnymi. We współczesnej fizyce iteracjami w przestrzeniach wymiarowych są liczby rzeczywiste. ZłoŜenie wielkości ekstensjonalnej z intesjonalną jest wielkością energii Liczby całkowite jako iteracje M = < U, π, I >, gdzie U jest nieskończonym niepustym zbiorem, a π róŜnowartościową funkcją określoną na tym zbiorze, a I funkcją toŜsamościową (I(x) = x). I tak I1. ZłoŜenie funkcji π ma typ 0, gdy jego wynikiem jest funkcja toŜsamościowa I. Przez 1 oznaczamy iterację, oznaczającą typ złoŜenia funkcji π, którego wynikiem jest funkcja π. Piszemy 0π = I; I2. Jeśli i jest iteracją, to istnieje taka iteracja i* , Ŝe i*π = (iπ)π, gdzie zapis f1f2 jest złoŜeniem funkcji f1, f2 określonym wzorem f1f2(x)=f2(f1(x)); I3. JeŜeli do zbioru iteracji naleŜy 0 i spełniony jest warunek I2 to kaŜda iteracja naleŜy do tego zbioru. Liczby całkowite jako iteracje Sumę i iloczyn iteracji określamy następująco: Sum. (n + k) π = (nπ)(kπ); Il. (n * k) π = n(kπ). Zbiór iteracji równowaŜny zbiorowi liczb całkowitych uzyskamy, jeśli będziemy rozwaŜać złoŜenia funkcji wśród których jest funkcja odwrotna do funkcji π, tj. M = < U. π, I, π-1>. Wtedy przyjmiemy oznaczenie (nπ)-1 = (-n)π. Oczywiście n + (-n) = 0, a ponadto zachodzą pozostałe własności liczb całkowitych. Iteracyjne ujęcie teorii liczb rzeczywistych Iterowanie, tj. powtarzanie się czegoś w systemie iteracyjnym, moŜe być rozumiane jako homomorfizm (izomorfizm) pomiędzy podsystemami systemu iteracyjnego. Określenie liczb rzeczywistych. Niech zbiór U jest uporządkowany przez relację ≥ w sposób gęsty i bez luk, a więc w sposób ciągły, bez elementu pierwszego i ostatniego. Wybierzmy w tym zbiorze dowolne dwa róŜne elementy 0 i 1, tak aby 1≥0. ZałóŜmy, Ŝe wtedy, dla dowolnego elementu x∈U, istnieje pewien izomorfizm monotoniczny ix, przekształcający 0 w liczbę x oraz pewien automorfizm monotoniczny ax przekształcający element 1 w x≠0. JeŜeli klasę automorfizmów rozszerzymy o homomorfizm a0 : U → {0}, to moŜemy określić na U następujące działania: x + y = ix(y), x*y = ax(y). MoŜna sprawdzić, Ŝe struktura <U, +, * , ≥, 0, 1> spełnia aksjomaty teorii liczb rzeczywistych. Liczby zespolone jako iteracje Ze względów dydaktycznych zalecany moŜe być następujący przykład systemu iteracyjnego: operacja π jest wykonywaniem przez ucznia kroków do przodu w danym kierunku, zbiór U jest zbiorem połoŜeń ucznia, funkcja I to postój w miejscu. Najbardziej interesującym przykładem jest system iteracji, w którym oprócz kroków do przodu w danym kierunku, wykonywane są kroki prostopadle na lewo, w bok od kierunku przemieszczania się ucznia. Oznaczmy przez π kroki do przodu, a przemieszczanie się o krok na lewo od kierunku ruchu przez i Wtedy kroki wykonane na lewo od kroków wykonanych na lewo od kierunku do przodu, są. krokami do tyłu. Liczny zespolone jako iteracje Wprowadzając analogiczne jak poprzednio pojecie iloczynu iteracji, mamy iiπ = - 1π π, lub krócej: i2 = -1. Tak więc iteracja n + ki , oznaczająca n kroków w danym kierunku i następnie k kroków na lewo od tego kierunku, moŜe być utoŜsamiana z liczbą zespoloną. ZauwaŜmy, Ŝe iteracja n + ki ustala nowy kierunek ruchu i wyznacza pewne przemieszczenie, które moŜemy traktować jako nowy krok. Iloczyn iteracji (n1 + k1 i) (n2 + k2 i) będzie wtedy oznaczał wykonanie n1 tych nowych kroków do przodu i k1 w kierunku na lewo od kierunku ustalonego przez iterację n2 + k2 i. Dokładnie: (n1 + k1 i) (n2 + k2 i) = (n1 n2 – k1 k2) + (n1 k2 + k1 n2) i (dlaczego?). Grupy krystalografii jako systemy iteracyjne Projektowanie parkietów lub posadzek Grupy krystalografii wykorzystuje się przy projektowaniu parkietów lub posadzek z płytek drewnianych lub ceramicznych. Problem ten, dla przypadku płytek w kształcie wielokątów foremnych, jest juŜ znany od czasów staroŜytnych. Całą płaszczyznę dzieli się na stykające się w wierzchołkach wielokąty foremne, tak aby w kaŜdym wierzchołku stykały się wszystkie przystające do wybranych wielokąty. PoniewaŜ wielokąt o n bokach posiada kąt o mierze (n - 2) * 1800/ n, a suma miar wszystkich połączonych w wierzchołku kątów wynosi 3600, więc przykładowo dla trzech wielokątów (o ilości boków n1, n2, n3) mamy warunek 1/n1 + 1/n2 + 1/n3 = 1/2, a dla czterech wielokątów (o ilości boków n1, n2, n3, n4) 1/n1 + 1/n2 + 1/n3 + 1/n4 = 1. Przykładowe projekty parkietów przedstawiamy dalej. MoŜna je zrealizować w edytorach grafiki (np. Power Point). Systemy geometryczne Sztuka M.C.Eschera System geometryczny Parkiet 1 System geometryczny Parkiet 2 System geometryczny Parkiet 3 System geometryczny Parkiet 4 System geometryczny Parkiet 5 System geometryczny Parkiet 6 System geometryczny Parkiet 7 System geometryczny Parkiet 8 System geometryczny Parkiet 9 System geometryczny Parkiet 10 Iteracyjne ujęcie liczb pitagorejskich Źródło: J. H. Conway, R. K. Guy, Księga liczb, WNT, Warszawa 1999, s.51 Iteracyjne ujęcie liczb pitagorejskich Źródło: J. H. Conway, R. K. Guy, Księga liczb, WNT, Warszawa 1999, s.62 Operacja przypisania Systemy podstawień ZłoŜenie funkcji określa się jako ciąg podstawień termów: t1:= τ1, t2:= τ2, ..., tn:= τn. Np. złoŜeniu z = f(g(h(x,y)), h(x,g(y))) odpowiada następujący ciąg podstawień: z:= f(x1, x2), x1:= g(x3), x2:= h(x, x4), x3:= h(x, y), x4:= g(y) Iteracja jako klasa drzew podstawień f g h h x x y g y Procedury w systemach iteracyjnych Niech U zbiorem wszystkich rozwaŜanych przedmiotów (teoretycznych i empirycznych) w dowolnie ustalonym systemie iteracyjnym. Jedne z tych przedmiotów są znane inne nieznane. Ciąg relacji r1, r2, ..., rk+1, wiąŜących przedmioty znane z nieznanymi nazywamy procedurą relacyjną, a jeśli jest ciągiem, określającym przedmiot α, to nazywamy go procedurą relacyjną wyprowadzenia α.. Ciąg operacji określających osiągalność jakiegoś x∈ U, uporządkowanych według kolejności ich składania, nazywamy procedurą operacyjną. JeŜeli procedura relacyjna wyprowadzenia α nie prowadzi do wyprowadzenia α, to mówimy Ŝe zawodzi, a w przeciwnym wypadku, Ŝe nie zawodzi. Zbór procedur w systemie iteracyjnym Zbiorem procedur w danym systemie iteracyjnym jest najmniejszy zbiór do którego naleŜą: 1.Procedury relacyjne (wyprowadzenia), 2.Procedury operacyjne, 3.Ciągi procedur, 4.Układy trzech procedur postaci jeŜeli (procedura relacyjna wyprowadzenia α, procedura pierwsza, procedura druga), reprezentujące wykonanie procedury pierwszej, gdy procedura relacyjna wyprowadzenia α nie zawodzi, a drugiej, gdy zawodzi. 5.Układy dwóch procedur zwane procedurami iteracyjnymi, postaci powtarzaj (procedura relacyjna, dana procedura), określające osiągalność kaŜdego stanu wyprowadzonego przez kolejne stosowanie tej samej procedury wyprowadzenia – dopóki procedura relacyjna nie zawodzi wykonywana jest dana procedura. Procedura iteracyjna procedura wyprowadzenia tak Procedura Reprezentacje procedur oraz programy MoŜna wyróŜnić trzy sposoby reprezentacji procedur: R1. reprezentacja ikoniczna – schematy blokowe, grafy, diagramy, drzewa, reprezentacje multimedialne, itp. R2. reprezentacja symboliczna – języki programowania: strukturalne, logiczne, obiektowe, wizualne. R3. reprezentacja enaktywna - tabele decyzyjne, arkusze kalkulacyjne, bazy danych, symulacje. Język, w którym wyraŜamy procedury realizowane w pewnym systemie iteracji nazywamy językiem programowania, a wyraŜenia odpowiadające procedurom programami. Programy reprezentujące procedury operacyjne S jest zbiorem programów reprezentujących procedury operacyjne, realizowane w jakimś systemie iteracyjnym wtedy i tylko wtedy, gdy jest najmniejszym spośród zbiorów S’ spełniającym następujące warunki: P1. podzbiorem S’ jest zbiór wszystkich podstawień termu t za zmienną indywiduową x, postaci x:= t, Symbol := jest niekiedy w podręcznikach nazywany symbolem przypisania. Niestety, jest to myląca nazwa, sugerująca uczniowi jakoby przypisanie było czymś innym niŜ podstawienie. Tym bardziej, Ŝe operację podstawienia zna on świetnie z lekcji matematyki. P2. jeśli α jest formułą logiczną spełnioną w danym systemie rzeczywistości Re oraz K,M, K1, K2, ..., Kn,, dla dowolnych n>0, naleŜą do S’, to wyraŜenia: begin K1; K2,; ..., Kn end (odpowiada ciągowi procedur), if α then K else M (odpowiada procedurze typu jeŜeli...), while α do K (odpowiada procedurze iteracyjnej), naleŜą do S’. Programy reprezentujące procedury relacyjne Deklaracje procedur relacyjnych moŜna wyrazić za pomocą ciągów zbiorów deklaracji relacji lub negacji ich deklaracji. Deklaracje nazywamy klauzulami, a programowanie w języku klauzul (np. język PROLOG) nazywamy programowaniem logicznym. Zdefiniujemy teraz bardziej precyzyjnie składnię języka klauzul. Najbardziej dogodnym zapisem klauzul jest zapis postaci (R. Kowalski, Logika w rozwiązywaniu zadań, WNT, Warszawa 1989.) B1, B2, ..., Bm :- A1, A2, ..., An Gdzie znak “:-“ czytamy: jeśli, przy czym B1, B2, ..., Bm, są formułami atomowymi, n ≥ 0 i m ≥ 0. Formuły atomowe A1, A2, ..., An stanowią koniunkcję warunków klauzuli, a B1, B2, ..., Bm– alternatywę konkluzji. Spośród klauzul wyróŜnia się klauzule hornowskie postaci B :- A1, A2, ..., An Jeśli klauzula zawiera zmienne x1, ..., xk, naleŜy ja interpretować jako stwierdzenie, Ŝe dla wszystkich x1, ..., xk : B1 lub ... lub Bm jeśli A1 i ... i An. Jeśli n = 0, klauzulę naleŜy interpretować jako bezwarunkowe stwierdzenie, Ŝe dla wszystkich x1, ..., xk : B1 lub ... lub Bm . Programy reprezentujące procedury relacyjne Jeśli m = 0, klauzulę naleŜy interpretować jako stwierdzenie, Ŝe dla wszystkich x1, ..., xk nieprawda, Ŝe zachodzi A1 i ... i An. Jeśli m = n = 0, klauzulę zapisuje się w postaci (klauzula pusta) i interpretuje jako zdanie zawsze fałszywe. Atom (lub formuła atomowa) to wyraŜenie postaci: R (t1, ..., tm), przy czym R jest m-argumentowym symbolem relacyjnym, t1, ..., tm są termami oraz m ≥ l. Atom naleŜy interpretować jako stwierdzenie, Ŝe relacja o nazwie R zachodzi między indywiduami o nazwach t1, ..., tm. Term jest zmienną, stałą lub wyraŜeniem postaci f (t1, ..., tm), przy czym f jest m - argumentowym symbolem funkcyjnym, t1, ..., tm są termami oraz m ≥ l. . Symbol implikacji w języku klauzul jest skierowany w kierunku odwrotnym niŜ w klasycznym języku logiki. Przyzwyczajenie kaŜe pisać raczej: A :- B (jeśli A to B), a nie B :- A (B jeśli A). JednakŜe róŜnica jest nieistotna. Notację: B :- A stosuje się w celu wyeksponowania konkluzji klauzuli.