$Id: pump.html,v 1.1.1.1 2002/05/24 10:46:47 challenger Exp $
Es gibt eine Zahl n > 0, so daß für alle w in L mit |w| >= n gilt: es existieren Wörter u, v, x, y, z mit
Für alle Zahlen n > 0 existiert ein Wort w in L mit |w| >= n, so daß für alle Wörter u,v,x,y,z gilt:
Der Student soll sich, für vorgelegte Sprache L, für eine der beiden Versionen entscheiden, und die Begründung dafür durch das autotool prüfen lassen.
Idealerweise belegt das Korrekturprogramm die All-Quantoren (durch Würfeln oder vollständiges Probieren), und der Student belegt die Existenz-Quantoren (durch Nachdenken).
Allerdings hängt die Belegung der inneren Existenz-Quantoren von den umgebenden All-quantifizierten Variablen ab. Der Student muß also skolemisieren, d. h. seine Belegung als Funktion angeben. Das geschieht in der professionellen Version.
Da wir jedoch derzeit nicht voraussetzen können, daß alle Studenten Haskell-Funktionen schreiben können, gibt es die Standard-Version, bei der es genügt, nur eine Liste einiger Argument-Wert-Paare der Funktion anzugeben.
Einzusenden ist ein Datum des Typs Pump:
data Pump = Nein { wort :: FiniteMap Int String } | Ja { n :: Int , zerlege :: FiniteMap String Zerlegung }
import Pump student = Nein { wort = listToFM [ ( n1, w1 ), ( n2, w2 ), .. ] }Dabei ist wort eine Funktion, die als Liste von (Argument, Wert)-Paaren angegeben wird. Dabei soll für alle Paare (n :: Int, w :: String) gelten:
import Pump student = Ja { n = 3 , zerlege = listToFM [ ("abb", Zerlegung { u = "", v = "ab", x = "b", y ="", z = "" } ) , .. ] }wobei zerlege eine Funktion (als Liste von geordneten Paaren) ist, so daß für alle Paare (w, (u,v,x,y,z)) aus der Liste gelten soll:
Einzusenden ist ein Datum des Typs Pump:
data Pump = Nein { schnitt :: NFA Int , wort :: Int -> String , expo :: Int -> Zerlegung -> Int } | Ja { n :: Int , zerlege :: String -> Zerlegung }
Wenn Sie der Meinung sind, daß es eine reguläre Sprache R gibt, so daß L' = L geschnitten mit R die Pumping-Eigenschaft nicht erfüllt, dann schreiben Sie
import Pump student = Nein { schnitt = build "( 0^* 1^* )^2" , wort = wo , expo = ex } wo n = replicate n '0' ++ replicate n '1' ex n zer = 3Die Komponenten `wort' und `expo' sind Funktionen.
Für alle w = wort n und i = expo n ( Zerlegung u v x y z ) soll gelten
import Pump student = Ja { n = 3 , zerlege = zer } zer w = Zerlegung { u = w, v = "", x = "", y = "", z = "" }Dabei ist die Komponente `zerlege' eine Funktion, die zum einem beliebigen Wort w in L eine Zerlegung u v x y z konstruiert, so daß gilt: