---
# System prepended metadata

title: zadanie 2

---

tags: `jp21`

![](https://i.imgur.com/f8CecCg.png)

$$
\dfrac{}{\Gamma \vdash unit : Unit}
$$

W logice

$$
\dfrac{}{\top}
$$


Po co `Unit` w programowaniu?

1. Po co w STLC (w czystych językach programowania)?
    No raczej nic. Daje nam to, że wiemy że się skończyła.
    
    



$$
\dfrac{\bot}{\phi}
$$


Obserwacja: $g$ na $y$ się zatrzymuje, wtw. gdy $\alpha~g~y$ zwraca unit.
$$
\alpha := (\lambda f. \lambda x. (f~x;~unit))
$$



# zadanie 2

$$\dfrac{\Gamma \vdash \phi_1 \wedge \phi_2 }{\Gamma \vdash \phi_1}~E_1$$

$$\dfrac{\Gamma \vdash \phi_1 \wedge \phi_2 }{\Gamma \vdash \phi_2}~E_2$$

$$\dfrac{\Gamma \vdash \phi_1 \qquad \Gamma \vdash \phi_2}{\Gamma \vdash \phi_1 \wedge \phi_2 }~I$$



$$\dfrac{\Gamma \vdash \phi_1 \wedge \phi_2 \qquad \Gamma, \phi_1, \phi_2 \vdash \psi}{\Gamma \vdash \psi}~E_{II}$$

tutaj:
$$\dfrac{\Gamma, \phi_1, \phi_2 \vdash \psi \qquad \dfrac{\Gamma \vdash \phi_1 \wedge \phi_2}{\Gamma \vdash \phi_1} \qquad \dfrac{\Gamma \vdash \phi_1 \wedge \phi_2}{\Gamma \vdash \phi_24}}{\Gamma \vdash \psi}$$

---

$$\dfrac{\Gamma \vdash p : (\phi_1 \wedge \phi_2) }{\Gamma \vdash p.1 : \phi_1}~E_1$$

$$\dfrac{\Gamma \vdash p : (\phi_1 \wedge \phi_2) }{\Gamma \vdash p.2 : \phi_2}~E_2$$

$$\dfrac{\Gamma \vdash x : \phi_1 \qquad \Gamma \vdash y: \phi_2}{\Gamma \vdash \{x, y\} : \phi_1 \wedge \phi_2 }~I$$



$$\dfrac{\Gamma \vdash p : \phi_1 \wedge \phi_2 \qquad \Gamma, x : \phi_1, y :\phi_2 \vdash t : \psi}{\Gamma \vdash let~\{x, y\} = p~in~t : \psi}~E_{II}$$

---

$$
let~x~=~t_1~in~t_2 \\
(\lambda~x.~t_2)~t_1
$$

$$
let~\{x,y\}~=~p~in~t_2 \\
(\lambda~x.~\lambda y.~t_2)~p.1~p.2
$$

---

# Zadanie 3

![](https://i.imgur.com/Od0HNms.png)


### Postęp

$$
v := ... ~|~ \{v, v\}
$$

Założenie: $\Gamma \vdash t : T$
Teza: $t$ jest wartością lub $t \rightarrow t'$
Dowód:
Indukcja względem drzewa wyprowadzenia typu $t$ ($\Gamma \vdash t : T$):

- $\dfrac{}{\Gamma \vdash unit : Unit}$, $unit$ jest wartością
- reguła dla lambdy
- $\dfrac{\Gamma \vdash t_1 : T_1 \rightarrow T_2 \quad \Gamma \vdash t_2 : T_1}{\Gamma \vdash t_1 t_2 : T_2}$
- $\dfrac{\Gamma \vdash t_1 : T_1 \quad \Gamma \vdash t_2 : T_2}{\Gamma \vdash \{t_1, t_2\} : T_1 \times T_2}$
    1. Jeśli $t_1$ jest wartością i $t_2$ wartością, to $\{t_1, t_2\}$ jest wartością czyli koniec.
    2. Jeśli $t_1$ jest wartością (i $t_2$ nie jest), to:
       Z ZI dla $t_2$ mamy, że $t_2 \rightarrow t_2'$, więc
        $$
        \dfrac{t_2 \rightarrow t_2'}{\{t_1, t_2\} \rightarrow \{t_1, t_2'\}} (E-Pair_2)
        $$
        
    3. Jeśli $t_1$ nie jest wartością, to:
        Z ZI dla $t_1$ mamy, że $t_1 \rightarrow t_1'$, więc
        $$
        \dfrac{t_1 \rightarrow t_1'}{\{t_1, t_2\} \rightarrow \{t_1', t_2\}} (E-Pair_1)
        $$
        
