Regularitet & Automater - #2


Forelæsning (19. april)

Endelige automater [Martin, kap. 2.1-2.3]

Øvelser

[Martin]:

Java:

(Bemærk at de automater, som gæt-et-regulært-udtryk værktøjet fra sidste uge producerer, ikke viser tilstande og transitioner, som ikke kan føre til accept. Dvs. de automater, det værktøj viser, er teknisk set ikke FA'er ifølge vores definition. )

Udleverede programdele til RegAut pakken:

Du bør kigge disse dele igennem, da de udgør fundamentet for de kommende Java-opgaver.

Ovenstående dele refererer til følgende klasser, som gennemgåes næste uge: NFA.java, RegExp.java.

Ekstraopgaver:

Ugens finurlige opgave:

Kan du huske de gode gamle dage i tredje klasse, hvor matematiktimerne gik med simple additionsopgaver? Måske kan endelige automater bruges til at rette disse opgaver! For at holde det simpelt nøjes vi med at kigge på addition af binære tal. Hvis

B = {0,1}

så kan en korrekt addition opfattes som en streng over Sigma, hvor

Sigma = BtimesBtimesB

For eksempel, følgende addition

  0 1 0 1
+ 0 1 1 0
--------
  1 0 1 1

kan opfattes som en streng bestående af 4 symboler (de 4 søjler, hver bestående af 3 binære cifre).

  1. Vis at endelige automater kan udføre addition - i den forstand at der eksisterer en FA, der genkender mængden af de strenge over Sigma*, der repræsenterer korrekte additioner.
  2. Gælder dette også for multiplikation?

Forslag til læsegruppe

Repetér definitionerne af FA'er (Def. 2.11) og deres sprog (Def. 2.14).

Gennemgå produktkonstruktionen og beviset for dens korrekthed (Th. 2.15). Overvej hvilke dele i beviset, der kræver "en god ide" og hvilke, der følger naturligt af, hvad man er ved at vise.

Afleveringsopgave

Lav ved hjælp af produktkonstruktionen en automat for sproget L(M1)intersectionL(M2), hvor M1 og M2 er disse to automater:

...
Løs opgaven "manuelt" (naturligvis inklusiv en beskrivelse af hvordan den resulterende automat er konstrueret) og vedlæg også din (veldokumenterede) implementation af FA.intersection (samt eventuelle hjælpemetoder).


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