Universitatea „Alexandru Ioan Cuza” Facultatea de Informatică Departamentul de Învăţământ la Distanţă

Cristian Masalagiu

LOGICA PENTRU INFORMATICIENI
Anul I, Semestrul I

2005-2006

1

Adresa autorului: Universitatea „Alexandru Ioan Cuza”
Facultatea de Informatică Str. G-ral Berthelot 16 700483 – Iaşi România e-mail:mcristy@infoiasi.ro web home page: http://www.infoiasi.ro/~masalagiu

2

3

DESCRIEREA MANUALULUI
Realitatea este alcătuită din obiecte şi fenomene aflate în relaţii de interdependenţă. Relaţiile (legăturile) se reflectă - în procesul gândirii umane – prin afirmaţii (judecăţi). Logica (în sens filozofic) este ştiinţa regulilor generale ale gândirii, cu accent pe aspectele exacte şi de natură structurală ale acesteia ([DEX]). Astfel, Logica studiază modul de alcătuire a raţionamentelor corecte, prin care, pornind de la afirmaţii iniţiale (presupuse a fi adevărate) se obţin (utilizând reguli de inferenţă) afirmaţii noi (de asemenea adevărate). La nivel intuitiv, o afirmaţie este adevărată dacă reflectă în mod adecvat realitatea şi falsă în caz contrar. Este acceptat faptul că valorile de adevăr ataşate unei afirmaţii pot avea o natură subiectivă şi, în consecinţă, pot fi şi altceva decât cele standard (adevărat şi fals). Ne putem gândi la ceva de genul: necunoscut, posibil adevărat, adevărat din timp în timp, etc. Cu ajutorul logicii, realitatea poate fi însă cunoscută mai profund şi aprioric. Logica clasică (aristotelică, bivalentă) admite doar afirmaţii cărora li se poate asocia în mod unic o valoare de adevăr standard (independentă de contextul, momentul de timp, etc., în care acestea sunt prezentate) şi se bazează în esenţă pe principiul tertium non datur (terţiul exclus: dacă o afirmaţie nu este adevărată, atunci ea este cu certitudine falsă şi reciproc). Logica matematică (formală) preia problemele logicii filozofice şi le cercetează folosind mijloace matematice specifice, punându-se bază pe rigurozitate şi claritate în detrimentul nuanţelor sau intuiţiei. Aplicarea acesteia în Informatică necesită o anumită adaptare, atât a modului de prezentare a conceptelor (terminologiei) cât şi a metodelor de demonstraţie, accentul căzând pe constructivism. Obiectivele principale ale cursului sunt reprezentate de Teoriile logice şi sistemele de demonstraţie (Modulul 4) pe de o parte şi de Introducerea în programarea logică (Modulul 5), pe de altă parte. Conţinutul Modulului 4 este important – în special pentru înţelegerea şi manipularea simplă a aspectelor teoretice şi înţelegerea construcţiei/funcţionării unui calculator. Modulul 5 este doar o introducere în programarea logică (limbaje de tip PROLOG). Logica este astfel şi un limbaj de programare de nivel înalt. Textual, primele trei module ocupă spaţiu editorial mai mare, deşi ele sunt doar nişte anexe (absolut indispensabile însă) pentru înţelegerea şi fundamentarea teoretică a ultimelor două. Supradimensionarea Modulelor 1-3 este justificată prin aceea că materia este complet nouă pentru absolvenţii de liceu. Modulul 1 – Funcţii booleene, Modulul 2 – Logica propoziţională (Calculul propoziţional) şi Modulul 3 – Logica (Calculul) cu predicate de ordinul I, nu sunt subdivizate în acelaşi număr de lecţii. Precizăm faptul că lecţia este unitatea de învăţare elementară, eventuala ei subdivizare fiind lăsată la latitudinea cititorului. Lecţiile sunt şi numerotate crescător în cadrul fiecărui modul. Definiţiile, teoremele, exerciţiile, tabelele, sunt de asemenea numerotate crescător în fiecare modul, folosindu-se şi numărul modulului. Exemplele şi observaţiile nu sunt (în general) numerotate. Exerciţiile din partea de Verificare (Testare) a fiecărui modul sunt numerotate crescător, începând cu 1, fără a se folosi numărul modulului (ele vor fi referite însă sub forma V.2.3, ceea ce înseamnă Exerciţiul 3 din Modulul 2). Addenda este dată la sfârşitul fiecărui modul şi nu la sfârşitul cărţii, sub formă de Index (împreună cu partea de Rezumare), iar Bibliografia este selectivă şi opţională.

4 Recomandăm cititorului să parcurgă manualul în ordinea indicată şi să nu treacă la învăţarea următorului paragraf, lecţie, modul decât după ce s-a asigurat că stăpâneşte pe deplin materia anterioară. Revenirile sunt uneori necesare, dar desigur neindicate explicit în text.

5

CUPRINS
• •

Descrierea manualului ---------------------------------------------------- 3 Modulul 1 – Funcţii booleene -----------------------------------------------7
o o o o o Lecţia 1 ------------------------------------------------------------------ 9 Lecţia 2 ------------------------------------------------------------------12 Lecţia 3 ------------------------------------------------------------------15 Rezumare şi Addenda ------------------------------------------------17 Verificare/Testare -----------------------------------------------------17

Modulul 2 – Logica propoziţională (Calculul propoziţional) --------18
o o o o Lecţia 1 ------------------------------------------------------------------ 19 Lecţia 2 ------------------------------------------------------------------ 21 Lecţia 3 ------------------------------------------------------------------ 24 Lecţia 4 ------------------------------------------------------------------27 1. Forme Normale ------------------------------------------------ 28 2. Satisfiabilitate -------------------------------------------------- 29 3. Satisfiabilitatea formulelor Horn ---------------------------- 30 Lecţia 5 ------------------------------------------------------------------33 Lecţia 6 ------------------------------------------------------------------36 Lecţia 7 ------------------------------------------------------------------37 Rezumare şi Addenda ------------------------------------------------37 Verificare/Testare -----------------------------------------------------38

o o o o o •

Modulul 3 - Logica (calculul) cu predicate de ordinul I --------------40
o o o o o o o Lecţia 1 ------------------------------------------------------------------40 Lecţia 2 ------------------------------------------------------------------47 Lecţia 3 ------------------------------------------------------------------50 Lecţia 4 ------------------------------------------------------------------51 Lecţia 5 ------------------------------------------------------------------53 Rezumare şi Addenda ------------------------------------------------56 Verificare/Testare -----------------------------------------------------57

Modulul 4 – Teorii logice şi sisteme de demonstraţie ------------- ---58
o o o o o Lecţia 1 ---------------------------------------------------------------- --59 Lecţia 2 ---------------------------------------------------------------- --63 Lecţia 3 -------------------------------------------------------------------64 Rezumare şi Addenda -------------------------------------------------66 Verificare/Testare ------------------------------------------------------67

Modulul 5 – Introducere în programarea logică -------------------- ----69
o o o o Lecţia 1 ---------------------------------------------------------------- ---70 Lecţia 2 ---------------------------------------------------------------- ---72 Rezumare şi Addenda --------------------------------------------------74 Verificare/Testare -------------------------------------------------------74

6

Anexă (rezolvări)----------------------------------------------------------------75 • Tema de control --------------------------------------------------------81 • Bibliografie ------------------------------------------------------------------ -----84

7

MODULUL 1 - Funcţii booleene
INTRODUCERE
Modulul în sine are ca scop familiarizarea cititorului cu o clasă particulară de funcţii – clasa funcţiilor booleene. Aceste funcţii, de mai multe argumente, deşi au o mulţime de definiţie (un domeniu) şi o mulţime de valori (un codomeniu) aparent simple, au proprietăţi locale şi globale foarte utile. Teoria dezvoltată pentru ele constituie de fapt baza semanticii logicii propoziţionale în sens clasic, atât conceptual cât şi din punctul de vedere al rezultatelor cele mai importante. Schimbând semnificaţia simbolurilor 0 şi 1 din cifră în valoare de adevăr (fals, respectiv adevărat), a operaţiilor + şi ¯, etc., din adunare (atenţie, nu este vorba – după cum se va vedea – de adunarea în mulţimea numerelor naturale şi nici de cea modulo 2) şi opus (evitaţi paralela intuitivă cu numerele), în disjuncţie, respectiv negaţie, etc., multe rezultate din logica propoziţională pot fi ulterior deduse printr-o simplă „traducere”. Din manualele de matematică de liceu sunt bine cunoscute cel puţin două modalităţi de a prezenta o mulţime: • Prin enumerarea elementelor sale. N = {0, 1, 2, ...} este mulţimea numerelor naturale. • Prin specificarea unei proprietăţi caracteristice. A = {x ∈ R | x2 + 9x – 8 = 0}, este mulţimea rădăcinilor reale ale unei ecuaţii polinomiale de gradul al II-lea. Mai există o modalitate aparţinând algebrei clasice, care, fără a fi fost tratată în mod explicit, a fost totuşi suficient de des utilizată. Aceasta poate fi descrisă pe scurt astfel: A este cea mai mică mulţime care conţine elementele ... şi care este închisă la operaţiile ... . De exemplu, dacă notăm cu 0 cel mai mic (primul) număr natural şi – pentru fiecare n număr natural – cu s(n) succesorul său imediat, mulţimea N poate fi definită – în ideea de mai sus – constructiv sau structural (ea este o mulţime bine-ordonată, [TIP]), astfel: Baza: 0 ∈ N (zero este număr natural). Pas constructiv (structural): Dacă n ∈ N, atunci s(n) ∈ N (dacă n este număr natural, atunci succesorul său imediat este număr natural). Nimic altceva nu mai este număr natural. Prin urmare, N este o mulţime care conţine (iniţial) elementul numit 0. Se introduc apoi elemente noi folosind elemente vechi (deja prezente în N) şi simbolul s. Procesul continuă cât timp este posibil (în cazul de mai sus, el continuă la infinit). Pentru ca N să fie într-adevăr cea mai mică mulţime construită în felul descris, am adăugat – în plus faţă de Bază şi Pasul constructiv – condiţia nimic altceva nu mai este număr natural (în continuare vom presupune implicit că procedăm în acest mod la fiecare definiţie constructivă). Soluţia adoptată pentru a treia cale de descriere a unei mulţimi are avantajul de a avea şi o caracteristică de natură (semi)algoritmică. Acceptăm astfel paradigma imperativă propusă de D. Knuth ([KNU]), Algoritm = Date + Operaţii. Mai exact, un algoritm reprezintă o secvenţă finită de paşi (instrucţiuni), care descriu operaţii precise asupra unor informaţii (date) iniţiale (de intrare) sau intermediare (de lucru, temporare), în vederea obţinerii unor informaţii (rezultate) finale (de ieşire). Paşii se execută în ordinea scrierii lor în secvenţă, existând şi posibilitatea schimbării acestei

8 ordini prin instrucţiuni „de salt” explicite. Un algoritm calculează o funcţie sau rezolvă o problemă ([CRO], [SOR]). Intuitiv, datele de intrare reprezintă elemente din domeniul de definiţie al funcţiei de calculat (sau informaţiile iniţiale din realitatea în care îşi are originea problema pe care vrem să o rezolvăm), iar datele de ieşire sunt elemente din codomeniul funcţiei (respectiv, soluţiile problemei). Un algoritm se termină pentru toate intrările admise. Din motive tehnice, vom lua uneori în considerare şi algoritmi care nu se termină pentru toate intrările, pe care-i vom numi semialgoritmi. Un (semi)algoritm poate fi descris sub mai multe forme, printre care se numără şi pseudocodul. Astfel, definiţia constructivă a lui N poate deveni, în limbaj algoritmic (pseudocod): Intrare: -. Ieşire: N. Metodă: Pas 1: N ‫.}0{ =׃‬ Pas 2: Cât_timp (este posibil) execută Pas 3: Alege n ∈ N. Pas 4: N ‫ =׃‬N U {s(n)}. Sf_Cât_timp. Înafara instrucţiunii de ciclare cu un număr necunoscut de paşi (Cât_timp (<condiţie>) execută <corp> Sf_Cât_timp) şi a celei de asignare (<variabilă> ‫< =׃‬valoare>), în descrierea algoritmilor imperativi vom mai folosi selecţia (Dacă (<condiţie>) atunci <corp> altfel <corp> Sf_Dacă) şi instrucţiunea de ciclare cu un număr cunoscut de paşi (Pentru <variabilă> = <valoare iniţială>, <creştere>, <valoare finală>, execută <corp> Sf_Pentru). Câteodată vom întrebuinţa şi varianta Repetă <corp> Până_când (<condiţie>) Sf_Repetă a primei instrucţiuni. Vom putea accepta astfel: Principiul inducţiei structurale. Fie A o mulţime definită constructiv, A’ ⊆ A mulţimea elementelor iniţiale (definite prin pasul Baza al definiţiei) şi P o afirmaţie care trebuie demonstrată pentru toate elementele lui A. Acceptăm că P(a) este adevărată pentru fiecare a ∈ A dacă şi numai dacă: Baza: Arătăm că P(a) este adevărată pentru fiecare a ∈ A’. Pas inductiv: Fie orice b ∈ A, element nou obţinut din elementele deja construite a1, a2, ... , an, cu ajutorul operatorului f (vom prescurta acest lucru scriind b = f(a1, a2, ... , an), deşi relaţia nu este întotdeauna de natură funcţională) şi presupunem că este adevărată P(ai) pentru fiecare ai ∈ {1, 2, ..., n}. Arătăm că este adevărată P(b). Observaţie. Principiul inducţiei matematice (naturale) aşa cum este el cunoscut din matematica de liceu este un caz particular al principiului inducţiei structurale. Folosim cuvântul principiu în loc de teoremă, deoarece în cele de mai sus stipulăm – pentru cazul mulţimii numerelor naturale – că formulele (∀n)P(n) şi P(0) ∧ (∀n)(P(n) implică P(n+1)) (ştim că P(0) poate fi înlocuit şi cu orice P(k), k – număr natural fixat, deoarece şi submulţimea lui N, {k, k + 1, ... } este bine-ordonată) sunt tare echivalente (în sensul precizat în Modulul 2). Acest fapt, deşi adevărat în anumite situaţii particulare – nu este adevărat în sensul logicii formale, la modul general. ■

9

DEZVOLTARE
LECŢIA 1
Se presupun cunoscute noţiunile şi notaţiile de bază din matematica de liceu. Dacă vom folosi ceva nou, vom preciza acest lucru în mod explicit. De exemplu, submulţimea {1, 2, ... ,n} a lui N se va nota cu [n], iar pentru indicarea unui element al unui produs cartezian (numit şi tuplu sau n-uplu în cazul în care numărul n de componente este cunoscut) se vor folosi parantezele ascuţite, nu cele rotunde (exceptând cazul în care este vorba de aplicarea unei funcţii unui tuplu, deoarece dorim să evităm folosirea unor paranteze multiple acolo unde nu este necesar). Cunoaşterea literelor alfabetului grecesc poate fi un avantaj. Notăm cu B mulţimea {0, 1} şi cu FB(n) = {f | f : Bn → B}, Bn reprezentând produsul cartezian al lui B cu el însuşi, luat de n ∈ N ori (Bn = B × B × ... × B). FB(0) va coincide cu B, prin convenţie. Punem astfel: FB = U FB n  n ≥0  (0) FB = B 

Observaţie. card (FBn) = 2 . Cardinalul unei mulţimi A va mai fi notat, atunci când nu există confuzii, cu |A|. Mai mult, dacă atât domeniul cât şi codomeniul unei funcţii sunt mulţimi finite, funcţia poate fi dată tabelar (numită tabelă de adevăr, deşi semnificaţia acestui termen poate conduce – în acest moment – la confuzii). În cazul unei funcţii f ∈ FB(n) (operaţie n-ară), aceasta se defineşte prin: x2 ... xn f(x1, x2, ... , xn) x1 0 0 0 f(0, 0, ... , 0) 0 0 1 f(0, 0, ... , 1) ... ... ... ... ... ... 1 1 1 1 f(1, 1, ... , 1)
Întrebare. Justificaţi egalitatea card (FBn) = 2 . Putem indica acum câteva funcţii importante din FB. Desigur că în FB(0) avem doar constantele corespunzătoare, elemente ale lui B (funcţii de 0 variabile). • Pentru n = 1, cele 4 funcţii (operaţii 1-are; unare) sunt c0 (funcţia indentic 0), c1 (funcţia identic 1), 1B (identitatea) şi ¯ (negaţia, opusul), date prin: c1 1B ¯ x c0 0 0 1 0 1 1 0 1 1 0
2n

2n

• Pentru n = 2, din totalul celor 16 funcţii posibile (operaţii 2-are; binare), câteva dintre cele mai importante sunt: + (suma, adunarea booleană, disjuncţia), • (produsul boolean, conjuncţia), ⊕ (suma modulo 2) şi | (anticonjuncţia, operaţia lui Sheffer):

10

x 0 0 1 1

y 0 1 0 1

x+y 0 1 1 1

x•y 0 0 0 1

x⊕y 0 1 1 0

x|y 1 1 1 0

Întrebare. Câte funcţii sunt în FB(3)? Puteţi da vreun exemplu de asemenea funcţie, care să aibă şi o „semnificaţie cunoscută” ? Întrebare. Puteţi descoperi singuri metoda „standard” de construcţie a liniilor unui tabel ca cel de mai sus? În caz de răspuns afirmativ, folosiţi metoda şi în răspunsul la întrebarea precedentă. Observaţie. Pe mulţimea B, funcţiile binare • şi + şi funcţia unară ¯ pot fi privite ca legi de compoziţie interne. Astfel, într-un mod cu totul similar cu cazurile cunoscute ale grupului, inelului sau corpului – datorită unor proprietăţi specifice ale operaţiilor respective - B = < B, •, +, ¯ > formează o algebră booleană, sau algebră Boole (după numele deja menţionat al matematicianului G. Boole, 1815 – 1864). ■ Definiţia 1.1. Se numeşte algebră booleană un 4-uplu M, M = <M, ⊥, ∇, ~ >, format din orice mulţime nevidă M (suportul algebrei) două operaţii binare ⊥, ∇ : M × M → M şi o operaţie unară ~ : M → M, care satisfac condiţiile (legile): comutativitate (a lui ⊥) 1) x ⊥ y = y ⊥ x. asociativitate (a lui ⊥) 2) (x ⊥ y) ⊥ z = x ⊥ (y ⊥ z). distributivitate (⊥ faţă de ∇) 3) x ⊥ (y ∇ z) = (x ⊥ y) ∇ (x ⊥ z). absorbţie 4) (x ⊥ y) ∇ y = y. legea contradicţiei 5) (x ⊥ (~x)) ∇ y = y. şi comutativitate (a lui ∇) 1’) x ∇ y = y ∇ x. asociativitate (a lui ∇) 2’) (x ∇ y) ∇ z = x ∇ (y ∇ z). distributivitate (∇ faţă de ⊥) 3’) x ∇ (y ⊥ z) = (x ∇ y) ⊥ (x ∇ z). absorbţie 4’) (x ∇ y) ⊥ y = y. legea tautologiei ■ 5’) (x ∇ (~x)) ⊥ y = y. Legile (axiomele) de mai sus nu reprezintă identităţi, ele trebuind înţelese ca fiind nişte ecuaţii satisfăcute pentru toate valorile variabilelor x, y, z, care sunt nume generice pentru elemente din M. Fiecare dintre cei doi membri reprezintă funcţii booleene (numărul de argumente fiind dat de numărul de nume de variabile distincte care apar). Egalitatea înseamnă egalitate de funcţii. În general, considerând afirmaţii (notate A) peste o mulţime M, suport al unei algebre booleene, care depind doar de variabile cu valori în M şi folosesc doar operaţiile amintite, afirmaţii care sunt fie axiome (Baza definiţiei structurale), fie obţinute din axiome printr-un anumit raţionament (Pasul constructiv: se găsesc afirmaţii noi, numite teoreme, din afirmaţii vechi), putem defini dualele lor, Aδ, în felul următor: Aδ se obţine din A prin înlocuirea simultană (textuală) a tuturor apariţiilor lui ⊥ cu ∇ şi a tuturor apariţiilor lui ∇ cu ⊥.

11 Putem extinde conceptul şi notaţia anterioară la obiecte oarecare (afirmaţii, dar şi elemente din M, funcţii peste M, etc.). Astfel, în B, 1 este dualul lui 0 (evident şi reciproc, relaţia de dualitate fiind o relaţie simetrică), duala sumei este produsul (se dualizează întreaga tabelă de adevăr), etc. Într-o algebră booleană oarecare M se poate arăta (demonstraţia formală nefiind importantă pentru scopul acestei lucrări) că există x (măcar) un element (notat 0 ∈ M) care satisface ecuaţia x ⊥ ( ~ ) = 0 şi (măcar) un ~ ) = 1 (0 fiind desigur distinct de element 1 ∈ M, care este dualul lui 0, satisfăcând x ∇ ( x 1). Mai mult, relaţia de dualitate este şi idempotentă (avem (oδ)δ = o, pentru fiecare obiect o), existând şi obiecte autoduale, adică obiecte care satisfac oδ = o (de exemplu, funcţiile 1B, ¯ şi f ∈ FB(3), dată prin f(x, y, z) = x ⊕ y ⊕ z, sunt autoduale). Fiecare axiomă i), i ∈ [5] are duala sa i’) şi înlocuind într-un raţionament prin care se obţine o teoremă A orice axiomă cu duala ei, vom găsi un raţionament (dual), prin care se obţine (deduce, demonstrează) afirmaţia Aδ. Este justificat atunci să adoptăm principiul dualităţii pentru B (care este şi el un caz particular al principiului inducţiei structurale). De fapt, pentru fiecare text (secvenţă finită de caractere grafice) se poate afla dualul său, după schema sugerată anterior. O afirmaţie booleană A este adevărată dacă şi numai dacă duala sa Aδ este adevărată. Teorema 1.1. Arătaţi că B = < B, •, +, ¯ > este o algebră booleană şi că pentru fiecare x ∈ B avem x • ( x ) = 0 şi x + ( x ) = 1. Demonstraţie. Conform principiului dualităţii, este suficient să arătăm că sunt adevărate doar axiomele 1) – 5) şi prima afirmaţie de mai sus (în cazul nostru, ⊥ este înlocuit de • iar ∇ de către +). Privind atât membrul stâng cât şi membrul drept al ecuaţiilor ca expresiile unor funcţii, vom folosi tabelele de adevăr. Datorită simplităţii calculelor, dintre axiome vom arăta aici doar validitatea lui 4). Avem: x y x•y (x • y) + y y 0 0 0 0 0 0 1 0 1 1 1 0 0 0 0 1 1 1 1 1

şi respectiv:
x 0 1 x 1 0 x • (x) 0 0

Adevărul axiomei 4) rezultă din primul tabel prin compararea penultimei coloane (care este membrul stâng al ecuaţiei) cu ultima coloană (membrul drept), linie cu linie. Se observă imediat că acestea coincid, adică funcţiile date de expresiile respective sunt egale (două funcţii sunt egale dacă au acelaşi domeniu şi codomeniu şi valorile lor coincid pe fiecare valoare a argumentului). Similar pentru x • ( x ) = 0 şi cel de-al doilea tabel, cu observaţia că nu am mai explicitat coloana care reprezintă membrul drept (şi care este de fapt expresia funcţiei c0). ■

12 O altă algebră booleană cunoscută este dată de mulţimea părţilor (submulţimilor) unei mulţimi oarecare V, notată 2V, împreună cu intersecţia, reuniunea şi complementara faţă de V, V = < 2V, ∩, U, CV>.

CONSOLIDARE
LECŢIA 2
Într-o algebră booleană (în particular, în B) sunt valabile şi alte afirmaţii. Ele sunt teoreme – în sensul deja precizat – ceea ce înseamnă că pot fi demonstrate fie utilizând tabelele de adevăr, fie construind un raţionament clasic (de tip matematic) pornind – de exemplu - de la axiome şi/sau de la afirmaţii demonstrate anterior. Sumarizăm câteva dintre ele în tabelul următor (în 6) – 10) şi 6’) – 10’) se adaugă „pentru fiecare x ∈ B”). 6’) x = x 6) x = x 7) x • x = 0 7’) x + x = 1 8) x • x = x 8’) x + x = x 9) x • 0 = 0 9’) x + 1 = 1 10) x • 1 = x 10’) x + 0 = x 11) x1 • x2 • … • xn = 0 dacă şi numai dacă 11’) x1 + x2 + … + xn = 1 dacă şi numai există i∈[n] astfel încât xi = 0 (oricare ar fi dacă există i∈[n] astfel încât xi = 1 (oricare n ≥ 2 şi oricare ar fi x1, x2, ..., xn ∈ B) ar fi n ≥ 2 şi oricare ar fi x1, x2, ..., xn ∈ B) 12) x1 • x2 • … • xn = 1 dacă şi numai dacă 12’) x1 + x2 + … + xn = 0 dacă şi numai pentru fiecare i∈[n] avem xi = 1 (oricare dacă pentru fiecare i∈[n] avem xi = 0 ar fi n ≥ 2 şi oricare ar fi x1, x2, ..., xn ∈ B) (oricare ar fi n ≥ 2 şi oricare ar fi x1, x2, ..., xn ∈ B) 13) x1 ⋅ x 2 ⋅ ... ⋅ x n = x1 + x 2 + ... + x n (oricare 13’) x1 + x 2 + ... + x n = x1 ⋅ x 2 ⋅ ... ⋅ x n ar fi n ≥ 2 şi oricare ar fi x1, x2, ..., xn ∈ B) (oricare ar fi n ≥ 2 şi oricare ar fi x1, x2, ..., xn ∈ B)

Tabelul 1.1.

În tabel am trecut atât anumite afirmaţii cât şi dualele lor (afirmaţia 6) fiind autoduală). Tabelul putea fi completat, de exemplu, cu generalizarea la n > 3 elemente a asociativităţii, comutativităţii, distributivităţii. Afirmaţiile 13) şi 13’) se numesc legile lui deMorgan. În continuare vom trece în revistă câteva rezultate importante din teoria funcţiilor booleene, acestea anticipând un anumit suport abstract pentru modulele următoare. O primă parte dintre ele vor fi reluate pe parcursul lucrării, într-un alt cadru. O a doua parte este prezentă şi în programa analitică a altor cursuri. Pentru început, să menţionăm că o clasă de proprietăţi interesante se referă la o metodă generală de reprezentare a funcţiilor din FB. În teorema următoare, adoptăm notaţiile x1 = x şi x0 = x (în sensul că „puterea” 1 lasă elementul neschimbat, iar „puterea” 0 îi „adaugă” o bară). Să notăm că indicii

13
superiori precedenţi nu se supun principiului dualităţii (adică, de exemplu, (x1 = x) δ ≠ (x0 = x)). Totul este necesar pentru simplificarea scrierii. Teorema 1.2 (de descompunere, cu termeni). Pentru fiecare n ∈ N*, f ∈ FB(n) şi fiecare k ∈ [n], avem:

f(x 1 , x 2 ,..., x n ) =

α1 1 α1 , α 2 ,..., α k ∈B

∑x

⋅ x α 2 ⋅ ... ⋅ x α k ⋅ f(α 1 , α 2 ,..., α k , x k +1 ,..., x n ) 2 k

oricare ar fi x1, x2, ... , xn ∈ B. Demonstraţie. Dacă elementele xi, αi ∈ B atunci, direct din definiţie, rezultă că (x0)α = (xα)0 şi xα = 1 dacă şi numai dacă x = α. Folosind 12) (Tabelul 1.1), rezultă imediat că, în condiţiile teoremei, x1 1 ⋅ x 2 2 ⋅ ... ⋅ x k k = 1 dacă şi numai dacă xi = αi pentru fiecare i ∈ [n]. Fie acum elementele a1, a2, ... , an ∈ B, oarecare, fixate. Conform proprietăţii anterioare, în
α1 1 α 1 , α 2 ,..., α k ∈ B

α

α

α

∑a

⋅ a α 2 ⋅ ... ⋅ a α k ⋅ f( α 1 , α 2 ,..., α k , a k +1 ,..., a n ) 2 k
α1 α2 αk

unul şi numai unul dintre factorii a1 ⋅ a2 ⋅ ... ⋅ ak va fi egal cu 1, adică cel pentru care αi = ai, pentru fiecare i ∈ [k]. Datorită comutativităţii şi legilor 10), 9) şi 10’) (Tabelul 1.1), rezultă că suma este egală exact cu f(a1, a2, ... , an). ■ Este adevărată şi teorema duală, ambele rezultate fiind folosite pentru demonstrarea existenţei formelor normale pentru funcţiile booleene. Înafara înlocuirii lui + cu • şi a lui Σ cu Π, numele α1 , α2 , ... αk, se înlocuiesc cu aceleaşi elemente, dar barate. Definiţia 1.2. Fie n ∈ N* şi x1, x2, ... , xn ∈ B variabile (booleene) distincte (putem nota cu X = {x1, x2, ... , xn}, ideea fiind însă că lucrăm cu o listă). Se numeşte termen (n-ar) orice produs t =

xiα1 ⋅ xiα 2 ⋅ ... ⋅ xiα k , unde 0 ≤ k ≤ n, α1, α2, ... , αk ∈ B şi 1 ≤ i1 < i2 < ... k 1 2

< ik ≤ n. ■ În definiţia precedentă, termenul generat pentru k=0 este 1 (prin convenţie). Pentru k = n obţinem aşa-numiţii termeni maximali (maxtermeni), adică acei termeni în care fiecare dintre variabilele considerate apare o dată şi numai o dată (barată sau nebarată). Observaţie. Între mulţimea termenilor n-ari t (peste x1, x2, ... , xn) şi mulţimea n-uplelor peste {0, 1, 2} (aceasta „coincide” cu mulţimea {f | f : [n] → {0, 1, 2}}) se poate stabili o corespondenţă biunivocă g, dată de g(t) = <e1, e2, ... , en>, unde, pentru fiecare i ∈ [n], avem ei = 0 dacă xi apare barată în t, ei = 1 dacă xi apare nebarată în t şi ei = 2 în rest (xi nu apare în t). Mulţimea termenilor n-ari consideraţi va avea atunci 3n elemente. Raţionând similar pentru cazul maxtermenilor n-ari (în acest caz, nu este posibil ca vreo variabilă considerată să nu apară), rezultă că există 2n maxtermeni n-ari distincţi (indiferent de numele celor n variabile diferite fixate). ■ După cum se observă şi din exemplul care urmează, consideraţiile de natură combinatorială sunt practic indispensabile în vederea obţinerii unor rezultate convenabile. Exemplu. Dacă luăm n = 2 şi notăm x1 cu x şi x2 cu y, atunci cei 32 = 9 termeni sunt: x, y, x , y , x • y, x • y, x • y , x ⋅ y, 1. Cei 22 = 4 maxtermeni sunt: x • y, x • y, x • y , x ⋅ y. ■

14
Definiţia 1.3. Se numeşte formă normală disjunctivă (n-ară, n ∈ N* ) – (n-)FND pe scurt - orice sumă (finită) de termeni n-ari distincţi. Se numeşte formă normală disjunctivă perfectă (n-ară, n ∈ N* ) – (n-)FNDP - orice sumă de maxtermeni n-ari distincţi. ■ Orice FND se poate reprezenta şi grafic, ca un arbore ([KNU], [LUC]). Datorită comutativităţii adunării putem face abstracţie de ordinea (max)termenilor dintr-o sumă, mai exact, luând oricare două sume care diferă doar prin ordinea termenilor le vom k considera ca fiind identice. Vor exista astfel C 3 n forme normale disjunctive n-are

având k termeni, 0 ≤ k ≤ 3n (prin convenţie, pentru k = 0, unica formă – care este acceptată şi ca fiind perfectă - va fi considerată ca fiind 0). În consecinţă, numărul total al n-FND – urilor va fi:
0 1 k 3 C3n + C3n + ... + C3n + ... + C3n = 23
n n

