Tomáš Křen | Martin Jiřička | David Nohejl | Klára Pešková | poměrná obtížnost | normalizovaná poměrná obtížnost | |
celkem: | 83,49 | 37,83 | 9,68 | 1,87 | 63,72 | 50,00 |
Normální formy termu a podtermů | 2 | 1 | 1 | 2,38 | 1,87 | |
Implementace lambda kalkulu | 2 | 1,5 | 1 | 2,38 | 1,87 | |
Normalizující strategie | 2 | 2 | 2,83 | 2,22 | ||
Aplikativní strategie | 2 | 2 | 2,83 | 2,22 | ||
Call-by-need strategie | 2 | 1 | 2,83 | 2,22 | ||
Rekurze | 2 | 1 | 1 | 2,38 | 1,87 | |
Překladač z lambda kalkulu | 2 | 1,5 | 2,83 | 2,22 | ||
Delta-redukce | 2 | 1,5 | 2,83 | 2,22 | ||
Churchovy booleovské hodnoty | 1 | 1,5 | 1 | 2,38 | 1,87 | |
Churchovy numerály – Fibonacci | 2 | 1 | 2,83 | 2,22 | ||
Churchovy numerály – tetrace | 2 | 3,36 | 2,64 | |||
Churchovy numerály – hyperoperace | 2 | 3,36 | 2,64 | |||
Vzájemná rekurze v jiném jazyce | 1,5 | 1 | 2,83 | 2,22 | ||
Vzájemná rekurze dvou funkcí | 1,5 | 1 | 2,83 | 2,22 | ||
α-redukce při hledání principiální WHNF | 1 | 3,36 | 2,64 | |||
redukce λ-termů do principiální slabé hlavní normální formy (WHNF) | 1 | 3,36 | 2,64 | |||
Převod do SK kalkulu | 1 | 1 | 1 | 2,38 | 1,87 | |
Hindley-Milnerův systém s polymorfní rekurzí | 1 | 3,36 | 2,64 | |||
Unifikace | 1 | 3,36 | 2,64 | |||
Piercův zákon | 2 | 3,36 | 2,64 | |||
1) | 2 | 1 | 2,83 | 2,22 | ||
A ∧ (B ∧ C) → (A ∧ B) ∧ C | 2 | 1 | 2,83 | 2,22 |
Pro mou snažší orientaci prosím předmět zprávy uveďte „FP: “. Děkuji.
Jména řešitelů, kteří odevzdali úlohu do týdne, jsou označena *, těch co odevzdali do 2 týdnů +.
Zde najdete hodnocení úloh.
Nápověda: Použijte termy K = λxy.x a Ω = (λx.xx)(λx.xx).
Vyřešili: Tomáš Křen*, Martin Jiřička, David Nohejl.
Reprezentujte lambda termy datovou strukturou a implementujte
Vyřešili: Tomáš Křen*, Martin Jiřička+.
Implementujte normalizující strategii, ať už pro klasický λ-kalkulus nebo pro de Bruijnovu notaci.
Vyřešili: Tomáš Křen*, Martin Jiřička*.
Implementujte aplikativní strategii vyhodnocování. [Pokud implementujete obě strategie, zkuste najít term(y), na kterých se výrazně liší doba vyhodnocení.]
Vyřešili: Tomáš Křen*, Martin Jiřička*.
Implementujte línou call-by-need strategii. Při substituci termu budou jeho jednotlivé kopie sdíleny, a budou tak sdílet i (částečné nebo úplné) vyhodnocení.
Můžete také použít líný programovací jazyk (např. Haskell) a využít jeho líného vyhodnocování.
Vyřešili: Tomáš Křen*, Martin Jiřička.
Zapiště nějaký kombinátor pevného bodu (např. Y nebo Θ) a pomocí něj zapište funkci pro výpočet Fibonacciho posloupnosti, která sama o sobě nebude rekurzivní. Poznámky:
Vyřešili: Tomáš Křen*, Martin Jiřička, David Nohejl.
Napište překladač z lambda termů do zvoleného jazyka. Vhodné jsou netypované jazyky umožňující vytvářet anonymní funkce, např. Python nebo JavaScript. Výsledné zpracování lambda termů tak bude aplikativní.
Vyřešili: Tomáš Křen*, Martin Jiřička+.
Do interpretu/překladače λ-kalkulu přidejte konstantu # a pro každé n konstanty a pravidla:
Konverzi z cn zpět na číslo pak provedeme cn (λn.δ(#n)) 0
Poznámka: Stručný popis originální Churchovy δ-redukce zde.
Vyřešili: Tomáš Křen*, Martin Jiřička+ (s odřenýma ušima).
Implementujte operace AND, OR, a NOT na Churchových booleovských hodnotách (true = λxy.x, false = λxy.y).
Vyřešili: Martin Jiřička+, Tomáš Křen, David Nohejl.
Každý z následujících bodů je samostatné cvičení, které můžete zpracovat nezávisle na ostatních:
Výsledky ověřte, například na překladači/interpretu, z předchozích úloh.
Nové úlohy jsou na fóru!