與元組關係微積分運算的混淆
我遇到了一個問題,例如,
給定以下關係模式
**Student** (studId, name, age, sex, deptNo, advisor)
**Department** (deptId, DName, hod, phoneNo)
以下哪項是元組關係演算查詢以獲得沒有女生的**部門名稱?
給出的正確答案是
{d.Dname | department(d) ∧ ~ ((∃(s)) student(s) ∧ s.sex = ‘F’ ∧ s.deptNo = d.deptId)}
我對它的解釋是,對於每個系,內在邏輯是試圖找到至少一個來自同一系的女性學生。現在,如果它找不到一個,它返回 FALSE,否定將使它成為 TRUE,因此 Dname 將被列印。這很好。
但是如果我否定邏輯,即流否定符號,那麼內部邏輯就變成了,
((∀s ∈ student) s.sex ≠ ‘F’ ∨ s.deptNo ≠ d.deptId)
這和上面的意思是什麼意思?我無法想像。
任何幫助表示讚賞。提前致謝。
∃s (student(s) ∧ s.sex = ‘F’ ∧ s.deptNo = d.deptId)
對於某些 s,s 是學生,s 是女性,s 在 d 的部門。
~∃s (student(s) ∧ s.sex = ‘F’ ∧ s.deptNo = d.deptId)
對於沒有 s,s 是學生,s 是女性,s 在 d 的部門。
~∃x P
是∀x ~P
。~∃x (Q ∧ R)
也是如此。∀x (~Q V ~R)
_∀x (Q → ~R)
我們得到:∀s (student(s) → (s.sex ≠ ‘F’ ∨ s.deptNo ≠ d.deptId))
對於所有 s,如果 s 是學生,則要麼他們不是女性,要麼他們的部門不是 d。
對於所有學生,要麼他們不是女性,要麼他們的部門不是 d’s。
出於某種原因,您更改了符號(但不是含義)並將其寫為:
∀s ∈ student(s) (s.sex ≠ ‘F’ ∨ s.deptNo ≠ d.deptId))
你沒有解釋你認為這意味著什麼,所以不清楚為什麼你認為它與被否定的存在主義不同。但它們的意思是一樣的。
當所有學生都不是女性或不在 d 部門時,forall 為真。但被否定的存在主義也是正確的。否則,某個學生是女性並且在 d 的部門,並且 forall 是錯誤的。但是被否定的存在也是錯誤的。(“否則”顯然是存在的。)
現在,如果它找不到一個,它返回 FALSE 並且否定將使它成為 TRUE
你沒有解釋你的普遍量化失敗和成功的概念。您的“找不到一個返回錯誤”是為了存在主義。(即“找到一個返回真”。)但是“找不到所有返回假”是通用的。(即“找到所有返回真”。)(不是“找不到一個返回真”或“找到一個返回假”。)
當存在主義未能找到女性且在 d 部門的學生時——假,否定為真——普遍發現所有學生要麼不是女性,要麼不在 d 部門——為真。否則,兩個表達式都返回 false。它們總是返回相同的結果。