Charles Explorer logo
🇨🇿

Funkcionální programování

Předmět na Matematicko-fyzikální fakulta |
NAIL097

Sylabus

Úvod do lambda kalkulu, funkcionálního programování a programovacího jazyka Haskell. Operační sémantika funkcionálních programů, beta-redukce a normální formy výrazů (NF, HNF, WHNF).

Funkce jakožto základní prvek funkcionálních jazyků. Rekurzivní funkce, funkce vyšších řádů, kombinátory.

Churchovo kódování datových struktur. Algebraické datové struktury. Rozpoznávání vzorů (pattern matching).

Typované lambda kalkuly. Intuicionistická logika, systém přirozené dedukce a souvislost s typovanými lambda kalkuly. Curry-Howardova korespondence. Základní pojmy kombinatorické logiky. Závislé typy.

Odvozování typů výrazů. Hindley-Milnerův typový systém a algoritmus pro odvozování principiálního (nejobecnějšího) typu. Generování programů požadovaného typu a jeho aplikace.

Ad-hoc polymorfismus - typové třídy. Souvislost s logickým programováním.

Rekurzivní, nekonečné, induktivní a koinduktivní datové struktury. Totální funkcionální programování. Typové systémy popisující dokazatelně totální funkce - Gödelův Systém T a Girard-Reynoldsův Systém F.

Základní pojmy z teorie kategorií v kontextu funkcionálních jazyků. Funktory, Kleisliho kategorie, monády.

Dále volitelně, podle dostupného času:

Typové systémy pro práci s vedlejšími efekty. Monády, unikátní typy, lineární typy a lineární logika.

Rozšíření standardních typových systémů používaná v různých funkcionálních jazycích. Typové systémy v imperativních jazycích. Generalizované algebraické datové typy.

Funkcionální reaktivní programování (FRP).

Stránka předmětu: http://tomkren.cz/fp/, starší verze http://petr.pudlak.name/fp/

Anotace

Základní pojmy, datové struktury a techniky funkcionálního programování, se zaměřením na jejich teoretické základy. Orientace zejména na funkcionální programovací jazyk Haskell.