Logika stosowana. Ćwiczenia Programowanie w logice i PROLOG. Marcin Szczuka. Instytut Informatyki, Uniwersytet Warszawski

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

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

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

Adam Meissner.

Programowanie deklaratywne

Dowody założeniowe w KRZ

METODY DOWODZENIA TWIERDZEŃ I AUTOMATYZACJA ROZUMOWAŃ

Podstawy Sztucznej Inteligencji (PSZT)

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

Składnia rachunku predykatów pierwszego rzędu

Celem ćwiczenia jest zapoznanie się z podstawowymi możliwościami języka Prolog w zakresie definiowania faktów i reguł oraz wykonywania zapytań.

Wykład 11a. Składnia języka Klasycznego Rachunku Predykatów. Języki pierwszego rzędu.

Języki programowania zasady ich tworzenia

Rachunek zdań i predykatów

Elementy logiki. Wojciech Buszkowski Wydział Matematyki i Informatyki UAM Zakład Teorii Obliczeń

Projekt 4: Programowanie w logice

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

Programowanie deklaratywne

Metoda Tablic Semantycznych

Wprowadzenie do Prologa

Wykład 6. Reguły inferencyjne systemu aksjomatycznego Klasycznego Rachunku Zdań

PROLOG. Prolog. Programowanie, W.F. Clocksin, C.S. Mellish, HELION Prolog, język sztucznej inteligencji, Eugeniusz Gatnar, Katarzyna Stąpor, Wyd.

Programowanie w logice

PRZEWODNIK PO PRZEDMIOCIE

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

Reguły gry zaliczenie przedmiotu wymaga zdania dwóch testów, z logiki (za ok. 5 tygodni) i z filozofii (w sesji); warunkiem koniecznym podejścia do

Internet Semantyczny i Logika I

Paradygmaty dowodzenia

Programowanie komputerów

PODSTAWY SZTUCZNEJ INTELIGENCJI

LOGIKA I TEORIA ZBIORÓW

Semantyka rachunku predykatów

Wstęp do logiki. Klasyczny Rachunek Zdań III

Lista 1 (elementy logiki)

Logika dla socjologów Część 2: Przedmiot logiki

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

LOGIKA Klasyczny Rachunek Zdań

Metody dowodzenia twierdzeń i automatyzacja rozumowań Systemy aksjomatyczne I

Logika stosowana. Ćwiczenia Wnioskowanie przez abdukcję. Marcin Szczuka. Instytut Matematyki, Uniwersytet Warszawski

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...

Elementy logiki matematycznej

Logika pragmatyczna dla inżynierów

Andrzej Wiśniewski Logika I Materiały do wykładu dla studentów kognitywistyki. Wykład 9. Koniunkcyjne postacie normalne i rezolucja w KRZ

Semantyka rachunku predykatów pierwszego rzędu. Dziedzina interpretacji. Stałe, zmienne, funkcje. Logika obliczeniowa.

0.1. Logika podstawowe pojęcia: zdania i funktory, reguły wnioskowania, zmienne zdaniowe, rachunek zdań.

Opis efektów kształcenia dla programu kształcenia (kierunkowe efekty kształcenia) WIEDZA. rozumie cywilizacyjne znaczenie matematyki i jej zastosowań

Wykład 4. Algorytmy i programy. Algorytmy + struktury danych = programy. Niklaus Wirth. Algorytm = logika + sterowanie.

Programowanie logiczne a negacja

1. Wstęp do logiki. Matematyka jest nauką dedukcyjną. Nowe pojęcia definiujemy za pomocą pojęć pierwotnych lub pojęć uprzednio wprowadzonych.

Np. Olsztyn leży nad Łyną - zdanie prawdziwe, wartość logiczna 1 4 jest większe od 5 - zdanie fałszywe, wartość logiczna 0

Zapisywanie algorytmów w języku programowania

Paradygmaty programowania

Logika Matematyczna Spójniki logiczne Tautologie Dowodzenie Kwantyfikatory Zagadki. Logika Matematyczna. Marcelina Borcz.

Indukcja matematyczna

Adam Meissner STUCZNA INTELIGENCJA

Lekcja 3: Elementy logiki - Rachunek zdań

Logika pragmatyczna. Logika pragmatyczna. Kontakt: Zaliczenie:

PRZEWODNIK PO PRZEDMIOCIE

Katedra Teorii i Filozofii Prawa Poznań, dnia 27 września 2018 r.

Z-LOG-1003 Logika Logics

Wprowadzenie do logiki Zdania, cz. III Język Klasycznego Rachunku Predykatów

