Wstęp do Programowania potok funkcyjny

Podobne dokumenty
Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku

Indukcja. Materiały pomocnicze do wykładu. wykładowca: dr Magdalena Kacprzak

Poprawność semantyczna

Wstęp do Programowania potok funkcyjny

Podstawy Informatyki. Algorytmy i ich poprawność

Wstęp do Programowania potok funkcyjny

Wstęp do programowania

25 lutego 2013, godzina 23: 57 strona 1. P. Urzyczyn: Materia ly do wyk ladu z semantyki. Logika Hoare a

Informatyka 1. Wyrażenia i instrukcje, złożoność obliczeniowa

Wstęp do programowania

Wstęp do programowania

Brulion this version for your eyes only Dowód poprawnośći algorytmu Winograda. 1. Wprowadzenie. 2. Algorytm

Wykład 2. Poprawność algorytmów

Logika Stosowana. Wykład 1 - Logika zdaniowa. Marcin Szczuka. Instytut Informatyki UW. Wykład monograficzny, semestr letni 2016/2017

Programowanie Funkcyjne. Marcin Kubica Świder,

3. Podaj elementy składowe jakie powinna uwzględniać definicja informatyki.

(1) Poprawność Algorytmów

Programowanie funkcyjne Wykład 13. Siła wyrazu rachunku lambda

Wstęp do programowania. Procedury i funkcje. Piotr Chrząstowski-Wachtel

Programowanie w Logice Przykłady programów. Przemysław Kobylański

Wstęp do Programowania potok funkcyjny

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Podstawy programowania skrót z wykładów:

Logika Stosowana. Wykład 2 - Logika modalna Część 2. Marcin Szczuka. Instytut Informatyki UW. Wykład monograficzny, semestr letni 2016/2017

Wstęp do Programowania potok funkcyjny

Rachunek zdań. Materiały pomocnicze do wykładu. wykładowca: dr Magdalena Kacprzak

Wstęp do programowania

Podstawy Sztucznej Inteligencji (PSZT)

Wstęp do Programowania potok funkcyjny

Paradygmaty dowodzenia

4 Klasyczny rachunek zdań

Algorytmy. Programowanie Proceduralne 1

Logika Stosowana. Wykład 7 - Zbiory i logiki rozmyte Część 3 Prawdziwościowa logika rozmyta. Marcin Szczuka. Instytut Informatyki UW

III rok kognitywistyki UAM,

Wstęp do programowania. Różne różności

Bloki anonimowe w PL/SQL

Przeszukiwanie z nawrotami. Wykład 8. Przeszukiwanie z nawrotami. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 238 / 279

Programowanie funkcyjne. Wykªad 13

Warunki logiczne instrukcja if

Algorytmy. Programowanie Proceduralne 1

Mechanizmy komunikacji. spotkania symetryczne (język CSP) spotkania asymetryczne (Ada) przestrzenie krotek (Linda) potoki, komunikaty i kanały (Unix)

1 Wprowadzenie do algorytmiki

Struktury formalne, czyli elementy Teorii Modeli

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

Podstawowe elementy programu. patrz: następne 2 slajdy. Podstawowe elementy programu. Komendy proste:

Obliczenia na stosie. Wykład 9. Obliczenia na stosie. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303

Paradygmaty programowania

Wstęp do Informatyki i Programowania (kierunek matematyka stosowana)

Sztuczna Inteligencja Projekt

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

Programowanie i projektowanie obiektowe

Język rachunku predykatów Formuły rachunku predykatów Formuły spełnialne i prawdziwe Dowody założeniowe. 1 Zmienne x, y, z...

Język programowania PASCAL

Systemy ekspertowe i ich zastosowania. Katarzyna Karp Marek Grabowski

Strategie ewolucyjne (ang. evolu4on strategies)

Definicje. Algorytm to:

Teoretyczne Podstawy Języków Programowania Wykład 4. Siła wyrazu rachunku λ

Wstęp do Programowania potok funkcyjny

1 Podstawy c++ w pigułce.

Wstęp do programowania

Informatyka I. Wykład 3. Sterowanie wykonaniem programu. Instrukcje warunkowe Instrukcje pętli. Dr inż. Andrzej Czerepicki

