*{
font-family: STFangSong;
outline: none;
}

蕴含式

一、蕴含式基础

二、理解的误区

三、蕴含式中的等价式

(Ⅱ)含量词的合取式、析取式的等价式

(Ⅲ)量词辖域的扩张和收缩(八个等价式)

(2)若量词的辖域中是“蕴含式”的前件,那么作为后件的不受约束的谓词公式不可以直接进入或者退出该辖域

(3)若量词的辖域是“蕴含式”的后件,则作为前件的不受约束的谓词公式可以直接进入或者退出该辖域

(Ⅳ)“蕴含式” && 德摩根律

(2)自由元组变量在 “蕴含式” && 德摩根律 的等价式

(3)约束元组变量在 “蕴含式” && 德摩根律 的等价式

(Ⅴ)在SQL中我们重点掌握这样几个点:

(2)提高部分(SQL中的条件很少有常量条件):

(3)困难部分(常用):

③、集合X和集合Y莫得交集(对于任意的x只要属于X,必然有对于任意的y只要属于Y,一定满足条件“x≠y”):

\(\forall\ x【x(X)\ \rightarrow\ \forall\ y【y(Y) \rightarrow\ \ ^¬(x=y)】】\) ⇔ \(\forall\ x【x(X)\ \rightarrow\ \ ^¬【\exists\ y【y(Y) \bigwedge\ x=y】】】\) ⇔

\(\ ^¬【\exists\ x【x(X)\ \bigwedge\ \exists\ y【y(Y) \bigwedge\ x=y】】】\)。

更一般的情况,对于任意的x只要属于X满足p(x),必然有对于任意的y只要属于Y一定满足条件¬q(x,y),换一种说法就是,“对于任意的x只要属于X满足p(x),必然不存在y满足条件q(x,y)”:

\(\forall\ x【p(x)\ \rightarrow\ \ ^¬【\exists\ y\ q(x,y)】】\) ⇔ \(\ ^¬【\exists\ x【p(x)\ \bigwedge\ \exists\ y\ q(x,y)】】\)。

(4)需要注意的地方:

③、在(3).②中,求相交的时候并不是严格意义上的相交,因为在(ⅰ)中包含了(3).①的情况,在(ⅱ)中包含了(3).③的情况。但是这并没有影响到我们使用,因为我们一般遇到的相交的问题都是“至少”问题,不会说让我们求“集合X和Y有共同的非空元素,并且两集合不互相包含”,这样很恶心,而解决“至少”的问题一般会用其否命题“全部”问题求非来解决,所以我们就不用考虑严格意义上的相交了。

但是话又说回来,如果真的遇上了就在(3).②.(ⅰ)和(3).②.(ⅱ)之间加上合取式:

\(\exists\ x【p(x)\ \bigwedge\ \exists\ y\ q(x,y)】\quad\bigwedge\quad\exists\ x【p(x)\ \bigwedge\ \ ^¬【\exists\ \ y\ q(x,y)】】\)。但是千万注意存在量词只能对析取式进行分配。

④、【注意:】

四、所以说……我到底想要表达什么?

​很好理解吧,但是这里我并不只是bb离散数学,而是要将这玩意儿和SQL的实际情况相结合。在SQL中有一个很巧妙但是让人们感到十分蛋疼的一个机制:没有“全称量词∀”。这时我们就需要运用上面所学到的相关知识,将这些“全称量词∀”转换为“存在量词∃”。怎样表述命题之间的关系、怎样转换为不含“全称量词∀”的命题,这些在(三)中已经有所了解了,那我们来看下面一个实例。

​但是终究不能用元组关系演算来进行筛选,还得转换为SQL标准语言。用到(三)中的公式:

​转换为SQL语句:

SELECT SNo, SN
FROM S
WHERE
NOT EXISTS (
SELECT *
FROM C
WHERE
NOT EXISTS (
SELECT *
FROM SC
WHERE CNo = C.CNo AND SNo = S.SNo
)
)

​这里其实有一个很容易弄错的地方:误以为连接SC表和S表的元组变量要单独写一个“\(\exists\ sc【sc(SC)\ \bigwedge\ sc.sno = s.sno】\)”,也就是说将两个表间的连接独立开,各连各的。这个想法非常的幼稚,为什么这样说呢,打一个形象的比方:S表相当于左边的一个岸,C表相当于右边的一个岸,SC表显然就是连接两岸的桥,如果说想要用SC表将C表和S表连起来,那么肯定就需要找到同一个SC表中的元组sc,让它左手牵S表的元组s,同时右手牵着C表的元组c;如果这不是同时牵的话,就很可能导致桥不是同一个桥,即不是同一个sc元组。下面我们是可以通过简单的逻辑证明来表述的。如果我们将这两个连接独立,则会得到:

五、总结

六、实例

05-11 20:41