PRZEWODNIK PO PRZEDMIOCIE

RACHUNEK ZDAŃ 7. Dla każdej tautologii w formie implikacji, której poprzednik również jest tautologią, następnik także jest tautologią.

Programowanie deklaratywne i logika obliczeniowa

Drzewa Semantyczne w KRZ

O ALGORYTMACH I MASZYNACH TURINGA

Laboratorium przedmiotu Paradygmaty Programowania

Prolog (Pro-Logic) Programowanie w Logice. Dr inż. Piotr Urbanek

Rachunek logiczny. 1. Język rachunku logicznego.

MATEMATYKA DYSKRETNA, PODSTAWY LOGIKI I TEORII MNOGOŚCI

Wstęp do logiki. Klasyczny Rachunek Predykatów I

Myślenie w celu zdobycia wiedzy = poznawanie. Myślenie z udziałem rozumu = myślenie racjonalne. Myślenie racjonalne logiczne statystyczne

Podstawy Informatyki. Algorytmy i ich poprawność

Uwagi wprowadzajace do reguł wnioskowania w systemie tabel analitycznych logiki pierwszego rzędu

Hoare Advanced Homework Assistant

ćwiczenia 15 zaliczenie z oceną

Obliczenia inspirowane Naturą

LOGIKA FORMALNA POPRAWNOŚĆ WNIOSKOWAŃ

Monoidy wolne. alfabetem. słowem długością słowa monoidem wolnym z alfabetem Twierdzenie 1.

Andrzej Wiśniewski Logika II. Materiały do wykładu dla studentów kognitywistyki

Ćwiczenie numer 4 JESS PRZYKŁADOWY SYSTEM EKSPERTOWY.

Algorytm. Krótka historia algorytmów

Programowanie w logice Wykład z baz danych dla

Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku

Dedukcyjne bazy danych

Internet Semantyczny i Logika II

Wstęp do programowania

Tautologia (wyrażenie uniwersalnie prawdziwe - prawo logiczne)

Programowanie w Logice

PROLOG WSTĘP DO INFORMATYKI. Akademia Górniczo-Hutnicza. Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej.

Nazwa wariantu modułu (opcjonalnie): Laboratorium programowania w języku C++

Algebrę L = (L, Neg, Alt, Kon, Imp) nazywamy algebrą języka logiki zdań. Jest to algebra o typie

Systemy ekspertowe i ich zastosowania. Katarzyna Karp Marek Grabowski

1. Powtórka ze szkoły. Wykład: (4 godziny), ćwiczenia: , kolokwium nr 1:

Liczba godzin Punkty ECTS Sposób zaliczenia. ćwiczenia 15 zaliczenie z oceną

Metody wnioskowania. Wnioskowanie w przód (ang. forward chaining) Wnioskowanie w tył (ang. Backward chaining) Od przesłanki do konkluzji Np..

SCENARIUSZ LEKCJI. Streszczenie. Czas realizacji. Podstawa programowa

WYKŁAD. Jednostka prowadząca: Wydział Techniczny. Kierunek studiów: Elektronika i telekomunikacja. Nazwa przedmiotu: Język programowania C++

Wprowadzenie do Sztucznej Inteligencji

III rok kognitywistyki UAM,

Transkrypt:

Logika stosowana Ćwiczenia Programowanie w logice i PROLOG Marcin Szczuka Instytut Informatyki, Uniwersytet Warszawski Wykład monograficzny w semestrze letnim 2018/2019 Marcin Szczuka (MIMUW) Logika stosowana 2019 1 / 20

Plan wykładu 1 Czym jest programowanie w logice? Historia programowania w logice 2 Logika a programowanie Programowanie w Prologu Przykład innego rodzaju Marcin Szczuka (MIMUW) Logika stosowana 2019 2 / 20

Aspekty programowania w logice Programowanie w logice (Logic Programming) jest alternatywnym sposobem tworzenia programów, które mają bardziej odpowiadać na pytania niż wykonywać operacje numeryczne; Programy tworzymy w języku (jakiejś) logiki; Wykonanie programu w logice odpowiada procesowi dowodzenia (wywodzenia) twierdzeń, tzn. kroki obliczenia są wykonywane za pomocą wnioskowań formalnych; Naczelnym przykładem języka programowania w logice jest PROLOG (PROgramming in LOGic). Marcin Szczuka (MIMUW) Logika stosowana 2019 3 / 20

Plan wykładu 1 Czym jest programowanie w logice? Historia programowania w logice 2 Logika a programowanie Programowanie w Prologu Przykład innego rodzaju Marcin Szczuka (MIMUW) Logika stosowana 2019 4 / 20