Analog, numărul total al n-FNDP – urilor va fi:
0 1 k 2 C2n + C2n + ... + C2n + ... + C2n = 22 .
n n

Teorema 1.3. Orice funcţie booleană se poate reprezenta în mod unic ca o FNDP. Demonstraţie. Fie fixate n ∈ N*, f ∈ FB(n) şi X = {x1, x2, ... , xn}. Aplicând Teorema de descompunere pentru f şi k = n, găsim că f se poate scrie sub forma:

f(x1 , x 2 , ... , x n ) =
f(x 1 , x 2 , ... , x n ) =

α1 1 α1 ,α 2 ,...,α k ∈B

∑x

⋅ x α2 ⋅ ... ⋅ x αk ⋅ f(α1 , α 2 ,..., α k , α k +1 ,..., α n ) 2 k
⋅ x α 2 ⋅ ... ⋅ x α n , 2 n

oricare ar fi valorile lui x1, x2, ... , xn din B şi prin urmare avem:
α1 1 α 1 , α 2 ,..., α n ∈B

∑x

oricare ar fi x1, x2, ... , xn ∈ B, α1, α2, ... , αn ∈ B, astfel încât f(α1, α2, ... , αn) = 1, ceea ce este o reprezentare a lui f ca o n-FNDP. Unicitatea reprezentării provine din faptul că mulţimea n-FNDP – urilor şi mulţimea FB(n) au acelaşi cardinal (număr de elemente în acest caz). Se mai spune că expresia din membrul drept al reprezentării este (o) FND(P) pentru f. ■ Dualizând, obţinem noţiunile de (n-)factor (orice sumă de – n – variabile, apărând barat sau nu), maxfactor (n-ar) – un (n-)factor în care apar toate variabilele, formă normală conjunctivă (n-ară) ((n-)FNC, orice produs de factori dictincţi), formă normală conjunctivă (n-ară) perfectă ((n-)FNCP, orice produs de maxfactori distincţi). Nu uităm că se aplică asociativitatea generalizată şi comutativitatea, peste tot, atât pentru sumă cât şi pentru produs, astfel încât doi termeni sau factori nu vor fi distincţi dacă diferă doar prin ordinea componentelor. Aplicând principiul dualităţii, obţinem că este adevărată duala Teoremei 1.3. Teorema 1.4. Fie orice n ∈ N*, f ∈ FB(n) şi oricare nume distincte de variabile x1, x2, ... , xn. Atunci f se poate reprezenta în mod unic ca o FNCP peste X = {x1, x2, ... , xn}, adică:

f(x 1 , x 2 , ... , x n ) =

α1 1 α 1 ,α 2 ,..., α n ∈ B

∏ (x

+ x α 2 + ... + x α n ) , 2 n

oricare ar fi x1, x2, ... , xn ∈ B, α1, α2, ... , αn ∈ B, astfel încât f( α 1 , α 2 , ... , α n ) = 1. ■

15

LECŢIA 3
Deşi rezultatele teoretice anterioare sunt încurajatoare (funcţiile booleene, date tabelar, pot fi reprezentate şi prin expresii standard – FNDP, FNCP; acestea sunt unice; se pot construi algoritmic, conform Teoremei 1.3 şi Teoremei 1.4, etc.), s-ar putea ca din punct de vedere practic să nu fie chiar cele dorite. Astfel, ne-am putea pune problema găsirii celei mai „scurte” forme normale, funcţie de o anumită măsură fixată. Există numeroase măsuri „candidat” pentru o FND sau FNC simple, notată φ: lungimea ca text (număr de caractere grafice); numărul de operatori folosiţi (poate chiar exceptând negaţia); numărul de variabile peste care este construită forma respectivă; numărul de nivele din arborele ataşat; numărul de termeni (factori); numărul de componente ale unui termen (factor); numărul total de apariţii a variabilelor (apariţia unei aceleiaşi variabile pe poziţii diferite se numără distinct), etc. Considerând ultima măsură (pe care o vom nota cu n(φ)), putem numi formă normală disjunctivă minimală (FNDM) pentru f ∈ FB, orice FND φ’ astfel încât: n(φ’) = min {n(φ) | φ este FND pentru f}. Dată o funcţie booleană f ∈ FB, se poate pune problema determinării tuturor FNDM pentru f, sau a uneia standard (ceea ce este posibil deoarece pentru fiecare număr natural n n numărul funcţiilor booleene n-are este 2 2 iar numărul formelor disjunctive n-are este n 2 3 ). Problema anterioară este rezolvabilă cu ajutorul algoritmului lui W. Quine ([CAZ]). Algoritmul lui Quine intră sub incidenţa principiului dualităţii, astfel încât făcând modificările de rigoare el poate determina şi toate formele normale conjunctive minimale (FNCM) pentru orice funcţie booleană. O problemă similară, prin rezolvarea căreia s-ar putea reduce - în anumite cazuri – timpul de procesare a unor texte (expresii, formule, etc.), este găsirea unui număr minim de operaţii booleene convenabile. Definiţia 1.4. Clasa funcţiilor booleene elementare este: n n n E = { i p | n ∈ N*, 1 ≤ p ≤ n, i p : Bn → B, i p (x1, x2, ... , xp, ... , xn) = xp}. Fie n ∈ N*, t - număr natural, f, h1, h2, ... , ht ∈ FB(n) şi g ∈ FB(t). Spunem că f se obţine din g, h1, h2, ... , ht prin superpoziţie dacă pentru fiecare x = <x1, x2, ... , xn> avem: f(x) = g(h1(x), h2(x), ... , ht(x)). Fie M ⊆ FB. Se numeşte M-şir orice secvenţă (listă) finită f0, f1, ... , fr de funcţii booleene în care fiecare fi este fie din E U M fie se obţine prin superpoziţie din funcţii corespunzătoare, aflate în aceeaşi listă dar înaintea lui fi. ■ n Funcţiile i p se mai numesc şi proiecţii, superpoziţia poate fi identificată dacă utilizăm notaţia f = SUP(g, h1, h2, ... , ht), iar M va denota mulţimea funcţiilor care pot apărea ca elemente în M-şiruri. Pentru fiecare M dat, M va fi practic o mulţime definită constructiv, în care E U M constituie mulţimea funcţiilor de bază iar (operatorul de) superpoziţie este singura modalitate de a se obţine funcţii noi din funcţii vechi. Prin urmare, M este cea mai mică mulţime care conţine proiecţiile şi elementele lui M şi este închisă la superpoziţie. Algebric vorbind, se mai spune că M este închiderea prin superpoziţie a mulţimii M U E. M se va numi închisă dacă coincide cu închiderea sa. Teorema 1.5 ([CAZ]). O mulţime M ⊆ FB este închisă dacă şi numai dacă conţine funcţiile elementare şi orice superpoziţie de funcţii din M se află în M. ■

16 Exemple imediate de mulţimi închise sunt E şi FB. Se poate arăta şi că următoarele mulţimi (infinite) sunt mulţimi închise: • T0 – mulţimea funcţiilor booleene de oricâte argumente care păstrează pe 0, adică satisfac f(0, 0, ... , 0) = 0. • T1 – dual, mulţimea funcţiilor care păstrează pe 1, adică satisfac (f(1, 1, ... , 1) = 1). • Aut – mulţimea funcţiilor autoduale (fδ = f). Să notăm ca o proprietate de caracterizare interesantă pentru această clasă de funcţii şi faptul că fδ(x1, x2, ... , xn) = f ( x1, x 2, ..., x n ) . Acest lucru se obţine imediat deoarece tabela de definiţie pentru fδ se obţine din tabela pentru f, înlocuind simultan, peste tot, pe 0 cu 1 şi pe 1 cu 0. • Mon – mulţimea funcţiilor monotone. Pe B putem defini o relaţie de ordine naturală (0 ≤ 1; avem chiar 0 < 1, dar nu asta este esenţial în tratarea relaţiei de ordine), care poate fi extinsă „pe componente” la orice produs cartezian: dacă luăm două n-uple α = <α1, α2, ... , αn> şi β = <β1, β2, ... , βn>, αi, βi ∈ B, i ∈ [n], vom spune că α ≤ β dacă şi numai dacă αi ≤ βi pentru fiecare i ∈ [n] (desigur că vom avea α < β dacă şi numai dacă α ≤ β şi α ≠ β adică α şi β diferă prin măcar o componentă). O funcţie f ∈ FB(n) este monotonă dacă pentru fiecare α, β ∈ Bn, din α ≤ β rezultă f(α) ≤ f(β). • Lin – mulţimea funcţiilor liniare. Se poate arăta că tripletul I = <B, ⊕, •> este inel comutativ cu unitatea 1 care este izomorf cu inelul claselor de resturi modulo 2 (cele două mulţimi se pot identifica). Urmează că orice funcţie booleană se poate reprezenta unic ca un polinom (eventual, de mai multe variabile) cu coeficienţi în I. Fie astfel o funcţie booleană f, despre care ştim deja că se poate scrie ca o sumă (booleană) de termeni. Putem acum folosi egalităţile (se pot demonstra uşor, folosind tabelele de adevăr): x = x ⊕1 şi x + y = x ⋅ y = (x⊕1) • (y ⊕1) ⊕1 = x • y ⊕ x ⊕ y, precum şi proprietăţile inelelor, pentru a observa că FND a lui f devine o sumă modulo 2 de termeni care sunt produse de variabile distincte. Numărul acestor produse este 2n, deci numărul polinoamelor modulo 2 este n 2 2 (exceptând comutativitatea), acelaşi ca şi numărul funcţiilor booleene n-are (de unde urmează unicitatea). Spunem că o funcţie f ∈ FB(n) este liniară dacă reprezentarea sa unică sub formă de polinom modulo 2 are aspectul: c0 ⊕ c1 • x1 ⊕ c2 • x2 ⊕ ... ⊕ cn • xn, ci ∈ B, i ∈ [n]. Definiţia 1.5. O mulţime de funcţii booleene este completă dacă închiderea sa coincide cu FB. O mulţime completă se numeşte bază dacă este maximală (adică nici o submulţime proprie a sa nu mai este completă). ■ Este de dorit să se găsească o cale de mijloc, prin care să se păstreze într-adevăr cât mai puţine funcţii într-o bază, dar acestea să fie şi uşor de manipulat, măcar în anumite contexte precizate. Acceptăm fără demonstraţie (Teorema 1.7 a fost practic demonstrată anterior), următoarele rezultate. Teorema 1.6 (E. L. Post). O mulţime de funcţii booleene este completă dacă şi numai dacă nu este inclusă în nici una dintre mulţimile T0, T1, Aut, Mon, Lin. ■ Teorema 1.7. Orice bază conţine cel mult patru funcţii şi există baze compuse din una, două, trei şi patru funcţii. ■

17

REZUMARE ŞI ADDENDA
Teoria funcţiilor booleene constituie suportul pentru semantica logicii clasice. Înţelegerea problematicii modulelor următoare va fi astfel uşurată, anumite paragrafe (cum ar fi cel privind formele normale) fiind simple transpuneri într-un alt limbaj ale unor concepte şi rezultate deja întâlnite. Principalele teme abordate au fost: • Reprezentarea funcţiilor booleene. Funcţii booleene particulare importante. • Proprietăţile globale ale clasei funcţiilor booleene. Principiul dualităţii. Algebre booleene. • Forme normale pentru funcţiile booleene. Forme minimale. • Mulţimi închise şi (pre)complete de funcţii booleene. Baze. Deşi ne-am bazat în principal pe cunoştinţele de matematică de liceu, am fost nevoiţi să abordăm – într-un mod intuitiv, pentru coerenţa materialului – subiecte colaterale cum ar fi cele privind algoritmii (imperativi), mulţimile definite structural (constructiv), principiul inducţiei structurale. Apropo de cele punctate, folosirea nediscreţionară, în acest moment, de către cititor a unor termeni introduşi doar informal (cum sunt – până acum - axiomă, teoremă, raţionament, demonstraţie, etc.) poate fi dăunătoare, mărind confuziile care se fac în mod uzual între sintaxă şi semantică sau între limbaj şi metalimbaj. Sperăm ca următoarele două module să aducă clarificările necesare. Să furnizăm şi indexul principalelor cuvinte noi utilizate în acest modul: definiţia structurală (constructivă) a unei mulţimi, algoritm (imperativ), funcţie calculată de un algoritm, problemă rezolvată de un algoritm, terminarea algoritmilor – semialgoritm, pseudocod, principiul inducţiei structurale, funcţiibooleene, tabele de adevăr, algebre booleene, afirmaţii şi obiecte duale,principiul dualităţii, termen, maxtermen, formă normală disjunctivă(perfectă), factor, maxfactor, n formă normală conjunctivă (perfectă), formă normală disjunctivă (conjunctivă) minimală, funcţii booleene elementare, mulţime închisă de funcţii booleene, mulţime completă de funcţii booleene, bază de funcţii.

VERIFICARE (TESTARE)
1. Completaţi demonstraţia Teoremei 1.1, adică arătaţi validitatea legilor 1), 2), 3), 5), 1’) – 5’) şi x + ( x ) = 1, utilizând tabelele de adevăr. 2. Arătaţi că V = < 2V, ∩, U, CV> este o algebră booleană, oricare ar fi mulţimea (nevidă) V. În plus, demonstraţi că 0 = Ø şi 1 =V. 3. Arătaţi adevărul afirmaţiilor rămase nedemonstrate din Tabelul 1.1. n 4. Justificaţi egalitatea card(FBn) = 2 2 . 5. Fie mulţimea termenilor n-ari t, construiţi peste mulţimea variabilelor booleene distincte (ordonate) X = {x1, x2, ... , xn}, precum şi mulţimea n-uplelor peste {0, 1, 2}. Arătaţi că există o funcţie bijectivă g, care „identifică” aceste mulţimi, dată prin g(t) = <e1, e2, ... , en>, unde, pentru fiecare i ∈ [n], avem ei = 0 dacă xi apare barată în t, ei = 1 dacă xi apare (nebarată) în t şi ei = 2 în rest (adică xi nu apare în t). De asemenea, arătaţi că se poate stabili o corespondenţă bijectivă între mulţimea n-uplelor peste {0, 1, 2} şi mulţimea de funcţii {f | f : [n] → {0, 1, 2}}. Deduceţi că mulţimea termenilor n-ari consideraţi va avea 3n elemente şi că vor exista 2n maxtermeni n-ari distincţi.

18

MODULUL 2 – Logica propoziţională (Calculul propoziţional)
INTRODUCERE
După cum am amintit în Descrierea manualului, manualele de Logică şi Algebră ([DID]) pot fi privite ca o introducere în logica formală. Şi în restul manualelor de matematică (şi nu numai), se folosesc frecvent noţiunile de afirmaţie, axiomă, teoremă, raţionament, demonstraţie, etc. Aceste noţiuni sunt însă descrise la modul informal: o afirmaţie este orice propoziţie (frază) care poate căpăta o unică valoare de adevăr (a – adevărat, f – fals); o axiomă este o afirmaţie care se acceptă a fi adevărată fără a se cere o demonstraţie a ei; o teoremă este o afirmaţie (presupusă a fi adevărată) care se obţine (din axiome sau teoreme deja acceptate) printr-o demonstraţie (formală); o demonstraţie (formală) este transpunerea într-o formă exactă a unui raţionament; un raţionament este o succesiune (finită) de aplicări ale unor inferenţe (reguli de deducţie); o regulă de deducţie (inferenţă) are forma premize şi concluzii (atât premizele cât şi concluziile sunt afirmaţii, ideea fiind aceea că regulile sunt astfel construite încât dacă premizele sunt adevărate atunci şi concluziile sunt adevărate; se spune că inferenţele trebuie să fie valide sau corecte), etc. De altfel, acesta este modul principal prin care se obţin (constructiv) în ştiinţele exacte noţiuni noi (utilizând definiţiile) şi afirmaţii (adevărate) noi (utilizând raţionamentele). Din punctul de vedere al logicii filozofice, o noţiune este complet caracterizată de conţinut (element din structura noţiunii alcătuit din mulţimea proprietăţilor obiectelor care formează sfera noţiunii) sau sferă (element din structura noţiunii alcătuit din mulţimea obiectelor ale căror proprietăţi formează conţinutul noţiunii). O definiţie ar avea astfel rolul de a delimita precis sfera (conţinutul) noţiunii. Definirea unei noţiuni noi înseamnă delimitarea unei noi sfere, ceea ce se poate face – există şi alte tipuri generale de definiţii, asupra cărora nu insistăm - precizând o sferă veche (care caracterizează complet o noţiune anterior definită şi numită gen proxim) şi o mulţime de proprietăţi suplimentare (care nu fac parte din conţinutul vechii noţiuni, dar care – împreună cu acesta – vor alcătui noul conţinut), numită diferenţă specifică: un paralelogram este un patrulater convex care are două laturi paralele şi egale; un romb este un paralelogram cu toate laturile egale; un pătrat este un romb având un unghi de 90○, ş. a. m. d. În acest mod, „mergând invers”, procesul de definire a unor noţiuni ar deveni infinit dacă nu am accepta existenţa unor noţiuni primare (pentru o mai bună înţelegere se poate recurge şi la reprezentări grafice cum ar fi diagramele Venn-Euler – [MAN]). Acestea nu mai sunt definite prin schema „gen proxim şi diferenţă specifică” ci sunt doar descrise cu ajutorul unor elemente considerate a fi suficiente pentru delimitarea exactă a sferei de sfera altor noţiuni (sunt aşa-numitele definiţii operaţionale): o mulţime este o colecţie de obiecte distincte două câte două; un punct este ceea ce se obţine prin apăsarea unui vârf de creion pe o foaie de hârtie, etc. Un proces similar are loc şi în cazul conceptelor de axiomă (în „rolul” noţiunilor primare), teoremă (în „rolul” noţiunilor noi), regulă de inferenţă (în „rolul” diferenţei specifice), acceptarea axiomelor având scopul de a evita raţionamentele infinite. Aşa cum în momentul definirii unei noţiuni (noi) trebuie să fim atenţi ca sfera acesteia să fie nevidă şi (în general) distinctă de

19 sferele unor noţiuni deja existente (acceptate ca atare), în cazul raţionamentelor este de dorit ca axiomele să reprezinte cu certitudine afirmaţii adevărate şi inferenţele să fie valide.

DEZVOLTARE
LECŢIA 1
Ambiguităţile permise de limbajul natural, acceptarea utilizării noţiunilor primare „nerealiste” şi a axiomelor de acelaşi tip în raţionamente complexe, tratarea simultană a problematicii de natură sintactică şi semantică, a creat numeroase confuzii şi interpretări greşite, mai mult sau mai puţin supărătoare. Enumerăm în continuare câteva dintre ele. • Paradoxurile logice. Sunt suficient de bine cunoscute. Paradoxurile se „rezolvă” odată cu introducerea unui cadru formal (de exemplu – teoria axiomatică a mulţimilor şi folosirea noţiunii de clasă, sau definind exact ce înseamnă un raţionament). • Silogismele. Inferenţele – ca paşi elementari (indivizibili) ai unui raţionament – sunt formele logice cele mai complexe. Fără a insista pe împărţirea lor în deductive şi inductive, deşi cele mai simple inferenţe sunt cele imediate, cu propoziţii categorice (o premiză, o concluzie), cele mai folosite sunt silogismele ([MAN]. Silogismul este tipul fundamental de inferenţă deductivă mediată alcătuită din exact trei propoziţii categorice: două premize, dintre care una majoră şi alta minoră, precum şi o concluzie. Ca exemplu: Premiza majoră: Toate elementele transuranice sunt radioactive Premiza minoră: Plutoniul este element transuranic, de unde putem trage Concluzia: Plutoniul este radioactiv. Pentru a folosi însă doar silogisme valide, este necesar un studiu detaliat, aprofundat, formal, al acestora. În caz contrar, putem ajunge din nou – ca şi în cazul paradoxurilor - să acceptăm nişte aberaţii drept propoziţii adevărate şi aceasta ca urmare a aplicării unui silogism presupus valid, în cazul unui raţionament cum ar fi:
Albă este adjectiv Albă este adjectiv ___________________ Zăpada este adjectiv

Greşeala în silogismul anterior constă în aceea că o „lege a silogismelor” stipulează că într-un silogism valid există trei şi numai trei termeni distincţi. Din păcate, un acelaşi cuvânt (sau grup de cuvinte) poate materializa mai mult decât o singură noţiune. Astfel, deşi în exemplul nostru s-ar părea că avem într-adevăr trei termeni (albă, adjectiv, zăpada), în realitate avem patru: în premiza majoră cuvântul alb materializează un element al limbajului (o parte de vorbire), iar în premiza minoră el redă o însuşire (care, printre alte obiecte, este caracteristică şi zăpezii). Ambiguităţile vor

20 dispare dacă legile de genul amintit vor fi „prinse” în forma sintactică exactă (formală) a silogismului. • Inferenţele deductive cu propoziţii compuse şi folosirea necorespunzătoare a implicaţiei logice. Mai întâi, să observăm că putem considera că am definit structural întreaga (sau măcar o parte importantă a sa) mulţime de afirmaţii pe care le manipulăm în limbaj natural, dar în modul sugerat de logica clasică: pornim de la anumite afirmaţii (Baza - propoziţii elementare) şi apoi (Pas constructiv) formăm propoziţii noi (fraze, propoziţii compuse) din propoziţii vechi cu ajutorul unor operatori (conectori), cum ar fi sau, şi, negaţia, implicaţia (dacă ... atunci ...), echivalenţa (dacă ... atunci ... şi reciproc). Dacă notăm cu A şi B două propoziţii oarecare (elementare, sau deja compuse), există atunci propoziţiile compuse C = A sau B (simbolic – A ∨ B); D = A şi B (A ∧ B); E = non A (A); F = dacă A atunci B (A → B; A se numeşte ipoteză sau antecedent iar B – concluzie sau consecvent) şi G = dacă A atunci B şi reciproc (sau, A dacă şi numai dacă B, sau A atunci şi numai atunci când B; simbolic – A ↔ B). Cum A şi B pot fi doar a - adevărată sau f – falsă (nu simultan, ci exclusiv), la fel se va întâmpla şi cu propoziţiile compuse. Astfel, C va fi a atunci şi numai atunci când măcar una dintre A şi B este a; D va fi a atunci şi numai atunci când atât A cât şi B sunt a; E va fi a atunci şi numai atunci când A va fi f; F va fi f atunci şi numai atunci când A este a şi B este f: în sfârşit, G va fi a atunci şi numai atunci când A şi B sunt simultan a sau simultan f. În consecinţă, o implicaţie va fi adevărată dacă ipoteza este falsă. Acum ne putem referi în mod explicit şi la inferenţe cu propoziţii compuse, dintre care cele conţinând implicaţia sunt des utilizate. Cele mai simple sunt inferenţele care conţin două premize şi o concluzie, dintre ele distingându-se cele ipotetico-categorice (prima premiză este o implicaţie iar cea de-a doua constă fie din antecedentul sau din negaţia antecedentului, fie din consecventul sau negaţia consecventului implicaţiei respective – [MAN]). Schemele valide care se folosesc în raţionamente sunt: A→B A modus ponendo-ponens (pe scurt, modus ponens) B
A→B B modus tollendo-tollens (pe scurt, modus tollens) A Validitatea schemelor modus ponens (modul afirmativ) şi modus tollens (modul negativ) rezultă imediat din definiţia implicaţiei. Oprindu-ne la modus ponens, am putea spune că acesta poate fi reformulat în: din A deducem pe B dacă am demonstrat A → B (pe scurt, vom scrie A ⇒ B). Exerciţiul 2.1. O teoremă, în sensul matematicii de liceu, are ipoteze şi concluzii. Scrieţi simbolic forma generală a unei teoreme (directe), utilizând propoziţii elementare (variabile propoziţionale) şi conectori logici. Scrieţi apoi teorema reciprocă, contrara teoremei directe şi contrara reciprocei. Există vreo legătură între acestea, în ceea ce priveşte valoarea lor de adevăr? Daţi un exemplu de teoremă de caracterizare ( ... dacă

21

şi numai dacă ... ). Puteţi specifica altfel rezultatul exprimat de teoremă, astfel încât să fie – separat - puse în evidenţă condiţia necesară şi condiţia suficientă? Exerciţiul 2.2. Să considerăm definiţia limitei unui şir dat de numere reale, având ca valoare un număr real dat, definiţie exprimată cu ajutorul vecinătăţilor care sunt intervale simetrice faţă depunctul considerat. Să se exprime simbolic (în sensul matematicii de liceu, folosind şi cuantificatorii) această definiţie şi să se nege formula astfel găsită. Exerciţiul 2.3. Exprimaţi simbolic, ca o formulă – în sensul exerciţiilor anterioare – propoziţia Dacă mi-e sete, beau apă. Negaţi formula şi apoi rescrieţi rezultatul în limbaj natural. Dacă aţi fi negat direct propoziţia iniţială, aţi fi obţinut acelaşi lucru?

LECŢIA 2
Vom trece direct la prezentarea sintaxei formale a logicii propoziţionale (calculului propoziţional). Logica propoziţională va fi numele unei mulţimi de formule (propoziţionale) – notată LPA sau, prescurtat, LP – şi definită structural astfel: Definiţia 2. 1. Fie o mulţime numărabilă de variabile propoziţionale (formule elementare, formule atomice, atomi pozitivi), A = {A1, A2, … }. Fie, de asemenea, C = {, ∨, ∧} mulţimea conectorilor logici non (negaţia), sau (disjuncţia), respectiv şi (conjuncţia) şi P = { ( , ) } mulţimea parantezelor (rotunde). Formulele vor fi „cuvinte” (bine formate) peste alfabetul L = A U C U P. Baza (formulele elementare sunt formule): A ⊆ LP . Pas constructiv (formule noi din formule vechi): (i) Dacă F este formulă atunci ( F) este formulă . (ii) Dacă F1, F2 ∈ LP atunci ( F1 ∨ F2 ) ∈ LP. (iii) Dacă F1, F2 ∈ LP atunci ( F1 ∧ F2 ) ∈ LP. Nimic altceva nu este formulă. ■ (iv) Putem privi o formulă ca fiind reprezentată de un arbore binar (arborele ataşat lui F), în modul următor (procedăm structural, conform definiţiei lui LP). Definiţia 2.2. Baza: Fie F = A ∈ A. Atunci arborele ataşat lui F (arborele care reprezintă F), notat arb(F), este A .

Pas constructiv: (i) Fie F = ( F1) şi să presupunem că se cunoaşte arborele ataşat lui F1, Arb(F1). Atunci, arborele ataşat lui F va fi

()

Arb(F1)

22 (ii) (ii) Fie F = (F1 ∧ F2) şi să presupunem că se cunosc atât arborele ataşat lui F1 cât şi arborele ataşat lui F2 – Arb(F1), respectiv Arb(F2). Atunci arborele ataşat lui F va fi ()

Arb(F1)

Arb(F2)

(iii) Se procedează similar ca în cazul (ii). ■ Deşi au un rol pur sintactic, neschimbând cu nimic semantica formulelor în care apar, parantezele rotunde au fost – din anumite motive tehnice – privite mai sus ca un operator pre/post-fixat. Dacă introducem o ordine pe mulţimea succesorilor imediaţi ai fiecarui nod (implicit, pentru o formulă este valabilă ordinea de scriere a „literelor” în cuvântul respectiv, exceptând „)”, care are acelaşi „număr de ordine” cu „(” corespunzătoare), atunci se observă că fiecărei formule îi corespunde un arbore ataşat unic şi fiecărui arbore „ordonat” G (cu nodurile etichetate cu elemente din L) îi corespunde o unică formulă din LP (pentru care G este arborele ataşat). Putem defini într-un mod similar mulţimea subformulelor unei formule date. Metoda constructivă - ca şi până acum - ne va permite să facem acest lucru simultan, pentru toate formulele din LP. Dată F ∈ LP, mulţimea tuturor subformulelor sale va fi notată subf(F). Desigur că o altă definiţie (echivalentă) ar putea fi: F’ ∈ subf(F) dacă F’ este subcuvânt al lui F şi F’∈ LP. Definiţia 2.3. Baza: Fie F = A ∈ A. Atunci subf(F) = { A }. Pas constructiv: (i) Fie F = ( F1). Atunci subf(F) = subf(F1) U { ( F1) }. (ii) Fie F = (F1 ∧ F2). Atunci subf(F) = subf(F1) U subf(F2) U { (F1 ∧ F2) }. (iii) Analog cu (ii) pentru cazul F = ( F1 ∨ F2 ) (se înlocuieşte, peste tot, simultan, ∧ cu ∨). ■ Observaţie. Nu se admit alte posibilităţi pentru scrierea unei formule, decât cele fixate prin Definiţia 2.1. Există de altfel un algoritm care rezolvă problema: Dat orice cuvânt w∈ L* (o secvenţă finită de caractere din L) să se decidă dacă w ∈ LP. Conform, de exemplu, [TIP], notaţia L* se explică prin aceea că mulţimea cuvintelor peste un alfabet cel mult numărabil formează un monoid faţă de operaţia de concatenare (adică de juxtapunere a literelor/cuvintelor), elementul neutru – cuvântul fără nici o literă - fiind notat e. Algoritmul menţionat se termină pentru fiecare intrare w∈ L* cu răspunsul (ieşirea) „DA” dacă w ∈ LP şi „NU” dacă w ∉ LP. O problemă de tipul anterior se numeşte problemă de decizie şi reprezintă un caz particular al unei probleme de

23

apartenenţă pentru un limbaj de tip 2 ([JUC]). Revenind, A1 ∨ A2 de exemplu, nu este formulă pentru că nu are parantezele necesare. Dar, la fel ca şi în cazul cunoscut al expresiilor aritmetice care conţin variabile, constante şi operatorii „–” (având şi sensul de opus), „+”, „•” şi „/”, putem accepta convenţia de a prescurta scrierea unor expresii (formule) prin eliminarea unor paranteze (sau chiar pe toate). Acest lucru se poate face prin atribuirea de priorităţi operatorilor, bazându-ne pe faptul că aritatea lor (numărul de argumente) este cunoscută, precum şi pe unele proprietăţi de comutativitate, asociativitate, distributivitate. Tot ca o convenţie nesurprinzătoare este şi aceea de a folosi şi alte nume pentru formulele atomice, înafara celor admise prin faptul că sunt elemente desemnate a face parte din A. În general vom utiliza pentru aceasta litere mari de la începutul alfabetului latin (A, B, C, ...). Putem şi adăuga cupluri de paranteze corespondente, la fel cum le-am şi eliminat, pentru îmbunătăţirea receptării corecte a sintaxei formulelor. ■ Exerciţiul 2.4. Fie formula F = (( A) ∨ (B ∧ C)). Construiţi arborele ataşat (verificând în acest mod şi faptul că într-adevăr F ∈ LP). Eliminaţi parantezele şi stabiliţi o prioritate a operatorilor care intervin, astfel încât semnificaţia intuitivă a noii secvenţe de caractere să nu difere de semnificaţia iniţială (pentru a forma pe F, se consideră întâi afirmaţiile elementare A, B, C; se consideră apoi negaţia lui A, notată, să spunem, A’ şi conjuncţia lui B cu C, notată D; în sfârşit, se consideră disjuncţia lui A’ cu D). Vom mai face câteva prescurtări sintactice, justificate de considerente semantice: • ((  F) ∨ G) se va nota cu (F → G). • (((  F) ∨ G) ∧ ((  G) ∨ F)) cu (F ↔ G) sau cu ((F → G) ∧ (G → F)).
• •


i=

n

Simbolurile → şi ↔ se numesc implicaţie, respectiv echivalenţă şi vor fi considerate ca şi cum ar fi fost introduse de la bun început în mulţimea de conectori C (dacă am fi procedat astfel, s-ar fi complicat atât unele lucruri de natură sintactică – nu mai departe decât definiţiile constructive, cât şi definiţia semanticii LP). De asemenea, vom numi literal o variabilă propoziţională sau negaţia sa. A ∈ A se va numi literal pozitiv iar orice element  A ∈ A va fi un literal negativ (desigur, A = {  A1,  A2 , …… }). Mai general, dacă L este un literal, complementarul său, L , va nota literalul  L’, dacă L = L’ şi pe L’ dacă L =  L’. Sperăm ca această notaţie sintactică să nu fie confundată cu operaţia semantică ¯, prezentă în definiţia algebrelor booleene, deoarece rezultatele privind sintaxa sunt – în general – separate de cele privind semantica(a se vedea Teorema de 2.1). Se numeşte clauză o disjuncţie (finită) de literali. Se numeşte clauză Horn o clauză care are cel mult un literal pozitiv. O clauză pozitivă este o clauză care conţine doar literali pozitivi, iar o clauză negativă va conţine doar literali negativi. O clauză Horn pozitivă va conţine exact un literal pozitiv (dar, posibil, şi literali negativi).

∨1

i=1 n

Fi = F1 ∧ F2 ∧ ... ∧ Fn. Fi = F1 ∨ F2 ∨ ... ∨ Fn .

24

LECŢIA 3
Semantica (înţelesul) unei formule propoziţionale este – conform principiilor logicii aristotelice – o valoare de adevăr (a sau f), obţinută în mod determinist, care nu se schimbă cu contextul, etc. Notând de la început pe a cu 1 şi pe f cu 0, astfel încât să putem lucra cu algebra booleană B = < B, •, +, ¯ >, noţiunea principală este cea de asignare (interpretare, structură). Definiţia 2.4. Orice funcţie S, S : A → B se numeşte asignare. ■ Teorema 2.1 (de extensie). : Pentru fiecare asignare S există o unică extensie a acesteia, S’ : LP → B (numită şi structură sau interpretare), care satisface: (i) S’(A) = S(A), pentru fiecare A ∈ A. (ii) S’(( F)) = S ′( F ) , pentru fiecare F ∈ LP. (iii) S’((F1 ∧ F2) ) = S’(F1) • S’(F2), pentru fiecare F1, F2 ∈ LP. (iv) S’((F1 ∨ F2) ) = S’(F1) + S’(F2), pentru fiecare F1, F2 ∈ LP. Demonstraţie. Fie S : A → B. Definim atunci următoarea funcţie S’ : LP → B, structural, conform definiţiei lui LP. Baza: S’(A) = S(A), pentru fiecare A ∈ A. Pas constructiv: Dacă F = ( F1), atunci S’(F) = S ′( F ) . Dacă F = (F1 ∧ F2), atunci S’(F) = S(F1) • S’(F2). Dacă F = (F1 ∨ F2), atunci S’(F) = S’(F1) + S’(F2). Este evident că S’ este o extensie a lui S, proprietatea i) fiind satisfăcută prin Baza de mai sus. De asemenea, definiţiile 1. – 3. din Pasul constructiv asigură satisfacerea punctelor (ii) – (iv) din teoremă, deoarece orice formulă din LP – dacă nu este elementară - are una dintre cele trei forme considerate. Mai rămâne să arătăm că S’ este funcţie totală (ataşează fiecărui element din domeniu un element şi numai unul din codomeniu) şi că este unica funcţie care satisface (i) – (iv). Acest lucru se face printr-o inducţie structurală simplă, trebuind să arătăm că pentru fiecare F ∈ LP, este adevărat P(F), unde P(F) este: oricare ar fi asignarea S, valoarea S’(F) există (ca element al lui B) şi este unică (aici unicitatea are un dublu sens - S’ este funcţie, dar oricare altă funcţie S’’ care ar satisface (i) – (iv), satisface şi S’(F)= S’’(F)). Baza: F = A ∈ A. Fie orice asignare S. Cum S este funcţie (totală) prin definiţie şi avem S’(A) = S(A), tot prin definiţie (S’ este extensia lui S), este imediat faptul că S’(A) există şi este unică în sensul precizat (orice alt – posibil – S’’ trebuie să fie tot extensie a lui S). Pas inductiv: Vom arăta doar cazul F = ( F1), celelalte două (F = (F1 ∧ F2) şi F = (F1 ∨ F2) ) fiind similare. Presupunem prin urmare P(F1) ca fiind adevărat şi demonstrăm că P(F) este adevărat. Fie orice asignare S. Faptul că S’(F) există (ca element al lui B) şi este unică (în sensul precizat), rezultă din nou imediat, din ipoteza inductivă (S’(F1) există şi este unică), din definiţia negaţiei în B (ştim că S’(F) = S ′( F ) ) şi a faptului că orice alt S’’ trebuie să satisfacă punctul (ii) din teoremă. ■ De acum înainte nu vom face nici o diferenţă între asignare şi structură (intrerpretare). Se observă că dată orice formulă F ∈ LP şi orice structură S, este

