Nondeterminisme [Martin, kap. 3.2-3.5]
-transitioner
-eliminering
L(R2)
L(R)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:
Et regulært ligningssystem over variablene X1 til Xn består af n ligninger på formen
for i=1,..,n, hvor hvert ri,j og ri er et regulært sprog (angivet ved et regulært udtryk)
over et alfabet
.
Giv et konstruktivt bevis for at sådanne ligningssystem altid har en løsning, hvor hvert Xi tildeles et regulært sprog. [hint]
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
-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.
Lad M være NFA'en i [Martin, Fig. 3.36 (c), s.124].
-elimineringsalgoritmen.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.