两个例子
看一下怎么用表达逻辑描述问题
数独问题
用
Dki,j
∈(true,false)
表示第i行,第j列的数值为k是真的或假的。
那么数独的规则则可以如下描述 :
1.每行至少出现一个1:(只写第一行,列与区域以此类推)
D11,1∨D11,2∨D11,3∨D11,4∨D11,5∨D11,6∨D11,7∨D11,8∨D11,8
2.每行最多出现一个1:
这个就饶了我吧,太长了,思路是:1所在位置有9种可能性那么就把他们并起来吧
1在第一格的描述如下:
D11,1∧¬D11,2∧¬D11,3∧¬D11,4∧¬D11,5∧¬D11,6∧¬D11,7∧¬D11,8∧¬D11,8
3.每个格最多只能有一个数字,表示如下
¬(Dsi,j∧Dti,j)
其中1<=i,j,s,t<=9并且s
八皇后问题
呵呵
表达逻辑的基本概念
逻辑标志:1,0,
¬
,
∧
,
∨
,
→
,
↔
,(,)
Signatur:Symbol(Atom)的集合,用
∑
表示
Formel:表示为
For0∑
即公式的意思,包括1,0,
∑
,及
∑
中的各种运算如:非,交,并等
Interpretation:关于
∑
的一个interpretation就是任意的到{true,false}上的映射
表示为I:
∑→
{ture,false}
取值(Auswertung):每个针对
∑
的Interpretation都有一个确定的取值,表示为:
valI:For0∑→
{true,false}
Modell:Formel A
∈For0∑
,当一个针对
∑
的Interpretation I 满足
valI(A)=W
. 就说这个Interpretation是Formel A的一个Modell
普遍正确(Allgemeingueltig):
A∈For0∑
被称为普遍正确的,当对所有的Interpretation有
valI(A)=true
.
可实现(Erfuellbar)
A∈For0∑
被称为可实现的,当存在一个Interpretation可以实现
valI(A)=true
.
M⊨A
:有M可以退出A,即M的任意一个Modell同时也是A的Modell。
例子:一些普遍正确的Formeln
A→A
//Selbstimplikation
¬A∨A
//Tertium non datur
A→(B→A)
//Abschwaechung 这个可以有
0→A
//Ex falso quodlibet
(A∧(A→B))→B
//Modus Ponens 呵呵了
A∧A↔A
//Idempotenz
(¬¬A)→A
//Doppelnegation
A∧(A∨B)↔A
//Absorption
(A↔B)↔((A→B)∧(B→A))
//Aequivalenz/Implikation
A∧(B∨C)↔(A∧B)∨(A∧C)
//Distributivitaet
A∨(B∧C)↔(A∨B)∧(A∨C)
//Distributivitaet
//以上Formeln可通过转换(umformen)或真值表来证明
几个重要的定理
A 可实现
↔¬A
普遍正确 //一般用于证明可实现
⊨A↔
A 普遍正确 //即
∅⊨A
空集恒真
⊨¬A↔
A 不可实现
A⊨B↔⊨A→B
M∪A⊨B↔M⊨A→B
Boolesche Funktionen
就是公式表达式,包括了定义和完备性(Vollstaendigkeit)的说明
Craigsch插值定理(Craigsche Interpolationslemma)
A,B 为AL Formeln并且有
⊨A→B
那么就存在C满足
⊨A→C且⊨C→B
(C中的Atom不能超出A, B的范围)。这个C就是我们的插值。
那么如何快速的找到这个插值呢,因为插值无论真假对原式并无影响,所以用一下方法找到插值:
假设
P1,...Pn
为在A中出现当却不在B中出现的Atom,从A出发我们通过使用
ci
代替
Pi
构建新的Formeln称为A[
c1,...,cn
],其中
ci∈
{1,0},如此我们可以得到插入值:
C≡⋁(c1,...,cn)∈(1,0)nA[c1,...,cn]
简单的例子
A=P1∧P2,B=P1∨P3
那么
P2
是A中的Atom,而没出现在B中
A[1]=P1∧1↔P1
A[0]=P1∧0↔0
C=A[1]∨A[0]↔P1
所以
P1
就是插值
//这是P只有一个时的情况所以看起来这方法还是相当不错的
//但是其实这个方法的实用性并不高,因为随着P的数目的增加,A[]的数目呈现指数增长。