Formal sys-pradicate syntax

2024-03-26 12:49
文章标签 sys syntax formal pradicate

本文主要是介绍Formal sys-pradicate syntax,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基础知识

逻辑符号(Logische Zeichen)

首先是在表达逻辑里已经出现过的:
¬,,,,,(,)
然后还有几个新的:
:表示所有的
:表示存在
Vi :表示变量//也可以用var表示
:客观相等//给汗了,啥意思啊???
(objektsprachliches Gleichheitssymbol)

Signature

一个Signature是指一个三元组(Tripel) =(F,P,α) :其中
F,P 是有限的或者是可数无限的(albzählbar unendliche Menge)//也就是可以用自然数连续编号的。
F,P 和前面说到的特殊符号两两不相交//就是不重复得意思
α:FPIN //表示映射
fF 叫做函数符号(Funktionssymbol)
gP 叫做谓词符号(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. VarTerm
2.如果有 fF,α(f)=n,t1,...,tnTerm ,那么 f(t1,...,tn)Term
//不含有变量的Term,可以叫做Grundterm

Formel

Atom Formel:
At:= { st|s,tTerm } { p(t1,...tn)|pP,α(p)=n,tiTerm }
Formel:
For 也可以同过归纳法(induktiv)来定义:
1.{1,0} AtFor
2.如果 xVar,A,BFor ,那么下列也属于 For :
¬A,(AB),(AB),(AB),(AB),xA,xA

自由变量和约束变量(Gebundene und freie Variable)

Vx(p0(x,y)) 里面x就是约束变量,y就是自由变量
约束变量就是被量词约束着的变量,自由变量与之相反。

符号表示

已知有 AFortTerm :
Bd(A) :={x| xVar,xA }
Fr(A):={x| xVar,xA }
Var(A):= Fr(A)Bd(A)
Var(t):={x| xVar,xt }

Abschlussoperationen für Formeln

//看不懂这节 怎么看都觉得他写矛盾了

替换(Substitutionen)

替换就是指一个映射: σ:VarTerm 其中对于几乎所有的变量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. tTerm τ,σ 是两个替换
如果有: σ(t)=τ(t) 那么就有 σ(s)=τ(s) 其中s是t的子集
证明:略
2.承上当 σ(t)=t ,那么就有 σ(s)=s
证明:再次略

变量重命名(Variablenumbenennung)

已知有: τ,σ 是两个替换
如果有: τσ=id
那么我们就说 σ 是变量重命名
因为假如我们有 σ(x)=σ(y) 那么直接带入上式我们就可以得到x=y。

归一(Unifikation)

已知有: TTerm,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满足 xVar(t) 是则转5,否则转6
5.取出这个x和t;
μ:= {x/t} μ
S:= {x/t}(S)
转到2
6.输出T不可归一,算法停止
//欠可行性证明和mgu证明

这篇关于Formal sys-pradicate syntax的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/848566

相关文章

log4j2相关配置说明以及${sys:catalina.home}应用

${sys:catalina.home} 等价于 System.getProperty("catalina.home") 就是Tomcat的根目录:  C:\apache-tomcat-7.0.77 <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" /> 2017-08-10

【vue使用Sass报错】启动项目报错 Syntax Error: SassError: expected selector

出现的问题 新项目启动的时候,提示: Syntax Error: SassError: expected selector 看了一下发现是sass使用样式穿透/deep/报的错 /deep/其实是已经过期的写法,某个版本之后就不支持了 但是我同事并没有出现同样的问题,不知道是为啥,也有可能是电脑(mac)的原因 解决办法 将 /deep/更换为::v-deep 但是这个项目是多人协作的,有

Syntax error on token int, VariableDeclaratorId expected after this token

Syntax error on token "int", VariableDeclaratorId expected after this token,看图,   <item name=" " type="id"/>; 这个的name没有,看图 删掉这行就行了,R.java就不会报错了!!!!!!!!!!!

Oracle - ORA-28009: connection as SYS should be as SYSDBA OR SYSOPER

一、原因     sys 用户是超级管理员,所以在登录的时候需要额外指定其角色 二、方案     1、在 PL/SQL 中,在登录界面,将 连接为 的选项 SYSDBA 选中          2、在 SQLPlus 中,通过 as sysdba 子句指定 -- 方式一[oracle@xl ~]$ sqlplus sys/登录密码 as sysdba-- 方式二[o

​yum安装/更新时报错:SyntaxError: invalid syntax​

yum安装时报错:SyntaxError: invalid syntax 在安装完python3环境后,执行yum命令会提示语法报错 因为把python环境连接到了python3上,而yum默认的环境是python2,所以提示语法错误 解决方法: 1:你可以把python2的语法格式修改为python3,这工作量就有点大了。不过要是哪位很无聊的话可以试试,记得把成果分享出来啊O(∩_∩)O

Linux驱动基础 | sys文件系统

前言思考sys文件系统简介 sys文件系统是什么sys文件系统功能描述sysfs与objectsysfs接口使用 sysfs读写操作例子sysfs常用的接口sysfs常用的结构体代码实验总结 前言 上篇介绍了Linux驱动中procfs接口的创建,今天介绍sysfs接口的创建,本篇内核采用5.10版本 思考 看本篇内容之前思考两个问题: 既然有了proc目录文件系统,为啥还要sy

Python常用函数:获取当前项目路径【abs_path=pathlib.Path(__file__).absolute()】-->【sys.path.append(str(abs_path))】

当我们导入某个模块文件时, Python 解释器去哪里找这个文件呢?只有找到这个文件才能读取、装载运行该模块文件。 它一般按照如下路径寻找模块文件(按照顺序寻找,找到即停不继续往下寻找): 内置模块当前目录程序的主目录pythonpath 目录(如果已经设置了pythonpath 环境变量)标准链接库目录第三方库目录(site-packages 目录).pth 文件的内容(如果存在的话)sys.

间接系统调用syscall(SYS_gettid)

在linux下每一个进程都一个进程id,类型pid_t,可以由getpid()获取。POSIX线程也有线程id,类型pthread_t,可以由pthread_self()获取,线程id由线程库维护。但是各个进程独立,所以会有不同进程中线程号相同节的情况。那么这样就会存在一个问题,我的进程p1中的线程pt1要与进程p2中的线程pt2通信怎么办,进程id不可以,线程id又可能重复,所以这里会有一个真实

python中sys模块的用法大全

sys 模块提供了许多函数和变量来处理 Python 运行时环境的不同部分. 处理命令行参数 在解释器启动后, argv 列表包含了传递给脚本的所有参数, 列表的第一个元素为脚本自身的名称. 使用sys模块获得脚本的参数 复制代码代码如下: print "script name is", sys.argv[0]        # 使用sys.argv[0]采集脚本

sh handle_data.sh: 2: handle_data.sh: Syntax error: Bad for loop variable

今天写了个简单shell处理数据,如下: #!/bin/shfor((i=1;i<220;i++));do/usr/bin/php /var/artisan handle_data 1;done; 结果报错 sh handle_data.sh: 2: handle_data.sh: Syntax error: Bad for loop variable 查询后发现是Ubun