Järjestelmä F

Järjestelmä F ( polymorfinen lambda-laskenta , järjestelmä , toisen asteen tyyppinen lambda-laskenta ) on tyypitetty lambda -laskentajärjestelmä, joka eroaa yksinkertaisesti tyypitetystä järjestelmästä yleisen tyyppien kvantifiointimekanismin läsnäololla . Tämän järjestelmän kehitti vuonna 1972 Jean-Yves Girard [1] logiikan todistusteorian yhteydessä. Hänestä riippumatta samanlaista järjestelmää ehdotti vuonna 1974 John Reynolds [2] . F-järjestelmän avulla voit formalisoida parametrisen polymorfismin käsitteen ohjelmointikielissä ja se toimii teoreettisena perustana sellaisille ohjelmointikielille kuin Haskell ja ML .

Järjestelmä F mahdollistaa termien muodostamisen tyypeistä riippuen. Teknisesti tämä saavutetaan mekanismilla, jossa termi abstraktoidaan tyypin mukaan, mikä johtaa uuteen termiin. Perinteisesti tällaisessa abstraktiossa käytetään suurta lambda-symbolia . Esimerkiksi ottamalla termi tyyppi ja abstraktimalla muuttujan tyypin , saamme termi . Tämä termi on funktio tyypeistä termeihin. Kun tätä funktiota sovelletaan eri tyyppeihin, saamme termejä, joilla on sama rakenne, mutta eri tyyppejä:

- tyypin termi ; on tyypin termi .

Voidaan nähdä, että termillä on polymorfinen käyttäytyminen, eli se määrittelee yhteisen rajapinnan eri tietotyypeille. Järjestelmässä F tälle termille annetaan tyyppi . Tyypin yleinen kvantori korostaa mahdollisuutta korvata tyyppimuuttuja mikä tahansa kelvollinen tyyppi .

Muodollinen kuvaus

Kirjoita syntaksi

Järjestelmän F tyypit muodostetaan tyyppimuuttujien joukosta käyttämällä ja -operaattoreita . Perinteisesti kreikkalaisia ​​kirjaimia käytetään tyyppimuuttujina. Tyyppien muodostamista koskevat säännöt ovat seuraavat:

Ulommat sulut jätetään usein pois, operaattoria pidetään oikea-assosiatiivisena ja operaattorin toiminta jatkuu mahdollisimman pitkälle oikealle. Esimerkiksi on vakiolyhenne sanalle .

Termien syntaksi

Järjestelmän F termit muodostetaan termimuuttujien joukosta ( , , jne.) seuraavien sääntöjen mukaisesti

Ulkosulut jätetään usein pois, molempien sovellusten katsotaan olevan vasen-assosiatiivisia ja abstraktien toiminnan katsotaan jatkuvan mahdollisimman pitkälle oikealle.

Yksinkertaisesti kirjoitetusta järjestelmästä on kaksi versiota. Jos, kuten yllä olevissa säännöissä, lambda-abstraktion termimuuttujat on merkitty tyypeillä, järjestelmän sanotaan olevan kirkon tyyppinen . Jos abstraktiosäännön tilalle tulee

ja hylkää kaksi viimeistä sääntöä, niin järjestelmää kutsutaan Curry-tyyppiseksi . Itse asiassa Curry-tyyppisen järjestelmän ehdot ovat samat kuin tyypittämättömässä lambda-laskennassa.

Vähennyssäännöt

Lambda -kiven standardin vähennyssäännön lisäksi

Kirkkotyyppinen järjestelmä F tuo lisäsäännön,

,

mahdollistaa termin soveltamisen tyyppiin laskemisen tyyppikorvausmekanismin avulla tyyppimuuttujan sijaan.

Kontekstien kirjoittaminen ja väitteen kirjoittaminen

Konteksti, kuten yksinkertaisesti kirjoitetussa lambda-laskennassa , on joukko lauseita eri muuttujien tyyppien määrittämisestä, erotettuna pilkulla

Voit lisätä kontekstiin muuttujan "fresh" tälle kontekstille: jos on kelvollinen konteksti, joka ei sisällä muuttujaa , ja on tyyppi, se on myös kelvollinen konteksti.

Kirjoituslausekkeen yleinen muoto on:

Tämä kuuluu seuraavasti: kontekstissa termillä on tyyppi .

Kirkon kirjoitussäännöt

Kirkon tyyppisessä järjestelmässä F tyyppien määrittäminen termeille tapahtuu seuraavien sääntöjen mukaisesti:

( Alkusääntö ) Jos muuttuja esiintyy tyypin kanssa kontekstissa , sillä on tyyppi kyseisessä kontekstissa . Päätelmäsäännön muodossa

( Johdannon sääntö ) Jos jossain kontekstissa, jota laajennetaan lauseella, jolla on tyyppi , termillä on tyyppi , niin mainitussa yhteydessä (ilman ) lambda-abstraktiolla on tyyppi . Päätelmäsäännön muodossa

( Poistosääntö ) Jos jossain kontekstissa termillä on tyyppi ja termillä on tyyppi , sovelluksella on tyyppi . Päätelmäsäännön muodossa

( Johdannon sääntö ) Jos jossain kontekstissa termillä on tyyppi , niin siinä yhteydessä termillä on tyyppi . Päätelmäsäännön muodossa