Krótka historia programowania w logice Idea programowania w logice wywodzi się z pewnych postulatów twórcy rachunku λ - Alonso Churcha (lata 30). W 1974 Robert Kowalski, profesor Uniwersytetu w Edynburgu, zaproponował by stworzyć metodę wywodzenia (SLD resolution) opartą na przeszukiwaniu. Taka rezolucja jest podstawą PROLOGU i jego pochodnych. Pierwszy prototyp proto-prologu powstał we Francji (ca. 1972). Pierwszy kompilator Prologu (David H. D. Warren) powstał w Edynburgu ok. 1975 roku. W latach 1982-1992 Japonia realizowała program komputera piątej generacji, który miał być myślącą maszyną i działać w oparciu o obliczenia symboliczne. Programowanie w logice (i Prolog) miały się stać jego silnikiem. Nie bardzo się udało. W tym tysiącleciu wydajność obliczeń w Prologu i podobnych językach znacząco się poprawiła, nadal jednak jest słabsza niż dla wielu innych języków. Powstały także interfejsy umożliwiające wykorzystywanie elementów Prologu w innych językach programowania. Marcin Szczuka (MIMUW) Logika stosowana 2019 5 / 20

Czemu Prolog nie podbił świata? Czemu Prolog nigdy nie zdobył popularności choćby zbliżonej do C/Javy/Pythona? Początkowo był błędnie brany za rodzaj uniwersalnego języka programowania. To był kosztowny błąd. Nigdy nie był i raczej nigdy nie będzie równie wydajny jak np. C/C++. Wsparcie dla Prologu wymaga zasobów i środków, których firmy nie są gotowe poświęcić. Pomimo wielu działań wartość rozwiązań opartych na Prologu nie została nigdy zauważona przez przemysł IT. Marcin Szczuka (MIMUW) Logika stosowana 2019 6 / 20

Plan wykładu 1 Czym jest programowanie w logice? Historia programowania w logice 2 Logika a programowanie Programowanie w Prologu Przykład innego rodzaju Marcin Szczuka (MIMUW) Logika stosowana 2019 7 / 20

Czym jest logika? Logika to język plus reguły wnioskowania. Ma składnię, semantykę i ścisłe reguły konstruowania hipotez. Składnia (Syntax): Zasady konstruowania formuł, zwykle najprostsza część logiki. Semantyka (Semantics): Zanczenie jakie niosą ze sobą formuły, głownie w sensie konsekwencji logicznej. Reguły wnioskowania (Inference rules): Opisują poprawny sposób wyznaczania wniosków (hypotheses, conclusions) z założeń (theory, premises). Marcin Szczuka (MIMUW) Logika stosowana 2019 8 / 20

Przykład wykorzystania wnioskowania Zadanie - mając informację o relacji bycia ojcem i matką wyznacz zależność bycia dziadkiem/wnukiem. Na przykład mając informację wyrażoną w postaci następujących faktów: John is father of Lily Kathy is mother of Lily Lily is mother of Bill Ken is father of Karen Odpowiedz na pytania: Kim są dziadkowie (babcie) Billa? (Who are grand parents of Bill?) Kto jest dziadkiem/babcią Karen? (Who are grand parents of Karen?) Marcin Szczuka (MIMUW) Logika stosowana 2019 9 / 20

Przykład w Prologu W Prologu nasze fakty zapisalibyśmy w następujący sposób father(john, lily). mother(kathy, lily). mother(lily, bill). father(ken, karen). Uwagi: 1 W logice wyrażenia takie jak father, mother w naszym przykładzie nazywamy predykatami. 2 Wyrażenia podające prawdziwe fakty, takie jak father(john, lily), nazywamy formułami atomowymi lub atomami. Marcin Szczuka (MIMUW) Logika stosowana 2019 10 / 20

Plan wykładu 1 Czym jest programowanie w logice? Historia programowania w logice 2 Logika a programowanie Programowanie w Prologu Przykład innego rodzaju Marcin Szczuka (MIMUW) Logika stosowana 2019 11 / 20

Programy jako formuły logiczne Mamy wyrazić relację bycia dziadkiem/babcią (grand parent relationship): grandparent(x,z) :- parent(x,y), parent(y,z). parent(x,y) :- father(x,y). parent(x,y) :- mother(x,y). Takie formuły w Prologu nazywamy wyrażeniami warunkowymi (conditional statements). Duże litery (X,Y,Z) oznaczają zmienne pod kwantyfikatorem ogólnym. Znaczek :- koduje implikację ( ). Na przykład pierwsza formuła oznacza: Dla każdych X,Y,Z jeśli X jest rodzicem Y i Y jest rodzicem Z to X jest dziadkiem/babcią Z. Marcin Szczuka (MIMUW) Logika stosowana 2019 12 / 20