25

suficient să cunoaştem valorile lui S în variabilele propoziţionale care apar în F (pentru fiecare F ∈ LP, vom nota cu prop(F) mulţimea atomilor care apar în F, sau peste care este construită F). Vom numi asignare (structură) completă pentru F, orice funcţie parţială S care este definită măcar pe prop(F) ⊆ A şi cu valori în B. Putem conchide chiar că în LP valoarea de adevăr a unei formule se deduce în mod unic din valoarea de adevăr a subformulelor (se mai spune că logica propoziţională are proprietatea de extensionalitate). Exerciţiul 2.5. Definiţi structural prop(F), pentru fiecare F ∈ LP. Fără alte precizări, vom lucra doar cu structuri complete pentru mulţimile de formule care ne interesează la un moment dat (în demonstraţiile formale vom evita însă uneori folosirea explicită a funcţiilor parţiale, din motive tehnice). Definiţia 2.5. O formulă F ∈ LP se numeşte satisfiabilă dacă există măcar o structură S (completă) pentru care formula este adevărată (S(F) = 1). Se mai spune în acest caz că S este model pentru F (simbolic, se mai scrie S |= F). O formulă este validă (tautologie) dacă orice structură este model pentru ea. O formulă este nesatisfiabilă (contradicţie) dacă este falsă în orice structură (S(F) = 0, pentru fiecare S, sau S |≠ F, pentru fiecare S). ■ Teorema 2.2. O formulă F ∈ LP este validă dacă şi numai dacă ( F) este contradicţie. Demonstraţie. F ∈ LP este validă dacă şi numai dacă pentru fiecare structură S avem S(F) = 1, adică ( ii), Teorema 2.1) dacă şi numai dacă S(( F) ) = 1 = 0 (definiţia negaţiei) pentru fiecare S. Ultima relaţie înseamnă exact faptul că ( F) este contradicţie. ■ Clasa tuturor formulelor propoziţionale LP, este astfel partiţionată (mulţimile indicate mai jos sunt într-adevăr nevide şi disjuncte) în: | Tautologii Formule sat|isfiabile dar nevalide Contradicţii F ( F) F |( F)

|
Tabelul 2.1

În tabelul anterior linia punctată poate fi considerată drept o oglindă în care se reflectă adevărul. Definiţia 2.6. Două formule F1, F2 ∈ LP se numesc tare echivalente dacă pentru fiecare asignare S ele au aceeaşi valoare de adevăr, adică S(F1) = S(F2) (simbolic, vom scrie F1 ≡ F2). F1 şi F2 se numesc slab echivalente dacă F1 satisfiabilă implică F2 satisfiabilă şi reciproc (vom scrie F1 ≡s F2, ceea ce înseamnă că dacă există S1 astfel încât S1(F1) = 1, atunci există S2 astfel încât S2 (F2) = 1 şi reciproc). O formulă F ∈ LP este consecinţă semantică dintr-o mulţime de formule G ⊆ LP, dacă pentru fiecare structură corectă S (aceasta înseamnă aici faptul că S este definită pentru toate variabilele propoziţionale care apar fie în F fie în elementele lui G), dacă S satisface G (adică avem S(G) = 1 pentru fiecare G ∈ G) atunci S satisface F (simbolic, vom scrie G |= F). ■ Teorema 2.3. Fie G ∈ LP şi G = { G1, G2, …, Gn } ⊆ LP. Următoarele afirmaţii sunt echivalente:

26 (i) G este consecinţă semantică din G. (ii) ( (iii) (


n

i =1 n
i =1

Gi ) → G este tautologie. Gi ) ∧  G este contradicţie.

Demonstraţie. (i) implică (ii). Presupunem prin reducere la absurd (RA, pe scurt) că F = (∧ Gi) → G nu este tautologie, deşi G este consecinţă semantică din G. Rezultă că există o structură S pentru care F este falsă, adică S(∧ Gi) = 1 şi S(G) = 0. Prin urmare, pentru fiecare i ∈ [n] avem S(Gi) = 1 şi S(G) = 0. În concluzie, există o structură S astfel încât S(G) = 1 şi S(G) = 0. Acest lucru este absurd pentru că G este consecinţă semantică din G. (ii) implică (iii). Procedăm din nou prin reducere la absurd, adică presupunem că deşi (∧Gi) → G este tautologie, (∧Gi) ∧  G nu este contradicţie. Această înseamnă că F1 =  (∧ Gi) ∨ G este tautologie, dar F2 = (∧Gi) ∧  G este satisfiabilă. Prin urmare, există o structură S astfel încât S(F2) = 1 (şi – desigur – S(F1) = 1). Din S(F2) = 1 rezultă S(( ∧ Gi )) • S( G) = 1, adică S(( ∧ Gi )) = 1 şi S( G) = 1. În consecinţă, S( ( ∧ Gi )) = 0 şi S(G) = 0. Pentru că S(F1) = S( ( ∧ Gi )) + S(G), avem S(F1) = 0, ceea ce este absurd, F1 fiind tautologie. (iii) implică (i). Presupunem, RA, că F = (∧ Gi) ∧  G este contradicţie, dar G nu este consecinţă semantică din G. Atunci există o structură S care satisface toate elementele lui G dar nu satisface G. Prin urmare, avem S(( ∧ Gi )) = 1 şi S(G) = 0, adică S(( ∧ Gi )) = 1 şi S( G) = 1. Cum S((∧ Gi) ∧  G) = S(( ∧ Gi)) • S( G), rezultă că există S astfel încât S((∧ Gi) ∧  G) = 1, deci F nu este contradicţie (absurd). ■ Se observă din teorema anterioară că am renunţat la anumite paranteze, în cazul în care confuziile nu sunt posibile. Vom face şi pe viitor acest lucru, fără a-l mai menţiona explicit. Trebuie totuşi – pentru a fi riguroşi – să stipulăm în mod formal că eliminarea/adăugarea unor cupluri de paranteze corespondente („(” şi „)”), nu va influenţa semantica formulei în cauză: pentru fiecare S şi F, vom pune S(F) = S((F)). Teorema 2.4. Sunt adevărate următoarele echivalenţe tari (pentru fiecare F, G, H ∈ LP: (a) F ∧ F ≡ F şi (a’) F ∨ F ≡ F (idempotenţă). (b) F ∧ G ≡ G ∧ F şi (b’) F ∨ G = G∨ F (comutativitate). (c) ( F ∧ G ) ∧ H ≡ F ∧ ( G ∧ H ) şi (c’) (F ∨ G) ∨ H ≡ F ∨ (G ∨ H) (asociativitate). (d) F ∧ ( G ∨ H ) ≡ (F ∧ G) ∨ (F ∧ H) şi (d’) F ∨ ( G ∧ H ) ≡ (F ∨ G) ∧ (F ∨ H) (distributivitate). (e) F ∧ ( F ∨ G ) ≡ F şi (e’) F ∨ ( F ∧ G ) ≡ F (absorbţie). (f)   F ≡ F (legea dublei negaţii). (g)  ( F ∧ G ) ≡  F ∨  G şi (g’)  ( F ∨ G ) ≡  F ∧  G (legile lui de Morgan). (h) F ∨ G ≡ F şi (h’) F ∧ G ≡ G (legile validităţii, adevărate dacă F este tautologie). (i) F ∧ G ≡ F şi (i’) F ∨ G ≡ G (legile contradicţiei, adevărate dacă F este o contradicţie). Demonstraţie. Vom arăta doar una dintre echivalenţe – şi anume (i), deoarece nu există complicaţii în raţionamentele standard care se utilizează. Fie F ∈ LP orice contradicţie şi

27 G ∈ LP. Fie orice structură S. Atunci S(F ∧ G) = S(F) • S(G) = 0, conform Tabelului 1.1 (punctul 9)) şi faptului că F este contradicţie. Aceeaşi valoare o are şi membrul drept din (i). ■ Se poate arăta – de exemplu, prin inducţie matematică – faptul că asociativitatea, distributivitatea şi legile lui de Morgan se extind pentru orice număr finit de formule. Teorema 2.5 (de substituţie). Fie H ∈ LP, oarecare. Fie orice F, G ∈ LP astfel încît F este o subformulă a lui H şi G este tare echivalentă cu F. Fie H’ formula obţinută din H prin înlocuirea (unei apariţii fixate a) lui F cu G. Atunci H ≡ H’. Demonstraţie. Pe scurt, teorema „spune” că înlocuind într-o formulă o subformulă cu o formulă echivalentă, obţinem o formulă echivalentă cu prima. Vom proceda din nou prin inducţie structurală, având de arătat teorema din metalimbaj (∀H ∈ LP) P(H), unde: P(H): (∀F, G, H’ ∈ LP)(((F ∈ subf(H)) şi (H’ se obţine din H înlocuind o apariţie fixată a lui F cu G) şi (F ≡ G)) ⇒ H ≡ H’). Baza: H = A ∈ A. Să arătăm că P(A) este adevărată. Fie F, G, H’ ∈ LP, astfel încât F ∈ subf(H), H’ se obţine din H înlocuind apariţia aleasă a lui F cu G, iar F ≡ G. Trebuie să arătăm că H ≡ H’. Dar, din F ∈ subf(H) şi subf(H) = {A}, rezultă că F = A ( = H). Prin urmare, H’ = G. Avem acum F = H, G = H’ şi F ≡ G, de unde urmează imediat că H ≡ H’. Pas inductiv: Avem de tratat separat situaţiile care urmează. H = ( H1). Presupunem că P(H1) este adevărată şi demonstrăm că P(H) este (i) adevărată. Fie F ∈ subf(H) = subf(H1) U {( H1)}. Dacă F = ( H1 ) ( = H), suntem într-o situaţie similară cu cea din Bază, deoarece raţionamentul se face din nou asupra întregii formule H. Fie deci o apariţie fixată a lui F ∈ subf(H1) ⊆ subf(H) şi considerăm orice G ∈ LP astfel încât G ≡ F. Înlocuind pe F cu G în H, înseamnă în acelaşi timp a înlocui pe F cu G în H1. Notând cu H’, respectiv H1’ formulele rezultate, putem aplica ipoteza inductivă (P(H1) este adevărată) şi obţinem că H1 ≡ H1’. Revenind, ştim că H = ( H1), H’ = ( H1’) şi H1 ≡ H1’. Rezultă imediat că H ≡ H’ . Nu insistăm, deoarece metoda a devenit clară. ■ Pentru a nu exista confuzii între limbajul de bază (LP) şi metalimbajul în care exprimăm afirmaţii despre elementele lui LP, în cele de mai sus (precum şi în continuare) am notat implicaţia cu ⇒ iar conjuncţia prin şi. Am păstrat notaţia clasică pentru cuantificatorul universal (∀), deoarece el nu apare în LP. Rezultatele obţinute în această lecţie, ne permit practic să tratăm formulele întrun mod similar cu funcţiile booleene, dacă ne interesează probleme de natură semantică. Astfel, vom nota cu 0 orice contradicţie şi cu 1 orice tautologie, vom accepta principiul dualităţii (rolul lui • şi + luându-l ∧ respectiv ∨, după cum se poate deduce chiar din Teorema 2.4), vom folosi tabelele de adevăr pentru a găsi semantica (valoarea de adevăr a) unei formule într-o structură dată, etc.

LECŢIA 4
Vom începe cumva altfel faţă de modulul anterior, studiind simultan formele normale conjunctive şi formele normale disjunctive, într-un prim paragraf.

28
§ 1. FORME NORMALE Definiţia 2.7. O formulă F ∈ LP se află în formă normală conjunctivă (FNC, pe scurt) dacă este o conjuncţie de disjuncţii de literali, adică o conjuncţie de clauze. Simbolic:

F=

∧ (∨ L
i =1 j =1

m

ni

i, j

) ( putem nota C i = ∨ L i, j , i ∈ [1..m] ). j=1

ni

Similar, F ∈ LP este în formă normală disjunctivă (FND, pe scurt), dacă este o disjuncţie de conjuncţii de literali (procedăm dual pentru a obţine scrierea simbolică). ■ Desigur, în cele de mai sus Li,,j sunt formule atomice sau negaţiile lor. Teorema 2.6. Pentru fiecare formulă F ∈ LP există cel puţin două formule F1, F2 ∈ LP, F1 aflată în FNC şi F2 aflată în FND astfel încât F ≡ F1 şi F ≡ F2 (se mai spune că F1 şi F2 sunt o FNC, respectiv o FND, pentru F). ■ Teorema precedentă sugerează un algoritm recursiv pentru obţinerea simultană a unei FNC şi a unei FND, pentru orice formulă propoziţională. Conform cunoştinţelor despre algebra booleană B = < B, •, +, ¯ >, putem folosi – alternativ - atât tabelele de adevăr cât şi modalităţile de găsire a formelor normale conjunctive/disjunctive (perfecte) descrise în Modulul 1. Exemplu. Găsiţi o formulă F ∈ LP construită peste mulţimea de variabile propoziţionale {A, B, C} şi care să satisfacă condiţia: în tabelul de adevăr standard care o descrie, o schimbare şi numai una în secvenţa <S(A), S(B), S(C)> produce schimbarea valorii corespunzătoare de adevăr S(F). Dacă începem secvenţa S(F) cu 0, atunci F este descrisă de tabelul A B C F S(A) S(B) S(C) S(F) 0 0 0 0 0 0 1 1 * 0 1 0 1 * 0 1 1 0 1 0 0 0 1 0 1 1 * 1 1 0 1 * 1 1 1 0 Se poate construi apoi - direct din tabel - măcar o formulă (chiar două) care îi corespunde semantic, formulă ce se află în FND (şi/sau FNC). De fapt vom folosi algoritmul de construcţie a FNDP pentru o funcţie booleană, care, să-l reamintim, poate fi exprimat în cuvinte astfel: se fixează liniile cu 1 în ultima coloană (cele marcate cu * în tabel); pentru fiecare asemenea linie se construieşte o conjuncţie de literali (apar toţi, cu bară sau fără) - dacă valoarea unei variabile în tabel este 0 atunci variabila se trece în conjucţia respectivă negată, iar dacă valoarea ei este 1, atunci ea apare simplu; formula finală – în FND(P) – este disjuncţia tuturor acestor conjuncţii. Prin urmare, putem avea F = (  A ∧  B ∧ C ) ∨ (  A ∧ B ∧  C ) ∨ ( A ∧  B ∧ C ) ∨ ( A ∧ B ∧  C ). Puteţi găsi, analog, o FNC(P)? ■ Conform teoremei anterioare, precum şi datorită comutativităţii şi idempotenţei disjuncţiei, comutativităţii şi idempotenţei conjuncţiei (repetarea unui element – literal

29 sau clauză – este nefolositoare din punctul de vedere al (ne)satisfiabilităţii unei formule), este justificată scrierea cu mulţimi a formulelor aflate în FNC. Astfel, dacă F este în FNC (ca în Definiţia 2.7), vom mai scrie F = {C1, C2, ... , Cm} (nu uităm totuşi că virgula aici provine dintr-o conjuncţie), unde, pentru fiecare i ∈ [m], vom pune C i = {L i,1 , L i,2 ,..., L i,n i } . Mai mult, dacă avem F ∈ LP reprezentată ca mulţime (de clauze) sau ca mulţime de mulţimi (de literali) şi ne interesează doar studiul (ne)satisfiabilităţii ei, putem elimina clauzele C care conţin atât L cât şi L , deoarece L ∨ L ≡ 1, 1 ∨ C ≡ 1 şi deci aceste clauze sunt tautologii care nu au nici o semnificaţie pentru stabilirea valorii semantice a lui F (1 ∧ C ≡ C). § 2. SATISFIABILITATE. LP - cadrul formal propus (realitatea este modelată prin afirmaţii, afirmaţiile sunt reprezentate ca formule), oferă ca principală metodă de a rezolva problemele testarea adevărului (satisfiabilităţii) unor formule. Din punctul de vedere al unui informatician, trebuie ca pentru clasa de formule admisă să existe un algoritm care, având la intrare orice F ∈ LP, se termină cu răspunsul „DA”, dacă F este satisfiabilă (validă, contradicţie) şi „NU” în rest. În această situaţie se spune că problema satisfiabilităţii (pe scurt – SAT) pentru LP este rezolvabilă (decidabilă). Mai mult, am vrea să găsim asemenea algoritmi pentru care complexitatea timp este „rezonabilă”. Teorema 2.7 (decidabilitatea SAT). Satisfiabilitatea (validitatea, nesatisfiabilitatea) formulelor calculului propoziţional este decidabilă în timp exponenţial. Demonstraţie. Practic, demonstraţia a fost deja făcută (chiar în mai multe moduri). Fie F ∈ LP cu prop(F) = {A1, A2 , ……, An} = An . Se formează, de exemplu în Pasul 1 al unui posibil algoritm (notat tot SAT) pentru testarea satisfiabilităţii (validităţii, nesatisfiabilităţii), tabela de adevăr corespunzătoare lui F (teorema de extensie, teorema de substituţie şi legătura dintre algebrele booleene LP şi B stau la baza corectitudinii acestei construcţii): …… S(A1) S(A2) S(An) S(F) 0 0 …… 0 v1 0 0 …… 1 v2 n …… …… …… …… …… 2 =m 1 1 …… 1 vm Dacă toţi (i ∈ [m]) vi sunt egali cu 0 atunci F este contradicţie, dacă toţi vi sunt 1 atunci F este tautologie, iar în rest F este satisfiabilă dar nevalidă. Pentru a depista acest lucru, trebuie parcurs, în Pasul 2 – în cazul cel mai defavorabil – întregul tabel, linie cu linie şi prin urmare trebuie efectuate 2n comparaţii, dacă F este construită peste n formule atomice. ■ Ca o observaţie, datorită Teoremei de extensie şi Teoremei de substituţie, putem construi o tabelă de adevăr pentru o formulă pornind nu de la variabile, ci chiar de la anumite subformule mai complicate (pentru care valorile posibile sunt tot 0 sau 1). Mai departe, fără a intra în detalii (pentru aceasta se pot consulta [KNU], [JUC], [LUC]), pentru a vorbi de algoritmi „buni” (care sunt corecţi adică „fac ceea ce au fost puşi să facă”), ei trebuie să fie şi „rapizi”, eficienţi, având complexitate mică. Două dintre măsurile (teoretice, globale) de complexitate sunt complexitatea timp şi complexitatea spaţiu. Intuitiv, timpul luat de execuţia unui algoritm Alg este dat de numărul de

30
instrucţiuni (paşi/operaţii elementare) efectuate, iar spaţiul – de numărul de locaţii (elementare) de memorie a calculatorului ocupate în cursul execuţiei. Formal, acestea se exprimă ca funcţii de la N la N, notate respectiv tAlg şi sAlg. Dacă tAlg(a) = b, înseamnă că Alg execută b paşi elementari (b poate fi dat şi printr-o expresie care conţine pe a) pentru o intrare de lungime a şi dacă sAlg(a) = b, înseamnă că Alg ocupă b locaţii elementare pentru o intrare de lungime a. După cum am mai precizat, lungimea unei intrări w (cuvânt peste un anumit alfabet). În cazul nostru, w = F ∈ LP ⊆ L* lungimea va fi card (prop(F)). Mai mult, expresia lui b poate fi expresia unei funcţii aritmetice standard (funcţie de gradul I, polinom oarecare, funcţie logaritmică sau exponenţială, etc.). În general, se spune că tAlg(n) este de ordinul lui f(n) (simbolic, tAlg(n) ∈ O(f(n))), dacă există două constante reale nenegative c1 şi c0 astfel încât tAlg(n) = c1• f(n) + c0 (pentru a rămâne în N, se lucrează de fapt cu partea întreagă inferioară a numerelor considerate). Sensul este acela că timpul de execuţie al lui Alg, pentru orice intrare de lungime n, este mărginit superior de valoarea funcţiei f în n, existând şi intrări pentru care egalitatea este efectiv atinsă. Concluzia evidentă, reformulată, a Teoremei 2.7 este că tSAT(n) ∈ O(2n). Se poate chiar arăta că nu există algoritmi mai performanţi, dar sensul acestui „nu există” este destul de dificil de explicat în acest context, fiind nevoie de cunoştinţe superioare de teoria complexităţii. În speranţa de a găsi totuşi algoritmi mai performanţi, măcar într-un sens restrâns, pentru rezolvarea SAT, ideea este fie de a căuta metode sintactice pentru testarea satisfiabilităţii, fie – ceva mai realist - clase particulare de formule, suficient de largi pentru a exprima totuşi convenabil părţi importante ale realităţii. § 3. SATISFIABILITATEA FORMULELOR HORN. Reamintim că o clauză Horn este o disjuncţie de literali care conţine cel mult un literal pozitiv. Definiţia 2.8. O formulă Horn este o formulă aflată în FNC, clauzele componente fiind toate clauze Horn. ■ Uneori, vom numi tot formulă Horn şi o formulă despre care ştim că este (tare) echivalentă cu o formulă de forma considerată în Definiţia 2.8. Se poate arăta ([MAS]) că există formule propoziţionale care nu sunt tare echivalente cu nici o formulă Horn, apariţia a doi literali pozitivi într-o clauză fiind un indiciu. Formele posibile pentru o formulă Horn sunt (toate variabilele care apar sunt desigur literali pozitivi): (i) C =  A1 ∨  A2 ∨ …… ∨  Ak, k ≥ 1, k ∈ N şi (ii) C =  A1 ∨  A2 ∨ …… ∨  Ak ∨ B, k ∈ N. Observaţie. Clauzele Horn pot fi reprezentate sub aşa-numita formă implicaţională. Distingem cazurile: • C = A ∈ A (nici un literal negativ, un literal pozitiv). Atunci vom mai scrie C = 1 → A, ceea ce se justifică prin aceea că 1 → A =  1 ∨ A ≡ 0 ∨ A ≡ A. • C =  A1 ∨  A2 ∨ …… ∨  Ak (nici un literal pozitiv, măcar un literal negativ). Vom scrie C = A1 ∧ A2 ∧ A3 …… ∧ Ak → 0 (folosim din nou definiţia implicaţiei şi faptul că 0 ∨ A ≡ A). • C =  A1 ∨  A2 ∨ …… ∨  Ak ∨ B (exact un literal pozitiv, măcar un literal negativ). Atunci C = A1 ∧ A2 ∧ A3 …… ∧ Ak → B, direct din definiţia implicaţiei. • C = (nici un literal negativ, nici un literal pozitiv). Din motive tehnice vom folosi şi această clauză vidă (în reprezentarea clauzelor cu mulţimi vom folosi

31 pentru chiar Ø). Prin convenţie, este o clauză de orice tip (inclusiv o clauză Horn), dar nesatisfiabilă. ■ Teorema 2.8. Satisfiabilitatea formulelor Horn este decidabilă în timp liniar. Demonstraţie. Să considerăm următorul algoritm. Algoritm Horn Intrare: Orice formulă Horn, F, reprezentată ca mulţime de clauze, clauzele componente fiind clauze Horn diferite de clauza vidă şi scrise sub formă implicaţională . Ieşire: „DA”, în cazul în care formula F este satisfiabilă (furnizându-se şi o asignare S care este model pentru F) şi „NU” în caz contrar (F nu este satisfiabilă). Metodă (de marcare): Pasul 1. i := 0. Pasul 2. Cât_timp ((există în F o clauză C de forma A1 ∧ A2 ∧ A3 …… ∧ Ak → B, cu A1, A2, A3, ... , Ak marcaţi şi B nemarcat sau de forma A1 ∧ A2 ∧ A3 …… ∧ Ak → 0, cu A1, A2, A3, ... , Ak marcaţi) şi (i = 0)) execută Pasul 3. Alege un asemenea C ca mai sus. Pasul 4. Dacă ( C = A1 ∧ A2 ∧ A3 …… ∧ Ak → B ) atunci Pasul 5. Marchează toate apariţiile lui B în F. altfel Pasul 6. i := 1. Sf_Dacă Sf_Cât_timp Pasul 7. Dacă ( i = 0 ) atunci Pasul 8. „DA”. Pasul 9. S, S(A) = 1 dacă şi numai dacă A apare în F şi este marcată. altfel Pasul 10. „NU”. Sf_Dacă.
Algoritmul se termină pentru fiecare intrare. Mai întâi, să precizăm că acţiunea de marcare o privim în sens grafic normal, marcajul care poate fi ataşat unei variabile proziţionale alegându-se fără criterii speciale (să presupunem că el este *, împreună eventual cu anumiţi indici prin care să se identifice în care execuţie a corpului buclei s-a făcut marcarea). Iniţial, toate variabilele se presupun a fi nemarcate. Dacă F conţine clauze de forma 1 → B (care se consideră a fi de forma A1 ∧ A2 ∧ A3 …… ∧ Ak → B, cu A1, A2, A3, ... , Ak marcaţi şi B nemarcat), se procedează conform algoritmului, adică se marchează toate apariţiile lui B în F şi se trece la pasul următor. Mai departe, la fiecare execuţie a corpului buclei, fie se marchează o variabilă propoziţională nouă, fie se iese din execuţia buclei. Pentru că numărul de variabile peste care este construită formula F este finit, terminarea algoritmului este evidentă. Dacă nu există deloc clauze de tipul 1 → B, algoritmul se termină fără nici o execuţie a corpului buclei, cu răspunsul „DA” (formula este satisfiabilă) şi cu asignarea S, S(A) = 0 pentru fiecare A (care apare în F).

32
Algoritmul este corect. Aceasta înseamnă că ieşirea algoritmului satisface ceea ce am dorit, adică răspunsul „DA”/S corespunde faptului că formula F furnizată la intrare este satisfiabilă (şi S |= F) iar răspunsul „NU” corespunde faptului că F este nesatisfiabilă. Putem distinge următoarele cazuri: Cazul a). La terminarea execuţiei se obţine „DA”, dar F nu conţine clauze C de tipul 1 → B. După cum am observat, acest lucru înseamnă că bucla s-a terminat fără să i se execute vreodată corpul şi avem i = 0 şi S(A) = 0 pentru fiecare A (care apare în F). Atunci există în F (la finalul execuţiei) doar clauze de tipul C1 = A1 ∧ A2 ∧ A3 … ∧ Ak → B, sau C2 = A1 ∧ A2 ∧ A3 …… ∧ Ak → 0 (k ≥ 1) , care n-au nici o variabilă marcată. Avem atunci, pe scurt, S(C1) = S(0 • 0 • ... • 0 → 0) = 1, respectiv S(C2) = 1, de unde găsim S(F) = 1. Cazul b). La terminare se obţine „DA” şi F conţine şi clauze C = 1 → B. Atunci bucla se termină după un anumit număr de execuţii ale corpului său, valoarea lui i este 0 şi F conţine în final clauze având marcate anumite variabile. Nu insistăm. Cazul c). Algoritmul se termină cu i = 1 şi răspunsul „NU”. Acest lucru înseamnă că există în F o clauză C = A1 ∧ A2 ∧ A3 …… ∧ Ak → 0 cu toţi Ai, i ∈ [k] marcaţi (obligatoriu, în F există şi clauze de forma 1 → B, B marcat), de unde rezultă că semantica lui C în asignarea furnizată de algoritm este de forma 1 → 0 şi prin urmare S(C) = 0, de unde S(F) = 0. Acest lucru nu înseamnă însă că F este nesatisfiabilă, pentru a trage această concluzie trebuind să arătăm că pentru nici o altă asignare, ea nu poate fi model pentru F. Să presupunem (RA) că există o asignare S’ astfel încât S’(F) = 1. Să observăm, pentru început, că toate variabilele care au fost marcate în algoritm (deci cele care au primit valoarea de adevăr 1 în S), trebuie să primească valoarea 1 în oricare S’ cu S’(F) = 1. Altfel spus, asignarea furnizată de algoritm conţine cel mai mic număr posibil de valori 1 (atribuite evident variabilelor marcate) astfel încît formula să aibă şanse să fie satisfiabilă. Într-adevăr, pentru fiecare S’ cu S’(F) = 1, trebuie să avem S’(C) = 1 pentru fiecare clauză C din F. Să ne ocupăm puţin de momentul în care se marchează o variabilă B, ordonând clauzele din F de forma C = A1 ∧ A2 ∧ A3 … ∧ Ak → B (k ≥ 1) după numărul de variabile din antecedent (chiar în algoritm, selecţia unei clauze „pentru marcare” se poate face după un asemenea criteriu): • Clauze C de tipul 1 → B ≡ B (nici o variabilă în antecedent, B nemarcat). De la acestea începe procesul de marcare. Din faptul că S’(C) trebuie să fie egal cu 1, este clar că trebuie pus S’(B) = 1 (B se şi marchează, deci S(B) = 1). • Clauze C de forma A → B ≡  A ∨ B (o variabilă în antecedent; A este marcat, B nemarcat). A nu putea fi marcat decât dacă a apărut deja ca un consecvent întro clauză de tipul anterior, sau în una de acelaşi tip cu aceasta şi care are antecedentul marcat. Prin urmare, în orice S’ cu S’(C) = 1, trebuie oricum să avem S’(A) = 1, deci S’( A) = 0 şi atunci S’(B) = 1 (apoi B se marchează, deci S(B) = 1). • Continuăm raţionamentul cu C = A1 ∧ A2 → B (două variabile în antecedent, ambele variabile marcate; B este, încă, nemarcat), ajungând din nou la concluzia că pentru fiecare S’, pentru ca S’(C) = 1, trebuie ca S’(B) = 1 (şi S(B) = 1). Revenind, am arătat într-adevăr că pentru fiecare S’ astfel încât S’(F) = 1, trebuie

