Lògica en la Informàtica Dijous 18 de gener de 2007 ATENCIÓ: Es valorarà la concisió en les respostes. PUBLICACIÓ NOTES: dilluns 29 de gener. REVISIÓ: dijous 1 de febrer, 16h, edif. Omega, desp. 114. TEMPS: 2hores. Sense apunts. 1. (2 punts) Demostra que el següent conjunt de set clàusules és insatisfactible: 1) ¬P (x) ∨ Q(x) ∨ R(x, f (x)) 2) ¬P (x) ∨ Q(x) ∨ S(f (x)) 3) T (a) 4) P (a) 5) ¬R(a, z) ∨ T (z) 6) ¬T (x) ∨ ¬Q(x) 7) ¬T (y) ∨ ¬S(y) SOLUCIÓ: Com que la resolució és una regla deductiva correcta, si veiem que pertany a la clausura sota resolució de les clàusules donades podrem concloure que la seva conjunció és insatisfactible. Considerem les següents inferències per resolució: 2. Resolvent Clàusules utilitzades 8) Q(a) ∨ R(a, f (a)) 9) Q(a) ∨ S(f (a)) 10) ¬Q(a) 11) R(a, f (a)) 12) T (f (a)) 13) ¬S(f (a)) 14) S(f (a)) 14) 1+4 2+4 3+6 10 + 8 11 + 5 12 + 7 9 + 10 13 + 14 Unificador {x = a} {x = a} {x = a} {z = f (a)} {y = f (a)} (2 punts) Demostra si són certes o falses les afirmacions a),b),c), i respon a la pregunta curta d): 1) Si F |= G i F |= ¬G llavors (G ∨ F ) ↔ G és una tautologia 2) Si C i D són clàusules tautològiques i E s’obté a partir de C i D en un pas de resolució, aleshores E és una tautologia. 3) Es coneixen procediments que, donada una fórmula proposicional F , calculen en temps polinòmic una fórmula equisatisfactible F 0 en DN F que té tamany polinòmic respecte F . 4) Si F és una CNF proposicional amb n sı́mbols de predicat que conté k clàusules unitàries diferents, quants models pot arribar a tenir F ? SOLUCIÓ: 1) Cert. Si F tingués un model I aquest compliria I |= G i I |= ¬G, cosa que no pot passar. Aixı́ doncs F és insatisfactible. Per tant G ∨ F ≡ G, i aplicant el lema de substitució sé que (G ∨ F ) ↔ G ≡ G ↔ G, fórmula que és clarament una tautologia. 2) Cert. Veuré que tota interpretació és un model de E. Sigui I una interpretació qualsevol. En ser C i D tautologies, tenim I |= C i I |= D. A més sabem que, en ser la resolució una regla correcta, es compleix C ∧ D |= E. Per tant, necessàriament I |= E, que és el que volı́em veure. 3) Fals. Si es conegués tal procediment haurı́em demostrat que P = N P ja que es podria decidir la satisfactibilitat d’una fórmula en temps polinòmic de la següent manera. Prenem una fórmula F qualsevol i la convertim en temps polinòmic en una fórmula F 0 en DN F que és equisatisfactible i té tamany polinòmic respecte F . Ara prenem F 0 i, com que està en DN F , decidim la seva satisfactibilitat en temps lineal en el seu tamany (i per tant, polinòmic en el tamany de F ). 4) Com que tenim k variables el valor del qual ja coneixem, no tenim 2n possibles models, sinó només 2n−k . Notem que en cas que apareguin dos clausules unitàries de la forma p i ¬p per a cert sı́mbol de predicat p, aleshores la fórmula no té cap model. 3. (2 punts) Donat un sı́mbol de predicat p, direm que una fórmula és una p-implicació si és de la forma p o bé (F → G), on F i G són p-implicacions. Demostra que tota p-implicació o bé és una tautologia o bé és lògicament equivalent a p. SOLUCIÓ: Sigui H una p-implicació. Demostrarem el resultat per inducció sobre n, el nombre d’àtoms d’H. Cas base (n = 1): aleshores H és p, clarament lògicament equivalent a p. Pas inducció (n > 1 i assumim l’enunciat cert per tota p-implicació amb menys de n àtoms): en aquest cas H és de la forma (F → G), on F i G són p-implic acions amb menys de n àtoms. Aixı́ doncs, o bé són lògicament equivalent a p o bé són tautologies. Dis tingim els 4 possibles casos: • F ≡ p i G ≡ p. Aleshores H ≡ p → p ≡ ¬p ∨ p, que és clarament una tautologia. • F ≡ p i G tautologia. Aleshores H ≡ p → G ≡ ¬p ∨ G, que és una tautologia ja que G ho és. • F tautologia i G ≡ p. Aleshores H ≡ F → p ≡ ¬F ∨ p, que és equivalent a p ja que ¬F és una contradicció. • F tautologia i G tautologia. Aleshores H ≡ F → G ≡ ¬F ∨ G, que és una tautologia ja que G ho és. 4. (4 punts) Escriu programes Prolog per als següents problemes: 1) factores(N,L): dado un natural positivo N, la lista de sus factores primos en orden creciente es L. Por ejemplo, si N es 120, L será [2,2,2,3,5]. Debe poder tratar el caso donde la N viene dada, y también el caso donde los dos argumentos vienen dados. Con factores(120,[2,2,3,5,2]) ha de responder NO porque la lista no esta ordenada. 2) cruce(LA,C): dada una lista LA de nombres de animales, C es un cruce entre estos animales: una combinación de dos animales que tienen prefijo y sufijo común. Deben poderse generar todos los cruces posibles. Por ejemplo, si LA es [gato,tortuga,oso,asno], C será gatortuga, y, mientras haya backtracking, tortugato, gatoso, tortugasno, ososo, etc. Considera solamente prefijos y sufijos propios, es decir, distintos al nombre completo del animal. Usa el predicado predefinido “name” que convierte átomos prolog en su lista de codigos ascii y vice versa; por ejemplo, name(X,[111,115,111]) instancia la X con oso, y name(oso,L) instancia la L con [111,115,111]. 3) niveles(T,L): dado un término T, el recorrido por niveles de T es L, considerando T como un árbol. Por ejemplo, si T es f(g(a,b,c),h(c,d)) entonces L será la lista [f,g,h,a,b,c,c,d]. Usa el operador predefinido “=..” que convierte un término f(t1,...,tn) en una lista de la forma [f,t1,...,tn] y vice versa. Por ejemplo, con: ?- f(a,b,g(c)) =.. L. contesta: L = [f,a,b,g(c)], y con: ?- T =.. [f,a,b,g(c)]. contesta: T = f(a,b,g(c)). Ayuda: es muy simple si generalizas el problema a listas de términos y usas la concatenación de listas. SOLUCIÓ: %a) factores(N,L):- fac(N,L1), !, L1 = L. fac(1,[]):-!. fac(N,[F|L]):- nat(F), F>1, 0 is N mod F, N1 is N // F, fac(N1,L),!. %b) cruce(LA,C):- pert(A1,LA), name(A1,L1), pert(A2,LA), name(A2,L2), concat(L1,Z,L3), name( C,L3). concat(X,Y,L1), X\=[], Y\=[], concat(Y,Z,L2), Z\=[], %c) niveles(T,L):- niv([T],L). niv([],[]). niv([T|Ts],[F|L]):- T =.. [F|Args], concat(Ts,Args,Ts1), niv(Ts1,L).