Metoda tabel semantycznych. Dedukcja drogi Watsonie, dedukcja... Definicja logicznej konsekwencji. Logika obliczeniowa.

Algorytmy w teorii liczb

Pascal - wprowadzenie

Wyszukiwanie. Wyszukiwanie binarne

Modelowanie świata dynamicznego. 25 maja 2009

Programowanie funkcyjne wprowadzenie Specyfikacje formalne i programy funkcyjne

ECDL Podstawy programowania Sylabus - wersja 1.0

Algorytm. a programowanie -

I. KARTA PRZEDMIOTU CEL PRZEDMIOTU WYMAGANIA WSTĘPNE W ZAKRESIE WIEDZY, UMIEJĘTNOŚCI I INNYCH KOMPETENCJI EFEKTY KSZTAŁCENIA

Indukcja matematyczna, zasada minimum i maksimum. 17 lutego 2017

FUNKCJA REKURENCYJNA. function s(n:integer):integer; begin if (n>1) then s:=n*s(n-1); else s:=1; end;

Metoda Tablic Semantycznych

Struktura pliku projektu Console Application

Logika Stosowana. Wykład 2 - Logika modalna Część 3. Marcin Szczuka. Instytut Informatyki UW. Wykład monograficzny, semestr letni 2017/2018

Podstawy programowania. 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń.

Logika Hoare a z jawnymi aktualizacjami stanu

Elementy logiki. Zdania proste i złożone

Język C, instrukcje sterujące (laboratorium)

Aproksymacja funkcji a regresja symboliczna

Rekurencyjna przeliczalność

Programowanie w Ruby

Grafem nazywamy strukturę G = (V, E): V zbiór węzłów lub wierzchołków, Grafy dzielimy na grafy skierowane i nieskierowane:

Programowanie w logice

Laboratorium 2: Pętle i instrukcje warunkowe. mgr inż. Leszek Ciopiński dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

STANDARDOWE FUNKCJE PRZYNALEŻNOŚCI. METODY HEURYSTYCZNE wykład 6. (alternatywa dla s) (zdef. poprzez klasę s) GAUSSOWSKA F.

Konsekwencja logiczna

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe

Metody Rozmyte i Algorytmy Ewolucyjne

Systemy ekspertowe. Wnioskowanie w systemach regułowych. Część piąta. Autor Roman Simiński.

Wprowadzenie komentarzy do programu

Podstawy programowania Laboratorium. Ćwiczenie 2 Programowanie strukturalne podstawowe rodzaje instrukcji

Języki programowania zasady ich tworzenia

Programowanie komputerowe. Zajęcia 4

Informacja o języku. Osadzanie skryptów. Instrukcje, komentarze, zmienne, typy, stałe. Operatory. Struktury kontrolne. Tablice.

Twierdzenia Gödla dowody. Czy arytmetyka jest w stanie dowieść własną niesprzeczność?

Adam Meissner.

1 Podstawy c++ w pigułce.

Lekcja 3: Elementy logiki - Rachunek zdań

JEZYKOZNAWSTWO. I NAUKI O INFORMACJI, ROK I Logika Matematyczna: egzamin pisemny 18 czerwca Imię i Nazwisko:... I

Transkrypt:

Wstęp do Programowania potok funkcyjny Marcin Kubica 2010/2011

Outline 1

Kilka podstawowych pojęć Definition Programy imperatywne zmieniają stan, czyli wartości zmiennych. Asercja = warunek logiczny, który musi być spełniony w danym momencie obliczeń / w określonym miejscu w programie. Warunek końcowy = asercja opisująca stan po wykonaniu programu. Warunek początkowy = asercja opisująca stan przed wykonaniem programu. Specyfikacja programu = warunek początkowy + warunek końcowy.

Kilka podstawowych pojęć Definition Częściowa poprawność = warunek początkowy + obliczenie kończy się bez błędów = warunek końcowy. Własność stopu = warunek początkowy = obliczenie kończy się bez błędów. Całkowita poprawność = Częściowa poprawność + własność stopu.

Formalizmy Definition Formalizmy do specyfikacji i weryfikacji programów imperatywnych: formuły postaci: {warunek początkowy} program {warunek końcowy} oznaczają słabą poprawność, Transformatory predykatów Dijkstry przekształcają warunek końcowy w najsłabszy warunek początkowy, Logika dynamiczna (V. R. Pratt, D. Harel) rozszerzenie logiki modalnej, [p]ϕ, p ϕ. Logika algorytmiczna (G. Mirkowska, A. Salwicki) program {warunek końcowy}; oznacza najsłabszy warunek początkowy gwarantujący całkowitą poprawność.

