Semantik und Analyse von funktionalen Programmen Blatt 4 1 Aufgabe 2 Aufgabe 3 Aufgabe 1c Tableau geschlossen?

  • View
    215

  • Download
    0

Embed Size (px)

Text of Semantik und Analyse von funktionalen Programmen Blatt 4 1 Aufgabe 2 Aufgabe 3 Aufgabe 1c Tableau...

Semantik und Analysevon funktionalen Programmen

Aufgabenblatt 4

Wintersemester 2007/08

Aufgabe 1Aufgabe 2Aufgabe 3

Aufgabe 1a

> data EXPR = Variable Var

> | Lambda Var EXPR

> | App EXPR EXPR

> | CTrue

> | CFalse

> | CCons EXPR EXPR

> | CNil

> | CPaar EXPR EXPR

> | CaseBool EXPR [Alt]

> | CaseList EXPR [Alt]

> | CasePaar EXPR [Alt]

> | Superkombinator SKName

> | Bot

> | Top

> deriving(Show,Eq)

> type Alt = (Pat,EXPR)

> type Pat = EXPR

> type Var = String

> type SKName = String

Professur KIST, WS 07/08 SAFP, Blatt 4

Aufgabe 1Aufgabe 2Aufgabe 3

Aufgabe 1b

N-arer Baum

> data NTree edge node = Leaf node

> | Node node [(edge, (NTree edge node))]

> deriving (Eq,Show)

Kalkulregeln

> data KalRegel = Reduktion NoReduktion

> | BotReduktion

> | CaseTop

> | Generalisierung

> deriving (Eq,Show)

> type NoReduktion = Bool

Tableau

> type Tableau = NTree KalRegel EXPR

Professur KIST, WS 07/08 SAFP, Blatt 4

Aufgabe 1Aufgabe 2Aufgabe 3

Aufgabe 1c

Tableau geschlossen?

> isClosed :: Tableau -> Bool

> isClosed tableau =

> all isClosedPath (allPathes tableau)

Ein Pfad geschlossen?

> isClosedPath (w,[])= isBot w

> isClosedPath (w,p) =

> let blatt = snd (last p)

> in isBot blatt -- Bot am Blatt

> || hasLoop blatt w

> isBot Bot = True

> isBot = False

Alle Pfade berechnen

> allPathes :: NTree e n -> [(n,[(e,n)])]

> allPathes (Leaf node) = [(node,[])]

> allPathes (Node node children) =

> concatMap

> (\(e,n) -> map

> (\(n,list) -> (node,(e,n):list))

> (allPathes n))

> children

Schleifenerkennung

> hasLoop blatt n [] = False

> hasLoop blatt n p@((e,n2):rest)

> | n == blatt = noRedExists p

> | otherwise = hasLoop blatt n2 rest

> noRedExists p = any isNoRed (map fst p)

> isNoRed (Reduktion a) = a

> isNoRed = False

Professur KIST, WS 07/08 SAFP, Blatt 4

Aufgabe 1Aufgabe 2Aufgabe 3

Aufgabe 2

g x y = caseBool x of

True -> g False x

False -> caseBool y of

False -> True

True -> caseBool (g x False) of

True -> False

False -> True

Analyse fur das erste Argument:

Professur KIST, WS 07/08 SAFP, Blatt 4

Aufgabe 1Aufgabe 2Aufgabe 3

Aufgabe 2

g x y = case1 x ofTrue -> g False x

False -> case2 y ofFalse -> True

True -> case3 (g x False) ofTrue -> False

False -> True

Analyse fur das erste Argument:

Professur KIST, WS 07/08 SAFP, Blatt 4

Aufgabe 1Aufgabe 2Aufgabe 3

Aufgabe 2

g x y = case1 x ofTrue -> g False x

False -> case2 y ofFalse -> True

True -> case3 (g x False) ofTrue -> False

False -> True

Analyse fur das erste Argument:

g >

Professur KIST, WS 07/08 SAFP, Blatt 4

Aufgabe 1Aufgabe 2Aufgabe 3

Aufgabe 2

g x y = case1 x ofTrue -> g False x

False -> case2 y ofFalse -> True

True -> case3 (g x False) ofTrue -> False

False -> True

Analyse fur das erste Argument:

g >

NO-Reduktion

case1 of . . .

Professur KIST, WS 07/08 SAFP, Blatt 4

Aufgabe 1Aufgabe 2Aufgabe 3

Aufgabe 2

g x y = case1 x ofTrue -> g False x

False -> case2 y ofFalse -> True

True -> case3 (g x False) ofTrue -> False

False -> True

Analyse fur das erste Argument:

g >

NO-Reduktion

case1 of . . .

Professur KIST, WS 07/08 SAFP, Blatt 4

Aufgabe 1Aufgabe 2Aufgabe 3

Aufgabe 2

Analyse fur das zweite Argument:

g >

Professur KIST, WS 07/08 SAFP, Blatt 4

g x y =

case1 x ofTrue -> g False x

False -> case2 y ofFalse -> True

True -> case3 (g x False) ofTrue -> False

False -> True

Aufgabe 1Aufgabe 2Aufgabe 3

Aufgabe 2

Analyse fur das zweite Argument:

g >

NO-Reduktioncase1 > of . . .

