本文主要是介绍Formal sys-pradicate syntax,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
基础知识
逻辑符号(Logische Zeichen)
首先是在表达逻辑里已经出现过的:
¬,∧,∨,→,↔,(,)
然后还有几个新的:
∀ :表示所有的
∃ :表示存在
Vi :表示变量//也可以用var表示
≐ :客观相等//给汗了,啥意思啊???
(objektsprachliches Gleichheitssymbol)
Signature
一个Signature是指一个三元组(Tripel) ∑=(F∑,P∑,α∑) :其中
F∑,P∑ 是有限的或者是可数无限的(albzählbar unendliche Menge)//也就是可以用自然数连续编号的。
F∑,P∑ 和前面说到的特殊符号两两不相交//就是不重复得意思
α∑:F∑∪P∑→IN //表示映射
f∈F∑ 叫做函数符号(Funktionssymbol)
g∈P∑ 叫做谓词符号(Prädikatssymbol)//也有叫断言符号的
α∑ 是符号中参数个数的映射
f是含有n个参数的函数符号(n-stelliges Funktionssymbol)时有 α∑(f)=n
相应的p如果是含有n个参数的谓词符号(n-stelliges Prädikatssymbol),那么就有 α∑(p)=n
一个不含有参数的函数符号(nullstelliges Funktionssymbol)又被称为常量符号或者直接就叫做常量
一个不含有参数的谓词符号(nullstelliges Prädikatsymbol)就是表达逻辑中的Atom
Term
Term可以通过归纳法(induktiv)来定义:
1. Var∈Term∑
2.如果有 f∈F∑,α∑(f)=n,t1,...,tn∈Term∑ ,那么 f(t1,...,tn)∈Term∑
//不含有变量的Term,可以叫做Grundterm
Formel
Atom Formel:
At∑:= { s≐t|s,t∈Term∑ } ∪ { p(t1,...tn)|p∈P∑,α∑(p)=n,ti∈Term∑ }
Formel:
For∑ 也可以同过归纳法(induktiv)来定义:
1.{1,0} ∪At∑⊆For∑
2.如果 x∈Var,A,B∈For∑ ,那么下列也属于 For∑ :
¬A,(A∧B),(A∨B),(A→B),(A↔B),∀xA,∃xA
自由变量和约束变量(Gebundene und freie Variable)
Vx(p0(x,y)) 里面x就是约束变量,y就是自由变量
约束变量就是被量词约束着的变量,自由变量与之相反。
符号表示
已知有 A∈For∑t∈Term∑ :
Bd(A) :={x| x∈Var,x是A中的约束变量 }
Fr(A):={x| x∈Var,x是A中的自由变量 }
Var(A):= Fr(A)∪Bd(A)
Var(t):={x| x∈Var,x在t中出现 }
Abschlussoperationen für Formeln
//看不懂这节 怎么看都觉得他写矛盾了
替换(Substitutionen)
替换就是指一个映射: σ:Var→Term∑ 其中对于几乎所有的变量var有 σ(x)=x //就是用Term替换变量
就像是那semantic替换syntax,举个例子
x=f(u)+g(v),m(x)⇝m(f(u)+g(v))
存在 σ(x)≠x 的,比如x=x+1
用符号表示替换
当:
{ x|σ(x)≠x } ⊆ { x1,...,xm }
σ(xi)=si i=1,…,m
我们可以把这个替换表示为:
{ x1/s1,...,xm/sm }
//即用 si 替换 xi
另外,我们定义id(x)=x//id表示identische Substitution
替换的应用
已知有: σ 是一个替换,t指代Term, ∅ 指代一个Formel 那么就有:
σ(t): 同时替换所有在 σ 中出现的变量
σ(∅): 只替换 σ 中出现的自由变量
例子
1. σ= {x/f(x,y),y/g(x)} ⇒ σ(f(x,y))=f(f(x,y),g(x))
2. σ= {x/c,y/d} ⇒ σ(∃yp(x,y))=∃yp(c,y)
3. σ= {x/y} ⇒ σ(∀yp(x,y))=∀yp(y,y)
然后问题就出现了,在第三个例子中,我们把一个自由变量变成了约束变量。这就是所谓的替换的collision了
无冲突的替换(Kollisionsfreie Substitution)
就是字面意思,指不会出现上面的情况的替换。即对于Formel的替换,自由变量替换后用到的变量应该不属于原Formel的约束变量。
多个替换组合(Komposition von Substitution)
假如 τ , σ 是两个替换,那么我们定义:
(τ∘σ)(x)=τ(σ(x))
//注意不满足交换律
几个定律
1. t∈Term∑ τ,σ 是两个替换
如果有: σ(t)=τ(t) 那么就有 σ(s)=τ(s) 其中s是t的子集
证明:略
2.承上当 σ(t)=t ,那么就有 σ(s)=s
证明:再次略
变量重命名(Variablenumbenennung)
已知有: τ,σ 是两个替换
如果有: τ∘σ=id
那么我们就说 σ 是变量重命名
因为假如我们有 σ(x)=σ(y) 那么直接带入上式我们就可以得到x=y。
归一(Unifikation)
已知有: T⊆Term∑,T≠ {},且 σ 是 ∑ 的一个替换
我们说 σ 是T的归一替换,当且仅当 #σ(T)=1
//#返回个数
另外我们就认为这个T是可归一的(unifizierbar)
例如T={s,t}是可归一的当 σ(s)=σ(t)
有可归一的自然就有不可归一的了,举个例子T={ P,¬P }就是不可归一的,我们说他们是矛盾的
那么问题来了,p(s), ¬ p(t)会不会也有矛盾呢???看起来很严重啊。其答案是当t和s可以归一时,上面两货就矛盾的。
那么问题又来了,p(x,x)和 ¬ p(a,b)呢?其中x为变量,a,b为常量。若a=b则他们矛盾,若a ≠b 那么他们不可能归一。这咋算????
再来几个定律
1.每个Term都可以和它自身归一
2.两个Term: f(s1,...,sn),g(t1,...,tn) 是不可能归一的(函数名不同)
3.两个Term: f(s1,...,sn),f(t1,...,tn) 是可以归一的,当存在一个替换 σ 使得 σ(si)=σ(ti) i=1,…,n
4.x是一个变量而t是Term,只有当x不在t中出现是,x和t是可归一的
最一般归一(mgu:most general unifier)(Allgemeinster Unifikator)
定义: μ 是T的mau
1. μ 可以归一T
2.对于T的每一个归一替换 σ 存在一个替换 σ′ 使得:
σ=σ′∘μ
//差一条与重命名有关的定律 木看懂?????
Robinson归一算法
先定义几个符号:
t(i) :表示重左向右数Term t中的第i个项,他可能是函数符号也可能是变量
D(T):
当#T<=1时D(T):=T
当#T>=2时D(T):={ t(j) |t ∈T } j是T中term之间存在差异的最小位置值
例如:T={f(g(a,x),g(y,b)),f(z,g(v,w)),f(g(x,a),g(v,b))}
D(T)={g(a,x),z,g(x,a)}
Robinson算法如下:
1.S:=T; μ:=id
2.#S=1?是则转3,否则转4
3.输出 μ ,算法停止
4.D(S)中是否存在一个变量和一个Term t满足 x∉Var(t) 是则转5,否则转6
5.取出这个x和t;
μ:= {x/t} ∘μ
S:= {x/t}(S)
转到2
6.输出T不可归一,算法停止
//欠可行性证明和mgu证明
这篇关于Formal sys-pradicate syntax的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!