Tämä sääntö edellyttää varoituksen: tyyppimuuttujaa ei saa esiintyä kontekstikirjoitusväitteissä .

( Poistosääntö ) Jos jossain kontekstissa termillä on tyyppi ja se on tyyppi, niin tässä yhteydessä termillä on tyyppi . Päätelmäsäännön muodossa

Curryn kirjoitussäännöt

Curry-tyyppisessä järjestelmässä F tyyppien määrittäminen termeille tapahtuu seuraavien sääntöjen mukaisesti:

( Alkusääntö ) Jos muuttuja esiintyy tyypin kanssa kontekstissa , sillä on tyyppi kyseisessä kontekstissa . Päätelmäsäännön muodossa

( Johdannon sääntö ) Jos jossain kontekstissa, jota laajennetaan lauseella, jolla on tyyppi , termillä on tyyppi , niin mainitussa yhteydessä (ilman ) lambda-abstraktiolla on tyyppi . Päätelmäsäännön muodossa

( Poistosääntö ) Jos jossain kontekstissa termillä on tyyppi ja termillä on tyyppi , sovelluksella on tyyppi . Päätelmäsäännön muodossa

( Johdannon sääntö ) Jos termillä on jossain kontekstissa tyyppi , niin tässä yhteydessä tälle termille voidaan myös määrittää tyyppi . Päätelmäsäännön muodossa

Tämä sääntö edellyttää varoituksen: tyyppimuuttujaa ei saa esiintyä kontekstikirjoitusväitteissä .

( Poistosääntö ) Jos jossain kontekstissa termillä on tyyppi ja se on tyyppi, niin tässä yhteydessä tälle termille voidaan myös määrittää tyyppi . Päätelmäsäännön muodossa

Esimerkki. Alkuperäisen säännön mukaan:

Sovelletaan poistosääntöä tyypiksi

Nyt meillä on poistosäännön mukaan mahdollisuus soveltaa termiä itseensä

ja lopuksi käyttöönottosäännön mukaan

Tämä on esimerkki termistä, joka kirjoitetaan järjestelmässä F, mutta ei yksinkertaisesti kirjoitetussa järjestelmässä .

Tietotyyppien esitys

Järjestelmä F on riittävän ilmeikäs toteuttamaan suoraan monet ohjelmointikielissä käytetyt tietotyypit. Työskentelemme kirkon F-järjestelmän versiossa.

Tyhjä tyyppi. Tyyppi

on asumaton järjestelmässä F, eli siinä ei ole tämän tyypin termejä.

Yksi tyyppi. Y tyyppi

järjestelmässä F on yksi normaalimuotoinen asukas, termi

.

boolen tyyppi. Järjestelmässä F annetaan seuraavasti:

.

Tällä tyypillä on täsmälleen kaksi asukasta, jotka tunnistetaan kahdella Boolen vakiolla

Ehdollinen operaattorirakenne

Tämä toiminto täyttää luonnolliset vaatimukset

ja

mielivaltaiselle tyypille ja mielivaltaiselle ja . Tämä on helppo varmistaa laajentamalla määritelmiä ja tekemällä -vähennyksiä.

Taideteoksen tyyppi. Satunnaisille tyypeille ja niiden karteesisen tuotteen tyypille

pariskunta asuu

jokaiselle ja . Parin projektiot saadaan funktioilla

Nämä toiminnot täyttävät ja luontaiset vaatimukset .

Summatyyppi. Satunnaisille tyypeille ja niiden summan tyypille

täytetään joko termillä tyyppi , tai termillä tyyppi , käytetystä rakentajasta riippuen

Täällä ,. _ Toiminnolla, joka suorittaa tapausten jäsentämisen (kuvion täsmäytyksen), on muoto

Tämä toiminto täyttää seuraavat luonnolliset vaatimukset

ja

mielivaltaisille tyypeille ja ja mielivaltaisille termeille ja .

Kirkon numerot. Luonnollisten lukujen tyyppi järjestelmässä F

jossa on ääretön määrä erilaisia ​​elementtejä, jotka on saatu kahdella konstruktorilla ja :

Luonnollinen luku saadaan käyttämällä toista konstruktoria - kertaa ensimmäiseen tai vastaavasti termillä

Ominaisuudet

Huomaa, että Curry-Howard-vastaavuus määrittää tosi yhden tyypin, false tyhjän tyypin, konjunktio tyyppien tulon ja disjunktio niiden summan.

Muistiinpanot

  1. 1 2 Girard, Jean-Yves. Tulkinta fonctionnelle et elimination des coupures de l'aritmetique d'ordre supérieur : Ph.D. opinnäytetyö. — Université Paris 7, 1972.
  2. John C. Reynolds. Kohti tyyppirakenteen teoriaa . - 1974. Arkistoitu 31. lokakuuta 2014.
  3. Wells JB Typability ja tyypin tarkistus toisen asteen lambda-laskennassa ovat samanarvoisia ja  ratkaisemattomia // Proceedings of 9th Annual IEEE Symposium on Logic in Computer Science (LICS). - 1994. - S. 176-185 . Arkistoitu alkuperäisestä 22. helmikuuta 2007.

Kirjallisuus