Regularitet & Automater - #3


Forelæsning (26. april)

Nondeterminisme [Martin, kap. 3.2-3.5]

Øvelser

[Martin]:

Ekstraopgaver

Java:

Udleverede programdele til RegAut pakken:

NFA.java er en skabelon hvor de interessante metoder ikke er implementeret. Det er nødvendigt at have forstået de udleverede dele af denne klasse (dog ikke implementationerne af checkWellDefined og toDot) for at kunne løse de kommende Java-opgaver. RegExp.java indeholder en parser for regulære udtryk - der forventes ikke kendskab til implementationen af denne klasse. Metoden FA.toNFA kan oversætte en FA til en NFA.

Opgaver:

Ugens finurlige opgave:

Et regulært ligningssystem over variablene X1 til Xn består af n ligninger på formen

Xi = ri,1X1 + ri,2X2 + ... + ri,nXn + ri

for i=1,..,n, hvor hvert ri,j og ri er et regulært sprog (angivet ved et regulært udtryk) over et alfabet sigma.

Giv et konstruktivt bevis for at sådanne ligningssystem altid har en løsning, hvor hvert Xi tildeles et regulært sprog. [hint]

Forslag til læsegruppe

Repetér definitionerne af NFA'er (Def. 3.12) og deres sprog (Def. 3.13 og 3.14).

Gennemgå delmængdekonstruktionen og beviset for dens korrekthed (Th. 3.18) - og eventuelt tilsvarende for algoritmen til Lambda-eliminering (Th. 3.17). Gennemgå algoritmen til oversættelse fra regulære udtryk til NFA'er og beviset for dens korrekthed (Th. 3.25) - og eventuelt tilsvarende for algoritmen til oversættelse fra FA'er til regulære udtryk (Th. 3.30). Som sidste uge: Overvej hvilke dele i beviserne, der kræver "en god ide" og hvilke, der følger naturligt af hvad man er ved at vise. Husk at niveauet for forståelse spænder fra det intuitive og konkrete eksempler til formelle matematiske konstruktioner og beviser.

Afleveringsopgave

Lad M være NFA'en i [Martin, Fig. 3.36 (c), s.124].

  1. Oversæt M til en ny NFA M1 ved hjælp af Lambda-elimineringsalgoritmen.
  2. Oversæt M1 til en FA M2 ved hjælp af determiniseringsalgoritmen.

Hvis du har programmeret NFA.determinize i opgave J5 må du vælge - som alternativ til at lave opgaven som beskrevet i bogen - at skrive et (veldokumenteret) Java-program, der konstruerer de ønskede automater ved hjælp af RegAut-pakken, og vedlægge output som en tegning af automaterne lavet med dot-værktøjet. (Husk i så fald også at vedlægge din implementation af NFA.determinize.) Hvis du vælger at løse opgaven "manuelt", så husk at beskrive hvordan algoritmerne er anvendt.


Sidst opdateret: 19. marts 2017, amoeller@cs.au.dk