Agda

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 21 april 2021; kontroller kräver 3 redigeringar .
Agda
Språkklass funktionell , teorembevisare
Framträdde i 2007 (1,0 1999 ) ( 2007 ) ( 1999 )
Författare Ulf Norell
Filtillägg _ .agdaeller.lagda
Släpp 2.6.2.2 (2 april 2022 ) ( 2022-04-02 )
Typ system statisk , strikt , beroende
Blivit påverkad Haskell , Coq , Epigram
påverkas Idris
Licens BSD
Hemsida wiki.portal.chalmers.se/…
OS Microsoft Windows och Unix-liknande operativsystem

Agda  är ett rent funktionellt programmeringsspråk med beroende typer , det vill säga typer som kan indexeras med värden av en annan typ. Den teoretiska grunden för Agda är Martin-Löfs intuitionistiska typteori , som utökas med en uppsättning konstruktioner användbara för praktisk programmering.

Agda är också ett automatiskt provsystem . Logiska propositioner skrivs som typer, och bevis är program av motsvarande typ.

Agda stöder induktiva datatyper, mönstermatchning (flexibelt genom att använda närvaron av beroende typer), ett system med parametriserade moduler, kontroll av programavslutning, mixfix-syntax för operatorer. Stöd för implicita argument förenklar programmering med beroende typer. Agda - program kännetecknas av den utbredda användningen av Unicode .

Standardimplementeringen av Agda inkluderar ett tillägg till Emacs- redigeraren som låter dig bygga program steg för steg. Språkets typkontrollsystem ger programmeraren användbar information om delar av programmet som ännu inte har skrivits.

Den specifika syntaxen för Agda-språket ligger mycket nära syntaxen för Haskell , på vilken Agda-systemet är implementerat.

Exempel

Naturliga tal och deras addition

data Nat : Ställ in där noll : Nat suc : Nat -> Nat _+_ : Nat -> Nat -> Nat noll + m = m suc n + m = suc ( n + m )

Exempel på en beroende typ: en lista vars typ lagrar ett naturligt tal - dess längd

data Vec ( A : Set ) : Nat -> Ange där [] : Vec A noll _::_ : { n : Nat } -> A -> Vec A n -> Vec A ( suc n )

En säker listhuvudberäkningsfunktion som inte tillåter att denna operation utförs på en tom lista (noll längd):

head : { A : Set }{ n : Nat } -> Vec A ( suc n ) -> A huvud ( x :: xs ) = x

Anteckningar

Länkar