A | B | ¬A | ¬B | A ∨ B | A ∧ B | A ⇒ B | A ⇔ B |
---|---|---|---|---|---|---|---|
F | F | T | T | F | F | T | T |
F | T | T | F | T | F | T | F |
T | F | F | T | T | F | F | F |
T | T | F | F | T | T | T | T |
# | Název | IN | OUT |
---|---|---|---|
1 | Zákon ekvivalence | A ⇔ B | (A ⇒ B) ∧ (B ⇒ A) |
2 | Zákon implikace | A ⇒ B | ¬A ∨ B |
3 | Zákony komutativní | A ∨ B | B ∨ A |
A ∧ B | B ∧ A | ||
4 | Zákony asociativní | A ∧ (B ∧ C) | (A ∧ B) ∧ C |
A ∨ (B ∨ C) | (A ∨ B) ∨ C | ||
5 | Zákony distributivní | A ∨ (B ∧ C) | (A ∨ B) ∧ (A ∨ C) |
A ∧ (B ∨ C) | (A ∧ B) ∨ (A ∧ C) | ||
6 | Zákony zjednodušení disjunkce | A ∨ T | T |
A ∨ F | F | ||
A ∨ A | A | ||
A ∨ (A ∧ B) | A | ||
7 | Zákony zjednodušení konjunkce | A ∧ T | A |
A ∧ F | F | ||
A ∧ A | A | ||
A ∧ (A ∨ B) | A | ||
8 | Zákon vyloučení třetího | A ∨ ¬A | T |
9 | Zákon sporu | ¬(A ∨ ¬A) | F |
10 | Zákon identity | A | A |
11 | Zákon negace | ¬(¬A) | A |
12 | Zákony De Morganovy | ¬(A ∧ B) | ¬A ∨ ¬B |
¬(A ∨ B) | ¬A ∧ ¬B | ||
13 | Eliminace AND | A1 ∧ A2 ∧ … ∧ An ⇒ Ai; i ∈ <1, n> | |
14 | Zavedení OR | Ai ⇒ A1 ∨ A2 ∨ … ∨ An; i ∈ <1, n> | |
15 | Přesun kvantifikátorů doleva (x se nevyskytuje v B!) | Qx(A) ∨ B | Qx(A ∨ B) |
Qx(A) ∧ B | Qx(A ∧ B) | ||
16 | Přesun negace dovnitř | ¬(∀x(A)) | ∃x(¬A) |
¬(∃x(A)) | ∀x(¬A) | ||
17 | Distributivní zákon pro kvantifikátory | ∀x(A) ∧ ∀x(B) | ∀x(A ∧ B) |
∃x(A) ∨ ∃x(B) | ∃x(A ∨ B) | ||
18 | Přejmenování vázaných proměnných | ∀x(A(x)) ∨ ∀x(B(x)) | ∀x∀y(A(x) ∨ B(y)) |
∃x(A(x)) ∧ ∃x(B(x)) | ∃x∃y(A(x) ∧ B(y)) |
Abychy mohl rezolvovat, musím:
Z následující databáze
dokažte pomocí rezoluční metody tvrzení:
push(E, T, [E|T]). %vložení prvku pop(E, [E|T], T). %výběr prvku
enqueue(E, [], [E]). %vložení prvku enqueue(E, [H|T2], [H|T3]) :- enqueue(E, T2, T3). dequeue(E, [E|T], T). %výběr prvku
insert(E, [], [E]). %vložení prvku insert(E, [H|T], [E, H|T]) :- precedes(E, H). insert(E, [H|T2], [H|T3]) :- precedes(H, E), insert(E, T2, T3). precedes(A, B) :- A < B. %platí pouze pro čísla! dequeue(E, [E|T], T). %výběr prvku
add(E, S, S) :- member(E, S), !. %vložení prvku add(E, S, [E|S]). delete(E, [], []). %výběr prvku delete(E, [E|T], T) :- !. delete(E, [H|T2], [H|T3]) :- delete(E, T2, T3). intersection([], _, []). %průnik dvou množin intersection([H|T1], S2, [H|T3]) :- member(H, S2), !, intersection(T1, S2, T3). intersection([H|T1], S2, S3) :- intersection(T1, S2, S3). union([], S, S). %sjednocení dvou množin union([H|T], S2, S3) :- union(T, S2, S4), add(H, S4, S3). difference([], _, []). %rozdíl dvou množin difference([H|T], S2, S3) :- member(H, S2), difference(T, S2, S3). difference([H|T1], S, [H|T3]) :- not(member(H, S)), difference(T1, S, T3). subset([], _). %testuje, zda první množina je podmnožinou druhé subset([H|T], S) :- member(H, S), subset(T, S). equal(S1, S2) :- subset(S1, S2), subset(S2, S3). %testuje rovnost množin
(defun push (E L) (cons E L)) ;vložení prvku (defun pop (L) ;výběr prvku (cond ((null L) (cond ((print "error – stack is empty!") L))) ((print (car L)) (cdr L))))
(defun enqueue (E L) (append L (cons E nil))) ;vložení prvku (defun dequeue (L) (cond ((null L) (cond ((print "error – queue is empty!") L))) ;výběr prvku ((print (car L)) (cdr L))))
(defun insert (E L) ;vložení prvku (cond ((null L) (cons E L)) ((precedes E (car L)) (cons E L)) (T (cons (car L) (insert E (cdr L)))))) (defun precedes (A B) (< A B)) ;platí pouze pro čísla! (defun dequeue (L) (cond ((null L) (cond ((print "error – queue is empty!") L))) ;výběr prvku ((print (car L)) (cdr L))))
(defun add (E L) ;vložení prvku (cond ((member E L) L) (T (cons E L)))) (defun delete (E L) ;výběr prvku (cond ((null L) L) ((equal E (car L)) (cdr L)) (T (cons (car L) (delete E (cdr L)))))) (defun intersection (L1 L2) ;průnik dvou množin (cond ((null L1) nil) ((member (car L1) L2) (cons (car L1) (intersection (cdr L1) L2))) (T (intersection (cdr L1) L2)))) (defun union (L1 L2) ;sjednocení dvou množin (cond ((null L1) L2) ((member (car L1) L2) (union (cdr L1) L2)) (T (cons (car L1) (union (cdr L1) L2))))) (defun difference (L1 L2) ;rozdíl dvou množin (cond ((null L1) nil) ((member (car L1) L2) (difference (cdr L1) L2)) (T (cons (car L1) (difference (cdr L1) L2))))) (defun subset (L1 L2) ;testuje, zda první množina je podmnožinou druhé (cond ((null L1) T) ((member (car L1) L2) (subset (cdr L1) L2)) (T nil))) (defun equal_set (L1 L2) ;testuje rovnost množin (and (subset L1 L2) (subset L2 L1)))