Ciele
- Typovaný NBL
- Jednoducho typovaný $\lambda$ -kalkul
Úvod
V rámci cvičenia bude Vašou úlohou precvičiť si typovú kontrolu termov jazyka NBL a jednoducho typovaného $\lambda$-kalkulu.
Poznámka
Riešené príklady sú zverejnené v tretej prednáške.
Postup
Krok 1
Typovaný NBL
Úloha 1.1
Majme dané nasledujúce termy: $$ \begin{array}{lcl} t_1 & = & if\ iszero\ 0\ then\ true\ else\ false: Bool \\ t_2 & = & if\ iszero\ (pred\ (succ\ 0))\ then\ true\ else\ false: Bool \\ t_3 & = & succ(\ if\ iszero\ (succ\ (succ\ 0))\ then\ false\ else\ (pred\ (succ\ (succ\ 0)))): Nat \\ t_4 & = & pred(\ iszero(\ if\ iszero\ (pred\ (succ\ (succ\ (succ\ 0))))\ then\ true\ else\ (succ\ (succ\ 0)))) : Nat \\ t_5 & = & succ(\ if\ iszero\ (succ\ (succ\ (pred\ (succ\ (succ\ (succ\ 0)))))) \\ & & \quad \quad \quad then\ (succ\ (succ\ (pred\ (succ\ 0))))\ else\ (pred\ (succ\ (succ\ 0)))) \\ & & \quad \quad \quad else\ (pred\ (succ\ (succ\ 0)))) :Nat\\ \end{array} $$ Overte či sú správne typované.
Krok 2
Jednoducho typovaný $\lambda$-kalkul
Úloha 2.1
Majme daný nasledujúci term: $$\lambda x: A \to B. \lambda y: A.\ x\ y: (A \to B) \to A \to B$$
- Overte či je správne typovaný v prázdnom typovom kontexte.
- Vyhodnoťte ho pre vhodné argumenty (ak je správne typovaný).
Úloha 2.2
Majme daný nasledujúci term: $$\lambda f: A \to B. \lambda x: A. \lambda y: B.\ f\ x\ (f\ y): (A \to B) \to A \to B \to B$$
- Overte či je správne typovaný v prázdnom typovom kontexte.
- Vyhodnoťte ho pre vhodné argumenty (ak je správne typovaný).
Úloha 2.3
Majme daný nasledujúci term: $$\lambda x: A. \lambda y: B. \lambda z: C.\ x\ y\ z: A \to B \to C \to C$$
- Overte či je správne typovaný v prázdnom typovom kontexte.
- Vyhodnoťte ho pre vhodné argumenty (ak je správne typovaný).
Úloha 2.4
Majme daný nasledujúci term: $$\lambda x: Bool. \lambda y: Bool.\ and\ x\ y : Bool \to Bool \to Bool$$
- Overte či je správne typovaný v typovom kontexte: $$\Gamma = \{and: Bool \to Bool \to Bool \}$$
- Vyhodnoťte ho pre vhodné argumenty (ak je správne typovaný).
Úloha 2.5
Majme daný nasledujúci term: $$\lambda f: A \to Nat \to B. \lambda x: Nat. \lambda y: A.\ f\ y\ (succ\ x):(A \to Nat \to B)\to Nat \to A \to B $$
- Overte či je správne typovaný v prázdnom typovom kontexte.
- Vyhodnoťte ho pre vhodné argumenty (ak je správne typovaný).
Úloha 2.6
Majme daný nasledujúci term: $$\lambda f: A \to Bool. \lambda x: A. \lambda y: A.\ if\ b\ x\ then\ b\ y\ else\ false : (A \to Bool) \to A \to A \to Bool $$
- Overte či je správne typovaný v prázdnom typovom kontexte.
- Vyhodnoťte ho pre vhodné argumenty (ak je správne typovaný).
Úloha 2.7
Majme daný nasledujúci term:
$$ \begin{array}{l} \lambda f: Bool \to Bool \to A. \lambda b: B \to Bool. \lambda x: B. \lambda y: Nat.\\ f\ (if\ b\ x\ then\ iszero\ y\ else\ false)\ true :\\ (Bool \to Bool \to A) \to (B \to Bool) \to B \to Nat \to A \end{array} $$
- Overte či je správne typovaný v prázdnom typovom kontexte.
- Vyhodnoťte ho pre vhodné argumenty (ak je správne typovaný).