Explorați Cărți electronice
Categorii
Explorați Cărți audio
Categorii
Explorați Reviste
Categorii
Explorați Documente
Categorii
LOGICA COMPUTATIONALA
Note de seminar
Pag.2
p q ( r p)); (p q) ( p r)
Model de rezolvare:
2. Folosind metoda tabelelor de adevar, sa se determine interpretarile pentru care formulele date
iau valoarea fals: (p q) (p r) ; (p q) q r)
Model de rezolvare:
P
A
A
A
A
F
F
F
F
q
A
A
F
F
A
A
F
F
r
A
F
A
F
A
F
A
F
p
F
F
F
F
A
A
A
A
p q
F
F
F
F
A
A
F
F
pr
A
A
A
A
A
F
A
F
(p q) (p r)
A
A
A
A
A
F
A
A
Pag.3
Dim t(1 To NLinii, 1 To NColoane) As Boolean
Dim p As Boolean, q As Boolean, r As Boolean
Function f1() As Boolean
f1 = p or q
End Function
Function f2() As Boolean
f2 = not q or r
End Function
Function f3() As Boolean
f3 = not p or not r
End Function
Sub GenereazaValori()
Dim n As Integer
For n = 1 To NLinii
r = n Mod 2
q = (n \ 2) Mod 2
p = (n \ 4) Mod 2
t(n, 1) = p: t(n, 2) = q: t(n, 3) = r
t(n, 4) = f1: t(n, 5) = f2: t(n, 6) = f3: t(n, 7) = f1 And f2 And f3
Next
End Sub
Sub AfiseazaTabela()
Dim i As Integer, j As Integer, text As String
text = ""
For i = 1 To NLinii
For j = 1 To NColoane
text = text & t(i, j) & Chr(9)
Next
text = text & Chr(13)
Next
MsgBox text
End Sub
Sub main()
GenereazaValori
AfiseazaTabela
End Sub
Comentarii:
Pag.4
-
Pag.5
q
A
A
F
F
A
A
F
F
r
A
F
A
F
A
F
A
F
r
F
A
F
A
F
A
F
A
p r
A
A
A
A
F
A
F
A
Qr
A
A
A
F
A
A
A
F
pq
A
A
A
A
A
A
F
F
Pag.6
1.1 Consideram cazul q=A (corespunzator arcului etichetat cu q). Formula devine:
r r , deoarece (q r) r . Se observa ca formula este valida
1.2 Consideram cazul q=F (corespunzator arcului etichetat cu q). Formula devine:
A ceea ce reprezinta o formula valida.
2. Consideram cazul p=F (corespunzator arcului etichetat cu p). Prin eliminarea lui p, formula
devine:
p
q
Pag.7
' Afisare fn
Pag.8
Dim t As String, i As Integer
t = ""
For i = 1 To nfn
t = t & fn(i) & Chr(13)
Next
MsgBox t
End Sub
Sub conv_clauza(x As String)
Do Until x = ""
If Left(x, 1) >= "a" And Left(x, 1) <= "z" And Left(x, 1) <> "v" Then
adauga_in_vector (intrare_literal(Left(x, 1)))
ElseIf Left(x, 1) = "-" Then
x = Mid(x, 2)
If Left(x, 1) >= "a" And Left(x, 1) <= "z" And Left(x, 1) <> "v" Then
adauga_in_vector (-intrare_literal(Left(x, 1)))
Else
MsgBox "Clauza eronata"
Exit Do
End If
End If
x = Mid(x, 2)
Loop
End Sub
Function intrare_literal(x As String) As Integer
unui literal
Dim i As Integer, este As Boolean
este = False
i=1
Do While i <= nsim And Not este
If dsim(i) = x Then
este = True
Else
i=i+1
End If
Loop
If este Then
intrare_literal = i
Exit Function
Else
Pag.9
nsim = nsim + 1
dsim(nsim) = x
intrare_literal = nsim
End If
End Function
Sub adauga_in_vector(x As Integer)
nv = nv + 1
v(nv) = x
End Sub
Sub adauga_vector()
Dim j As Integer
nfncod = nfncod + 1
For j = 1 To nv
fncod(nfncod, j) = v(j)
Next
End Sub
Sub afiseaza_clauze_codificate()
codificate:
Pag.10
adauga_vector
Next
afiseaza_clauze_codificate
End Sub
Observatii:
Daca vrem sa codificam clauzele pentru formula:
h ( h p q ) (p c ) (q c ) (c ) (h c )
fisierul text de intrare are urmatorul continut:
h
-hvpvq
-pvc
-qvc
-c
hvc
Se foloseste caracterul minus(-) pentru operatorul de negatie si caracterul v pentru disjunctie.
Pag.11
For i = 1 To nfncod - 1
For j = i + 1 To nfncod
If fncod(i, 1) = -fncod(j, 1) And fncod(i, 2) = 0 And fncod(j, 2) = 0 Then
exista_clauze_unitare_opuse = True
Exit Function
End If
Next
Next
exista_clauze_unitare_opuse = False
End Function
Function exista_clauza_unitara() As Integer
Dim i As Integer
For i = 1 To nfncod
If fncod(i, 2) = 0 Then
exista_clauza_unitara = i: Exit Function
End If
Next
exista_clauza_unitara = 0
End Function
Pag.12
Sub sterge_clauza(n As Integer)
nr.linie
Dim i As Integer, j As Integer
For i = n + 1 To nfncod
For j = 1 To 10
fncod(i - 1, j) = fncod(i, j)
Next
Next
nfncod = nfncod - 1
n=>
End Sub
Sub elimina_literal(n As Integer)
Putnam
Dim i As Integer, j As Integer, p As Integer, k As Integer
p = fncod(n, 1)
sterge_clauza (n)
For i = 1 To nfncod
For j = 1 To 10
If fncod(i, j) = -p Then
For k = j + 1 To 10
fncod(i, k - 1) = fncod(i, k)
Next
End If
Next
Next
For i = 1 To nfncod
For j = 1 To 10
If fncod(i, j) = p Then sterge_clauza (i)
Next
Next
End Sub
Function algoritm_DP_simplificat() As Integer
Dim i As Integer
Do
If nfncod = 0 Then
algoritm_DP_simplificat = 3
Exit Do
End If
If exista_clauze_unitare_opuse Then
Pag.13
algoritm_DP_simplificat = 1
Exit Do
End If
i = exista_clauza_unitara
If i = 0 Then
algoritm_DP_simplificat = 2
Exit Do
End If
' 0 nu exista
elimina_literal (i)
afiseaza_clauze_codificate
Loop
End Function
Function multime_valida()
Dim i As Integer, j As Integer, k As Integer
Dim validg As Boolean, valid As Boolean
validg = True
For i = 1 To nfncod
valid = False
For j = 1 To 9
For k = j + 1 To 10
If fncod(i, j) <> 0 And fncod(i, k) <> 0 And fncod(i, j) = -fncod(i, k) Then
valid = True: Exit For
End If
Next
If valid Then Exit For
Next
validg = validg And valid
If Not validg Then Exit For
Next
multime_valida = validg
End Function
Sub main()
Dim i As Integer
preluare_clauze
Pag.14
afiseaza_clauze
nsim = 0: nfncod = 0
For i = 1 To nfn
nv = 0
conv_clauza (fn(i))
adauga_vector
Next
afiseaza_clauze_codificate
If nfncod = 0 Then
MsgBox "Multimea este vida"
Exit Sub
End If
If multime_valida Then
MsgBox "Multimea este valida"
Exit Sub
End If
Select Case algoritm_DP_simplificat
Case 1
MsgBox "Multime inconsistenta"
Case 2
MsgBox "Algoritmul nu se poate aplica"
Case 3
MsgBox "Multime consistenta"
Case Else
MsgBox "Algoritmul a returnat un cod eronat"
End Select
End Sub
Pag.15
pq
pr
qr
p
pr
q
p q (2,3)
r
(2,4)
p
(1,3)
(1,4)
(2,5)
2. Sa se realizeze un program care verifica inconsistenta unei multimi de clauze, folosind algoritmul
de rezolutie.
Indicatie: se va utiliza programul de codificare a clauzelor, preluate dintr-un fisier text.
3. Sa se realizeze un program care verifica daca o multime de caluze sunt clauze Horn.
Indicatie: se va utiliza programul de codificare a clauzelor, preluate dintr-un fisier text si se va
verifica pentru fiecare clauza daca are cel mult un literal pozitiv.
Pag.16
Pag.17
DataNasterii
30.08.1985
15.06.1984
11.05.1983
15.09.1982
16.10.1983
Media
9.30
8.70
8.90
9.50
7.25
Bursier
Adevarat
Fals
Fals
Adevarat
Fals
Pag.18
4.3 Care sunt studentii (Nume) din anii 1 si 2.
Model de rezolvare pt. 4.2:
Calculul relational pe tuple:
{ t | ( i ) ( s) inscris(i) sectie(s) i.denSectie = s.denSectie i.an = s.nrAni
t.nume=inscris.nume t.denSectie=inscris.denSectie
t.denFacultate=s.denFacultate}
Calculul relational pe domenii:
{ n,ds,df | ( n ) inscris(n,ds,n) sectie(ds,df,n) }
Pag.19
nr
marca
model
capacitate
data
proprietar
numar de inmatriculare
marca automobilului
modelul automobilului
capacitatea motorului (in cm3)
data inmatricularii
cnp-ul proprietarului
Pag.20
Model de rezolvare pt. 2.1: care sunt persoanele (Nume, Cnp, Localitate) din Constanta sau
Mangalia.
Model de rezolvare pt. 2.2: care sunt persoanele (Nume, Cnp) din localitatea specificata de la
tastatura in momentul executiei cererii (cerere parametrizata).
Pag.21
Model de rezolvare pt. 2.3: care sunt automobilele (nr, marca, model, capacitate) din proprietatea
persoanei al carui cnp este solicitat la momentul executiei, inmatriculate inainte de 1.1.2000.
Model de rezolvare pt. 2.4: care sunt automobilele (nr, marca, model, capacitate) din baza de date
precum si durata in ani de la inmatriculare .
Pag.22
Model de rezolvare pt. 2.5: sa se afiseze toate persoanele (Nume, Localitate, Cnp) care detin in
proprietate un automobil marca Audi inmatriculat in anul 2007.
Model de rezolvare pt. 2.6: sa se afiseze numai persoanele (Nume, Cnp, Localitate) ce sunt
proprietari de automobile.
Pag.23
Model de rezolvare pt. 2.7: Sa se afiseze toate persoanele din baza de date (Nume, Cnp,
Localitate) iar pentru cele ce detin automobile sa se afiseze marca, model si numar de
inmatriculare.
Pag.24
Pag.25
Model de rezolvare pt. 2.2: care sunt persoanele (Nume, Cnp) ce detin automobile si care este
totalul impozitelor platite de fiecare din aceste persoane.
Model de rezolvare pt. 2.3: care este totalul impozitelor platite de toti proprietarii de automobile
din Constanta.
Pag.26
Pag.27
3.3 Sa se defineasca predicatul coleg(x,y) in care x si y reprezinta numele unor persoane. Acest
predicat stabileste daca x si y au acelasi sef direct.
3.4 Sa se construiasca expresii goal pentru a raspunde la urmatoarele cereri:
-
/* sef direct */
clauses
sd(a,b).
sd(a,c).
sd(a,d).
sd(b,e).
sd(b,f).
Pag.28
a
Model de rezolvare pentru 3.2: sa se construiasca expresii goal pentru a raspunde la urmatoarele
cereri:
-
/* sef direct */
Pag.29
coleg(X,Y):-sd(Z,X),sd(Z,Y),X <> Y.
Model de rezolvare pentru 3.4: sa se construiasca expresii goal pentru a raspunde la urmatoarele
cereri:
-
Pag.30
Model de rezolvare pentru 2.2: sa se construiasca expresii goal pentru a raspunde la urmatoarele
cereri:
-
Pag.31
Goal: s(a,X)
X=b
X=c
X=d
X=e
X=f
5 Solutions
Model de rezolvare pentru 2.3:
predicates
suma(integer,integer)
clauses
suma(0,0).
suma(N,S):-N1=N-1,suma(N1,S1),S=S1+N.
Pag.32
Pag.33
Observatie: Polinomul dat este 4x3 + 3x2 + 2x + 1. Lista contine
coeficientii in ordinea inversa a gradului termenilor.
Pag.34
Observatii:
1. Programul prevede patru operatii: load pentru incarcarea unei baze de date externe, save
pentru salvarea bazei de date, add pentru adaugarea unei noi clauze, list pentru listarea
bazei de date si end pentru terminarea programului.
2. Repeat este un predicat care intoarce intotdeauna valoarea adevarat. El este util pentru
realizarea unor operatii repetitive prin backtracking.
Pag.35
Pag.36
operatie(end).
operatie("save"):-save(bd).
operatie(load):-consult(bd).
operatie(dv):-write("Verb:"),readln(X),retract(v(X)).
goal
repeat,write("operatie:"),readln(X),operatie(X),X="end".
Observatii:
1. Predicatul analiza stabileste pentru fiecare forma flexionata, forma de infinitiv, numarul si
persoana pentru verbele terminate la infinitiv in a.
2. Programul prevede definirea exceptiilor pentru verbele neregulate.
3. Predicatul sufix permite varificarea faptului ca un cuvant (argumentul 1) are o anumita
terminatie (argumentul 2), furnizandu-ne si radacina cuvantului (argumentul 3).
Pag.37
Pag.38
Observatii:
1. Expresia E data spre derivare este x3 + 1.
2. Predicatul pentru derivare este d si are 3 argumente. Primul argument este expresia ce
trebuie derivata, argumentul 2 este varaibila in raport cu care se face derivarea, iar
argumentul 3 reprezinta expresia rezultata in urma derivarii.