我遇到了一个问题,
给定以下关系模式
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,s 是学生 & s 是女性 & s 在 d 的部门。
对于 no s,s 是学生 & s 是女性 & s 在 d 的部门。
~∃x P
是∀x ~P
。~∃x (Q ∧ R)
就是这样。∀x (~Q V ~R)
_∀x (Q → ~R)
我们得到:对于所有 s,如果 s 是学生,那么要么他们不是女性,要么他们所在的部门不是 d 的。
对于所有学生,要么他们不是女性,要么他们的部门不是 d's。
出于某种原因,你改变了符号(但不是意思)并将其写为:
您没有解释您认为这意味着什么,因此不清楚为什么您认为它与否定的存在意义不同。但他们的意思是一样的。
当所有学生都是非女性或不在 d 的部门时,forall 为真。但否定的存在主义也是真实的。否则,有些学生是女的并且在 d 的部门,而 forall 是假的。但被否定的存在主义也是错误的。(“否则”显然是存在主义的。)
您没有解释通用量化失败和成功的概念。您的“找不到返回错误”是为了存在。(即“找到一个返回 true”。)但是“找不到所有返回 false”是通用的。(即“找到所有返回真”。)(不是“找不到一个返回真”或“找到一个返回假”。)
当存在主义找不到女学生并且在 d 的系里时——错误,否定为真——普遍发现所有学生要么不是女性,要么不在 d 的系里——真。否则,两个表达式都返回 false。他们总是返回相同的结果。