Professur KIST, WS 07/08 SAFP, Blatt 4

g x y =

case1 x ofTrue -> g False x

False -> case2 y ofFalse -> True

True -> case3 (g x False) ofTrue -> False

False -> True

Aufgabe 1Aufgabe 2Aufgabe 3

Aufgabe 2

Analyse fur das zweite Argument:

g >

NO-Reduktioncase1 > of . . .

**TTTTTTT

Txxppp

ppp

case1 True of . . . case1 False of . . .

Professur KIST, WS 07/08 SAFP, Blatt 4

g x y =

case1 x ofTrue -> g False x

False -> case2 y ofFalse -> True

True -> case3 (g x False) ofTrue -> False

False -> True

Aufgabe 1Aufgabe 2Aufgabe 3

Aufgabe 2

Analyse fur das zweite Argument:

g >

NO-Reduktioncase1 > of . . .

**TTTTTTT

Txxppp

ppp

case1 True of . . .

NO-Reduktion

case1 False of . . .

NO-Reduktiong False > case2 of . . .

Professur KIST, WS 07/08 SAFP, Blatt 4

g x y =

case1 x ofTrue -> g False x

False -> case2 y ofFalse -> True

True -> case3 (g x False) ofTrue -> False

False -> True

Aufgabe 1Aufgabe 2Aufgabe 3

Aufgabe 2

Analyse fur das zweite Argument:

g >

NO-Reduktioncase1 > of . . .

**UUUUUUU

Uwwooo

oooo

case1 True of . . .

NO-Reduktion

case1 False of . . .

NO-Reduktiong False >

NO-Reduktion

case2 of . . .

case1 False of . . .

Professur KIST, WS 07/08 SAFP, Blatt 4

g x y =

case1 x ofTrue -> g False x

False -> case2 y ofFalse -> True

True -> case3 (g x False) ofTrue -> False

False -> True

Aufgabe 1Aufgabe 2Aufgabe 3

Aufgabe 2

Analyse fur das zweite Argument:

g >

NO-Reduktioncase1 > of . . .

**UUUUUUU

Uwwooo

oooo

case1 True of . . .

NO-Reduktion

case1 False of . . .

NO-Reduktiong False >

NO-Reduktion

case2 of . . .

case1 False of . . .

NO-Reduktion

case2 > of . . .

Professur KIST, WS 07/08 SAFP, Blatt 4

g x y =

case1 x ofTrue -> g False x

False -> case2 y ofFalse -> True

True -> case3 (g x False) ofTrue -> False

False -> True

Aufgabe 1Aufgabe 2Aufgabe 3

Aufgabe 2

Analyse fur das zweite Argument:

g >

NO-Reduktioncase1 > of . . .

,,YYYYYYYYYYYYY

YYvvmmm

mmmm

case1 True of . . .

NO-Reduktion

case1 False of . . .

NO-Reduktiong False >

NO-Reduktion

case2 of . . .

case1 False of . . .

NO-Reduktion

case2 > of . . .

))TTTTTTT

xxrrrrrr

case2 True of . . . case2 False of . . .

Professur KIST, WS 07/08 SAFP, Blatt 4

g x y =

case1 x ofTrue -> g False x

False -> case2 y ofFalse -> True

True -> case3 (g x False) ofTrue -> False

False -> True

Aufgabe 1Aufgabe 2Aufgabe 3

Aufgabe 2

Analyse fur das zweite Argument:

g >

NO-Reduktioncase1 > of . . .

,,YYYYYYYYYYYYY

YYvvmmm

mmmm

case1 True of . . .

NO-Reduktion

case1 False of . . .

NO-Reduktiong False >

NO-Reduktion

case2 of . . .

case1 False of . . .

NO-Reduktion

case2 > of . . .

))TTTTTTT

xxrrrrrr

case2 True of . . .

NO-Reduktion

case2 False of . . .

NO-Reduktion. . . True

Professur KIST, WS 07/08 SAFP, Blatt 4

g x y =

case1 x ofTrue -> g False x

False -> case2 y ofFalse -> True

True -> case3 (g x False) ofTrue -> False

False -> True

Aufgabe 1Aufgabe 2Aufgabe 3

Aufgabe 2

Analyse fur das zweite Argument:

g >

NO-Reduktioncase1 > of . . .

,,YYYYYYYYYYYYY

YYvvmmm

mmmm

case1 True of . . .

NO-Reduktion

case1 False of . . .

NO-Reduktiong False >

NO-Reduktion

case2 of . . .

case1 False of . . .

NO-Reduktion

case2 > of . . .

))TTTTTTT

xxrrrrrr

case2 True of . . .

NO-Reduktion

case2 False of . . .

NO-Reduktion. . . True

Professur KIST, WS 07/08 SAFP, Blatt 4

Striktheit kann nicht mehrgefunden werden!

g x y =

case1 x ofTrue -> g False x

False -> case2 y ofFalse -> True

True -> case3 (g x False) ofTrue -> False

False -> True

Aufgabe 1Aufgabe 2Aufgabe 3

Aufgabe 3

Analyse fur das erste Argument:

f >

Professur KIST, WS 07/08 SAFP, Blatt 4

f x y =

case1 x ofZero -> y

Succ x -> case2 x ofZero -> f (Pred x) y

Succ x -> f