Løsningsforslag - uke 5 Christian Mahesh Hansen chrisha@ifi.uio.no INF3170-29. januar 2004 Oppgave 2.2.1 For en utsagnslogisk formel X, la b(x) være antall forekomster av binære logiske symboler 1 i X, l(x) være antall venstreparenteser i X og r(x) være antall høyreparenteser i X. åstand: For enhver utsagnslogisk formel X har vi at b(x) = l(x) = r(x), dvs. at det er like mange venstre- som høyreparenteser i X. Bevis: Ved induksjon på oppbygningen av utsagnslogiske formler (strukturell induksjon). Induksjonshypotese (I): b(x) = l(x) = r(x) Basissteg: Anta X atomær. Da holder I opplagt, siden b(x) = l(x) = r(x) = 0. Induksjonssteg: Anta X = Y, og at I holder for Y. Vi ser at b(x) = b(y ) ( er et unært konnektiv), l(x) = l(y ) og r(x) = r(y ). I gir oss at b(y ) = l(y ) = r(y ). Vi kan derfor slutte at I holder, siden b(x) = l(x) = r(x). Anta X = (Y Z), og at I holder for Y og Z. Vi ser at b(x) = b(y )+b(z)+1, l(x) = l(y )+l(z)+1 og r(x) = r(y )+r(z)+1. I gir oss at b(y ) = l(y ) = r(y ) og at b(z) = l(z) = r(z). Vi får da at b(x) = l(x) = r(x) og I holder, siden vi har lagt til 1 til hvert av de tre måltallene b, l og r. Merk: Dette beviset er i overkant pedantisk! Normalt ville man nøyd seg med å påpeke at negasjon ikke tilfører hverken binære konnektiver eller paranteser, og at sammensetting med binært konnektiv tilfører nøyaktig én av både binære konnektiver, venstre- og høyreparanteser. Oppgave 2.2.2 Vi definerer en funksjon d på mengden av utsagnslogiske formler på følgende måte: Hvis er atomær, så er d() = 0. d( X) = d(x) + 1. d((x Y )) = d(x) + d(y ) + 1. For en utsagnslogisk formel X, kalles d(x) graden til X. Vi antar at og er binære symboler. Får da at 1 logiske konnektiver som tar to argumenter 1
d(( ( R))) = d() + d( ( R)) + 1 = d() + 1 + d( R) + 1 + 1 = 0 + 1 + d() + d(r) + 1 + 1 + 1 = 0 + 1 + 0 + 0 + 1 + 1 + 1 = 4 Oppgave 2.6.1 Vi definerer en funksjon r på mengden () av utsagnslogiske formler på følgende måte: Hvis A er en utsagnsvariabel, så er r(a) = r( A) = 0. r( ) = r( ) = 0. r( ) = r( ) = 1. Videre definerer vi rekursivt at r( Z) = r(z) + 1, r(α) = r(α 1 ) + r(α 2 ) + 1 og r(β) = r(β 1 ) + r(β 2 ) + 1. For en utsagnslogisk variabel X, kalles r(x) rangen 2 til X. Fører ikke opp selve utregningene, bare svarene: 1. La X = ( ) ( R). Da er d(x) = 4 og r(x) = 4. 2. La X = (T ). Da er d(x) = 2 og r(x) = 2. 3. La X = (T ). Da er d(x) = 2 og r(x) = 2. Har her ikke ført opp selve utregningen. Det er verdt å merke seg at graden til en utsagnslogisk formel tilsvarer antall konnektiver i den, og at rangen tilsvarer maksimalt antall tablå-ekspansjoner mulig å gjøre med formelen. Oppgave 2.9.4 Har her listet opp programmet uten ytterligere kommentarer. rogrammet kan også lastes ned fra gruppesiden på kursets hjemmesider, under navnet degree_rank.pl. /* Degree and Rank Calculation rogram - Exercise 2.9.4 ropositional operators are: neg, and, or, imp, revimp, uparrow, downarrow, notimp and notrevimp.?-op(140, fy, neg).?-op(160, xfy, [and, or, imp, revimp, uparrow, downarrow, notimp, notrevimp]). /* analyse(z, X, Y) :- X and Y are the subformulas of Z. 2 Fitting bruker det engelske ordet rank 2
analyse(x and Y, X, Y). analyse(x or Y, X, Y). analyse(x imp Y, X, Y). analyse(x revimp Y, X, Y). analyse(x uparrow Y, X, Y). analyse(x downarrow Y, X, Y). analyse(x notimp Y, X, Y). analyse(x notrevimp Y, X, Y). /* components(x, Y, Z) :- Y and Z are the components of the formula X, as defined in the alpha and beta table. components(x and Y, X, Y). components(neg(x and Y), neg X, neg Y). components(x or Y, X, Y). components(neg(x or Y), neg X, neg Y). components(x imp Y, neg X, Y). components(neg(x imp Y), X, neg Y). components(x revimp Y, X, neg Y). components(neg(x revimp Y), neg X, Y). components(x uparrow Y, neg X, neg Y). components(neg(x uparrow Y), X, Y). components(x downarrow Y, neg X, neg Y). components(neg(x downarrow Y), X, Y). components(x notimp Y, X, neg Y). components(neg(x notimp Y), neg X, Y). components(x notrevimp Y, neg X, Y). components(neg(x notrevimp Y), X, neg Y). /* degree(f, D) :- D is the degree of the formula F. degree(neg Formula, Deg) :- degree(formula, Degf), Deg is Degf + 1. degree(formula, Deg) :- analyse(formula, X, Y), degree(x, Degx), degree(y, Degy), Deg is Degx + Degy + 1. degree(_, 0). 3
/* rank(f, R) :- R is the rank of the formula F. rank(neg false, 1). rank(neg true, 1). rank(neg neg Z, Rank) :- rank(z, Rankz), Rank is Rankz + 1. rank(formula, Rank) :- components(formula, X, Y), rank(x, Rankx), rank(y, Ranky), Rank is Rankx + Ranky + 1. rank(_, 0). Oppgave 3.1.1 1. ((( ) ( R)) ( R )) ( ) ( R) ( R ) R R R R 2. (( ) (( ) )) (( ) ) 4
3. ((( ) ) ) ( ) ( ) 4. (( ) ) 5