Definition Ograniczamy się do języka while-programów. Zakładamy, że wszystkie zmienne są referencjami do liczb całkowitych. (Rozszerzenie na inne typy proste nie jest trudne, ale komplikuje technikalia.) Zakładamy, że każdy identyfikator reprezentuje inną referencję. Aliasing, lub typy złożone (tablice, wskaźniki) istotnie komplikuje problem specyfikacji i weryfikacji programów.

Definition Składnia while-programów: while-program ::= instrukcja instrukcja ; while-program instrukcja ::= begin while-program end if warunek then instrukcja [ else instrukcja ] while warunek do while-program done referencja := wyrażenie () wyrażenie ::= wyrażenia arytmetyczne ze zmiennymi warunek ::= warunki logiczne z wyrażeniami

Semantyka while-programów Definition Dziedziny semantyczne: Id zbiór identyfikatorów, Stan systemu, to wartościowanie zmiennych, funkcja przypisująca nazwom zmiennych ich wartości: Stan = [Id Z], Semantyka while-programu lub instrukcji to funkcja częściowa ze stanów w stany. (Obliczenia mogą się zapętlać, lub nie udać.) [[while-program]] : Stan Stan Semantyka wyrażenia, to funkcja ze stanu w liczby całkowite: [[wyrażenie]] : Stan int Semantyka warunku, to funkcja ze stanu w wartości logiczne: [[warunek]] : Stan bool

Semantyka while-programów Definition Semantyka while-programów: [[()]](S) = S [[r := w]](s) = fun i if i = r then [[w]](s) else S(i) [[P 1 ; P 2 ]](S) = [[P 2 ]]([[P 1 ]](S)) [[if w then P 1 else P 2 ]](S) = = if [[w]](s) then [[P 1 ]](S) else [[P 2 ]](S) [[if w then P]] = [[if w then P else ()]] [[while w do P done]](s 0 ) = S n, gdzie : not [[w]](s n ), [[w]](s i ), S i+1 = [[P]](S i ) dla 0 i < n w p.p. nieokreślone Więcej na Semantyce i weryfikacji programów.

Formuły logiki Hoare a Definition Formuły Hoare owskie to trójki postaci: {ϕ}p{ψ}, gdzie: ϕ warunek początkowy, P while-program, ψ warunek końcowy. {ϕ}p{ψ} oznacza częściową poprawność P względem ϕ i ψ. Model = dziedzina algorytmiczna. Wynikanie semantyczne ze zbioru przesłanek: A = {ϕ}p{ψ}. Możliwość udowodnienia na podstawie zbioru przesłanek: A {ϕ} P {ψ}

System dowodzenia Definition Aksjomaty: instrukcji pustej: A {ϕ} () {ϕ} instrukcji przypisania Reguły: osłabiania. A {ϕ[!x/w]} x := w {ϕ} A = ϕ = ϕ, A {ϕ } P {ψ }, A = ψ = ψ A {ϕ} P {ψ}

System dowodzenia Definition Reguły: średnika: instrukcji warunkowej: A {ϕ} P {ξ}, A {ξ} Q {ψ} A {ϕ} P; Q {ψ} A {ϕ α} P {ψ}, A {ϕ α} Q {ψ} A {ϕ} if α then P else Q {ψ} pętli while: A {ϕ α} P {ϕ} A {ϕ} while α do P done {ϕ α}

System dowodzenia Definition Wzmocnione reguły gwarantujące własność stopu: instrukcji przypisania instrukcji warunkowej: A = ϕ[!x/w] = w jest określone A {ϕ[!x/w]} x := w {ϕ} A = ϕ = α jest określone, A {ϕ α} P {ψ}, A {ϕ α} Q {ψ} A {ϕ} if α then P else Q {ψ}

System dowodzenia Definition Wzmocnione reguły gwarantujące własność stopu: pętli while: A = ϕ = α jest określone, A = (ϕ µ 0) = α, n nie występuje w P, A {ϕ α µ = n} P {ϕ µ < n} A {ϕ} while α do P done {ϕ α}