33 să avem S’(A) = 1 pentru fiecare A marcat de către algoritm. Prin urmare, avem şi S’(C) = 0, de unde S’(F) = 0, ceea ce este absurd. Algoritmul are timp de execuţie liniar. Faptul că t(n) ∈ O(f(n)), unde f(n) = a • n + b (a, b ∈ N*), rezultă imediat din faptul precizat că la fiecare execuţie a corpului buclei se marchează o nouă variabilă. Desigur că algoritmul trebuie puţin modificat, în sensul că în Pasul 3, de alegere a unei clauze corespunzătoare C, selecţia trebuie făcută prin parcurgerea de un număr fix de ori (independent de numărul de execuţii) a listei variabilelor peste care este construită F. ■ Exemplu. Să aplicăm algoritmul de marcare următoarei formule Horn: F = ( A ∨  D ) ∧ (  C ∨  A ∨ D ) ∧ (  A ∨  B ) ∧ D ∧  E. Pentru rezolvare, scriem întâi F ca o mulţime de implicaţii, F = { D → A, C ∧ A → D, A ∧ B → 0, 1→ D, E → 0}. Înainte de orice execuţie a buclei, i = 0 şi toate variabilele sunt nemarcate. • Prima execuţie: alegem clauza 1→D (de fapt, nu există altă soluţie). Toate apariţiile lui D se marchează cu *1: D *1 → A, C ∧ A → D *1 , A ∧ B → 0, 1→ D *1 , E → 0. • A doua execuţie: alegem D → A (din nou, nu există decât o posibilitate) şi A se marchează peste tot, cu *2: D *1 → A *2 , C ∧ A *2 → D *1 , A *2 ∧ B → 0, 1→ D *1 , E → 0. • A treia execuţie nu mai are loc, deoarece nu mai există clauze de tipul cerut. Cum valoarea lui i nu s-a modificat (a rămas 0), răspunsul algoritmului este „DA”. Prin urmare, F este satisfiabilă şi o structură S, model pentru F, este definită prin S(A) = 1, S(B) = 0, S(C) = 0, S(D) = 1, S(E) = 0. ■ În concluzie, am găsit o subclasă „convenabilă” de formule propoziţionale pentru care testarea satisfiabilităţii se poate face într-un timp „rezonabil”. Deşi rezultatele teoretice generale ne spun că nu pot exista metode sintactice mai bune dacât metoda semantică sugerată de Algoritmul SAT (dacă ne referim la întrega mulţime LP), existenţa dovedită a unor algoritmi care să nu facă apel la concepte semantice pare a fi un câştig, cel puţin din punctul de vedere al prelucrării automate.

CONSOLIDARE
LECŢIA 5
Fără a restrânge generalitatea (ne va interesa doar satisfiabilitatea unei formule) putem presupune că lucrăm cu formule din LP aflate în FNC, reprezentate sub formă de mulţimi (finite) de clauze, iar clauzele ca mulţimi de literali. Dacă nu vom preciza altfel, notaţiile vor fi cele din lecţia anterioară. Definiţia 2.9 (rezolvent). Fie clauzele C1, C2 , R. Spunem că R este rezolventul lui C1, C2, că C1, C2 se rezolvă în R, sau că R se obţine prin rezoluţie într-un pas din C1, C2 (pe scurt, R = ResL(C1, C2) ), dacă şi numai dacă există un literal L ∈ C1 astfel încât L ∈ C2 şi R = (C1 \ {L} U (C2 \ { L }). ■ Vom reprezenta acest lucru şi grafic, prin:

34 Câteodată vom renunţa la scrierea explicită a lui L şi L în arborele de rezoluţie. Observaţie. Rezolventul a două clauze este tot o clauză. Mai mult, rezolventul a două clauze Horn este tot o clauză Horn. Clauza vidă ( ) poate fi obţinută prin rezoluţie din două clauze de forma C1 = {A} şi C2 = { A}. În definiţia anterioară putem considera că clauzele implicate sunt diferite între ele. Dacă ele ar coincide, atunci C1 = C2 = C = ... ∨ L ∨ L ∨ … ≡ 1, adică C ar fi o tautologie detectabilă imediat, sintactic (în acest fel nu ne mai interesează studiul formal al satisfiabilităţii ei). ■ Exemplu. Fie formula F = {{A, E,  B}, { A, B, C}, {A, D}, { A,  D,  E}}. Să găsim câţiva dintre rezolvenţii care se pot obţine (succesiv) pornind de cele cele patru clauze care compun F, notate respectiv C1, C2, C3, C4. C1 A C2
A

C1
B

C2 B

C1 A

C4
A

{E, B, B, C} C1 E C4
E

{A, E, A, C}

{E,B,D,E}

{A, B, A,D} Mulţi dintre rezolvenţii „primari” nu sunt interesanţi, fiind tautologii. Procesul poate însă continua cu rezolvarea rezolvenţilor obţinuţi din clauzele iniţiale: C2 A C3
A

{B, C, D} B

C1
B

{C, D, A, E} ş. a. m. d. ■ Există cel puţin două întrebări pe care ni le putem pune în urma exemplului precedent: • Există formule pentru care procesul anterior (de aflare succesivă de rezolvenţi noi) nu se termină? • În caz de răspuns negativ şi presupunând că există o legătură între acest proces sintactic (de obţinere de rezolvenţi) şi satisfiabilitate, se pot obţine algoritmi (sintactici, performanţi) de testare a satisfiabilităţii unor formule? Teorema 2.9 (lema rezoluţiei). Fie oricare formulă F ∈ LP (aflată în FNC şi reprezentată ca mulţime de clauze) şi R un rezolvent pentru C1, C2 ∈ F. Atunci F este tare echivalentă cu F U{R}. Demonstraţie.

35
„⇐”. Dacă S satisface F U{R} atunci desigur că S satisface F, conform definiţiei. „⇒”. Să presupunem că S |= F , adică S |= C, pentru fiecare C ∈ F. Fie C1,C2 ∈ F şi R un rezolvent al lor, R = (C1 \ {L}) U (C2 \ { L }), unde L ∈ C1, L ∈ C2 . Cazul 1. S(L) = 1. Atunci S |≠ L. Dar ştim că S |= C2 . Rezultă S |= C2 \ { L }, de unde S(R) = 1. Cazul 2. S(L) = 0. Analog, arătând că S |= C1 \ {L}. ■ Definiţia 2.10. Fie F o mulţime de clauze din LP şi C o clauză. Spunem că lista C’1, C’2 , … , C’m este o demonstraţie prin rezoluţie (în mai mulţi paşi) a lui C pornind cu F dacă sunt satisfăcute condiţiile: (i) Pentru fiecare i ∈ [m], fie C’i ∈ F, fie C’i este obţinut prin rezoluţie într-un pas din C’j, C’k, cu j, k < i. (ii) C = C’m. ■ În condiţiile definiţiei, se mai spune că C este demonstrabilă prin rezoluţie (pornind cu F, sau, în ipotezele date de F). Mai mult, pentru a spune acest lucru, este suficient ca F să fie inserată (prezentă) într-o demonstraţie şi nu să fie neapărat ultimul element al acesteia. Intuitiv, o demonstraţie prin rezoluţie în mai mulţi paşi înseamnă o succesiune finită de rezoluţii într-un pas, care poate fi reprezentată şi grafic, printr-un arbore (a se vedea exemplul care urmează), sau chiar ca un graf oarecare (dacă nu folosim noduri diferite pentru apariţiile distincte ale unei aceleiaşi clauze). În particular, dacă C este clauza vidă, atunci demonstraţia respectivă se numeşte şi respingere. Numărul de paşi dintr-o demonstraţie este dat de numărul de clauze obţinute prin rezoluţie într-un pas (din clauze anterioare). Acesta poate fi considerat ca fiind o măsură a „mărimii” demonstraţiei. Convenim să eliminăm din orice demonstraţie rezolvenţii care conţin atât L cât şi  L, aceste clauze fiind tautologii, deci neinteresante. Exemplu. Fie F = {{A, B,  C}, { A}, {A , B , C}, {A ,  B}}. O respingere poate fi descrisă prin arborele: {A, B, C} {A, B,  C}
C

C {A, B} B {A} A {A,  B}
B

{ A}
A

■ Definiţia 2.11 (mulţimea rezolvenţilor unei mulţimi de clauze). Fie F o mulţime de clauze din LP. Notăm succesiv: • Res(F) = F U{R | există C1, C2 ∈ F astfel încât R = Res(C1, C2)}.

36 Res(n+1)(F) = Res(Res(n)(F)), n ∈ N. Prin Res(0)(F) vom înţelege F şi atunci vom putea pune Res(1)(F) = Res(F). • Res*(F) = U Res(n)(F). n∈N (n) Res (F) se va numi mulţimea rezolvenţilor lui F obţinuţi în cel mult n paşi, iar Res*(F) mulţimea (tuturor) rezolvenţilor lui F. ■ Observaţie. Direct din definiţie rezultă că: F = Res(0)(F) ⊆ Res(1)(F) ⊆ ... ⊆ Res(n)(F) ⊆ ... ⊆ Res*(F). Putem da atunci şi o definiţie structurală a lui Res*(F). Vom nota astfel cu Resc mulţimea definită prin: Baza: F ⊆ Resc. Pas constructiv: Dacă C1, C2 ∈ Resc şi C = Res(C1, C2), atunci C ∈ Resc. ■ Rămâne să arătăm că cele două definiţii exprimă într-adevăr acelaşi lucru. Teoremele următoare le acceptăm făra demonstraţie. Teorema 2.10. Res*(F) = Resc. ■ Teorema 2.11. Fie F o mulţime de clauze din LP. O clauză C ∈ LP se poate demonstra prin rezoluţie pornind cu clauzele lui F dacă şi numai dacă există k ∈ N, asfel încât C ∈ Res(k)(F). ■ În cele de mai sus am folosit – în majoritatea cazurilor – termenul mulţimea de clauze F şi nu formula F (aflată în FNC). Deşi pe noi ne interesează doar formulele (care pot fi privite ca mulţimi finite de clauze în cazul în care ne interesează doar satisfiabilitatea lor), aproape toate rezultatele sunt valabile şi pentru mulţimi infinite (numărabile) de formule (clauze). Teorema următoare stabileşte o legătură importantă, privind satisfiabilitatea, între mulţimile infinite şi cele finite. O vom accepta tot fără demonstraţie, la fel ca şi Teorema 2.13. Teorema 2.12 (de compactitate pentru LP). Fie M o mulţime infinită (numărabilă) de formule din LP. M este satisfiabilă dacă şi numai dacă fiecare submulţime finită a sa este satisfiabilă. ■ Teorema 2.13. Fie F ∈ LP, aflată în FNC şi reprezentată ca mulţime (finită) de clauze. Atunci Res*(F) este finită. ■ Să reamintim faptul că vom elimina din orice mulţime Res*(F) – pe măsură ce se obţine toate clauzele care sunt tautologii deoarece conţin o subformulă de tipul A ∨  A.

LECŢIA 6
Putem în sfârşit enunţa teorema principală a acestui modul. Teorema 2.14 (teorema rezoluţiei pentru calculul propoziţional). Fie F o mulţime oarecare de clauze din calculul propoziţional. Atunci F este nesatisfiabilă dacă şi numai dacă ∈ Res*(F). ■ În urma acestui rezultat, putem concluziona că există algoritmi sintactici pentru a testa nesatisfiabilitatea formulelor din logica propoziţională, ei rămânând – din păcate, dar nesurprinzător – exponenţiali ca timp de execuţie. Testarea satisfiabilităţii nu implică nimic special (în acest caz ∉ Res*(F)), nici testarea validităţii (F este validă dacă şi numai dacă  F este contradicţie, deci aplicăm teorema lui  F). A testa dacă o formulă F este satisfiabilă dar nevalidă impune însă aplicarea teoremei anterioare atât pentru F (F

37
∉ Res*(F)) cât şi pentru  F ( F este satisfiabilă dacă este satisfiabilă dacă ∉ Res*( F)). Prin urmare, pentru a găsi, eventual, algoritmi mai performanţi, singura soluţie rămâne totuşi aceea de a căuta subclase „interesante” ale lui LP. Avantajul acum este că aceste subclase pot fi definite ţinându-se cont de argumente sintactice.

LECŢIA 7
Rafinările rezoluţiei sunt metode prin care se urmăreşte obţinerea clauzei vide (dacă acest lucru este posibil) într-un număr minim de paşi de rezoluţie. Pornind cu formula F = {C1, C2, …… , Cn} (aflată în FNC şi scrisă ca o mulţime de clauze), se poate construi Res*(F), care poate fi reprezentată (fiind finită), după cum deja ştim, ca un graf neorientat (nodurile sunt rezolvenţii succesivi, inclusiv clauzele iniţiale, iar muchiile sunt introduse odată cu fiecare rezoluţie într-un pas). Practic, acest graf cumulează toate posibilele demonstraţii prin rezoluţie care pornesc cu clauzele lui F. Teorema rezoluţiei sugerează crearea mai întâi a acestui graf total şi apoi parcurgerea lui pentru a vedea dacă este (eticheta unui) nod în graf. Teorema 2.11 ne indică faptul că este suficient să găsim o respingere în loc să creem şi să parcurgem întreg graful. Astfel, rafinările se împart în două mari categorii: strategii şi restricţii. Strategiile nu restrâng – în general - spaţiul de căutare (adică graful total) dar folosesc anumite informaţii suplimentare despre clauze, astfel încât să crească şansele pentru selectarea rapidă a unei demonstraţii căutate, a unui drum către clauza vidă. Astfel – cel puţin la modul ideal – graful total nu se construieşte în întregime, ci doar acele porţiuni din el (cât mai puţine şi cât mai mici), care este posibil să conţină respingerile. Cel mai cunoscut exemplu este strategia unitară, în care se recomandă ca la fiecare pas al rezoluţiei măcar una dintre clauze să conţină un singur literal (dacă însă nu mai poate fi aleasă nici o asemenea clauză unitară, se continuă procesul de obţinere de noi rezolvenţi în mod obişnuit). Prin urmare, strategiile nu distrug completitudinea rezoluţiei (dacă o formulă este nesatisfiabilă, atunci se poate demonstra acest lucru prin rezoluţie, găsinduse o respingere), dar – în cel mai rău caz – este posibil să nu facă nici o economie de timp. Pe de altă parte, restricţiile distrug în general completitudinea rezoluţiei (există formule nesatisfiabile pentru care nu se pot găsi respingeri, dacă paşii de rezoluţie sunt supuşi unor condiţii prea restrictive), deoarece spaţiul de căutare este practic micşorat într-un mod, să-i spunem, abuziv. Astfel, o anumită restricţie poate interzice total folosirea (întrun pas de rezoluţie) a unor clauze având o anumită formă sintactică. Restricţiile pot rămâne însă complete pentru anumite subclase de formule propoziţionale.

REZUMARE ŞI ADDENDA
În acest modul am introdus sintaxa şi semantica formală a unui limbaj logic, privit în sensul unei mulţimi de formule. Acestea iau locul afirmaţiilor reale. Sunt transpuse într-o formă precisă conceptele şi principiile esenţiale ale logicii aristotelice, printre care bivalenţa (tertium non datur) şi extensionalitatea. Sintactic, mulţimea formulelor logicii propoziţionale – notată LP – poate fi definită constructiv, pornind de la o mulţime numărabilă de formule atomice şi utilizând conectorii logici şi, sau, non, eventual şi implică. O formulă poate fi „recunoscută fără dubii” şi poate fi reprezentată şi

38 ca un arbore. Există şi reprezentări standard ale formulelor, prin forme normale. Semantica unei formule este o valoare de adevăr (0 – adevărat, 1 – fals), care se determină standard şi unic, odată ce este cunoscută o structură corectă, adică o asignare pentru formulele atomice componente. Definiţia semanticii se bazează şi pe rezultatele cunoscute despre funcţiile booleene. Se evidenţiază apoi clasele de formule satisfiabile, valide şi nesatisfiabile, introducându-se şi studiindu-se alte concepte de natură semantică, cum ar fi cele de echivalenţă sau de consecinţă semantică. Problema cea mai importantă de care ne-am ocupat a fost problema SAT (a satisfiabilităţii formuleleor din LP), despre care am arătat că este decidabilă dar de complexitate (timp) exponenţială, folosind algoritmi bazaţi pe semantică. Din punctul de vedere al tratării automate (cu ajutorul unui calculator) a problemei SAT, sunt mai convenabili algoritmii de decizie bazaţi pe sintaxă, deşi în general aceştia nu sunt mai rapizi. Am prezentat un asemeanea algoritm (Teoremele 2.11, 2.13, 2.14), care foloseşte conceptul de rezoluţie (propoziţională). Deşi metoda rezoluţiei nu aduce îmbunătăţiri semnificative ale timpului necesar pentru rezolvarea SAT (în sensul teoriei generale a complexităţii), s-au putut pune în evidenţă strategii şi restricţii ale rezoluţiei, care măresc şansele găsirii rapide a răspunsului, precum şi subclase de formule pentru care problema poate fi rezolvată în timp liniar (cum ar fi clasa formulelor Horn, pentru care putem aplica atât algoritmul de marcare, cât şi o variantă convenabilă de implementare a SLD-rezoluţiei). Se poate argumenta că mulţimea LP este „prea simplă” în privinţa „puterii” de a reprezenta lumea reală şi în consecinţă nu merită atenţie specială. Este adevărat că LP poate fi inclusă în mulţimea de formule a calculului cu predicate de ordinul I (care va constitui obiectul de studiu al următorului modul), dar am considerat ca benefică introducerea şi prezentarea ei separată, din motive didactice. De altfel, deşi destul de restrictivă, LP este suficient de „bogată” pentru a putea exprima (şi deci, studia formal) afirmaţii intreresante. Modulul 3 este totuşi destinat studiului unei extensii posibile a lui LP şi anume LP1, calculul cu predicate de ordinul I. Să furnizăm în finalul Modulului 2 şi lista cuvintelor noi: sfera şi conţinutul unei noţiuni, diferenţă specifică, definiţii operaţionale, inferenţe valide, paradoxuri, silogisme, inferenţe ipotetico-categorice, modus ponens, modus tollens, formule propoziţionale, variabile propoziţionale, formule atomice, literali (pozitivi, negativi), conectori logici (non, şi, sau, implică, echivalenţă), arbore ataşat unei formule, subformulă, problemă de decizie, asignare, interpretare, structură, structură completă, formule satisfiabile, valide (tautologii), nesatisfiabile (contradicţii), formule tare şi slab echivalente, forme normale (disjunctive, conjunctive), clauze, clauze pozitive, clauze negative, clauza vidă, clauze Horn, clauze Horn pozitive, forma implicaţională a clauzelor Horn, rezolvent, rezoluţie într-un pas, demonstraţie prin rezoluţie, respingere, mulţimea rezolvenţilor unei mulţimi de clauze, rafinări, restricţii şi strategii ale rezoluţiei, strategia unitară, rezoluţia pozitivă, rezoluţia negativă, rezoluţia liniară bazată pe o clauză iniţială, SLD-rezoluţia, rezoluţia bazată pe o mulţime suport, rezoluţia de intrare.

VERIFICARE (TESTARE)
1. Rezolvaţi Exerciţiul 2.1.

39 2. 3. 4. 5. 6. Rezolvaţi Exerciţiul 2.2. Rezolvaţi Exerciţiul 2.3. Rezolvaţi Exerciţiul 2.4. Completaţi demonstraţia Teoremei 2.1. Rezolvaţi Exerciţiul 2.5.

40

MODULUL 3 – Logica (Calculul) cu predicate de ordinul I
INTRODUCERE
După cum am punctat în partea de Rezumare a Modulului 2, suntem nevoiţi să extindem limbajul (logica) folosit(ă) până în prezent, deşi rezultatele privind complexitatea (timp) a algoritmilor de testare a satisfiabilităţii formulelor LP sunt deja descurajatoare. Principalul argument este acela că lumea reală nu poate fi modelată satisfăcător şi simplu prin formule logice care utilizează doar variabile propoziţionale şi conectori. De aceea, principala modificare va fi de natură sintactică, manifestată prin adăugarea cuantificatorilor logici (există şi pentru orice), împreună cu introducerea variabilelor, constantelor, simbolurilor funcţionale (de aritate mai mare decât unu) şi a simbolurilor predicative. Din acest punct de vedere, limbajul logicii cu predicate de ordinul I va conduce – în general, sintactic – la o mulţime de formule, notată LP1, care va include strict clasa LP. Semantica pentru LP1 va fi mai complexă, având însă la bază acelaşi concept de structură (asignare, interpretare) şi fiind „consistentă” cu semantica LP. De altfel, pentru LP1, dacă nu vom introduce concepte explicit noi, toate notaţiile, noţiunile, rezultatele, vor fi extensii imediate pentru obiectele corespunzătoare din LP.

DEZVOLTARE
LECŢIA 1
Pentru a mări puterea de exprimare – în sensul informal precizat deja - a logicii folosite, vom începe cu anumite transformări de natură sintactică. Vom introduce în alfabetul iniţial, pe lângă ceea ce deja cunoaştem, simboluri cum ar fi: variabile funcţionale, constante, funcţii, predicate, cuantificatori. Mai precis, pentru a construi mulţimea de formule a logicii cu predicate de ordinul I, LP1, vom porni cu următoarele mulţimi de simboluri: • X = {x1, x2, …} – o mulţime cel mult numărabilă de variabile funcţionale, sau, pe scurt, variabile. • P = {P0, P1, …} – o mulţime cel mult numărabilă de simboluri predicative (sau predicate). La rândul său, fiecare Pi este o mulţime cel mult numărabilă de predicate de aritate i (i ∈ N). Elementele lui P0 se mai numesc şi variabile predicative. • F = {F0, F1, ...} – o mulţime cel mult numărabilă de simboluri funcţionale (sau funcţii) cu arităţi, fiecare Fi fiind o mulţime cel mult numărabilă de funcţii de aritate i (i ∈ N). Elementele lui F0 se numesc şi constante (funcţionale). • C1 = {, ∨, ∧} – o mulţime de conectori logici (conective logice), la care se pot adăuga, opţional, şi alte simboluri cum ar fi →, ↔, etc.

41

universali, respectiv existenţiali ((∀x) se citeşte „pentru fiecare x”, sau „pentru oricare (orice) x”, iar (∃ x) – „există x”, „există măcar un x”, etc.). Pentru început este suficient să considerăm doar cuantorii universali. Ca şi în cazul LP, vom porni cu alfabetul total, adică reuniunea mulţimilor precedente, împreună cu parantezele rotunde:

C2 = {(∀x) | x ∈ X} U {(∃ x) | x ∈ X}- o mulţime de cuantificatori (cuantori),

Alf = X U ( ∪ Pi ) U ( ∪ Fi ) U C1 U C2 U { (, ), }
i=0 i=0

Mulţimile U Pi şi U Fi vor fi notate tot cu P respectiv F, atunci când nu există confuzii. Observaţie. Prin „o mulţime cel mult numărabilă” înţelegem o mulţime numărabilă, finită sau vidă. Intuitiv, variabilele funcţionale notate x vor fi nume generice pentru elementele dintr-un anumit domeniu, care poate fi ulterior fixat (prin intermediul funcţiei semantice). Un simbol predicativ P de aritate i reprezintă o relaţie i-ară neprecizată, adică este un nume generic pentru orice funcţie cu i argumente peste acelaşi domeniu, codomeniul fiind {a, f}, sau B (P(<a1, a2, ... ai>) = 1 dacă şi numai dacă elementele a1, a2, ..., ai sunt în relaţia numită P). Similar, un simbol funcţional f ∈ Fi, este numele generic al oricărei funcţii de i argumente, peste acelaşi domeniu şi codomeniu. Pentru parantezele utilizate în scrierea cuantificatorilor ar trebui de fapt folosit un alt font. ■ Mulţimea formulelor, LP1Alf (indicele va fi pus în evidenţă doar când ar putea exista confuzii), va fi definită structural, analog cu cazul LP (elemente mulţimilor C1 şi C2 pot fi considerate – împreună cu parantezele aferente – ca fiind operatori pe şiruri de caractere, de aritate corespunzătoare, adică 1 sau 2). Definiţia 3.1 (sintaxa LP1). Fie Alf alfabetul fixat anterior. Atunci mulţimea formulelor calculului cu predicate de ordinul I, LP1Alf, este dată constructiv prin: Baza. Se defineşte mulţimea formulelor atomice, notată cu At, prin: (i) Po ⊆ At (variabilele predicative sunt formule atomice). (ii) Pentru fiecare n ∈ N, pentru fiecare P ∈ Pn, pentru fiecare t1, t2, ……, tn ∈ T, avem P(t1, t2, ……, tn) ∈ At. (iii) Nimic altceva nu mai este formulă atomică. În cele de mai sus, T denotă mulţimea termilor (funcţionali), care este la rândul ei definită constructiv astfel: Baza: X ⊆ T şi Fo ⊆ T (variabilele şi constantele sunt termi). Pas constructiv: Pentru fiecare n ∈ N, pentru fiecare f ∈ Fn, pentru fiecare t1, t2, … , t n ∈ T, avem f(t1, t2, ……, t n) ∈ T. Prin urmare, concluzionăm această etapă a definiţiei prin: At ⊆ LP1 (formulele atomice sunt formule). Pas constructiv. Continuăm definirea lui LP1Alf cu partea „formule vechi din formule noi”: (i) Dacă F ∈ LP1 atunci (  F) ∈ LP1. (ii) Dacă F1, F2 ∈ LP1 atunci ( F1 ∧ F2 ), ( F1 ∨ F2 ) ∈ LP1 (dacă dorim, putem introduce şi (F1 → F2), ( F1 ↔ F2 ) ∈ LP1, etc.). iii) Dacă F ∈ LP1 atunci (∀x)(F) ∈ LP1 (dacă dorim, punem şi (∃ x)(F) ∈ LP1), pentru fiecare x ∈ X ). ■

42 Similar cu cazul LP, se definesc constructiv subf(F) – mulţimea subformulelor formulei F, şi arb(F) – arborele ataşat lui F (cum cuantorii sunt operatori de aritate 1, ei jucând acelaşi rol sintactic ca şi negaţia). Singura subformulă a unei formule atomice este ea însăşi şi va constitui un simplu nod în arb(F). Un term poate fi – la rândul său - privit ca un arbore (în consecinţă, şi o formulă atomică), astfel încât arborele unei formule poate fi „detaliat”, dacă înlocuim fiecare nod corespunzător unui term cu arborele ataşat acestuia. Definiţia 3.2 (arborele ataşat unui term şi unei formule atomice). Conform definiţiei anterioare, arborele ataşat unui term t ∈ T, Arb(t), poate fi dat constructiv prin:

Baza. Dacă t = c ∈ F0, atunci Arb(t) este:

c . x

Dacă t = x ∈ X, atunci Arb(t) este:

Pas constructiv. Fie n ∈ N, f ∈ Fn, t1, t2, … , tn ∈ T, astfel încât t = f(t1, t2, ……, tn). Să presupunem că ştim arborii ataşaţi termilor t1, t2, … , tn, adică Arb(t1), Arb(t2), … , Arb(tn). Atunci Arb(t) va fi:

C Arb(t1) Arb(t2)

Ştiind arb(t) pentru fiecare t ∈ T, putem acum construi arb(F) pentru fiecare F ∈ At, după cum urmează. (i) Dacă P ∈ P0, atunci arb(P) este: P .

(ii) Fie n ∈ N, Q ∈ Pn, t1, t2, ……, tn ∈ T astfel încât P = Q(t1, t2, ……, tn) şi să presupunem că sunt cunoscuţi Arb(t1), Arb(t2), … , Arb(tn). Atunci Arb(P) va fi: Q Arb(t1) Arb(tn)

(iii) Fie F o formulă. Ea poate avea una din formele:  (F1), F1 ∧ F2, F1 ∨ F2, ∀(F1), ∃(F1), unde F1, F2 sunt formule. Arborele ataşat formulei F va putea fi construit într-un mod similar. ■ Definiţia 3.3 (apariţii libere şi legate ale variabilelor). Fie F ∈ LP1 şi x ∈ X, astfel încât x apare în F, la o poziţie oarecare j (în sens textual, stânga – dreapta, ca literă întrun cuvânt, apariţia nefiind parte a unui cuantificator (∀x) sau (∃x)). Apariţia fixată a lui x se numeşte legată dacă este într-o parte G a unei subformule de forma G1 = (∀x)G (sau (∃x)G) a lui F. În restul cazurilor, apariţia considerată se numeşte liberă. ■

