Institute of Computer Science
Courses.cs.ut.ee Institute of Computer Science University of Tartu
  1. Courses
  2. 2023/24 fall
  3. Functional Programming (LTAT.03.019)
ET
Log in

Functional Programming 2023/24 fall

  • Üldinfo
    • Õppekorraldus
  • Loeng
    • Baasväärtused ja tüübid
    • 𝜆-arvutus
    • Kõrgemat järku funktsioonid
    • Interaktiivne programmeerimine
    • Uute tüüpide loomine
    • Liidesed
    • Sisend-Väljund
    • Laiskus
    • Lihtsalt tüübitud 𝜆-arvutus
    • Tüübituletus
    • Sõltuvad tüübid
    • Tõestamine Idrises
    • Kvantitatiivne tüübiteooria
  • Praktikum
    • KKK
    • Installimine
    • Kodutöö 1
    • Kodutöö 2
    • Kodutöö 3
    • Kodutöö 4
    • Kodutöö 5
    • Kodutöö 6
    • Kodutöö 7
    • Kodutöö 8
    • Kodutöö 9
    • Kodutöö 10
    • Kodutöö 11
    • Kodutöö 12
    • Kordamine
    • Projektid
  • Moodle
  • Zulip (sisselogides näed linki)

Tüübituletus lihtsalt tüübitud {$\lambda$}-arvutuses

Tüüpideks on meil tüübimuutujad ja funktsioonid : {$$ \begin{array}{lcl@{\hspace{5em}}l} \tau & ::= & \alpha & \text{tüübimuutuja} \\ & \mid & \tau_1 \to \tau_2 & \text{funktsioonitüüp} \end{array} $$}

Lihtsalt tüübitud {$\lambda$}-arvutuse (ehk {$\lambda\!\!\rightarrow$}) on kaks standardset süntaksi stiili:

  • Church’i-stiil ({$e ::= x\mid e_1\,e_2\mid\lambda x:\tau.\,e$}), milles termid sisaldavad piisavalt tüübiannotatsioone nii et tüübikontroll ja tüübituletus on lihtsad.
  • Curry-stiil ({$e ::= x\mid e_1\,e_2\mid\lambda x.\,e$}), milles on termid ilma tüübiannotatsioonideta ja printsipiaalne tüüp on arvutatav polünomiaalse ajaga.

Üldjuhul on Curry-stiilis tüübisüsteemides tüübituletus ja tüübikontroll lahendamatud ülesanded. Nt. teist-järku {$\lambda$}-arvutuse (ehk {$\lambda 2$}) puhul.

Lihtsamate süsteemide jaoks on tüübituletus võimalik. Nt. Hindley-Milner'i polümorfism (ehk HM) puhul.

Tüübituletus {$\lambda\!\!\rightarrow$} a’la Curry jaoks

Tüübituletuse algoritm:

1. Annoteerida iga alamavaldis ja muutuja siduvesinemine unikaalse tüübimuutujaga.
2. Genereeri kitsenduste süsteem kasutades järgnevaid reegleid:

{$$ \color{blue}{ \frac{x^a \in \Gamma}{\Gamma \vdash x^\beta \color{green}{\Rightarrow \{ \alpha = \beta \}}} \qquad \qquad \frac{\Gamma, x^a \vdash e^\beta \color{green}{\Rightarrow E}}{\Gamma \vdash (\lambda x^\alpha.e^\beta)^\gamma \color{green}{\Rightarrow \{\gamma = \alpha \rightarrow \beta \} \cup E }} } $$}

{$$ \color{blue}{ \frac{\Gamma \vdash e^\alpha_1 \color{green}{\Rightarrow E_1} \qquad \qquad \Gamma \vdash e^\beta_2 \color{green}{\Rightarrow E_2}}{\Gamma \vdash ( e^\alpha_1 e^\beta_2)^\gamma \color{green}{\Rightarrow \{\alpha = \beta \rightarrow \gamma \} \cup E_1 \cup E_2 }} } $$}

3. Lahenda kitsenduste süsteem leides selle kõige üldisema unifitseerija. Kui seda ei leidu, ei ole term järelikult tüübitav.

Kõige üldisema unifitseerija leidmine

Võrrandeid saab lahendada lihtsustusreeglite korduva rakendamise kaudu.

Kaks peamist reeglit:

  • Asenda võrdus kujul {$\tau_1\to\tau_2=\tau_3\to\tau_4$} kahe võrdusega {$\tau_1=\tau_3$} ja {$\tau_2=\tau_4$}.
  • Olgu võrdus kujul {$\alpha=\tau$}. Kui {$\alpha \in \text{fv}(\tau)$} siis raporteeri viga, vastasel korral asenda kõigis võrdustes {$\alpha$} asemel {$\tau$}.

Abireeglid:

  • eemalda reeglid kujul {$\alpha=\alpha$},{$\text{Bool}=\text{Bool}$}, jne.;
  • asenda {$\tau=\alpha$} võrdusega {$\alpha=\tau$};
  • kui leidub võrdus {$\tau_1=\tau_2$}, kus peatüübikonstruktorid on erinevad (näit. {$\text{Bool}=a_1\to a_2$}), siis raprorteeri viga.
  • Institute of Computer Science
  • Faculty of Science and Technology
  • University of Tartu
In case of technical problems or questions write to:

Contact the course organizers with the organizational and course content questions.
The proprietary copyrights of educational materials belong to the University of Tartu. The use of educational materials is permitted for the purposes and under the conditions provided for in the copyright law for the free use of a work. When using educational materials, the user is obligated to give credit to the author of the educational materials.
The use of educational materials for other purposes is allowed only with the prior written consent of the University of Tartu.
Terms of use for the Courses environment