Minimum Oto program obliczający minimum z dwóch liczb: {!x =!x 0!y =!y 0 } if!x <!y then z :=!x else z :=!y {!z = min(!x 0,!y 0 )} Z reguły dla instrukcji warunkowej mamy dwie formuły do udowodnienia: 1 {!x =!x 0!y =!y 0!x <!y} z :=!x {!z = min(!x 0,!y 0 )} 2 {!x =!x 0!y =!y 0 (!x <!y)} z :=!y {!z = min(!x 0,!y 0 )}

Minimum 1 {!x =!x 0!y =!y 0!x <!y} z :=!x {!z = min(!x 0,!y 0 )} Korzystając z: (!x =!x 0!y =!y 0!x <!y) =!x = min(!x 0,!y 0 ) oraz reguły osłabiania otrzymujemy: {!x = min(!x 0,!y 0 )} z :=!x {!z = min(!x 0,!y 0 )} co jest aksjomatem przypisania. 2 {!x =!x 0!y =!y 0 (!x <!y)} z :=!y {!z = min(!x 0,!y 0 )} Korzystając z reguły osłabiania oraz z tego, że: (!x =!x 0!y =!y 0 (!x <!y)) =!y = min(!x 0,!y 0 ) otrzymujemy: {!y = min(!x 0,!y 0 )} z :=!y {!z = min(!x 0,!y 0 )} co jest aksjomatem przypisania.

Algorytm Euklidesa Specyfikacja: {!x > 0!x =!x 0!y > 0!y =!y 0 } E {!x = NWD(!x 0,!y 0 )} Implementacja: while!x!y do if!x >!y then E x :=!x!y I else y :=!y!x

Algorytm Euklidesa Pokażemy pełną poprawność. Zauważmy, że wszystkie wyrażenia i warunki są dobrze określone. Dodatkowe przesłanki tylko w regule dla pętli while. Zaczynamy od zastosowania reguły dla pętli while: Funkcja miary:!x+!y. Niezmiennik: ϕ!x > 0!y > 0 NWD(!x,!y) = NWD(!x 0,!y 0 ) (ϕ!x+!y 0) =!x =!y trywialnie spełnione. Trzeba pokazać: {ϕ!x!y!x+!y = n} I {ϕ!x+!y < n}

Algorytm Euklidesa {ϕ!x!y!x+!y = n} I {ϕ!x+!y < n} Stosując regułę dla if-then-else, mamy dwa przypadki: 1 {ϕ!x!y!x+!y = n!x >!y} x :=!x!y {ϕ!x+!y < n} 2 {ϕ!x!y!x+!y = n (!x >!y)} y :=!y!x {ϕ!x+!y < n}

Algorytm Euklidesa 1 {ϕ!x!y!x+!y = n!x >!y} x :=!x!y {ϕ!x+!y < n} Osłabiamy do aksjomatu przypisania: { }!x!y > 0!y > 0!x!y+!y < n NWD(!x!y,!y) = NWD(!x 0,!y 0 ) x :=!x!y {ϕ!x+!y < n} korzystając z implikacji: ( ) ϕ!x!y =!x+!y = n!x >!y!x!y > 0!y > 0 NWD(!x!y,!y) = NWD(!x 0,!y 0 )!x!y+!y < n

Algorytm Euklidesa 2 {ϕ!x!y!x+!y = n (!x >!y)} y :=!y!x {ϕ!x+!y < n} Osłabiamy do aksjomatu przypisania: { }!x > 0!y!x > 0!x+!y!x < n NWD(!x,!y!x) = NWD(!x 0,!y 0 ) y :=!y!x {ϕ!x+!y < n} korzystając z implikacji: ( )!x > 0!y!x > 0 ϕ!x!y = NWD(!x,!y!x) = NWD(!x!x+!y = n (!x >!y) 0,!y 0 )!x+!y!x < n

Algorytm mnożenia rosyjskich chłopów Specyfikacja: {!x =!x 0!x 0!y =!y 0!y 0} P {!z =!x 0!y 0 } Implementacja: z := 0; while!x > 0 do if!x mod 2 = 0 then begin x :=!x/2; y :=!y 2 P W I end else begin x :=!x 1; z :=!z+!y end done