43 Să mai punctăm o dată faptul că folosind reprezentarea formulelor ca arbori (precum şi o definiţie corespunzătoare a noţiunii de arbore), orice apariţie a unei variabile într-o formulă poate fi definită formal. Vom nota, pentru fiecare F ∈ LP1, cu free(F) mulţimea variabilelor care au apariţii libere în F, şi cu leg(F) – mulţimea variabilelor care au apariţii legate în F. Desigur că pentru fiecare x ∈ X, este posibil ca x să nu apară în F, să aibă doar apariţii libere, doar apariţii legate, sau şi apariţii libere şi apariţii legate. Exerciţiul 3.1. Definiţi constructiv leg(F). Definiţia 3.4. O formulă F ∈ LP1 se numeşte închisă dacă nu conţine apariţii libere de variabile (altfel spus, free(F) = Ø). Pentru formula F, se numeşte închiderea sa universală formula (∀x1)((∀x2)( …((∀xk)(F)) ... ) (care se mai notează, pentru simplitate, cu (∀*)(F) sau (∀F)), unde {x1, x2, … , xk} = free(F). Analog (înlocuind ∀ cu ∃ în faţa formulei) se defineşte (notează) închiderea existenţială a lui F. Se va numi matricea lui F acea formulă obţinută din F prin ştergerea (sintactică, textuală) a tuturor cuantificatorilor (∀x) şi (∃x) (ea se va nota F*). ■ Definiţia 3.5 (substituţii). Prin substituţie vom înţelege o secvenţă finită de elemente de tipul [x/t] (numite şi substituţii elementare), x ∈ X, t ∈ T. ■ O substituţie, s = [x1/t1] • [x2/t2] • … • [xn/tn], este practic un cuvânt peste alfabetul S = {[x/t] | x ∈ X, t ∈ T}, adică un element al lui S* (monoidul liber generat de S, aşa cum am mai amintit în Modulul 2). O substituţie s (ca mai sus) se aplică unei formule F, rezultând o formulă G, notată (F)s şi obţinută din F prin înlocuirea fiecărei apariţii libere a variabilei x1 cu termul t1, apoi a fiecărei apariţii libere a variabilei x2 cu t2, etc. Se utilizează – pentru o formulă F ∈ LP1 dată – doar cu substituţii permise. [x/t] este permisă pentru F (sau, F acceptă [x/t]) dacă t nu conţine variabile libere care au apariţii legate în F (s de mai sus va fi permisă pentru F dacă va fi permisă pentru fiecare componentă elementară a sa [xi/ti]). Ordinea (fixată deja) a aplicării substituţiilor elementare dintr-o substituţie s este esenţială în majoritatea cazurilor. O substituţie s este normalizată (pentru F) dacă ordinea de aplicare a substituţiilor elementare componente nu contează. Mai precis, dacă avem (F)s = (F)s’, pentru fiecare s’ care este obţinută din s printr-o permutare a componentelor acesteia. Substituţia vidă (ca element neutru al lui S*), notată [ ], nu face desigur nici o transformare în formula F căreia îi este aplicată ((F)[ ] = F). Exerciţiul 3.2. Arătaţi că pentru fiecare F ∈ LP1 şi fiecare substituţie s, permisă pentru F, care îndeplineşte condiţia că ea nu coţine un element de forma [x/t] astfel încât t nu conţine x, există măcar o substituţie s’, ehivalentă cu s (s’ este echivalentă cu s, pentru F, dacă (F)s = (F)s’) şi care este normalizată. După cum am mai precizat, dacă nu este nevoie de o redefinire explicită, în continuare vom folosi şi alte concepte/notaţii sintactice introduse în Modulul 2 pentru LP, cum ar fi: literal (o formulă atomică sau negaţia acesteia), clauză, clauză Horn, formă normală, etc. Cu litere latine de la sfîrşitul alfabetului (x, y, z, ...) vom nota variabilele. Literele latine mici de la începutul alfabetului (a, b, c, ...) vor nota constantele. Literele latine mari de la mijlocul alfabetului (P, Q, R, ...) vor nota simbolurile predicative. Literele latine mici de la mijlocul alfabetului (f, g, h, ...) vor fi rezervate pentru desemnarea simbolurilor funcţionale, iar cu F, G, H, … vom nota formulele. Dacă nu am adopta astfel de convenţii (dorim, totusi, să avem o anumită libertate de exprimare şi să folosim şi alte nume înafara celor admise de alfabetul iniţial,

44 aşa cum am folosit – de exemplu - în LP, B în loc de Ai), am avea cazuri în care nu am distinge între o variabilă şi o constantă. Practic, diferenţa dintre un nume de variabilă (funcţională) şi un nume de constantă (element al lui F0) este clară doar în momentul când numele respectiv apare într-un cuantificator. Definiţia 3.6. Un term care nu conţine variabile se numeşte term de bază. Analog, vom avea formule de bază şi substituţii de bază. ■ Ca şi pentru LP, putem renunţa la sau adăuga paranteze într-o formulă (singurele paranteze care nu intră în discuţie sunt cele ataşate cuantificatorilor), bazându-ne pe aceeaşi idee (priorităţi acordate operatorilor, proprietăţi generale ale acestora cum ar fi asociativitatea, etc). În cazul unui cuantor, avem nevoie, înafara priorităţii care este maximă (adică 0, şi respectiv  având prioritatea 1, ∧ - 2, ∨ - 3, → - 4, ↔ - 5, etc.; în cadrul unei secvenţe continue de operatori de aceeaşi prioritate, parantetizarea se face la stânga), şi de definirea a ceea ce se numeşte domeniul sintactic al cuantificatorului respectiv. Domeniul sintactic pentru o apariţie a unui cuantor (să spunem că aceasta este (∀x)) într-o formulă F, reprezintă porţiunea continuă de text (care este o subformulă G alui F), care începe cu primul simbol de după o apariţie a cuantorului în cauză, identificat mai jos prin subliniere (parcurgem formula de la stânga la dreapta) şi se termină cu un anumit simbol ulterior (să-l identificăm tot prin subliniere), conform următoarelor situaţii: • F = ... (∀x)(G’) ... . Nu sunt probleme, deoarece parantezele cerute de sintaxa dată de Definiţia 3.1. nu au fost eliminate. Ca observaţie, parantezele subliniate de mai sus sunt corespondente (definiţia sintactică a unei formule nu permite existenţa unei paranteze deschise fără ca ea să fie închisă ulterior, neexistând ambiguităţi nici în privinţa parantezei închise care corespunde unei anumite paranteze deschise). • F = ... (∀x)G. Situaţia evidenţiază faptul că domeniul se extinde „până la sfârşitul formulei”, dar condiţia suplimentară este aceea că în G nu există nici o paranteză închisă care să nu aibă corespondent o paranteză deschisă situată tot în domeniu (nu uităm că domeniul începe oricum cu primul simbol de după (∀x)). Nu am mai subliniat simbolurile de început şi sfârşit a domeniului, deoarece ei sunt primul şi respectiv ultimul simbol din G. • F = ... ( ... (∀x) ... ) ... . Este pus în evidenţă cazul în care au fost eliminate parantezele iniţiale, dar în subformula G care urmează după (∀x), există o paranteză închisă care are corespondent înainte de apariţia cuantorului al carui domeniu îl căutăm. Ceea ce am subliniat este prima paranteză cu această proprietate (simbolul imediat de dinaintea ei fiind limita din dreapta a domeniului). Prioritatea cuantificatorilor fiind maximă, se găsesc mai întâi domeniile sintactice ale fiecărui cuantificator dintr-o formulă şi apoi se aplică regulile de prioritate legate de conectori. Intuitiv, dacă privim LP1 ca un limbaj de programare imperativ (formulele fiind programe), construcţiile de tipul (○1x1)(○2x2) ... (○nxn), cu ○1, ○2, ... , ○n ∈ {∀, ∃}, reprezintă linia de definiţie a unei proceduri (în care însă se specifică drept parametri variabilele locale). Procedurile n-au însă şi un sfârşit marcat explicit, astfel încât domeniul sintactic este corpul procedurii, delimitarea lui clară fiind desigur absolut necesară pentru a cunoaşte porţiunea de text în care numele unei variabile păstrează o aceeaşi semnificaţie. Continuând paralela, variabilele libere din domeniul sintactic al

45
unui cuantificator reprezintă variabilele globale, iar aplicarea unei substituţii ar fi un apel de procedură (deosebirea faţă de cazul imperativ fiind aceea că valorile parametrilor – numele unor cuantificatori din linia de definiţie – pot fi orice sau anumite elemente din domeniile considerate conform sematicii). Domeniile sintactice ale diverşilor cuantificatori pot fi, datorită formei sintactice a formulelor, disjuncte - ... 1 ... 1 ... 2 ... 2 ... , sau imbricate - ... 1 ... 2 ... 2 ... 1 ... , dar nu se pot „intersecta” - ... 1 ... 2 ... 1 ... 2 ... . Dacă o apariţie a unei variabile x se află în interiorul mai multor domenii imbricate, desigur că aparţine tuturor, dar apariţiile diferite său pot avea semnificaţii (valori) diferite. Astfel, în ... 1 ... 2 ... 3 ... x1 ... 3 ... x2 ... 2 ... 1 ... , apariţia lui x notată x1 şi cea notată x2, pot practic fi considerate ca fiind nume de variabile diferite. În ceea ce priveşte parantezele adăugate, ele pot fi fie restaurări ale parantezelor şterse, fie putem pune (în plus, în Definiţia 3.1, Pas inductiv): Dacă F ∈ LP1, atunci (F) ∈ LP1 (se adaptează corespunzător şi definiţia arborelui ataşat, a lui subf, etc.). Exemplu. Fie formula: F = Q(x) ∨ (∃x)(∀y)(P(f(x), z) ∧ Q(a) ∨ (∀x)R(x, z, g(x)). Semnificaţia simbolurilor care apar: • x, y, z ∈ X. x, y ∈ X deoarece sunt nume ale unor cuantificatori, iar z ∈ X conform convenţiilor făcute. x apare de 4 ori în F (de la stânga la dreapta: x are o apariţie liberă în Q(x); o apariţie legată în P(f(x), z), el fiind în domeniul sintactic al cuantorului (∃x); o altă apariţie legată, pe prima poziţie din R(x, z, g(x)), aici fiind şi în domeniul sintactic al cuantorului (∀x); o a treia apariţie legată, în acelaşi domeniu sintactic, este în R(x, z, g(x)), adică în g(x)). y nu apare nici o dată în F, deşi apare cuantorul (∀y). z apare de 2 ori în F, ambele apariţii fiind libere (prima dată în P(f(x), z) şi a doua oară în R(x, z, g(x))). În consecinţă, free(F) = {x, z} iar leg(F) = {x}. • a ∈ F0 conform convenţiilor. • Q ∈ P1, P ∈ P2, R ∈ P3 din scrierea sintactică (nici convenţiile nu sunt contrazise). • f, g ∈ F1 din scrierea sintactică. Domeniile sintactice ale cuantorilor. Domeniul sintactic al cuantorului (∃x) este format din (subformula) (∀y)(P(f(x), z) ∧ Q(a) ∨ (∀x)R(x, z, g(x)). Cel al lui (∀y), din (P(f(x), z) ∧ Q(a) ∨ (∀x)R(x, z, g(x)). În sfârşit, domeniul lui (∀x) este R(x, z, g(x). Ţinând cont şi de priorităţile impuse cuantorilor, formula corectă, total parantetizată (conform Definiţiei 3.1), este: F = (Q(x) ∨ (∃x)((∀y)(((P(f(x), z) ∧ Q(a)) ∨ (∀x)(R(x, z, g(x)))))). Mulţimea subformulelor formulei date. subf(F) = {Q(x), P(f(x), z), Q(a), R(x, z, g(x), (∀x)R(x, z, g(x), P(f(x), z) ∧ Q(a), P(f(x), z) ∧ Q(a) ∨ (∀x)R(x, z, g(x), (P(f(x), z) ∧ Q(a) ∨ (∀x)R(x, z, g(x)), (∀y)(P(f(x), z) ∧ Q(a) ∨ (∀x)R(x, z, g(x)), (∃x)(∀y)(P(f(x), z) ∧ Q(a) ∨ (∀x)R(x, z, g(x)), F}. Mai sus am ţinut cont de domeniile sintactice, priorităţile operatorilor, şi faptul că dacă G este formulă atunci (G) este formulă (nu uităm nici de faptul că subformulă a lui F este orice subcuvânt al său care aparţine lui LP1). Termii (funcţionali) care apar în formulă. Ei sunt (ordinea este aleatoare): x, f(x), z, a, g(x). Mulţimea subformulelor închise ale lui F. Nu avem asemenea subformule, dacă ne referim strict la variabile. Totuşi, prin convenţie, vom admite că formulele care nu

46
conţin deloc variabile (adică formulele de bază) sunt formule închise. Singura asemenea subformulă în cazul nostru este Q(a). Matricea formulei date. Ea este: F* = Q(x) ∨ (P(f(x), z) ∧ Q(a)) ∨ R(x, z, g(x)). Închiderea universală a formulei este: F’ = (∀z)(∀x)(Q(x) ∨ (∃x)(∀y)(P(f(x), z) ∧ Q(a) ∨ (∀x)R(x, z, g(x))). Similar se obţine închiderea existenţială. Fie substituţia s = [x/c] • [z/g(b)] • [y/x]. Dacă o aplicăm formulei F găsim succesiv: (F)s = (Q(c) ∨ (∃x)(∀y)(P(f(x),z) ∧ Q(a) ∨ (∀x)R(x, z, g(x)))[z/g(b)] • [y/z] = = (Q(c) ∨ (∃x)(∀y)(P(f(x), g(b)) ∧ Q(a) ∨ (∀x)R(x, g(b), g(x)))[y/x]. Ultima aplicare nu schimbă nimic deoarece y nu apare în F. Arborele ataşat formulei. Q(x) ∨ (∃x)(∀y)(P(f(x), z) ∧ Q(a) ∨ (∀x)R(x, z, g(x)), este

Q

(∃x)

x

(∀y)

()

(∀x)

P

Q

R

f

z

a x z g

x x

47 Se observă acum cu claritate cele trei tipuri de paranteze rotunde care apar întro formulă: cele care delimitează fiecare cuantificator ((∀x) ar trebui de fapt scris ()∀x, acestea făcând parte indivizibilă din numele cuantorului în cauză), cele care delimitează termii sau formulele atomice (f(t1, t2, …, tn) sau P(t1, t2, …, tn), ele nemaiapărând explicit în arbore) şi cele care delimitează formulele (( F); ele apar explicit, ca operator, în arbore şi sunt singurele care pot fi eliminate sau adăugate după regulile fixate). ■

LECŢIA 2
Înţelesul (semantica) unei formule F ∈ LP1 va fi - la fel ca în logica propoziţională - o valoare de adevăr 0, 1 ∈ B, valoare obţinută într-un mod extensional. Elementul principal în definirea semanticii va rămâne noţiunea de structură. Definiţia unei structuri şi găsirea unei valori de adevăr pentru o formulă va depinde doar de simbolurile care intervin în acea formulă. Definiţia 3.7. Se numeşte structură un cuplu S = <US, IS> în care US este o mulţime nevidă numită univers, iar IS este o funcţie (numită interpretare), IS : X U P U F → US U [US* → B] U [US* → US], care satisface condiţiile: • Dacă x ∈ X, atunci IS (x) ∈ US. • Dacă P ∈ P n, atunci IS (P) : US n → B. • Dacă F ∈ F n, atunci IS (F) : US n → US. ■ În cele de mai sus, ca şi în restul materialului, [A → B] desemnează mulţimea tuturor funcţiilor totale (de o variabilă) având domeniul A şi codomeniul B, iar [A* → B] denotă mulţimea tuturor funcţiilor de oricâte argumente (inclusiv 0) peste A, cu valori în B. Prin urmare, interpretarea (semantica) unei variabile în structura S este un element din univers, interpretarea unui simbol predicativ n-ar este o funcţie de la USn la {0, 1} (ceea ce poate fi interpretat şi ca mulţimea elementelor pentru care valoarea în cauză este 1), iar semantica unui simbol funcţional de aritate n este o funcţie de la USn la US. Pentru simplificarea exprimării, vom renunţa la indici dacă nu există confuzii şi vom nota pe IS tot cu S. Similar cu cazul logicii propoziţionale, orice structură va putea fi unic extinsă astfel încât să fie definită pentru toate elementele lui LP1. Definiţia 3.8. Pentru fiecare structură S = <US, IS>, vom numi extensia sa imediată funcţia S’ : X U P U F U T U LP1 → US U [US* → B] U [US* → US] U B, dată constructiv în cele ce urmează. Pentru început, vom pune S’(a) = S(a) (= IS (a)), pentru fiecare a ∈ X U P U F, ceea ce înseamnă că S’ s-a definit, în particular, pentru fiecare term elementar. Fie acum orice t ∈ T, adică orice n ∈ N*, orice t1, t2, … , tn ∈ T şi orice f ∈ Fn, astfel încât avem t = f(t1, t2, ……, t n). Atunci S’(t) = S(f)(S’(t1), S’(t2), ... , S’(tn)) (∈US). Am încheiat astfel procesul de definire al lui S’ pe X U P U F U T şi rămâne să definim S’ pe LP1.

48
Baza: Fie F = A ∈ At. În această situaţie avem fie A = P ∈ P 0 fie A = P(t1, t2, …, tn), n ∈ N*, t1, t2 , ……, tn ∈ T. În primul caz S’ este deja definită (S’(P) = S(P) ∈ B), iar în al doilea caz punem desigur S’ (P) = S(P)(S’ (t1), S’ (t2), ... , S’ (tn) ∈ B). Pas constructiv: (i) F = ( F1 ). Atunci S’(F) = S ′(F1 ) . (ii) F = (F1 ∧ F2). Atunci S’(F) = S’(F1) • S’(F2). (iii) F = (F1 ∨ F2). Atunci S’ (F) = S’(F1) + S’(F2). (iv) F = (∀x)(G). Atunci S’(F) = 1 dacă şi numai dacă pentru fiecare u ∈ US avem S’[x/u](G) = 1 unde S’[x/u] este o interpretare care coincide cu S’ exceptând faptul că S’(x) = u. (v) F = (∃x)(G). Atunci S’(F) = 1 dacă şi numai dacă există (măcar) un element u ∈ US astfel încât S’[x/u](G) = 1. ■ Vom pune, la fel ca în cazul logicii propoziţionale, S’(F) = S’((F)), pentru fiecare F ∈ LP1. De asemenea, de acum înainte nu vom face nici o diferenţă între IS, S, S’, notând valoarea de adevăr a unei formule F ∈ LP1 într-o structură dată S prin FS (de fapt, tehnic vorbind, am putea face acest lucru de-abia după demonstraţia Teoremei 3.1). În mod cu totul similar vor fi notate interpretările celorlalte simboluri în structura dată: xS, cS, fS, PS, tS, etc. Putem vorbi astfel de model, formule satisfiabile, valide, nesatisfiabile, consecinţă semantică, echivalenţă tare şi slabă, păstrându-se toate notaţiile şi conceptele semantice ale logicii propoziţionale (excepţiile vor fi indicate explicit). De asemenea, se observă că dată o formulă F şi o structură S, avem nevoie doar de valorile lui S pe simbolurile care apar în F, adică – la fel ca în cazul logicii propoziţionale – în loc să lucrăm cu funcţii parţiale, folosim structuri corecte pentru o formulă (sau o mulţime de formule). Pot fi identificate şi anumite (clase de) structuri speciale atât la nivel sintactic cât şi la nivel semantic. Sintactic, să nu uităm că mulţimea de formule din calculul cu predicate de ordinul I depinde de alfabetul iniţial Alf. Vom presupune astfel că mulţimea de variabile este numărabilă, că în mulţimea P cel puţin P0, P1, P2 sunt nevide şi că mulţimea F conţine măcar un simbol funcţional (indiferent de aritate). Există şi pericolul ca LP1 să poată deveni trivială (de exemplu, mulţimea vidă), banală (poate coincide cu LP sau chiar cu o subclasă a acesteia) sau prea particulară (putându-se exprima, de exemplu, doar relaţiile unare dintre diverse obiecte). Semantic, putem admite existenţa unor simboluri speciale de predicate sau funcţii care să fie interpretate identic în orice structură. Un exemplu este relaţia de egalitate, care poate fi considerată ca fiind reprezentată la nivel sintactic de un simbol predicativ de aritate 2 (să presupunem că P2 ≠ Ø şi „=” ∈ P2). În momentul în care considerăm o formulă F care conţine un asemenea simbol şi ne interesează existenţa unui model, este normal să-l căutăm doar printre structuri de forma S = <US, IS> în care = S (a, b) este egal cu 1 atunci şi numai atunci când a coincide cu b (=S : US × US → B). Cu alte cuvinte, în asemenea situaţii, clasa structurilor/modelelor „admise” este restrânsă în mod forţat, ceea ce nu are întotdeauna efecte secundare favorabile. Astfel, în situaţia descrisă, clasa de formule este notată LP1{=} (pe scurt, LP1=) şi se numeşte calculul cu predicate de ordinul I cu egalitate (reamintim, dacă F ∈ LP1=, atunci, dacă F conţine simbolul predicativ = ∈ P2, pentru a i

49 se calcula valoarea de adevăr S(F) se iau în considerare doar structuri S în care „=” este interpretat doar ca fiind egalitatea pe universul respectiv). Acestea se vor numi structuri/interpretări standard. Similar se poate considera LP1{+} sau chiar LP1{=, +}, etc. Vom arăta că problema satisfiabilităţii pentru LP1 (SAT1) este semidecidabilă, dar problema satisfiabilităţii pentru LP1= este nedecidabilă. Un rol important, în special din punct de vedere teoretic, îl au structurile Herbrand. Definiţia 3.9 (universuri şi structuri Herbrand). Fie F ∈ LP1. Se numeşte univers Herbrand (ataşat lui F), mulţimea D(F) definită prin: Baza. În D(F) se pun toate elementele din F0 care apar în F. Dacă F nu conţine nici o constantă, atunci se pune forţat în D(F) un element oarecare din F0 (numele rezervat standard pentru acest lucru este a). Pas constructiv. Fie orice n ∈ N*, orice f ∈ Fn care apare în F şi oricare termi t1, t2, ... , tn ∈ D(F) şi construiţi doar cu simboluri care apar în F. Atunci f(t1, t2, ... , tn) ∈ D(F). O structură Herbrand (pentru F) este o structură (corectă pentru F) H = <UH, IH>, în care UH = D(F), iar IH satisface condiţia că interpretează fiecare term prin el însuşi. Mai exact, H(f(t1, t2, ... , tn)) = fH(t1H, t2H, ... , tnH) = f(t1H, t2H, ... , tnH), pentru fiecare n ∈ N şi fiecare t = f(t1, t2, ... , tn) ∈ T. ■ Se observă că D(F) este mulţimea termilor de bază construiţi cu simboluri din F. Într-o structură Herbrand, dacă f ∈ F0 atunci H(f) = f şi în consecinţă dacă t este un term de bază atunci tH = t. Interpretarea unei variabile este cea uzuală (xH ∈ D(F) pentru fiecare x ∈ X), la fel ca şi interpretarea simbolurilor predicative (ele vor fi funcţii oarecare peste D(F) cu valori în B). A nu se confunda fH(t1H, t2H, ... , tnH), care denotă aplicarea funcţiei fH : D(F)n → D(F) n-uplului <t1H, t2H, ... , tnH>, cu f(t1H, t2H, ... , tnH), care este valoarea aplicării anterioare, adică un term fără variabile aparţinând lui D(F), adică – în ultimă instanţă – un şir de caractere. Dacă o structură Herbrand este model pentru o formulă F, atunci spunem că F admite model Herbrand. Teorema 3.1 (de extensie). Pentru fiecare structură S = <US, IS>, extensia sa imediată S’ dată prin Definiţia 3.8 este funcţie şi este unica funcţie având domeniul X U P U F U T U LP1 şi codomeniul US U [US* → B] U [US* → US] U B, care extinde S şi satisface condiţiile: (i) S’(( F1 )) = S ′(F1 ) , pentru fiecare F ∈ LP1. (ii) S’((F1 ∧ F2)) = S’(F1) • S’(F2), pentru fiecare F1, F2 ∈ LP1. (iii) S’ ((F1 ∨ F2)) = S’(F1) + S’(F2), pentru fiecare F1, F2 ∈ LP1. (iv) S’((∀x)(G)) = 1 dacă şi numai dacă pentru fiecare u ∈ US avem S’[x/u](G) = 1 unde S’[x/u] este o interpretare care coincide cu S’ exceptând faptul că S’(x) = u (pentru fiecare x ∈ X şi fiecare G ∈ LP1). (v) S’((∃x)(G)) = 1 dacă şi numai dacă există (măcar) un element u ∈ US astfel încât S’[x/u](G) = 1 (pentru fiecare x ∈ X şi fiecare G ∈ LP1). ■ Exerciţiul 3.3. Fie F o formulă din calculul cu predicate de ordinul I, cu sau fără egalitate, (∀*)F închiderea sa universală şi (∃*)F închiderea sa existenţială. Ce se poate spune despre legătura dintre aceste formule în privinţa satisfiabilităţii (validităţii)?

50

LECŢIA 3
Să observăm că LP1 poate fi considerată ca o extensie reală a lui LP, atât la nivel sintactic cât şi la nivel semantic. Orice formulă de bază din LP1 (formulă care nu conţine variabile) poate fi interpretată ca o formulă propoziţională. Dacă formula în cauză nu conţine nici apariţii de conectori (şi, evident, de cuantori), ea va putea fi considerată drept o variabilă propoziţională. Tot variabile propoziţionale pot fi considerate şi elementele lui P0. Conchidem că din punct de vedere sintactic LP ⊆ LP1 dacă P0 este numărabilă sau dacă – măcar – F0, F1 şi P1 sunt nevide. În ultimul caz, incluziunea devine strictă dacă X este nevidă. Mai mult, considerând orice structură S ca funcţie semantică în sensul LP1, ea va fi o extensie a funcţiei corespunzătoare aplicată pentru formulele care sunt (şi) elemente ale lui LP (iar această ultimă funcţie, după cum se constată direct din definiţii, reprezintă exact o structură în sensul LP). Vom vedea că relaţia dintre LP şi LP1 este chiar mai profundă, LP putând fi considerată ca o aproximare alui LP1, la fel cum mulţimea numerelor raţionale este o aproximare a mulţimii numerelor reale. Numele folosite, logică propoziţională respectiv logică cu predicate de ordinul I, sunt legate de lipsa cuantificatorilor, respectiv de folosirea acestora pentru a „lega” doar variabilele (nu şi, de exemplu, simbolurile funcţionale sau cele predicative). Cuvântul calcul, utilizat ca un sinonim pentru logică în acest context, exprimă faptul că mulţimile (de formule) considerate nu sunt „amorfe”, ci pot fi „prelucrate” într-un mod „sistematic” (vorbim despre calculul diferenţial şi integral, de exemplu). O logică (calcul) în care ar fi permisă şi cuantificarea simbolurilor predicative (eventual şi a celor funcţionale), ar putea fi numită logică (calcul) cu predicate de ordinul II (LP2), dacă ţinem cont de faptul observat deja că (măcar) elementele lui P0 sunt formule atomice pentru LP dar „variabile” în LP1 (analog, formulele atomice din LP1 ar putea fi „variabile” în LP2). Fiecare nou tip de logică (LP1, LP2, …), trebuie să fie în acelaşi timp o extensie şi o aproximare a logicii anterioare (pe scurt, o generalizare sau o logică de ordin superior). După cum am mai subliniat de câteva ori, deşi rezultatele privind complexitatea sau tratabilitatea (algoritmică a) unor probleme importante sunt descurajatoare chiar pentru logici de ordin inferior, căutarea unor logici „mai generale” (de ordin superior, dar şi neclasice) este justificată prin mărirea puterii de exprimare. Exerciţiul 3.4. Considerând exemplul anterior, puteţi găsi o formulă F care să satisfacă aceleaşi cerinţe, exceptând folosirea explicită a lui e? Dar dacă am interzice şi folosirea explicită a simbolului de egalitate? Exerciţiul 3.5. Să se găsească o formulă care să conţină un simbol predicativ binar P şi care să exprime faptul că P este o relaţie (binară) antisimetrică pe orice mulţime considerată. Teorema 3.2 (de substituţie). Fie H ∈ LP1, oarecare. Fie orice F, G ∈ LP1 astfel încît F este o subformulă a lui H şi G este tare echivalentă cu F. Fie H’ formula obţinută din H prin înlocuirea (unei apariţii fixate a) lui F cu G. atunci H ≡ H’. ■ Echivalenţele deja cunoscute pot fi completate cu altele, care se referă la cuantori. Teorema 3.3. Pentru fiecare F, G ∈ LP1 şi fiecare x, y ∈ X, sunt adevărate următoarele echivalenţe: 1. (∀x)F ≡ (∃x)( F),  (∃x)F ≡ (∀x)( F).

51 Dacă x nu apare liber în G, atunci: (∀x)(F ∧ G) ≡ (∀x)(F) ∧ G, (∀x)(F ∨ G) ≡ (∀x)(F) ∨ G, (∃x)(F ∧ G) ≡ (∃x)(F) ∧ G, (∃x)(F ∨ G) ≡ (∃x)(F) ∨ G. 3. (∀x)(F) ∧ (∀x)(G) ≡ (∀x)(F ∧ G), (∃x)(F) ∨ (∃x)(G) ≡ (∃x)(F ∨ G). 4. (∀x)(∀y)F ≡ (∀y)(∀x)F, (∃x)(∃y)F ≡ (∃y)(∃x)F. 5. Dacă x nu apare liber în F, atunci: (∀x)F ≡ F, (∃x)F ≡ F. ■ Observaţie. Ca o consecinţă a teoremei anterioare rezultă că sunt adevărate şi echivalenţele (∀x)(∀x)F ≡ (∀x)F şi (∃x)(∃x)F ≡ (∃x)F (chiar şi variantele (∃x)(∀x)F ≡ (∀x)F, respectiv (∀x)(∃x)F ≡ (∃x)F), care se pot generaliza pentru oricâte apariţii ale cuantorilor (despre F n-am precizat că n-ar putea conţine cuantificatori). Se poate arăta însă că nu sunt adevărate echivalenţele: (∀x)F ∨ (∀x)G ≡ (∀x)(F ∨ G) şi (∃x)F ∧ (∃x)G ≡ (∃x)(F ∧ G). Să considerăm de exemplu prima relaţie de mai sus. Chiar la nivel intuitiv, cei doi membri nu exprimă acelaşi lucru deoarece faptul că F sau G este satisfăcută pentru o (aceeaşi) valoare a lui x nu înseamnă că fie F, fie G, sunt satisfăcute pentru valori ale lui x, eventual diferite. Astfel, putem lua drept contraexemplu: • F = P(x). • G = Q(x). • S = <US, IS>, US = N, PS(n) = 1 dacă şi numai dacă n este număr par, QS(n) = 1 dacă şi numai dacă n este număr impar (interpretarea lui x în S nu contează, toate apariţiile sale fiind în acest caz legate). Nici echivalenţa (∀x)(∃y)F ≡ (∃y)(∀x)F nu este adevărată pentru fiecare formulă F. ■ Putem totuşi trage concluzia că scrierea succesivă a unui aceluiaşi cuantor este inutilă, la fel fiind şi cuantificarea unei apariţii deja cuantificate (interpretarea unei variabile care nu are apariţii libere într-o formulă neavând efect în stabilirea valorii de adevăr a acelei formule, indiferent de structura considerată). 2.

CONSOLIDARE
LECŢIA 4
Deşi nu este imediat util, am preferat să începem cu rezultatul următor datorită importanţei sale în justificarea unor afirmaţii şi caracterului didactic al demonstraţiei. Intuitiv, teorema afirmă că pentru a găsi semantica unei formule F (cu ajutorul unei structuri S), formulă în care am substituit apariţiile libere ale unei variabile x cu un term de bază t, putem afla mai întâi semantica lui t în structura considerată şi apoi să găsim semantica lui F în noua structură S[x/S(t)].

52
Teorema 3.4 (lema de translaţie). Fie F ∈ LP1, x ∈ X , t ∈ T un term de bază şi S orice structură corectă pentru formulele care apar. Atunci: S((F)[x/t]) = S[x/S(t)] (F). ■ Teorema 3.5 (lema de redenumire a variabilelor legate). Fie F = (○x)G , ○ ∈ {∀, ∃}, o formulă oarecare din LP1. Fie y o variabilă nouă (în sensul că ea nu apare în G). Atunci : F ≡ (○y)(G[x/y]). Demonstraţie. Imediată, prin inducţie structurală. ■ În cele de mai sus era suficient să presupunem că y, variabila nouă, nu apare liber în G. Definiţia 3.10. O formulă F ∈ LP1 se numeşte rectificată dacă nu conţine variabile care apar atât libere cât şi legate şi nu are cuantificatori care să lege aceeaşi variabilă, dar pe poziţii diferite (indiferent dacă este vorba de cuantificatori existenţiali sau universali). ■ Teorema 3.6. Pentru orice formulă din F ∈ LP1, există o formulă rectificată F’ ∈ LP1, astfel încât F’≡ F. Demonstraţie. Se aplică de un număr finit de ori Lema de redenumire formulei iniţiale F (implicit, se aplică şi Teorema 3.3 şi Teorema de substituţie). ■ Definiţia 3.11. O formulă F ∈ LP1 este în formă normală prenex (FNP, pe scurt) dacă F = (○1y1) …(○nyn)G, unde n ∈ N (cazul n = 0 se referă la absenţa cuantificatorilor), ○i ∈ {∃, ∀} (i ∈ [n]), iar y1, … , yn sunt toate variabilele distincte care apar (liber) în G (G nu mai conţine cuantificatori). ■ Teorema 3.7. Pentru fiecare formulă F ∈ LP1, există o formulă F’ ∈ LP1, care este în FNP şi este tare echivalentă cu F. ■ Observaţie. Am arătat că pentru fiecare formulă din LP1, există o altă formulă din LP1, care este tare echivalentă cu ea şi care este în FNP rectificată (pe scurt, FNPR). Mai mult, conform Teoremei 3.3, putem presupune că nu există în această formulă cuantificatori care să lege variabile care nu apar în ea şi nici cuantificatori (relativ la o aceeaşi variabilă) cu apariţii multiple. Cu alte cuvinte, din punctul de vedere al satisfiabilităţii, ne putem limita la studiul formulelor din LP1 de forma F = (○1y1) … (○kyk)F’, unde free(F’) = {y1, y2, … , yk}, iar F’ este chiar matricea lui F, nemaiconţinând alţi cuantori (○1, ○2, …, ○k ∈ {∀, ∃}). Prin urmare, folosind şi Exerciţiul 3.3 (o formulă este satisfiabilă dacă şi numai dacă închiderea sa existenţială este satisfiabilă), putem spune că pentru testarea satisfiabilităţii unei formule din LP1, putem să ne limităm la clasa de formule având aspectul sintactic F = (○1y1)(○2y2) … (○kyk)F*, unde F* este matricea lui F iar free(F*) = {y1, y2, … yk}. Prin urmare, această formulă este şi închisă, neconţinând variabile libere. ■ Vom arăta că dacă există cuantificatori existenţiali în exprimarea anterioară, aceştia pot fi eliminaţi. Mai exact, ei vor fi înlocuiţi cu cuantificatori universali, astfel încât testul de satisfiabilitate pentru formulele din LP1 poate fi redus la textul de satisfiabilitate pentru formulele de forma F = (∀y1) … (∀yn)F*, unde {y1, y2, …, yk} = free(F*), F* neconţinând cuantificatori (matricea lui F).

53

LECŢIA 5
O altă formă normală pentru elementele lui LP1 este necesară. Definiţia 3.12. O formulă F ∈ LP1 este în formă normală Skolem (FNS, pe scurt), dacă are aspectul F = (∀x1) … (∀xk)G unde G nu mai conţine cuantificatori (matricea lui F), iar x1, x2, … , xk sunt variabile distincte şi reprezintă exact variabilele care apar în G (free(G) = {x1, x2, … , x k}). F este în formă normală Skolem clauzală (FNSC, pe scurt), dacă este în FNS şi matricea sa este în FNC (forma normală conjuctivă) într-un sens similar cu LP (literalii reprezentând formule atomice din LP1 sau negaţiile lor). ■ Teorema 3.8. Pentru fiecare formulă F din LP1, există o altă formulă F’∈ LP1, care este în FNSC şi care este slab echivalentă cu ea. Demonstraţie. Vom prezenta un algoritm prin care formula F’ va fi dedusă efectiv din formula F. Algoritm Skolem Intrare: F ∈ LP1. Fără a restrânge generalitatea, putem presupune că F este în FNPR, închisă. Ieşire: F’ ∈ LP1, aflată în FNS (şi închisă), slab echivalentă cu F. Metodă: Pasul 1. F’ : = F. Pasul 2. Cât_timp (există cuantificatori existenţiali în F’) execută: 2.1. Alege un asemenea cuantificator şi elimină-l. 2.2. Transformă formula F’. Sf_Cât_timp. Explicaţii. Orice formulă intermediară prelucrată de algoritm are forma F’ = (∀y1) … (∀yn)(∃z)G. Desigur că G poate să conţină şi alţi cuantificatori şi am pus în evidenţă primul cuantificator existenţial (alegerea fiind acum deterministă). Atunci, în urma Paşilor 2.1 şi 2.2, F’ va căpăta forma F’ = (∀y1) …(∀yn)(G)[z/f(y1, … , yn)] unde f este un simbol funcţional nou (în sensul că el nu mai apare în formulele considerate), f ∈ Fn. Să notăm cu H formula (∀y1) … (∀yk)(∃z)G, existentă înainte de execuţia unui pas al algoritmului precedent şi cu H’ = (∀y1) … (∀yk)(G)[z/f (y1, y2, … yk)] formula rezultată după execuţie. Trebuie să arătăm că H este slab echivalentă cu H’. Presupunem că H’ este satisfiabilă. Există atunci o structură corectă S = <US, IS>, astfel încât S |= H’. Ca urmare, pentru fiecare u1, u2, … , uk ∈ US avem

S [y1/u1 ][y2/u 2 ]...[yk /u k ] ((G)[z/f(y1, y2, … , yk]) = 1.
Pentru că variabilele y1, y2, … yk sunt distincte şi apar liber în G[z/f(y1, y2, … , yk)] şi pentru că structura S’ coincide cu S, exceptând valorile y1, y2, … yk, care sunt puse pe u1, u2, ... , uk, semantica LP1 ne permite să înlocuim în formula G’= G[z/f(y1, y2, … , yk] pe y1, y2, … yk respectiv cu nişte constante noi, distincte, a1, a2, … , ak şi să extindem structurile S şi S’ prin aSi = aS’i = ui , pentru fiecare i ∈ [k]. În acest moment, termul t = f(y1, y2, … , yk) va coincide cu f(a1, a2, … , ak) şi deci nu va conţine variabile. Mai mult, S’(f(y1, y2, … , yk)) = S’(f(a1, a2, … , ak)) = fS’(<S’(a1), … , S’(ak)>) = fS(<u1, … , uk>). Atunci S’(G[z/t]) = 1 şi t nu conţine variabile, astfel încât putem aplica Lema de translaţie, găsind S’[z/S’ (t)](G) = 1, adică S’ [z/S(t)](G) = 1. Sintetizând, putem spune că

54 pentru fiecare u1, … , uk ∈ US = US’, există v ∈ US (v = tS = fS(<u1, … , uk>)) astfel încât S’[z/v](G) = 1, deci S este model şi pentru H. Presupunem că H este satisfiabilă. Simplificând, demonstraţia este cumva „inversă” demonstraţiei anterioare. ■ Putem sintetiza acum rezultatele obţinute până în prezent. Teorema 3.9. Pentru fiecare formulă F ∈ LP1, există o formulă F’ ∈ LP1 astfel încât F’ ≡s F, F’ fiind în FNSC închisă (F’ = (∀y1) … (∀yn)F*, {y1, … , yn} = free(F*), F* fiind în formă normală conjunctivă). ■ Teorema 3.10. Fie F o formulă din calculul cu predicate de ordinul I fără egalitate, închisă şi aflată în FNS. Atunci F este satisfiabilă dacă şi numai dacă F admite un model Herbrand. ■ Observaţie. Tot ceea ce am afirmat sau demonstrat până la teorema anterioară este aplicabil şi în cazul calculului cu predicate de ordinul I cu egalitate. Teorema 3.10 nu este însă adevărată şi pentru LP1= , după cum se poate intui chiar urmărind demonstraţia, pentru succesul căreia relaţia (*) este esenţială. Astfel, în cazul în care P este chiar egalitatea, ea trebuie interpretată standard în orice structură. Prin urmare, considerând b şi c două constante distincte, putem găsi uşor structuri S în care bS = cS, dar b ≠ c în orice structură Herbrand. Desigur că acest lucru nu înseamnă că n-am putea găsi o altă demonstraţie a rezultatului anterior, convenabil pentru LP1=. Din păcate, faptul nu este posibil, conform rezultatelor care urmează (nu toate demonstrate explicit). ■ Teorema 3.11 (Löwenheim – Skolem). Fiecare formulă satisfiabilă din LP1 admite model cel mult numărabil. Demonstraţie. Se aplică direct Teorema 3.10. ■ Definiţia 3.13. Pentru fiecare formulă F închisă, aflată în FNS, F = (∀y1) … (∀yn)F*, {y1, … , yn} = free(F*), extensia sa Herbrand este mulţimea E(F) = {(F*)[y1/t1] • [y2/t2] • … • [yn/tn] | t1, t2, … tn ∈ D(F)}. Dacă F este în FNSC închisă (F are forma de mai sus, în plus F* fiind în FNC, F* = C1 ∧ C2 ∧ …… ∧ C k, C1, C2, ... , Ck reprezentând clauze, adică formule atomice din LP1 sau negaţii ale lor), mulţimea

E ′( F ) =

U

k

E (C i )

i =1

se numeşte extensia Herbrand generalizată. ■ Teorema 3.12 (Church). Problema validităţii pentru logica cu predicate de ordinul I (fără egalitate) este nedecidabilă. Demonstraţie. Se poate consulta [MAS]. ■ Observaţie. Ţinând cont de legătura dintre F şi  F, se deduce imediat că problema SAT pentru LP1 este nedecidabilă, ca de altfel şi problema nesatisfiabilităţii. Pe de altă parte, în cazul LP1 aceste probleme sunt totuşi semidecidabile. ■ Teorema 3.13 (Gödel-Herbrand-Skolem). O formulă F ∈ LP1 este satisfiabilă dacă şi numai dacă E(F) este satisfiabilă. ■ În Teorema 3.13 putem lua E’(F) în loc de E(F) şi, mai mult, aşa cum de altfel am mai punctat, elementele lui E’(F) pot fi privite drept clauze în sensul logicii propoziţionale, deoarece literalii din LP1 care le compun nu conţin variabile (astfel, interpretarea lor – 0 sau 1 - în orice structură S depinde practic doar de interpretarea

55 singurului simbol predicativ care apare, ceea ce se reduce la interpretarea unei variabile propoziţionale în sensul LP). Atunci este adevărată: Teorema 3.14 (teorema lui Herbrand; teorema de compactitate pentru LP1). O formulă F ∈ LP1 este nesatisfiabilă dacă şi numai dacă există o submulţime finită a lui E’(F) care să fie nesatisfiabilă. Demonstraţie. Direct din Teorema 3.13 şi Teorema de compactitate pentru LP.■ În acest moment putem spune că procedura următoare poate fi folosită corect pentru testarea nesatisfiabilităţii oricărei formule din LP1. Pasul 1 este un algoritm în sine (a se vedea şi exemplul care urmează imediat Teoremei 3.9), formula găsită la sfârşitul execuţiei sale fiind slab echivalentă cu formula iniţială şi având aspectul F = (∀*)F*, unde F* = C1 ∧ C2 ∧ … ∧ Ck. Extensia Herbrand generalizată E’(F) „rezultată” în urma aplicării Pasului 2 trebuie interpretată ca fiind o listă de clauze din LP. Datorită faptului că E’(F) nu este recursivă ci doar recursiv enumerabilă, Pasul 2 reprezintă doar un semialgoritm. După cum se observă, nici n-ar fi nevoie de obţinerea acestei liste dintr-o dată ci doar de a putea selecta câte un nou element din ea „atunci când este necesar”, conform Pasului 3.3.2, care ar putea fi reformulat prin Obţine un nou element din E’(F) (am ales altă formulare pentru uşurarea înţelegerii). Pasul 3 este de fapt semialgoritmul cunoscut ca Procedura lui Gilmore sau Procedura rezoluţiei de bază şi desigur că nu se termină în cazul în care F este satisfiabilă. Semialgoritmul lui Gilmore (Procedura rezoluţiei de bază) Intrare: Orice formulă F ∈ LP1. Ieşire: „DA”, în caz că F este nesatisfiabilă. Metodă: Pasul 1. Se transformă F într-o formulă aflată în FNSC închisă, succesiv, prin rectificare (redenumire), găsirea FNP (FNPR), obţinerea închiderii existenţiale, obţinerea FNS şi apoi FNSC, formula rezultat notându-se tot cu F. Pasul 2. Se „obţine” E’(F) = {G1, G2, ... , Gn, ... }. Pasul 3. 3.1. M := Ø. 3.2. i := 0. 3.3. Repetă 3.3.1. i := i + 1. 3.3.2. Alege Gi ∈ E’(F). 3.3.3. M := M U {Gi}. 3.3.4. M’ := Res*(M). Până_când ( ∈ M’). Pasul 4. Tipăreşte „DA”. Mai exact, putem enunţa: Teorema 3.15. Procedura rezoluţiei de bază pentru LP1 este corectă. Demonstraţie. Trebuie să arătăm că pentru fiecare F ∈ LP1 semialgoritmul anterior se opreşte dacă şi numai dacă F este nesatisfiabilă. Acest lucru rezultă imediat din faptul că E’(F) este recursiv enumerabilă, din Teorema lui Herbrand şi din Teorema rezoluţiei pentru LP. ■ Putem acum justifica de ce logica propoziţională poate fi considerată ca o aproximare a logicii cu predicate de ordinul I. Semnificaţia este aceea că E(F) (sau E’(F)) aproximează

56 pe F, deoarece testul de nesatisfiabilitate pentru F poate fi făcut testând de nesatisfiabilitate submulţimile finite ale lui E(F) (E’(F) Teorema 3.16 (a rezoluţiei de bază). Fie F ∈ LP1 şi E’(F) extensia Herbrand generalizată a unei formule slab echivalente cu F şi aflată în FNSC închisă. Atunci F este nesatisfiabilă dacă şi numai dacă există o demonstraţie prin rezoluţie (în sensul logicii propoziţionale) a lui , pornind cu (o parte din) elementele lui E’(F) . Demonstraţie. Imediată, din Teorema lui Herbrand, Teorema 3.15 şi ţinând cont de legătura care există în LP între Res*(F) şi demonstraţiile prin rezoluţie. ■ Teorema 3.17. Fie F ∈ LP1, satisfiabilă, care admite un model finit S = <US, IS> şi să presupunem că | US | = n ∈ N*. Arătaţi că pentru fiecare m ≥ n, există un model Sm pentru F, cu cardinalul universului egal cu m. Mai mult, F are şi un model numărabil, obţinut ca o „aproximare” a modelelor finite. ■ Teorema 3.18. Există o formulă închisă, satisfiabilă F ∈ LP1, astfel încât pentru fiecare model S = <US, IS> al lui F avem | US | ≥ 3. ■ Teorema 3.19. Există o formulă satisfiabilă F ∈ LP1=, astfel încât pentru fiecare model S = <US, IS> al lui F avem | US | ≤ 2. ■ Prin urmare, problema SAT pentru LP1= este „strict” nedecidabilă (în sensul că nu este nici măcar semidecidabilă). Inconvenientul practic poate fi reparat parţial (după cum am mai precizat şi vom exemplifica acest lucru în Modulul 5) prin „ascunderea” simbolului „=” într-un simbol predicativ de aritate superioară.

REZUMARE ŞI ADDENDA
Deşi teoria este foarte dezamăgitoare în privinţa rezultatelor pozitive (chiar dacă ne referim doar la calculul propoziţional, unde decidabilitatea este „răsturnată” de netratabilitate), necesitatea exprimării simple a situaţiilor reale a condus la acceptarea introducerii unor limbaje mai complexe (calculul cu predicate de ordinul I fără egalitate, calculul cu predicate de ordinul I cu egalitate, logicile cu predicate de ordinul II şi mai mare, etc.). Desigur că din punct de vedere formal rezultatele vor fi şi mai descurajante. Există însă câteva argumente solide care fac ca utilizarea logicii să constituie într-adevăr o modalitate interesantă de a interpreta programarea (vom reanaliza aceasta în Modulul 5). Pe parcursul Modului 4, în acelaşi spirit, am arătat că din din punct de vedere formal atât sintaxa cât şi semantica logicii cu predicate de ordinul I constituie o extensie simplă şi naturală a LP, că logica propoziţională este chiar o aproximare a LP1 (în cel mai pur sens matematic), că noţiunile deja folosite şi înţelese pentru LP pot fi extinse la LP1 (rezultatele fiind şi ele, în general, păstrate). Pe un plan superior, discutăm tot despre exprimarea realităţii prin formule atomice şi literali, despre obţinerea de formule compuse din formule elementare (variabilele şi cuantificatorii fac diferenţa, dar la nivel intuitiv ele reprezintă chiar o necesitate de limbaj), despre forme normale şi despre posibilităţi efective de a testa satisfiabilitatea unei formule (de natură sintactică sau semantică). Problema SAT pentru LP1= este nedecidabilă, iar pentru LP1 este semidecidabilă. Cu toate acestea, totul poate fi redus la aceeaşi problemă pentru LP („ascunzând” simbolul de egalitate şi apelând la rezoluţia de bază), unicul dezavantaj fiind – probabil – creşterea numărului de situaţii în care se poate obţine un răspuns negativ, deşi poate nu este cazul. Utilizarea rezoluţiei

57
pure pentru LP1, a unor clase particulare de formule (cum ar fi clasa formulelor Horn), adaptarea strategiilor şi restricţiilor rezoluţiei pentru cazul prezenţei variabilelor, „scufundarea” realităţii în alte tipuri de logici, rămân alternative viabile în programarea logică. Pentru Addenda: simbol funcţional de aritate i, variabilă predicativă, simbol predicativ de aritate i, constantă funcţională, cuantificator (cuantor) existenţial (universal), termi(funcţionali), formule atomice, formule (subformule,arbori), domeniul sintactic al (apariţiei) unui cuantor, apariţii libere şi legate ale variabilelor, formule închise, închiderea universală (existenţială) a unei formule, matricea uneiformule, termi (formule) de bază, substituţii, substituţii de bază, substituţii elementare, substituţii normalizate, substituţia vidă, substituţiipermise, substituţii echivalente, interpretare, extensie imediată, calculul cu predicate de ordinul I fără egalitate, calculul cu predicate de ordinul I cu egalitate, structuri şiinterpretări standard, pagina 102univers şi structură Herbrand, model Herbrand, mulţime recursiv enumerabilă, logica cu predicate de ordinul II, logici nestandard şi de ordin superior, formulă rectificată, formă normală prenex, formă normală prenex rectificată, formă normală Skolem, formă normală Skolem clauzală, extensie Herbrand, extensie Herbrand generalizată, rezoluţie de bază, unificare, rezoluţie pură.

VERIFICARE (TESTARE)
1. Definiţi constructiv free(F), F ∈ LP1. 2. Determinaţi subf(F) pentru F = ((∀x)((P(x, g(a)) ∧ Q(z)) ∨ R(u, f(v)). 3. Rezolvaţi Exerciţiul 3.1. 4. Rezolvaţi Exerciţiul 3.2. 5. Să se aplice substituţia: s = [y/h(z)]•[z/h(x)]•[x/g(f(y))] formulei F = (∀x)(P(x, f(x)) ∧ Q(g(a, z)). 6. Să se rezolve Exerciţiul 3.3. 7. Fie formula F = (∀x)(∃y)P(x, y, f(z)). Să se decidă dacă formula este satisfiabilă, validă, sau contradicţie.

58

MODULUL 4 - Teorii logice şi sisteme deductive
INTRODUCERE
Această parte a logicii formale, alcătuită din teoriile logice şi sistemele deductive (de demonstraţie) este una dintre cele mai răspândite modalităţi de exprimare a rezultatelor utilizată de către comunitatea ştiinţifică. Trecând de la un studiu naiv al realităţii la un studiu semi-fundamentat, este absolut necesar ca obiectele, conceptele, relaţiile manipulate să admită definiţii precise, ca anumite proprietăţi să fie demonstrate într-un cadru exact specificat, ca totul să poată fi făcut constructiv. Într-un limbaj mai mult sau mai puţin apropiat de limbajul natural, orice ştiinţă foloseşte afirmaţii reprezentate prin formule, un concept de adevăr asociat acestora, un mediu de natură sintactică, organizat, pentru demonstrarea adevărului unei formule. În logică, sistemele deductive reprezintă mediul de demonstrare iar teoriile logice – adevărul. În plus, aceste meta-concepte sunt tratate la nivel global iar între ele există o legătură clar subliniată. Ele sunt astfel utilizate atât în procesul de formalizare a (conţinutului) altor ştiinţe cât şi în studiile logice de bază, ceea ce poate genera din nou dificultăţi de înţelegere de tip limbaj de bază – metalimbaj. Să trecem în revistă conceptele de sistem deductiv şi teorie logică precum şi legătura dintre ele, la un nivel informal. Indiferent de tipul de logică (LP, LP1, LP1=, LP2, etc.), din punct de vedere sintactic se porneşte cu un alfabet şi se construiesc formule peste acel alfabet. Sunt apoi identificate subclase „importante”, cum ar fi clasa formulelor Horn sau clasa formulelor aflate în FNSC. O asemenea subclasă de formule – dar şi de obiecte mai complexe, pe care le vom numi metaformule - poate fi descrisă finitar cu ajutorul unui sistem deductiv (de demonstraţie). Un sistem deductiv se bazează concret pe o definiţie constructivă, care apelează la noţiunile de axiomă şi de regulă de inferenţă. Axiomele sunt formulele plasate iniţial (prin Baza definiţiei) în subclasa corespunzătoare iar regulile de inferenţă (de deducţie) reprezintă modalităţile prin care se obţin formule noi din formule vechi, prin Pasul inductiv. Cu ajutorul acestora se defineşte în mod formal, la nivel global, conceptul de raţionament (demonstraţie). Un exemplu imediat de sistem deductiv este cel bazat pe rezoluţie. Astfel, în LP pornim cu o mulţime de clauze F (formulă aflată în FNC, generatoare de axiome) şi putem găsi Res*(F) utilizând rezoluţia într-un pas ca (unică schemă de) regulă de inferenţă (orice element din Res*(F) este demonstrabil prin rezoluţie pornind cu axiomele din F). O teorie logică este o (sub)clasă de formule închisă la consecinţă semantică. Cu alte cuvinte, o mulţime T de formule este teorie logică dacă pentru fiecare submulţime S ⊆ T şi fiecare (altă) formulă G care este consecinţă semantică din S, atunci G ∈ T. Exemple imediate de teorii logice sunt constituite din clasele formulelor valide (din LP, LP1, LP1=, etc.). Cu ajutorul acestora se defineşte formal, la nivel global, conceptul de „adevăr” (elemente lui T fiind formule „adevărate”). Legătura dintre teoriile logice şi sistemele de demonstraţie se exprimă prin teoremele de corectitudine şi completitudine, adică teoreme de tipul: Tot ceea ce este „adevărat” este demonstrabil (completitudine) şi tot ceea ce este demonstrabil este „adevărat” (corectitudine). Mai precis, se poate porni cu o teorie logică şi se poate încerca „axiomatizarea” ei (adică găsirea unui sistem deductiv prin care se „generează”, sintactic, aceeaşi clasă de formule), sau invers, considerăm sisteme deductive pentru care

59 clasa formulelor generate reprezintă, în general, o teorie logică (sau chiar o parte a acesteia) formată din formule „adevărate” (valide, satisfiabile, nesatisfiabile, etc.). Ca exemple imediate, avem teorema rezoluţiei pentru LP şi teorema rezoluţiei de bază pentru LP1, deşi în acest caz nu se generează teorii logice. În ansamblu, lucrurile nu stau chiar aşa de simplu cum au fost prezentate mai sus, din cauza lipsei de spaţiu tratarea fiind departe de a fi exhaustivă. Astfel, subiectul general al teoriilor logice este foarte vast, putându-se vorbi de teorii degenerate, de teorii inconsistente, de teorii recursive şi recursiv enemerabile, etc. Mai mult, orice teorie logică trebuie să conţină toate formulele valide (având eventual o formă sintactică specificată), pentru că orice formulă validă este consecinţă semantică din orice altă clasă de formule. Dacă o teorie logică conţine o contradicţie, atunci acea teorie coincide cu întreaga clasă precizată de formule (LP, LP1, LP1=, etc.), lucru care rezultă direct din definiţii. Nici în cazul sistemelor deductive nu dispunem de un context uşor de manipulat. Utilizarea unui număr finit de (scheme de) axiome şi reguli de inferenţă pentru „prezentarea” unor teorii logice poate fi imposibilă, existând şi un număr impresionant de tipuri generale de asemenea sisteme (a se vedea noţiunile de metaformulă sau regulă de inferenţă). Aspectul teoremelor de corectitudine şi completitudine poate depinde în mod esenţial de sistemul deductiv sau de teoria aleasă (ba chiar de alfabetul peste care este construită mulţimea de formule), deşi corectitudinea poate fi mai uşor de manipulat, independent de context. Să reţinem şi faptul important că sistemele deductive pot fi utilizate „pentru ele însele”, ca mecanisme formale, de exemplu ca alternativă pentru definiţiile constructive, definind sintactic mulţimi care au şi o caracterizare semantică booleană. Lecţiile următoare, în care detaliem câteva dintre aspectele menţionate, se bazează în principal pe [CAZ], concepţia generală fiind însă originală (chiar noţiunile de sistem de demonstraţie şi teorie logică diferă uşor faţă de cele clasice, în special – dar nu numai - datorită bagajului de cunoştinţe acumulat anterior acestui curs şi presupus a fi insuficient). Începem cu prezentarea sistemelor deductive din motive psihologice, noţiunea de „adevăr” nefiind aici explicit tratată.

DEZVOLTARE
LECŢIA 1
Vom nota cu numele generic FORM clasa de metaformule în care ne vom plasa. Termenul ales se explică prin faptul că o metaformulă va fi în general un element din LP, LP1, LP1=, sau dintr-o subclasă fixată a acestora, dar ar putea fi şi o listă de asemenea elemente, sau, ieşind din sfera logicii, obiecte cu mult mai complicate decât formulele „clasice”. Mulţimea FORM va fi precizată însă în mod explicit doar atunci când va fi necesar. Definiţia 4.1. Se numeşte sistem deductiv (de demonstraţie, axiomatic) în FORM un cuplu SD = <A, R> unde A ⊆ FORM este o mulţime de axiome iar R ⊆ FORM+ × C o mulţime de reguli de inferenţă (de deducţie, de demonstraţie).■ În cele de mai sus, FORM+ denotă mulţimea relaţiilor de oricâte argumente (cel puţin unul) peste FORM, iar C o mulţime de condiţii de aplicabilitate. Fiecare regulă de inferenţă r ∈ R, are astfel aspectul r = < < G1, G2, … , Gn, G>, c>, unde n ∈ N, G1, G2, … , Gn ∈ FORM şi c ∈ C.. G1, G2, … , Gn sunt ipotezele (premizele) regulii, G reprezintă

60
concluzia (consecinţa) iar c desemnează cazurile (modalităţile) în care regula poate fi aplicată. Vom scrie chiar r = < < {G1, G2, … , Gn}, G>, c> deoarece ordinea ipotezelor nu este esenţială. Mulţimea C nu a fost specificată formal (spunând, de exemplu, că elementele sale sunt metapredicate) din cauza generalităţii ei şi pentru a nu complica inutil expunerea. Similar cu situaţia rezoluţiei, regulile vor fi folosite pentru a construi demonstraţii în paşi succesivi, la un pas aplicându-se o regulă. Există însă posibilitatea ca înafara restricţiilor sintactice „locale”, date de forma formulelor implicate, să se interzică aplicarea regulii pe considerente semantice „globale” (forma demonstraţiei, apariţia în demonstraţie a unei formule nedorite, păstrarea completitudinii unei teorii, etc.). Astfel încât dacă c este ataşată unei reguli r (atenţie, c poate lipsi, mai exact ea poate fi „condiţia mereu adevărată”) înseamnă că în orice demonstraţie, r va putea fi aplicată la un moment dat doar dacă c este adevărată la momentul respectiv. O regulă r = < < {G1, G2, … , Gn}, G>, c>, va fi scrisă şi ca:

G1, G 2 ,… , G n ,c G

În cazul în care n = 0 şi c lipseşte, r poate fi identificată cu o axiomă, după cum rezultă din definiţia care urmează. Definiţia 4.2. Fie SD = <A, R> un sistem deductiv în FORM. Se numeşte demonstraţie (pentru Fm, pornind cu F1) în SD o listă de metaformule D = F1, F2, … , Fm astfel încât pentru fiecare i ∈ [m], fie Fi ∈ A, fie Fi este obţinut din Fj1 , Fj2 , ... , Fjk folosind o regulă
r = < < { Fj1 , Fj2 , … , Fjk }, Fi>, c> ∈ R, unde j1, j2, ... , jk < i. ■

Prin urmare, fiecare element al listei D este fie o axiomă, fie este concluzia unei reguli de inferenţă ale cărei ipoteze sunt elemente anterioare din listă. Analogia cu cele deja fixate în Modulul 2 despre demonstraţiile prin rezoluţie (Definiţia 2.10 este un caz particular al definiţiei precedente) este clară şi aceasta poate fi continuată prin definirea numărului de paşi ai unei demonstraţii, reprezentarea unei demonstraţii printr-un arbore, etc. O demonstraţie se va mai numi şi deducţie (sintactică). Analog cu cazul rezoluţiei, putem defini D de mai sus, constructiv, ca fiind un arbore cu rădăcina Fm, în care frunzele (Baza) sunt axiome şi fiecare nod nou (concluzie) se obţine din noduri vechi (ipoteze), în timpul execuţiei Pasului inductiv, folosindu-se câte o regulă de inferenţă posibil de a fi aplicată (conform c). Este posibil ca pentru anumite sisteme (a se vedea sistemul SD0, Lecţia 3) – care n-au axiome sau pentru care condiţiile c o impun – arborele să aibă o definiţie directă mai simplă, sau, alternativ, noţiunea de consecinţă sintactică să fie definită cu ajutorul arborelui (necoincizând cu el), dar nu dorim în acest moment să „încărcăm” inutil textul. Definiţia 4.3. Fie SD = <A, R> un sistem deductiv în FORM. Mulţimea teoremelor lui SD este mulţimea metaformulelor care admit demonstraţii în SD, adică: Th(SD) = {F ∈ FORM | există o demonstraţie D pentru F în SD }. ■ Este imediat faptul că şi Th(SD) admite şi o definiţie constructivă (similar cu Teorema 2.11, din cazul rezoluţiei, se arată că Th(SD) coincide cu mulţimea dată mai jos): Baza: A ∈ Th(SD). Pas constructiv: Dacă r = < < {G1, G2, … , Gn}, G>, c> ∈ R şi G1, G2, … , Gn ∈ Th(SD) atunci G ∈ Th(SD).

61 Faptul că există o demonstraţie pentru F în SD va mai fi notat prin |_ SD F renunţând şi la indice în cazul în care nu există confuzii. Din motive tehnice, legate în general de demonstraţiile teoremelor de corectitudine şi completitudine, este posibil ca în anumite situaţii să lucrăm – pe lângă axiome – cu o mulţime suplimentară de metaformule (uneori, acestea nu pot fi oarecare), notată I, şi să vorbim despre demonstraţii folosind I (notat I |_ SD F, în cazul în care este vorba despre o formulă F; se mai spune că F este consecinţă sintactică din I). Practic, deşi din punctul de vedere al noţiunii de „adevăr”, sensul semantic al celor două mulţimi(A şi I) nu coincide, folosirea mulţimii suplimentare I nu înseamnă altceva decât să lucrăm obişnuit, dar în sistemul SD’ = <A’, R>, unde A’ = A U I. Sistemele anterioare au caracteristic şi faptul că pot fi finit specificate, adică atât mulţimea de axiome (inclusiv mulţimea de metaformule suplimentare) cât şi mulţimea de reguli de inferenţă sunt fie finite (cazul lui F), fie reprezintă un număr finit de scheme de elemente (cazul regulilor, lucru evident şi din specificarea mulţimii respective). Clasa regulilor poate fi însă descrisă finitar şi astfel: Pentru fiecare C1, C2 ∈ Cl, dacă C1 ≠ C2 şi există măcar un literal L astfel încât L ∈ C1 şi L ∈ C2, atunci: C1 , C 2 r: . Res(C1 , C 2 ) În acest mod, spunem că pentru descrierea regulilor am folosit o singură schemă.■ Exerciţiul 4.1. Arătaţi că metoda rezoluţiei pentru LP poate fi privită ca sistem de demonstraţie. Exemplul 4.2 (sistemul SD3). Este un sistem deductiv standard, finit specificat, care generează, după cum vom vedea (Teorema 4.1), întreaga clasă (şi numai pe aceasta) a formulelor valide din LP1 (şi introdus pentru prima dată de către A. Church în 1954). • Axiome (ASD3). Condiţiile sintactice sunt: F, G, H ∈ LP1, x ∈ X, t ∈ T, oarecare. Suplimentar, în 4., x trebuie să nu apară liber în F iar în 5., substituţia s = [x/t] trebuie să fie permisă pentru F (adică t nu conţine nume de variabile care să apară legate în F): 1. F → (G → F). 2. (F → (G → H)) → ((F → G) → (F → H)). 3. ( F →  G) → ((  F → G) → F). 4. (∀x)(F → G) → (F → (∀x)G). 5. (∀x)F → (F)[x/t]. Să remarcăm faptul că LP1 trebuie considerat ca fiind construită peste alfabetul care conţine drept conectori doar pe  şi →, unicul cuantificator acceptat fiind ∀. Dacă dorim să utilizăm şi ceilalţi conectori (cuantori), putem face acest lucru doar utilizându-i ca notaţii (de exemplu, avem A ∨ B reprezintă  A → B, etc.). • Reguli de inferenţă (RSD3). Din nou, avem doar restricţii de natură sintactică (lipsind condiţiile de aplicabilitate): F, G ∈ LP1, x ∈ X sunt oarecare, dar în 2. x trebuie să nu apară liber în F. Prima schemă de regulă se numeşte modus ponens (pe scurt, (MP)) iar a doua regula generalizării (RG).

62
F → G, F . G F 2. . (∀x )F Să arătăm, de exemplu, că în SD3 se poate genera teorema T = (A → A) (în cele ce urmează vom mai renunţa pe parcurs la unele paranteze, dacă înţelegerea nu este în pericol, deşi formal acest lucru nu este admis). Astfel, folosim Axioma 1. din exemplu, pentru F = A şi G = (A → A), găsind imediat primul element al listei care reprezintă demonstraţia, adică: E1 = A → ((A → A) → A). Folosim acum Axioma 2., punând F = A, G = (A → A) şi H = A. Obţinem: E2 = (A → ((A → A) → A)) → ((A → (A → A)) → (A → A)). Aplicăm acum (MP) pentru E2 = F → G şi E1 = F (G = (A → (A → A)) → (A → A)), găsind: E3 = (A → (A → A)) → (A → A).

1.

Punem F = A şi G = A, în Axioma 1., rezultând: E4 = A → (A → A). În sfârşit, putem folosi (MP) pentru E3 şi E4, mai exact F = A → (A → A) şi G = (A → A), găsind ceea ce doream, adică: E5 = T = (A → A). Prin urmare, am găsit în SD3 demonstraţia D : E1, E2, E3, E4, E5 = T şi putem spune că (A → A) ∈ Th(SD3) sau că |_ (A → A) (adică T este consecinţă sintactică din mulţimea vidă de formule suplimentare). În plus, aceasta este evident o formulă validă. Ca urmare, avem şi |_ ( A →  A). Exerciţiul 4.2. Arătaţi că axiomele 2. – 5. sunt formule valide şi că (RG) este o regulă corectă. Despre sistemele deductive (standard) se pot spune multe alte lucruri, la nivel general. Astfel, o proprietate gobală cerută este cea de consistenţă. Astfel, o mulţime de metaformule I este consistentă dacă nu există nici o metaformulă F astfel încât să avem atât I |_ F cât şi I |/_ F (I |/_ F notează faptul că nu este adevărat că I |_ F). Prin extensie, un sistem deductiv este consistent (necontradictoriu) dacă nu există nici o formulă F astfel încât să avem atât |_F cât şi |/_F. O altă proprietate importantă este cea a minimalităţii (independenţei). În anumite situaţii este important ca un sistem să conţină cât mai puţine axiome şi reguli de inferenţă, deşi acest lucru s-ar putea să conducă la existenţa unor demonstraţii mai lungi şi mai alambicate. Înafara sensului strict de minimalitate (lucru care depinde şi de alfabetul peste care este construită FORM), dintrun sistem dat se pot elimina acele axiome care sunt consecinţe semantice din altele (în cazul considerării unei noţiuni suport de adevăr) precum şi regulile de inferenţă derivate. Astfel, considerând orice prefix al oricărei demonstraţii D dintr-un sistem SD, acesta poate fi privit ca o nouă regulă de inferenţă (derivată din cele iniţiale). Toate aceste eliminări trebuie însă făcute fără a se pierde echivalenţa. Două sisteme SD şi SD1 sunt echivalente dacă pentru fiecare mulţime de metaformule I şi fiecare metaformulă F avem: I |_ SD F dacă şi numai dacă I |_ SD1 F. Nu avem posibilitatea detalierii acestor

63 subiecte. Vom reveni totuşi cu câteva aspecte atât în lecţia următoare cât şi în Lecţia 3, dar este absolut necesar să tratăm mai întâi câteva aspecte formale legate de teoriile logice.

LECŢIA 2
Sistemele deductive sunt folosite în principal ca element ajutător în construirea sau manipularea eficientă a unei teorii logice. Există mai multe accepţiuni ale ultimului termen chiar printre logicieni. Vom accepta definiţia care urmează din considerente legate de programarea logică. Astfel, există numeroase lumi (părţi ale realităţii, colecţie de cunoştinţe, etc.) care sunt cunoscute pur şi simplu, dar fiind foarte complexe este greu de spus dacă anumite cunoştinţe nou asimilate fac parte din aceeaşi lume, sau chiar dacă anumite cunoştinţe vechi nu sunt cumva contradictorii. Dorind să ne menţinem în cadrul general folosit până în prezent, introducerea unei noţiuni de adevăr (binar) în legătură cu o metaformulă este acum obligatorie. Prin urmare, să presupunem că clasa de metaformule FORM are ataşată şi o clasă de structuri de adevăr admisibile, Str, o structură fiind o funcţie S : FORM → B. Dacă FORM admite în plus o definiţie structurală, de tipul metaformule atomice (Baza), adăugând operatori (conectori, cuantori, etc.) şi obţinerea de metaformule noi din metaformule vechi, pe baza operatorilor (Pas constructiv), atunci admitem şi că fiecare S este extensia homomorfă a unei structuri definite iniţial pe mulţimea metaformulelor atomice. În acest mod, se păstreză toate definiţiile (conceptele) semantice folosite până în prezent. Definiţia 4.4. Se numeşte teorie (logică) orice subclasă TE a lui FORM închisă la consecinţă semantică. ■ Definiţia 4.5. Un sistem de demonstraţie SD’ = <A’, R> se numeşte corect şi complet pentru o teorie TE dacă TE = Th(SD’ ) = Cs(A’ ) şi A’ ⊆ TE. O teorie TE este axiomatizabilă dacă există un sistem deductiv SD’ = <A’, R> corect şi complet pentru ea, adică satisfăcând condiţiile anterioare. Dacă SD’ este finit specificabil, atunci teoria corespunzătoare se numeşte finit axiomatizabilă. ■ TEOREMĂ DE CORECTITUDINE ŞI COMPLETITUDINE. Fie o clasă de metaformule FORM, o clasă de structuri admisibile Str pentru FORM, un sistem deductiv SD’ = <A’, R> în FORM, A’ = A U I (A alcătuită din formule valide şi I din formule satisfiabile) şi o teorie logică TE ⊆ FORM, astfel încât TE = Cs(A’ ). Atunci Th(SD’ ) = Cs(A’ ). ■ Observaţie. A demonstra corectitudinea înseamnă a arăta că Th(SD’ ) ⊆ Cs(A’ ) iar completitudinea - Th(SD’ ) ⊇ Cs(A’ ). Teorema se mai poate enunţa şi sub una din formele: • Teoria TE admite un sistem deductiv corect şi complet. • În condiţiile date, avem, pentru fiecare metaformulă F∈ FORM: I |_ SD F dacă şi numai dacă I |= F. • Teoria TE este axiomatizabilă. În cazul în care este vorba de o teorie formată doar din formule valide (atunci va lipsi I), teorema capătă forma simplificată:

64 Pentru fiecare F∈ FORM, avem: |_ SD F dacă şi numai dacă |= F. ■ În cele de mai sus, A’ trebuia pus în loc de I, dar pentru că am folosit notaţia |_ SD F pentru faptul că F∈Th(SD), SD = <A, R>, am utilizat aceeaşi convenţie şi în cazul consecinţei semantice (adică în loc de A |= F am scris |= F). Din punct de vedere practic, de dorit sunt teoriile finit axiomatizabile. În acelaşi context, putem enunţa: Teorema deducţiei (pe scurt, TD). Dacă I, A |_ B atunci I |_ A → B. ■

CONSOLIDARE
LECŢIA 3
Vom începe cu o trecere în revistă a clasificării sistemelor deductive, din care se pot trage concluzii utile cu privire la calităţile şi defectele unor asemenea sisteme. Există desigur mai multe clasificări posibile ([CAZ]), funcţie de criteriul ales. Clasificările prezentate (care nu sunt singurele acceptate) se referă în principal la sistemele standard, în sensul acestei lucrări. • În funcţie de conectivele logice alese. Există astfel sisteme boolean complete sau boolean incomplete. Ştim că în interpretarea conectorilor logici prin structuri aceştia devin funcţii booleene. Termenul de (in)completitudine se referă astfel la faptul că mulţimea interpretărilor conectorilor aleşi în alfabetul de bază peste care este construit sistemul formează (sau nu) o mulţime completă de funcţii (în sensul Modulului 2). Sistemul SD3 este boolean complet, în timp ce un sistem care, de exemplu, foloseşte drept conector doar → (calculul implicaţional), va fi boolean incomplet. • În funcţie de relaţia avută cu o anumită teorie logică. Sistemele pot fi corecte sau nu, complete sau nu pentru o teorie dată. Toate sistemele implicate într-o teoremă de tip Gödel sunt corecte şi complete (asta este de fapt definiţia). După cum am mai precizat, completitudinea este mai greu de atins, de aceea – în lipsă de ceva mai bun - este de multe ori acceptată. Corectitudinea este de obicei impusă, deşi poate avea nişte forme mai deosebite (la sistemele nestandard, inclusiv rezoluţia). • În funcţie de importanţa acordată axiomelor sau regulilor de inferenţă. Din acest punct de vedere, se poate acorda o atenţie deosebită regulilor (adică modului de raţionament, de obţinere de cunoştinţe noi) în dauna axiomelor (cunoştinţelor primare). Acest tip de sisteme se numesc Gentzen-Jaskowski. Un asemenea sistem va fi SD0 (deducţia naturală), care este echivalent cu SD3 şi va fi prezentat în acest modul. În cazul în care balanţa este inversată (există „mult mai multe” axiome decât reguli de inferenţă), sistemele sunt cunoscute sub numele de sisteme Hilbert. • După clasa FORM aleasă. De exemplu, pentru logica clasică, putem avea sisteme propoziţionale sau sisteme predicative. Introducem acum un sistem de tip Gentzen, foarte cunoscut în literatura de specialitate (introdus pentru prima oară de G. Gentzen şi S. Jaskowski în 1934). Exemplu (deducţia naturală, sistemul SD0). Clasa FORM este LP1, construit pe baza unui alfabet care conţine conectorii , ∧ şi cuantificatorul ∀. După cum am precizat, importante într-un asemenea sistem sunt regulile de inferenţă şi definirea noţiunii de demonstraţie (deducţie, raţionament). Sistemul SD0 nu are de loc axiome, de aceea vom

65
defini direct o demonstraţie în sensul de deducţiei naturale ca fiind un anumit arbore, fără a folosi definiţia generală şi apoi să facem observaţii asupra ei în contextul dat. Să spunem totuşi că un arbore de deducţie naturală are pe nivelul 0 (frunzele) formule oarecare (ipoteze ale unor reguli de inferenţă din sistem, inclusiv elemente din eventuala mulţime suplimentară I), iar nivelele următoare se obţin constructiv, conform definiţiei generale (şi rădăcina fiind „rezultatul” demonstraţiei). Caracteristic acestui sistem este faptul că acele condiţii de aplicabilitate ale regulilor, dacă există, sunt de tipul „se anulează ipoteza F” (aici termenul ipoteză nu se referă la ipotezele regulii respective, ci la toate formulele F prezente în frunzele arborelui curent). Pentru ca anularea să nu fie efectivă (ştergerea unui nod dintr-un graf prezintă întotdeauna complicaţii tehnice), vom adopta soluţia de a marca ipotezele anulate (cu cifre, de exemplu). Dacă se doreşte, pentru evitarea confuziilor, mărcile pot fi diferite, în cazul în care regulile aplicate sunt diferite şi/sau dacă sunt aplicate la momente diferite. Tot pentru evitarea confuziilor, aceeaşi marcă se va asocia şi nodului care constituie concluzia regulii care, aplicată, a cauzat anularea. Ipotezele anulate modifică însă clasa de demostraţii acceptate într-un asemenea sistem: avem I |_SD0 G (G este consecinţă sintactică în SD0 utilizând mulţimea suplimentară de formule I; există o demonstraţie pentru G în SD0 utilizând I; există o deducţie naturală pentru G în SD0) dacă există un arbore de deducţie naturală având rădăcina G şi cu toate ipotezele neanulate aparţinând lui I. ....... ....... ....... ....... ...... ....... .......

ipoteze, anulate sau

A

A B

......

A rădăcina rădăc

În acest mod, vom avea desigur |_SD0 G doar dacă va exista un arbore de deducţie naturală cu rădăcina G, având toate ipotezele anulate. Pentru a prezenta sistemul, rămâne să dăm regulile de inferenţă din care este alcătuit, care vor primi şi un nume înafara numărului de secvenţă. Vom avea câte o (schemă de) regulă pentru fiecare A, B ∈ LP1, fiecare x ∈ X şi fiecare t ∈ T. În 5., este necesar ca substituţia [x/t] să fie permisă pentru A, iar în 6., ca x să nu apară liber în nici o ipoteză neanulată. Schemele 3. şi 4. au variante datorită necesităţii de a se „prinde” comutativitatea conjuncţiei (ne vom referi la ele ca 3’., respectiv 4’.). Deoarece substituţia [x/x] este permisă pentru orice formulă, regula 5. are şi forma particulară <<{(∀x)A}, A>, true> (care va fi notată 5’.). Să remarcăm şi faptul că regula 6. nu are nevoie de nici o restricţie sintactică în momentul în

66 care se lucrează cu formule închise. Mnemonicele provin de la următoarele cuvinte: E – eliminare; I – introducere; N – negaţie; C – conjuncţie. 1. (EN) B,  B , c = se anulează ipoteza  A. A B,  B , c = se anulează ipoteza A. A A∧B A∧B şi . A B
A, B A, B şi . A∧B B∧ A (∀x )A . A[x/t]

2. (IN)

3. (EC)

4. (IC)

5. (E∀)

A . ■ (∀x )A Demonstraţia teoremelor următoare poate fi găsită în [CAZ]. Teorema 4.2. Sistemul SD0 este corect şi complet pentru Val (LP1). ■ Teorema 4.3. Sistemele SD0 şi SD3 sunt echivalente, adică pentru fiecare mulţime de formule închise I ⊆ LP1 şi fiecare formulă F ∈ LP1, avem: I |_SD0 F dacă şi numai dacă I |_SD3 F. ■ În plus, putem spune că SD0 este un sistem predicativ (de tip Gentzen, standard), finit specificat şi boolean complet. Dacă introducem ∨, →, ↔ şi ∃ în alfabetul de bază, putem folosi şi alte reguli derivate, asupra cărora nu mai insistăm. Exerciţiul 4.3. Fie A → C, B → C, A ∨ B şi C formule oarecare din LP1 şi I ⊆ LP1. Să presupunem că I |_SD0 A → C, B → C, A ∨ B (ceea ce înseamnă că fiecare dintre formulele din membrul drept este consecinţă sintactică din I în SD0. Arătaţi că I |_SD0 C (aceasta se numeşte în logică metoda de demonstraţie prin disjuncţia cazurilor). Există numerooase alte exemple de sisteme deductive. Se poate consulta [CAZ]. 6. (I∀)

REZUMARE ŞI ADDENDA
Subiectul modulului curent este vast şi de un deosebit interes, atât pentru filozofi, matematicieni şi logicieni, cât şi pentru cercetătorii din alte domenii ştiinţifice, inclusiv informaticienii. Prin conceptul de teorie logică, noţiunea de adevăr este tratată la nivel global, ca reflectare (prin formule) a unei părţi coerente a realităţii. O bază iniţială de cunoştinţe, alcătuită din afirmaţii presupuse a fi adevărate, poate fi ulterior completată cu noi afirmaţii (cunoştinţe), despre care nu se ştia la început că reflectă aceeaşi realitate, fiind adevărate în aceeaşi măsură. Utilizând un procedeu standard (obţinerea de

67
consecinţe semantice), se pot afla chiar toate afirmaţiile adevărate, de tipul anterior menţionat. Din punct de vedere algoritmic, problema aflării tuturor consecinţelor semantice dintr-o mulţime dată de formule şi chiar problema de decizie mai mai simplă: Este formula F o consecinţă semantică din mulţimea G?, sunt de cele mai multe ori nedecidabile (cel mult semidecidabile). Chiar în cazul unor probleme de acest tip decidabile, rezultatele privind complexitatea algoritmilor care le rezolvă sunt descurajatoare (algoritmii sunt de obicei, în cazurile nebanale, exponenţiali ca timp de execuţie, deci problema este în fapt netratabilă). Abordările sintactice ale rezolvării problemelor au cel puţin două avantaje deloc de neglijat. Astfel, se pot selecta din start subclase de formule interesante, cu o formă convenabilă, pentru care rezolvarea problemei este mai simplă. Apoi, algoritmii generali bazaţi pe sintaxă (deşi nu neapărat mai eficienţi), sunt mai flexibili, mai uşor de tranformat şi adaptat, mai uşor de extins şi de a fi aplicaţi şi în alte situaţii. Sistemele deductive formalizează cele de mai sus, apelând la axiome, reguli de inferenţă şi obţinerea de consecinţe sintactice. Legătura dintre cele două noţiuni se stabileşte în mod concret prin teoreme de corectitudine şi completitudine. De multe ori suntem nevoiţi să renunţăm la completitudine şi atunci sistemele de demonstraţie sunt importante prin ele însele. De altfel, în anumite situaţii practice, sistemele deductive nu mai constituie suportul unor teorii logice şi nici măcar al ideii clasice despre adevăr. Teoriile logice şi sistemele de demonstraţie constituie prin urmare cadrul formal prin care pot fi studiate într-un mod foarte precis părţi ale realităţii prin prisma oricărei ştiinţe (vezi de exemplu teoriile matematice formale), conceptele menţionate în Prezentarea lucrării şi în Introducere (Modulul 2) nemaifiind ambigue. Pentru logicieni subiectul este inepuizabil şi foarte atrăgător, obţinându-se încă rezultate surprinzătoare. Informaticii îi revine sarcina de „ţine pasul” cu noile descoperiri în domeniu, de a adapta algoritmii existenţi şi conceptele legate de programarea logică, urmărindu-se eficientizarea acesteia şi apropierea de idealurile Inteligenţei artificiale. Cuvintele importante pe care le-am selectat nu sunt furnizate neapărat în ordinea apariţiei în text (ele reprezentând oricum o sumarizare a domeniului). Este posibil, de asemenea, ca unii termeni să fi apărut şi în Addenda altor module. Le-am repetat deoarece aici sunt prezente şi definiţiile lor formale: teorie logică, sistem deductiv( de demonstraţie), axiomă, regulă de inferenţă (reguli corecte sau sound), metaformulă, demonstraţie (consecinţă sintactică; deducţie; raţionament), axiomatizarea unei teorii logice, sistem deductiv finit specificat, sistem deductiv standard, sistem deductiv de tip Hilbert sau Gentzen, deducţie naturală, calculul cu secvenţe, sistem deductiv necontradictoriu (consistent), sistem deductiv independent şi minimal, regulă de inferenţă derivată, teoremă de corectitudine şi completitudine, sistem deductiv corect şi complet, teorie logică nedegenerată, consistentă, finit axiomatizabilă, sistem deductiv boolean complet, sistem deductiv propoziţional sau predicativ.

VERIFICARE (TESTARE)
1. Să se demonstreze în sistemul SD3 următoarele formule: (i) (A → B) → ((B → C) → (A → C)). (ii) (A → (B → C)) → (B → (A → C)).

68 (iii)   A → A. 2. Rezolvaţi Exerciţiul 4.1. 3. Rezolvaţi Exerciţiul 4.2. 4. Rezolvaţi Exerciţiul 4.3. 5. Rezolvaţi Exerciţiul 4.4. 6. Rezolvaţi Exerciţiul 4.5.

69

MODULUL 5 – Programare logică
INTRODUCERE
Să punctăm încă o dată faptul că realitatea (sumumul cunoştinţelor despre lumea reală), poate fi modelată prin afirmaţii, care pot fi reprezentate în logica formală clasică (şi nu numai), sintactic, prin formule (metaformule). Afirmaţiile au asociată o semantică (în particular, o valoare de adevăr). Clasei de formule alese, FORM, i se ataşează astfel şi o clasă de structuri, Str, prin care valoarea de adevăr (unică într-un context precizat) a oricărei formule poate fi efectiv calculată (pentru fiecare F ∈ FORM şi fiecare S ∈ Str, obţinem S(F) ∈ B). Problemele principale legate de modelarea părţii de realtate alese, se referă pe de o parte la a decide dacă formulele corespunzătoare nu sunt cumva contradicţii (sau contradictorii între ele) şi pe de altă parte la a decide dacă alte formule (reprezentând noi cunoştinţe) reflectă sau nu realitatea existentă (altfel spus, sunt sau nu consecinţe semantice din formulele iniţiale). Totul se reduce în final la decidabilitatea şi tratabilitatea unor probleme de tip SAT (vezi şi modulele anterioare). Deşi anumite rezultate teoretice, fie privind direct structura FORM şi a unor sisteme deductive pentru FORM (de exemplu, nedecidabilitatea SAT1 sau netratabilitatea SAT pentru LP), fie privind legătura dintre asemenea sisteme deductive şi Val(FORM) (lipsa unor teoreme de completitudine) sunt mai degrabă negative, există şi câteva concluzii optimiste: (semi)algoritmii sintactici pentru rezolvarea SAT sunt mai uşor de înţeles (pentru „calculator”, în mod sigur) şi de manipulat decât cei bazaţi pe semantică; ei sunt tratabili măcar pentru anumite subclase interesante de formule; chiar în lipsa unor asemenea semialgoritmi, se pot imagina anumite proceduri implementabile, de tip interactiv (dialog în timp real cu utilizatorul), care pot furniza – dacă nu răspunsuri complete – măcar răspunsuri parţiale, sau indicaţii utile despre cum (şi în ce situaţii) sar putea obţine un răspuns convenabil. Prin urmare, tot ceea ce rămâne de făcut este să se găsească asemenea algoritmi, semialgoritmi, proceduri automate, etc., pentru clase convenabile de (meta)formule, având ataşată o noţiune corespunzătoare de adevăr. Din punctul de vedere al unui utilizator, alternativa propusă de Programarea logică este atrăgătoare. Astfel, în loc să se utilizeze (pentru reprezentarea informaţiei şi prelucrarea acesteia) un limbaj de programare clasic (imperativ, orientat obiect, etc.) poate fi preferat un limbaj creat special pentru reprezentarea de (meta)formule şi în care un (semi)algoritm (sau chiar procedură interactivă) pentru rezolvarea SAT – şi bazat, de exemplu, pe rezoluţie - este implementat direct în compilatorul (interpreterul) asociat. Asemenea limbaje sunt cunoscute şi sub numele de limbaje de tip PROLOG. Este un limbaj declarativ, dedicat reprezentării şi prelucrării relaţiilor (predicatelor, afirmaţiilor). Esenţa sa este exprimată prin paradigma de programare, datorată lui R. Kowalski ([KOW]): Algoritm = Logică + Control. În sensul celor spuse anterior, prin Logică se înţelege totalitatea cunoştinţelor de care dispunem în privinţa unei „lumi” (parte a realităţii), cunoştinţe exprimate prin formule (aparţinând, în general, unui fragment al LP1=), iar prin Control – strategia (algoritmul) prin care se manipulează o clasă de asemenea formule, în vederea

70
obţinerii unui anumit răspuns (iar aceasta implementează, în general, un anumit tip de rezoluţie).

DEZVOLTARE
LECŢIA 1
Ţinând cont că scopul principal al acestui modul este doar unul introductiv într-un domeniu vast, ne vom baza în principal pe exemple (cu caracter didactic) şi nu pe enumerarea unor concepte sau rezultate formale. Deoarece este posibil ca exemplele să fie reluate şi dezvoltate, vom proceda din nou la numerotarea lor în secvenţă. Exemplul 5.1 (lumea lui Adam şi Eva). Se cunosc următoarele fapte şi afirmaţii mai complexe din/despre această lume: Evei îi plac merele. Evei îi plac vinurile. De asemenea, se ştie că: Lui Adam îi place orice persoană căreia îi plac vinurile. Am dori, în plus, să ştim dacă: Există o persoană pe care să o placă Adam? Desigur că în cazul unui răspuns pozitiv, am dori să ştim şi care anume ar fi persoana (persoanele) respectivă (respective). Conform celor spuse anterior, primul pas este să formalizăm afirmaţiile anterioare (inclusiv interogarea) prin formule din LP1. Să identificăm elementele importante din lumea considerată: Obiecte. Eva, mere, vinuri şi Adam sunt singurele obiecte (nu este nevoie, după cum se vede încă de pe acum, să facem distincţie între, de exemplu, lucruri, fiinţe/vieţuitoare, oameni/persoane, etc.) care pot fi identificate ca atare în această lume simplă. Ele vor interpretate drept (simboluri de) constante funcţionale, adică elemente ale lui F0, pe care le vom nota prin Eva, Mere, Vinuri, Adam (faptul că începem cu litere mari nu este întâmplător). Nume generice pentru obiecte. Avem nevoie de acest lucru deoarece există exprimarea Lui Adam îi place orice persoană ... . Vom nota – uzual – cu X mulţimea tuturor acestor nume (variabile) şi vom pune x, y, … ∈ X. Relaţii (legături) între obiecte. Singura relaţie identificabilă este a place. Aceasta va fi reprezentată formal printr-un simbol predicativ, notat place ∈ P2. Transformări între obiecte. Acestea s-ar reprezenta prin simboluri funcţionale de aritate mai mare ca 0. Nu există nici o asemenea transformare vizibilă. Afirmaţii. În acest moment, putem traduce cunoştinţele existente în formule. G1: place(Eva, Mere) traduce faptul Evei îi plac merele. G2: place(Eva, Vinuri) traduce faptul Evei îi plac vinurile. A treia frază exprimă ceva puţin mai complex despre lumea în cauză şi este natural să ne gândim la o formulă compusă. Putem reformula fraza mai întâi prin Dacă există cineva căruia îi plac vinurile, atunci de aceea (acela) îi place lui Adam (oricine ar fi acel cineva) şi apoi prin Dacă lui x îi plac vinurile, atunci lui Adam îi place de x, pentru fiecare x, adică obţinem: G3: (∀x)(place(x, Vinuri) → place(Adam, x)). Interogarea. Ea se traduce imediat prin Există y astfel încât lui Adam îi place de y? (alegerea unui nume diferit de x pentru variabila corespunzătoare nu este întâmplătoare), adică:

71 G: (∃y)place(Adam, y). În al doilea pas (suntem deja într-un cadru formal cunoscut), să observăm că a răspunde la întrebare (sigur că în situaţia dată răspunsul este evident) înseamnă a vedea dacă G este (sau nu) consecinţă semantică din {G1, G2, G3}, ceea ce, conform Teoremei 2.3, punctul (iii), este echivalent cu a arăta că F = G1 ∧ G2 ∧ G3 ∧  G este contradicţie. Desigur că prin transformări succesive, aducem uşor (nici măcar nu este nevoie de skolemizare) pe F la FNSC şi apoi obţinem reprezentarea lui F* ca mulţime de mulţimi: F ≡ place(Eva, Mere) ∧ place(Eva, Vinuri) ∧ (∀x)(  place(x, Vinuri) ∨ place(Adam, x)) ∧ (∀y)  place(Adam, y) ≡ (∀y) (∀x)(  place(Adam, y) ∧ place(Eva, Mere) ∧ place(Eva, Vinuri) ∧ (  place(x, Vinuri) ∨ place(Adam, x))). F* =  place(Adam, y) ∧ place(Eva, Mere) ∧ place(Eva, Vinuri) ∧ (  place(x, Vinuri) ∨ place(Adam, x)), adică: F* = {{  place(Adam, y)}, {place(Eva, Mere)}, {place(Eva, Vinuri)}, , { place(x, Vinuri), place(Adam, x)}}, unde notăm: C1 = {  place(Adam, y)}, C2 = {place(Eva, Mere)}, C3 = {place(Eva, Vinuri)}, C4 = { place(x, Vinuri), place(Adam, x)}. Al treilea pas constă acum în a găsi o respingere în LP1, pornind cu clauzele lui F*. Singura metodă cunoscută de noi până în prezent este rezoluţia de bază. Prin urmare, calculăm D(F) şi E(F) (sau/şi E’(F)). Neexistând constante de aritate mai mare ca 1, găsim imediat: D(F) = {Eva, Mere, Vinuri, Adam}. E’(F) = E(C1) U E(C2) U E(C3) U E(C4) (nu o explicităm mai mult deoarece este foarte simplă). Găsim o demonstraţie (scurtă) prin rezoluţie în LP a clauzei vide, pornind cu elementele lui E’(F), notând mai întâi cu C’1 clauza obţinută din C1 prin aplicarea substituţiei de bază [y/Eva] şi cu C’4 clauza obţinută din C4 aplicând [x/Eva] (atât C’1 cât şi C’4 aparţin lui E’(F)). Astfel, avem Res(C’1, C’4) = { place(Eva, Vinuri)} (pe care o notăm cu G’). În sfârşit, Res(G’, C3) = { }. ■ Prin urmare, am găsit un răspuns corect la interogarea noastră, dar din păcate nu am aflat şi care este (sunt) acel (acele) obiect(e) pe care îl (le) place Adam. Este adevărat că acest (unic) obiect (Eva) ar putea fi cumva dedus din substituţiile făcute (doar această substituţie conduce la succes, adică la deducerea lui ). Am avea astfel nevoie de un alt tip de rezoluţie, care aplicată unei mulţimi date de clauze din LP1 să producă în mod explicit (măcar ca un efect secundar) asemenea obiecte (substituţii, pe care le vom numi substituţii de succes). Putem trage însă şi o concluzie pozitivă, privind aspectul general al unui program, în accepţiunea programării logice. El ar conţine: • Fapte (afirmaţii simple, modelate prin formule atomice de bază din LP1), care sunt „formule elementare de program”. • Alte formule „de program” (formule compuse din LP1, mai exact formule Horn închise). • O formulă de interogare (formulă compusă din LP1, având probabil şi ea o formă mai specială).

72 Se mai observă că formulele program (să spunem G1, G2, ... , Gn) sunt chiar formule din LP1 aflate în FNSC, clauzele fiind clauze Horn având măcar un literal pozitiv (sunt clauze Horn pozitive). Formula de interogare G (numită şi scop), apare tot ca o formulă închisă, însă cuantificată existenţial. Deşi în exemplul considerat există doar un literal (pozitiv), se admite prezenţa mai multor asemenea literali, formula scop fiind de fapt o conjuncţie de literali pozitivi, închisă, aflată în FNPR. Programul interogat va fi reprezentat de formula F = G1 ∧ G2 ∧ ... ∧ Gn ∧  G (se poate considera şi reprezentarea sa ca mulţime de mulţimi, F fiind în FNSC şi clauzele fiind clauze Horn). Înainte de a furniza detalii suplimentare, considerăm utilă tratarea unui alt exemplu pentru a vedea că limbajul sugerat este la fel de puternic ca orice alt limbaj de programare de nivel înalt, putându-se efectua în acesta, de exemplu, calcule aritmetice uzuale (deşi, desigur, nu aceasta este utilitatea sa principală).

CONSOLIDARE
LECŢIA 2
Un program logic (clasic) este format dintr-o mulţime finită de formule program, alcătuită din fapte şi o mulţime de formule suplimentare. Un program logic interogat este un cuplu format dintr-un program logic şi o formulă scop. Toate formulele implicate sunt formule Horn, aflate în FNSC şi cuantificate universal (clauza scop, doar în urma negării). Definiţia 5.1 (program logic interogat; program PROLOG pur). • Program logic. Acesta conţine: o Fapte, având forma: P., unde P este un literal pozitiv din LP1. Un asemenea literal pozitiv poate avea şi variabile, presupuse a fi implicit cuantificate universal, deşi în general reprezintă o formulă de bază. Formula reprezentată este deci (∀*)(1 → P) sau (∀*)P. Putem citi „Sigur P”. Notăm cu G1 = {G1, G2, … , Gp} mulţimea (finită a) faptelor programului F. o Clauze definite (suplimentare). Aspectul lor este: P ÷ Q1, Q2, … , Qn., unde P şi Qi, i ∈ [n] sunt literali pozitivi din LP1. Formula reprezentată este (∀*)(Q1 ∧ Q2 ∧ … ∧ Qn → P) sau (∀*)(P ∨  Q1 ∨  Q2 ∨ … ∨  Qn). Se citeşte „P, în caz că Q1 şi Q2 şi ... Qn”. Notăm cu G2 = {Gp+1, G p+2, … , G p+q} mulţimea (finită a) clauzelor definite ale programului F şi cu G = G1 U G2. (uneori, chiar acest G este considerat a fi mulţimea clauzelor suplimentare). Desigur, p, q ∈ N, dar nu pot fi simultan 0. • Interogarea. Clauza scop are aspectul: o G = ? ÷ R1, R2, … , Rk. Din nou R1, R2, … , Rk sunt literali pozitivi din LP1. Dar, de această dată variabilele care apar sunt presupuse a fi cuantificate existenţial. Mai exact, clauza scop reprezintă transcrierea unei formule Horn de tipul (∃*)(R1 ∧ R2 ∧ … ∧ R k), citit „Există elemente în domeniul considerat astfel încât condiţiile R1, R2, … , Rk să fie îndeplinite?”, ceea ce prin negare furnizează formula  G = (∀*)( R1 ∨  R2 ∨ … ∨  Rk). Prin urmare, F = <G, G>. ■

73
Observaţie. După cum am văzut din exemple, execuţia unui program logic înseamnă

testarea nesatisfiabilităţii formulei ∧ G i ∧  G, pe care o vom nota tot cu F. F este în
i =1

p+q

FNSC închisă (eventual, după ce se redenumesc anumite variabile), clauzele fiind clauze Horn (eventual, reprezentate ca mulţimi). Implementarea foloseşte o strategie SLD. În fiecare pas se efectuează o rezoluţie pură, una dintre clauzele implicate fiind întotdeauna clauza scop curentă (iniţial, ea este formula de interogare G), cealaltă clauză fiind una dintre fapte sau clauzele definite aparţinând programului (pe scurt, o clauză program). Ţinând cont de forma formulelor care intervin şi de definiţia rezoluţiei pure, există o schemă simplă care completează strategia SLD. Astfel, se alege un literal (negativ) din clauza scop curentă (de obicei, acesta este primul intâlnit, ca scriere) şi capul (membrul stâng al) unei formule program, care este un literal pozitiv. Dacă este posibil, ei se unifică, obţinându-se o nouă clauză scop. Procedeul continuă şi deşi nu avem garanţia terminării lui, este tot ceea ce putem spera. Neputând intra în amănunte, ne vom limita la a descrie pe scurt rezoluţia pură. ■ Definiţia 5.2 (unificare). Fie L = {L1, L2, ... , Lk} o mulţime finită, nevidă, de literali din LP1. Ea se numeşte unificabilă dacă există o substituţie s astfel încât card((L)s) = 1. În acest caz, s se numeşte unificator pentru L. O substituţie s se numeşte cel mai general unificator pentru o mulţime unificabilă L dacă orice alt unificator s’ se „obţine” din s, adică pentru fiecare unificator s’ există o substituţie sub astfel încât s’ = s • sub. ■ Să presupunem acum că avem două clauze distincte din LP1 (nu neapărat clauze Horn şi conţinând eventual şi variabile). Ideea rezoluţiei pure se bazează pe faptul că putem unifica „cât mai mulţi” literali din cele două clauze şi apoi îi putem elimina, întrun mod similar cu rezoluţia propoziţională. Definiţia 5.3 (rezoluţia pură într-un pas, în LP1). Fie C1, C2 şi R clauze în LP1, C1 ≠ C2. R se numeşte rezolvent (pur) pentru C1 şi C2, obţinut într-un pas, dacă sunt îndeplinite condiţiile: (i) Există substituţiile de redenumire s1 şi s2 astfel încât (C1)s1 şi (C2)s2 nu au variabile comune. (ii) Există literalii L1, L2, ... , Lm ∈ (C1)s1 şi L’1, L’2, ... , L’n ∈ (C2)s2 astfel încât mulţimea: L = { L1 , L 2 , ... , L m , L’1, L’2, ... , L’n} este unificabilă. Fie sub un cel mai general unificator pentru L. (iii) R = (((C1)s1 \ {L1, L2, ... , Lm}) U ((C2)s2 \ {L’1, L’2, ... , L’n}))sub. ■ Deoarece nu există pericol de confuzii, vom folosi aceleaşi notaţii pentru rezoluţia pură ca cele adoptate pentru rezoluţia propoziţională (ceea ce se schimbă este practic doar definiţia rezolvenţilor obţinuţi într-un pas). Se pot demonstra teoremele următoare. Teorema 5.1 (Julia Robinson). Orice mulţime finită, nevidă, unificabilă, de literali din LP1, admite un cel mai general unificator. Problema testării faptului că o mulţime de literali este unificabilă, precum şi găsirea unui cel mai general unificator, sunt decidabile ([MAS]). ■

74 Există o metodă relativ simplă pentru unificarea unei mulţimi date de literali. Fără a intra în amănunte, trebuie să identificăm porţiuni de text, având un format special. Acest lucru nu se poate face decât prin intermediul variabilelor, folosind substituţiile. În plus, „apelurile” recursive, de genul „x este înlocuit cu t, care conţine x”, sunt interzise. Teorema 5.2 (a rezoluţiei pure pentru LP1). Fie F ∈ LP1 o formulă închisă, aflată în FNSC, F = (∀*)F* (F poate fi – în particular – un program PROLOG pur). Atunci, F este nesatisfiabilă dacă şi numai dacă ∈ Res*(F*), adică dacă şi numai dacă există o demonstraţie prin rezoluţie pură a clauzei vide (o respingere), pornind cu clauzele lui F ([MAS]). ■ Teorema 5.3 (completitudinea SLD-rezoluţiei). Dacă F este o mulţime de clauze Horn din LP1, atunci, dacă F este nesatisfiabilă, există o respingere pornind cu F şi care utilizează doar SLD-rezoluţia pură ([MAS]). ■

REZUMARE ŞI ADDENDA
Programarea logică este o alternativă viabilă pentru programarea clasică, în momentul în care realitatea este reprezentată şi studiată într-un mod declarativ. Datorită unor rezultate teoretice negative, clasa de formule care poate fi prelucrată este destul de restrânsă. Totuşi, clasa clauzelor Horn din LP1 este suficient de largă pentru a permite o reprezentare convenabilă a realităţii. Chiar în cadrul restrâns considerat, adoptarea presupunerii lumii închise, tratarea negaţiei, utilizarea disjuncţiei în interogări, precum şi implementarea unui dialog interactiv cu utilizatorul (care să dirijeze luarea unor decizii importante pentru execuţia unui program), înseamnă extensii importante pentru programarea logică şi justifică orientarea unei întregi generaţii de programatori şi într-o asemenea direcţie. Nici rezultatele teoretice, nici inovaţiile de implementare nu sunt defel epuizate: programare logică, limbaje de tip PROLOG, algoritm = logică + control, program logic interogat, tratarea negaţiei, ipoteza lumii închise, fapte, clauze program (definite), formule program, formulă de interogare (scop), unificare, cel maigeneralunificator, rezoluţie pură, substituţie de succes.

VERIFICARE (TESTARE)
1. Găsiţi respingerea bazată pe rezoluţia de bază cerută în Exemplul 5.2 (pagina 175). 2. Considerăm următorul program PROLOG notat F (o altă convenţie pe care n-am subliniat-o, „spune” că variabilele se notează cu litere mari, iar constantele, simbolurile funcţionale şi predicative, cu litere mici; de asemenea, simbolul ÷ este uneori înlocuit de ← sau de :-), format din clauzele program : CP1 = p(X, Z) ÷ q(X, Y), p(Y, Z). CP2 = p(X, X) . CP3 = q(c, b). Găsiţi o SLD-respingere pentru scopul G = ? ÷ p(U, b). Se cere astfel execuţia programului interogat P = <F, G>.

75

ANEXĂ – REZOLVAREA UNOR EXERCIŢII
MODULUL 1 V.1.1. Chiar fără a utiliza principiul dualităţii, demonstraţiile nu prezintă dificultăţi majore. V.1.2. Toate relaţiile corespunzătoare se regăsesc demonstrate în orice manual de algebră de clasa a IX-a. Se foloseşte definiţia egalităţii de mulţimi ca dublă incluziune. V.1.3. Folosirea tabelelor de adevăr nu credem că prezintă dificultăţi. Presupunem că am demonstrat deja x + x = 1 (a se vedea Teorema 1.1) şi x •1 = x, precum şi dualele lor. Vom utiliza un raţionament pentru a deduce relaţia: 8) x • x = x Găsim succesiv: x = x • 1 = (x + x ) = distributivitate = x • x + x • x = x • x + 0 = x • x. V.1.4. Fie două mulţimi oarecare, finite, nevide, A1 şi A2, având |A1| = n şi |A2| = m, n ∈ N*. Direct din definiţii, se deduce că |A1 × A2| = m • n. Mai mult, se ştie că numărul total de funcţii de la A1 la A2 este mn (demonstraţia este foarte simplă dacă se face prin inducţie după n). Cum |B| = 2, avem |Bn| = 2n şi trebuie să mai calculăm numărul total de funcţii de la A1 = Bn la A2 = B. V.1.5. Faptul că g este bijectivă este o consecinţă imediată a definiţiei unui termen peste mulţimea X = {x1, x2, ... , xn}. Faptul că un n-uplu e = <e1, e2, ... , en> în care, pentru fiecare i ∈ [n], avem ei∈{0, 1, 2}, poate fi interpretat într-un mod unic ca o funcţie fe : [n] → {0, 1, 2} este la fel de simplu. Astfel, definim fe(i) = ei, pentru fiecare i ∈ [n]. Se aplică apoi un raţionament similar cu cel din exerciţiul precedent. V.1.6. Presupunem că X = {x, y, z}, în această ordine. Se aplică direct Teorema 1.3 şi respectiv 1.4, găsind, de exemplu, – următoarea FNDP : f(x, y, z) = x • y • z + x • y • z + x • y • z + x • y • z + x y z . MODULUL 2 V.2.1. Teorema directă (TD) are forma ipoteze implică concluzii: TD p⇒q Apoi: TR (teorema reciprocă) q⇒p p⇒q TCD (contrara directei)  q ⇒  p. TCR (contrara reciprocei) Se poate arăta că p ⇒ q ≡  q ⇒  p. Se schimbă ceva dacă avem mai multe ipoteze sau mai multe concluzii (între ipotezele sau concluziile elementare pot exista conectori de tipul ∧ sau ∨)? O echivalenţă sintactică p ⇔ q se mai exprimă sub forma „Pentru a avea q adevărat este necesar şi suficient să avem p adevărat”. p ⇒ q este condiţia suficientă şi q ⇒ p este condiţia necesară. Grafic:

76

Obiecte care satisfac p

Obiecte care satisfac q

V.2.2. Avem lim a n = a ∈ R dacă şi numai dacă
n→∞

(∀ε > 0)(∃n ∈ N)(∀m ∈ N)(m > n ⇒ |am - a| < ε). Negaţia formulei anterioare (nu este adevărat că şirul (an)n∈N converge la a ∈ R; ceea ce nu înseamnă că (an)n∈N, nu ar fi convergent) este: (∀ε > 0)(∀n ∈ N)(∃m ∈ N)( (m > n ⇒ |am - a| < ε)) ≡ ≡ (∃ε > 0)(∀n ∈ N)(∃m ∈ N)(m > n ⇒ |am - a| ≥ ε). În cele de mai sus am anticipat câteva lucruri care vor fi prezentate formal mai târziu, în Modulele 2 şi 3. V.2.3. Notăm: p - Mi-e sete q - Beau apă. Simbolic: p → q ≡  p ∨ q. Negaţia:  ( p → q) ≡   p ∧  q ≡ p ∧  q. Exprimarea în limbaj natural: „Mi-e sete şi nu beau apă.”, care exprimă acelaşi lucru cu „Nu este adevărat că dacă mi-e sete beau apă”. V.2.4. Fie F = (( A) ∨ (B ∧ C)).

77

( )

0

∨ 000 () 00000 

00

()

001

0010

A 00000

B 00100

C 00101

Dacă am fi considerat că notaţiile tuturor operatorilor care intervin sunt prefixate (nu şi infixate, cum sunt cele pentru ∧ şi ∨), parantezele ar fi devenit uşor un accesoriu direct al oricărui operator (aşa cum de altfel este sugerat de definiţia formală a sintaxei). Arborele, în acest caz, ar putea fi: ∨() ∨ 00  () 000 A B C ∧ () 01 00

010 011 Mai sus am sugerat şi o posibilă etichetare (unică) a nodurilor unui arbore (binar), astfel încât s-ar putea defini formal, de exemplu, noţiunea de apariţie a unui simbol într-o formulă. V.2.5. Completaţi demonstraţia Teoremei 2.1. Din ultima demonstraţie structurală au mai rămas cazurile F = (F1 ∨ F2) şi F = (F1 ∧ F2). Sugerăm cititorului, datorită simplităţii calculelor, să trateze simultan aceste cazuri, folosind – de exemplu – acelaşi simbol atât pentru ∧ şi ∨, cât şi – similar - pentru + şi •.

78
V.2.6. Procedăm prin inducţie structurală. Baza: F = A ∈ A. Atunci prop(F) = {A}. Pas inductiv: (i) F = ( F1). prop(F) = prop(F1). (ii) F = (F1 ○ F2), ○ ∈ {∧ , ∨}. prop(F) = prop (F1) U prop (F2). Folosind o definiţie formală a unei formule considerate ca un arbore binar etichetat (V.2.4.), puteţi defini formal şi numărul de apariţii ale unei variabile, împreună cu poziţia la care există aceste apariţii. V.2.7. F = A ∈ A, satisfiabilă, dar nevalidă. F = A ∨  A, care este o formulă validă. F = A ∧  A, care este o contradicţie. MODULUL 3 V.3.1. Pentru formule atomice, avem: 1. P ∈ P0: free(P) = Ø. 2. n ∈ N*, t1, t2,..., tn ∈ T, P ∈ Pn,

free(P(t1, t2,..., tn)) =

U free(t ) , unde free(ti) = {x1,x2, ...,xk}.
i i =1

n

Pentru formule: • Baza: formule atomice. • Pas constructiv: F = ( F1). free(F) = free(F1). F = (F1 ∧ F2). free(F) = free(F1) U free(F2). F = (F1 ∨ F2). free(F) = free(F1) U free(F2). F = (∀x)F1. free(F) = free(F1) \ {x}, dacă x ∈ free(F1). F = (∃x)F1. free(F) = free(F1) \ {x}, dacă x ∈ free(F1). V.3.2. subf(F) = {R(u, f(v)), Q(z), P(x, g(a)), (P(x, g(a)) ∧ Q(z)), (P(x, g(a)) ∧ Q(z)) ∨ R(u, f(v)), (∀ x) (P(x, g(a)) ∧ Q(z)) ∨ R(u, f(v))}. Puteţi deduce un algoritm imperativ din cel recursiv sugerat de definiţie? V.3.3. Definirea constructivă a mulţimii leg(F), F ∈ LP1, urmează aceleaşi reguli ca la definirea mulţimii free(F). Lăsăm în seama cititorului analiza micilor diferenţe care intervin. V.3.4. Să presupunem că avem o substituţie s = [x1/t1] • [x2/t2] • ... • [xn/tn], n ≥ 2, nenormalizată. Ideea este ca, pentru fiecare i ∈ [n – 1], termii ti+1, ti+2, ... , tn să nu mai conţină pe xi. Atunci putem transforma pe s în felul următor: toate apariţiile variabilei xn în t1, t2, ... , tn-1 se înlocuiesc cu tn, apoi toate apariţiile lui xn-1 în (noii) t1, t2, ... , tn-2 se înlocuiesc cu (noul) tn-1, ş. a. m. d. V.3.5. (F)s = (∀x)(P(x, f(x)) ∧ Q(g(a, h(x)))) . Să remarcăm însă că substituţia în cauză nu este permisă pentru F. MODULUL 4 V.4.1. Avem succesiv, pentru (i), (ii), (iii) (cifrele din secvenţă sunt locale): 1. A→B, A |_ A→B, A evident _ 1., (MP) 2. A→B, A | B 2.-de două ori, şi ceva evident 3. A→B, B→C, A |_ B, B→C

79 4. A→B, B→C, A |_ C 3., (MP) 4., (TD) 5. A→B, B→C |_ A→C 5., (TD) 6. A→B |_ (B→C) →(A→C) _ 6, (TD). 7. | (A→B)→ ((B→C) →(A→C)) Pentru (ii): evident 1. A→(B→C), A |_ A→(B→C), A 1., (MP) 2. A→(B→C), A |_ B→C 2. 3. A→(B→C), A, B |_ B, B→C _ 3., (MP) 4. A→(B→C), A, B | C 4., (TD) 5. A→(B→C), B |_ A→C _ 5., (TD) 6. A→(B→C) | B→(A→C) _ 6., (TD). 7. | (A→(B→C))→ (B→(A→C)) Pentru (iii): axioma 3 din SD3 1. |_ ( A →   A)→(( A → A) →A) _ am arătat deja 2. |  A→ A 1., (ii), (MP) 3. |_ ( A →  A)→(( A →  A) →A) _ 2., 3., (MP) 4. | ( A →   A)→A _ axioma 1 din SD3 5. |   A → ( A→  A) 4., 5., (i), (MP). 6. |_   A → A V.4.2. Similar cu rezoluţia propoziţională, vom avea câte un sistem pentru fiecare F ∈ LP1, schimbându-se doar mulţimea de formule suplimentare, care este sugerat de E’(F). V.4.3. Lăsăm rezolvarea pe seama cititorului. V.4.4. Avem succesiv: 1. I |_ A→B evident _ 2. I, A | A, A→B 1. _ 3. I, A | B 2., (EI) _ 4. I, A,  B | B,  B 3. _ 5. I,  B |  A 4., (IN) _ 5., (TD), (II). 6. I |  B →  A Apoi: evident 1. I |_  B→ A _ 2. I,  B |  B,  B→ A 1. 3. I,  B→ A 2. (EI) _ 3. 4. I, A,  B | A,  A _ 5. I, A | B 4., (EN) _ 5., (TD), (II). 6. I | A → B În sfârşit: evident 1. I |_ A∨B, A→C, B→C _ 1., Ax3 2. I | A∨B,  C→ A, B→C _ 3. I | A∨B,  C→ A,  C→ B 2., Ax3 _ 4. I,  C | A∨B,  C,  C→ A,  C→ B 3. _ 4., (EI) 5. I,  C |  A, A∨B,  C,  C→ B

80 6. I,  C |_  B,  C,  C→ B 7. I,  C |_ B,  B 8. I |_ C 5., (ED) 6., (EI) 7., (EN).

MODULUL 5 V.5.1. Putem nota clauzele cu C1 = {A(x, 0, x)}, C2 = { A(x, y, z), A(x, s(y), s(z)}, C3 = { A(s(s(s(0))), s(s(0)), u)}. Găsim E’(F) folosind D(F). O respingere folosind rezoluţia de bază poate fi descrisă prin: • Substituind x = s(s(s(0))), y = s(0), z = s(s(s(s(0)))), u = s(s(s(s(s(0))))) în C2 şi C3, rezolvăm C2 cu C3 pentru a obţine C4 = { A(s(s(s(0))), s(0), s(s(s(s(0)))))}. • Substituind x = s(s(s(0))), y = 0, z = s(s(s(0))) în C2, rezolvăm C4 cu C2 pentru a obţine C5 = { A(s(s(s(0))), 0, s(s(s(0))))}. • În sfârşit, substituind x = s(s(s(0))), obţinem prin rezolvarea lui C5 cu C1. V.5.2. Substituţia finală va fi s = [X/U] • [Z/b] • [U/c] • [Y/b] • [X/b]. Ca o concluzie, (∃U)p(U, b) este consecinţă semantică din CP1 ∧ CP2 ∧ CP3, valoarea cerută a lui U fiind c.

81

TEMA DE CONTROL
2005-2006 IDD, LOGICA
1. Completaţi demonstraţia Teoremei 1.1, adică arătaţi validitatea legilor 1), 2), 3), 5),

1’) – 5’) şi x + ( x ) = 1, utilizând tabelele de adevăr.
2. Arătaţi că V = < 2V, ∩, U, CV> este o algebră booleană, oricare ar fi mulţimea (nevidă) V. În plus, demonstraţi că 0 = Ø şi 1 =V. 3. Arătaţi adevărul afirmaţiilor rămase nedemonstrate din Tabelul 1.1. 4. Justificaţi egalitatea card(FBn) = 2 2 . 5. Fie mulţimea termenilor n-ari
n

t, construiţi peste mulţimea variabilelor booleene

distincte (ordonate) X = {x1, x2, ... , xn}, precum şi mulţimea n-uplelor peste {0, 1, 2}. Arătaţi că există o funcţie bijectivă g, care „identifică” aceste mulţimi, dată prin g(t) = <e1, e2, ... , en>, unde, pentru fiecare i ∈ [n], avem ei = 0 dacă xi apare barată în t, ei = 1 dacă xi apare (nebarată) în t şi ei = 2 în rest (adică xi nu apare în t). De asemenea, arătaţi că se poate stabili o corespondenţă bijectivă între mulţimea n-uplelor peste {0, 1, 2} şi mulţimea de funcţii {f | f : [n] → {0, 1, 2}}. Deduceţi că mulţimea termenilor n-ari consideraţi va avea 3n elemente şi că vor exista 2n maxtermeni n-ari distincţi.
6. Definiţi structural prop(F), pentru fiecare F ∈ LP. 7. Arătaţi că în LP există formule satisfiabile (dar nevalide), formule valide, contradicţii. 8. Arătaţi că sunt adevărate afirmaţiile:

(a) ≡ şi ≡s sunt relaţii de echivalenţă pe LP. (b) ≡ este compatibilă la dreapta şi la stânga cu ∧, ∨ şi compatibilă cu .
9. Să se aplice Algoritmul Horn formulei:

F = ( B ∨  D) ∧  E ∧  C ∧ B ∧ ( B ∨ D ∧ B).
10. Să se exprime ca formulă în LP şi să se studieze satisfiabilitatea afirmaţiei: Vom

câştiga alegerile în condiţiile în care Popescu va fi liderul Partidului. Dacă Popescu nu este ales liderul Partidului, atunci fie Ionescu, fie Rădulescu va părăsi partidul şi vom pierde alegerile.
11. Se dă formula:

F = ((A1 ∧ A3) → (A2 → A4)) → ((A1 → A2) ∧ (A2 → A4)).

82 Să se elimine conectorii → care apar în F şi apoi să se elimine „cât mai multe” paranteze (fără a schimba semantica formulei), ţinîn-du-se cont de priorităţile atribuite operatorilor , ∨, ∧, precum şi de alte proprietăţi ale acestor operatori.
12. Să se găsească o respingere (dacă există) pornind cu clauzele:

F = {{A,  B, C}, {B, C}, { A, C}, {B,  C}, { C}}.
13. Arătaţi că formula:

F = ( B ∧  C ∧ D) ∨ ( B ∧ D) ∨ (C ∧ D) ∨ B este tautologie, folosind metoda rezoluţiei.
14. Arătaţi că formula G = (A ∧ B ∧ C) este consecinţă semantică din mulţimea de

formule G = { A ∨ B,  B ∨ C, A ∨  C, A ∨ B ∨ C} folosind metoda rezoluţiei.
15.

Mulţimea

infinită

de

formule

M

=

{A1

A2,

A2

A3,

A3 ∨ A4,  A4 ∨  A5, ... } este satisfiabilă?
16. Demonstraţi adevărul sau falsitatea următoarelor afirmaţii (există şi alte variante, pe

care le puteţi deduce singuri): (a) Dacă F → G este validă şi F este validă, atunci G este validă. (b) Dacă F → G este satisfiabilă şi F este satisfiabilă, atunci G este satisfiabilă. (c) Dacă F → G este validă şi F este satisfiabilă, atunci G este satisfiabilă.
17. Fie formula F ∈ LP, F = ( ((A ∨ B) ∧ C)), A, B, C ∈ A. Să se găsească arborele

care descrie formula şi, simultan, o FNC şi o FND pentru F (conform algoritmului recursiv sugerat de demonstraţia Teoremei 2.6).
18. Definiţi constructiv free(F), F ∈ LP1. 19. Determinaţi subf(F) pentru

F = (∀x)(((P(x, g(a)) ∧ Q(z)) ∨ R(u, f(v)))).
20. Să se aplice substituţia: s = [y/h(z)]•[z/h(x)]•[x/g(f(y))] formulei F = (∀x)(P(x, f(x)) ∧

Q(g(a, z)).
21. Fie formula F = (∀x)(∃y)P(x, y, f(z)). Să se decidă dacă formula este satisfiabilă,

validă, sau contradicţie.
22.

Găsiţi

o

formulă

F

LP1

care

conţină

un

simbol

predicativ

P ∈ P2 şi care să exprime faptul că P este o relaţie antisimetrică.

83
23. Găsiţi o formulă F ∈ LP1= care să conţină un simbol predicativ P ∈ P2 şi care să

exprime faptul că P este o relaţie de echivalenţă.
24. Fie formula

F = (∃x)(∃y)(∃z)(P(x, y) ∧ P(z, y) ∧ P(x, z) ∧  P(z, x)) şi structurile S = <US, IS> date prin: • • •

US = N, PS = {<m, n> | m, n ∈ N, m < n}. US = N, PS = {< m, m+1> | m ∈ N}. US = 2N, PS = {<A, B> | A, B ⊆ N, A ⊆ B}.

Să se decidă care dintre aceste structuri sunt modele pentru F.
25. Arătaţi că pentru fiecare formulă din LP1:

a. F este validă dacă şi numai dacă închiderea sa universală este validă. b. F este satisfiabilă dacă şi numai dacă închiderea sa existenţială este satisfiabilă.
26. Găsiţi o formulă F’ din LP1, aflată în FNSC şi slab echivalentă cu formula:

F=(∀x)(∃y)((P(x,g(y), z) ∨ (∀x)Q(x)) ∧ (∀z)(∃x)R(f(x, z),z)).
27. Arătaţi că în LP1 există formule satisfiabile dar care nu admit nici un model finit. 28. Arătaţi că:

(∃x)P(x) → P(y) ≡ (∀x)(P(x) → P(y)).
29. Daţi o axiomatizare a teoriei formale a grupurilor, fără a folosi simbolurile care

desemnează elementul neutru şi operaţia de simetrizare.
30. Exprimaţi următoarele afirmaţii prin formule din LP1:

• • •

Fiecare dragon este fericit dacă toţi copiii săi pot zbura. Dragonii verzi pot zbura. Un dragon este verde dacă este copilul a cel puţin unui dragon verde.

Arătaţi că afirmaţia Toţi dragonii verzi sunt fericiţi este consecinţă semantică din afirmaţiile anterioare. Putem modela problema anterioară ca un program
PROLOG interogat? Pentru „consistenţa” lumii modelate ar mai fi utile şi alte

afirmaţii?

84

BIBLIOGRAFIE
[BIE] [DID] [MEC] [DEX] [CAZ1] [MAS1] [MAS2] [SCH] [TIP] [BIR] [SOR] [IVA] [KNU] [COR] [LUC] [CRO] [MAS3] [ROU] [DIJ] [JUC] [KOW] Bieltz, P., Gheorghiu, D. – Logica, Manual pentru clasa a IX-a licee şi clasa a XI-a şcoli normale, Ed. Didactică şi Pedagogică, Bucureşti, România, 1996. Manualele de Algebră clasele a X-a, a XI-a, a XII-a, Analiză de liceu clasele IX-XI, Editura Didactică şi Pedagogică, Bucureşti, 2002. * Metodologia Ministerului Educaţiei şi Cercetării privind Învăţământul Deschis la Distanţă, Raport intern, Bucureşti, România, 2002. Dicţionarul explicativ al limbii române, Ed. Litera Internaţional, 2002. Cazacu, C., Slabu, V. – Logică matematică, Ed. Stefan Lupaşcu, Iaşi, România, 1999. Masalagiu, C. – Introducere în programarea logică şi limbajele de programare logică, Ed. Universităţii „Al. I. Cuza”, Iaşi, România, 1996. Masalagiu, C., Ibănescu, L., Andrei, Ş. – Practica programării în TURBO PROLOG, Ed. Universităţii „Al. I. Cuza”, Iaşi, România, 1998. Schöning, U. – Logic for Computer Scientists, Birkhäuser, Berlin, Germania, 1989. Ţiplea, F. L. – Introducere în teoria mulţimilor, Ed. Universităţii „Al. I. Cuza”, Iaşi, România, 1998. Birkhoff, G. – Latice Theory, A.M.S. Colloquium Publications, Vol. 25, 1984. Sorin, T. – Tehnici de programare, Ed. TEORA, Bucureşti, România, 1994. Ivaşc, C., Prună, M. – Bazele informaticii, Ed. PETRION, Bucureşti, România, 1995. Knuth, D. E. – Tratat de programare a calculatoarelor. Sortare şi căutare, Ed. Tehnică, Bucureşti, România, 1976. Cormen, T., Leiserson, C., Rivest, R., Stein, C. – Introduction to Algorithms, Ed. McGraw-Hill, S. U. A., 1990. Lucanu, D., Jucan, T. – Programarea calculatoarelor. Ediţia PASCAL, Ed. Universităţii „Al. I. Cuza”, Iaşi, România, 2002. Croitoru, C. – Tehnici de bază în optimizarea combinatorie, Ed. Universităţii „Al. I. Cuza”, Iaşi, România, 1992. Masalagiu, C., Asiminoaei, I., Maxim, I. - Metodica predării informaticii, Ed. MATRIX ROM, Bucureşti, România, 2001. Roussel, P. – PROLOG, Manuel de référence et d’utilisation, Groupe de I. A., Université d’Aix, Marsilia, Franţa, 1975. Dijkstra, E. W. – A Discipline of Programming, Ed. Prentice Hall, Englewood Clifs, S. U. A., 1976. Jucan, T., Andrei, Ş. - Limbaje formale şi teoria automatelor, Ed. Universităţii „Al. I. Cuza”, Iaşi, România, 2002. Kowalski, R. – Algorithm = Logic + Control, Research Report, Department of Computing and Control, Imperial College, Londra, Anglia, 1976.

Master your semester with Scribd & The New York Times

Special offer for students: Only $4.99/month.

Master your semester with Scribd & The New York Times

Cancel anytime.