Program w Prologu Zestawiając dwa poprzednie slajdy dostajemy program w Prologu: Program Grand Parent grandparent(x,z) :- parent(x,y), parent(y,z). parent(x,y) :- father(x,y). parent(x,y) :- mother(x,y). father(john, lily). mother(kathy, lily). mother(lily, bill). father(ken, karen). Marcin Szczuka (MIMUW) Logika stosowana 2019 13 / 20

Co potrafi Prolog? Po wprowadzeniu programu (faktów i reguł/predykatów) możemy zadawać pytania, np.?- grandparent(john,bill) W tym przypadku Prolog dokona wnioskowania i odpowie YES. Jeżeli natomiast zdamy pytanie:?- grandparent(q,karen) Pytanie to można rozumieć jako Kto jest dziadkiem/babcią Karen?". Odpowiedzią Prologu jest NO, bo nie ma przesłanek do udzielenia innej. Marcin Szczuka (MIMUW) Logika stosowana 2019 14 / 20

Co jeszcze potrafi Prolog? Możemy spytać kim są dziadkowie/babcie Billa (Who are the grand parents of Bill?) następująco:?- grandparent(q,bill) Odpowiedź: Q = john Q = kathy Możemy też spytać kto jest wnukiem Johna:?- grandparent(john,w) Odpowiedź: W = bill Marcin Szczuka (MIMUW) Logika stosowana 2019 15 / 20

Program w Prologu Możemy myśleć o programach w Prologu jako o listach instrukcji (klauzul) w postaci: A :- B1,...,Bn gdzie: A oraz B1,...,Bn są atomami; :- oznacza implikację ( ) z koniunkcji B1,...,Bn do A; jeśli prawa strona klauzuli jest pusta to piszemy po prostu A co oznacza że jest to fakt. Marcin Szczuka (MIMUW) Logika stosowana 2019 16 / 20

Przykład suma w Prologu Zadanie: Dla listy liczb całkowitych wyznaczyć jej sumę. Definiujemy predykat: sum(l,r) W tym predykacie L jest podaną listą liczb całkowitych, a R poszukiwanym wynikiem (sumą). Jeżeli napisalibyśmy nasz program poprawnie to na pytanie:?- sum([3,5,2],q) powinniśmy dostać odpowiedź: Q=10 Marcin Szczuka (MIMUW) Logika stosowana 2019 17 / 20

Program na sumę listy w Prologu Właściwy program na sumę w Prologu wygląda następująco: Program Suma sum([ ],0). sum([a L],R) :- R is A+R1, sum(l,r1). R is A+R1 jest sposobem na zapisanie w Prologu faktu R jest wynikiem dodania A do R1. [A L] jest notacją w Prologu oznaczającą listę której pierwszym elementem jest A a ogonem lista L. Dwie klauzule, z których składa się program możemy czytać jako: - Pusta lista ma sumę równą 0. - Suma liczb na liście jest wynikiem dodania pierwszego jej elementu (A) do sumy pozostałych. Jeżeli teraz zadamy pytanie?- sum([3,5,2],q) to dostaniemy oczekiwaną odpowiedź Q=10. Marcin Szczuka (MIMUW) Logika stosowana 2019 18 / 20

Plan wykładu 1 Czym jest programowanie w logice? Historia programowania w logice 2 Logika a programowanie Programowanie w Prologu Przykład innego rodzaju Marcin Szczuka (MIMUW) Logika stosowana 2019 19 / 20

Monty Python i Święty Graal W filmie z 1975 roku Monty Python i Święty Graal (https://pl.wikipedia.org/wiki/monty_python_i_święty_graal) jest scena (https://youtu.be/yp_l5ntikau) w której Sir Bedevere (Terry Jones) przeprowadza skomplikowane wnioskowanie logiczne prowadzące do uznania kobiety za czarownicę. Przeprowadzone tam wnioskowanie można przedstawić jako zadanie weryfikacji poprawności wywodu logicznego: https: //cs.uwaterloo.ca/~jhoey/montypythonwitchsceneanalysis.html http://www.cs.swan.ac.uk/~csneal/systemspec/different.html Można także zastanawiać się, czy takie rozumowanie da się zrealizować programem w Prologu. http://www.allisons.org/ll/logic/prolog/examples/witch/ https://github.com/risto-stevcev/prolog-monty-python Marcin Szczuka (MIMUW) Logika stosowana 2019 20 / 20