Algorytm mnożenia rosyjskich chłopów Pokażemy pełną poprawność. Wyrażenia oraz warunki są zawsze dobrze określone. Dodatkowe przesłanki tylko w regule dla pętli while. Niezmiennik pętli while: ϕ!x!y+!z =!x 0!y 0!x 0!y 0

Algorytm mnożenia rosyjskich chłopów {!x =!x 0!x 0!y =!y 0!y 0} P {!z =!x 0!y 0 } Z reguły dla średnika uzyskujemy dwie formuły do udowodnienia: 1 {!x =!x 0!x 0!y =!y 0!y 0} z := 0 {ϕ} Możemy osłabić do aksjomatu przypisania: {!x!y + 0 =!x 0!y 0!x 0!y 0} z := 0 {ϕ} 2 {ϕ} W {!z =!x 0!y 0 }

Algorytm mnożenia rosyjskich chłopów 2 {ϕ} W {!z =!x 0!y 0 } Zauważmy, że (ϕ!x 0) = (!x = 0!z =!x 0!y 0 ). Osłabiamy do: {ϕ} W {ϕ!x 0}. Stosujemy regułę dla pętli while: Funkcja miary:!x. (ϕ!x 0) = (!x > 0). {ϕ!x > 0!x = n} I {ϕ!x < n}

Algorytm mnożenia rosyjskich chłopów {ϕ!x > 0!x = n} I {ϕ!x < n} Stosując regułę instrukcji warunkowej dostajemy dwie formuły: A) {ϕ!x > 0!x = n!x mod 2 = 0} x :=!x/2; y :=!y 2 {ϕ!x < n} B) {ϕ!x > 0!x = n!x mod 2 0} x :=!x 1; z :=!z+!y {ϕ!x < n}

Algorytm mnożenia rosyjskich chłopów A) {ϕ!x > 0!x = n!x mod 2 = 0} x :=!x/2; y :=!y 2 {ϕ!x < n} Z reguły dla średnika sprowadzamy do aksjomatu przypisania: {!x 2!y+!z =!x 0!y 0!x 0 2!y 0!x < n} y :=!y 2 {ϕ!x < n} oraz: {ϕ!x > 0!x = n!x mod 2 = 0} x :=!x/2 {!x 2!y+!z =!x 0!y 0!x 0 2!y 0!x < n}

Algorytm mnożenia rosyjskich chłopów {ϕ!x > 0!x = n!x mod 2 = 0} x :=!x/2 {!x 2!y+!z =!x 0!y 0!x 0 2!y 0!x < n} Korzystamy z implikacji: ϕ!x > 0!x = n!x mod 2 = 0 = Osłabiamy do aksjomatu przypisania: ( (!x/2) 2!y+!z =!x0!y 0 )!x/2 0 2!y 0!x/2 < n {(!x/2) 2!y+!z =!x 0!y 0!x/2 0 2!y 0!x/2 < n} x :=!x/2 {!x 2!y+!z =!x 0!y 0!x 0 2!y 0!x < n}

Algorytm mnożenia rosyjskich chłopów B) {ϕ!x > 0!x = n!x mod 2 0} x :=!x 1; z :=!z+!y {ϕ!x < n} Z reguły dla średnika, otrzymujemy aksjomat przypisania: {!x!y+!z+!y =!x 0!y 0!x 0!y 0!x < n} z :=!z+!y {ϕ!x < n} oraz: {ϕ!x > 0!x = n!x mod 2 0} x :=!x 1 {!x!y+!z+!y =!x 0!y 0!x 0!y 0!x < n}

Algorytm mnożenia rosyjskich chłopów {ϕ!x > 0!x = n!x mod 2 0} x :=!x 1 {!x!y+!z+!y =!x 0!y 0!x 0!y 0!x < n} Korzystając z implikacji: ϕ!x > 0!x = n!x mod 2 0 = osłabiamy do aksjomatu przypisania: ( ) (!x 1)!y+!z+!y =!x0!y 0!x 1 0!y 0!x 1 < n {(!x 1)!y+!z+!y =!x 0!y 0!x 1 0!y 0!x 1 < n} x :=!x 1 {!x!y+!z+!y =!x 0!y 0!x 0!y 0!x < n}

http://xkcd.com/844/ Deser