- $\dfrac{\Gamma \vdash p : T_1 \times T_2}{\Gamma \vdash p.i : T_i}$
    Zauważmy, że $p.i$ nigdy nie jest wartością. Rozważamy, czy $p$ jest:
    - wartością, to z lematu o postaciach kanonicznych, jest postaci $\{v_1, v_2\}$, wtedy:
    $$
    \dfrac{}{\{v_1, v_2\}.i \rightarrow v_i} (E-PairBeta_i)
    $$
    - nie jest wartością, z ZI dla $p$, skoro nie jest wartością to $p \rightarrow p'$, więc:
    $$
    \dfrac{p \rightarrow p'}{p.i \rightarrow p'.i} (E-Proj_i)
    $$

$\blacksquare{}$

#### Lemat o postaciach kanonicznych

![](https://i.imgur.com/LKYZefC.png)

3. Jeśli $p$ jest wartością typu $T_1 \wedge T_2$, to $p = \{v_1, v_2\}$.
Indukcja...

### Zachowanie typu

Założenie: $\Gamma \vdash t : T$ i $t \rightarrow t'$
Teza: $\Gamma \vdash t' : T$
Dowód:
Indukcja względem drzewa wyprowadzenia $t \rightarrow t'$:
- $\dfrac{}{\{v_1, v_2\}.1 \rightarrow v_1} (E-PairBeta_1)$
    Dopasowujemy tą regułę, mamy $t = \{v_1, v_2\}.1$, $t' = v_1$.

  Wiemy, że $\Gamma \vdash \{v_1, v_2\}.1 : T$, chcemy $\Gamma \vdash v_1 : T$.
  Stosujemy lemat o inwersji dla $\Gamma \vdash \{v_1, v_2\}.1 : T$ (X1), otrzymujemy $\Gamma \vdash \{v_1, v_2\} : T \wedge T_?$, ponownie stosując inwersję(Y1), otrzymujemy $\Gamma \vdash v_1 : T$. Koniec.
- $\dfrac{t \rightarrow t'}{t.1 \rightarrow t'.1} (E-Proj_1)$
    ZI = $\Gamma \vdash t : T \wedge T_? \Rightarrow (t \rightarrow t') \Rightarrow \Gamma \vdash t' : T \wedge T_?$

   Wiemy, że $\Gamma \vdash t.1 : T$, chcemy $\Gamma \vdash t'.1 : T$.
   Z inwersji dla $\Gamma \vdash t.1 : T$, mamy $\Gamma \vdash t : T \wedge T_?$.
   Z założenia indukcyjnego, mamy $\Gamma \vdash t' : T \wedge T_?$.
   $$
   \dfrac{\Gamma \vdash t' : T \wedge T_?}{\Gamma \vdash t'.1 : T}
   $$
   Koniec
    
- $\dfrac{t_1 \rightarrow t_1'}{\{t_1, t_2\} \rightarrow \{t_1', t_2\}}$
   

- $\dfrac{t_2 \rightarrow t_2'}{\{v_1, t_2\} \rightarrow \{v_1, t_2'\}}$
   Wiemy, że $\Gamma \vdash \{v_1, t_2\} : T$, chcemy $\Gamma \vdash \{v_1, t_2'\} : T$.
   Z (*) dla $\Gamma \vdash \{v_1, t_2\} : T$, wiemy że $T = T_1 \wedge T_2$ i $\Gamma \vdash t_2 : T_2$.
   Mając powyższe i $t_2 \rightarrow t_2'$ dostajemy $\Gamma \vdash t_2' : T_2$
   
   $$
   \dfrac{\Gamma \vdash v_1 : T_1 \quad \Gamma \vdash t_2' : T_2}{\Gamma \vdash \{v_1, t_2'\} : T_1 \wedge T_2}
   $$
   Koniec
   
$\blacksquare{}$

#### Lemat o inwersji

X1. Jeśli $\Gamma \vdash t.1 : T$, to $\Gamma \vdash t : T \wedge T_2$
Y1. Jeśli $\Gamma \vdash \{x, y\} : T_1 \wedge T_2$, to $\Gamma \vdash x : T_1$ i $\Gamma \vdash y :T_2$
Z1. Jeśli $\Gamma \vdash \{x, y\} : T$, to $T = T_1 \wedge T_2$, $\Gamma \vdash x : T_1$ i $\Gamma \vdash y :T_2$