CN111679809B - 一种基于Noesis逻辑的程序开发与验证方法及系统 - Google Patents

一种基于Noesis逻辑的程序开发与验证方法及系统 Download PDF

Info

Publication number
CN111679809B
CN111679809B CN202010295856.1A CN202010295856A CN111679809B CN 111679809 B CN111679809 B CN 111679809B CN 202010295856 A CN202010295856 A CN 202010295856A CN 111679809 B CN111679809 B CN 111679809B
Authority
CN
China
Prior art keywords
noesis
logic
program
abstract
prover
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202010295856.1A
Other languages
English (en)
Other versions
CN111679809A (zh
Inventor
黄步添
徐启源
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hangzhou Yunxiang Network Technology Co Ltd
Original Assignee
Hangzhou Yunxiang Network Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hangzhou Yunxiang Network Technology Co Ltd filed Critical Hangzhou Yunxiang Network Technology Co Ltd
Priority to CN202010295856.1A priority Critical patent/CN111679809B/zh
Publication of CN111679809A publication Critical patent/CN111679809A/zh
Application granted granted Critical
Publication of CN111679809B publication Critical patent/CN111679809B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • G06F8/22Procedural
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/436Semantic checking
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种基于Noesis逻辑的程序开发与验证方法及系统,包括:设置Noesis对应关系;以对应关系替代传统编程语言中的类型关系;以对应关系构建Noesis逻辑;以Noesis逻辑替代传统的类型系统;基于对应关系、Noesis逻辑,构建程序开发及验证方法。本发明实现代价不高,实行起来简单容易,并且能够实现低成本消耗,所以能够被普遍地应用在现实的普通工业生产中。本发明通过设计一种程序开发及验证方法,提高了证明程序的正确性,提供了绝对安全的程序实现过程。

Description

一种基于Noesis逻辑的程序开发与验证方法及系统
技术领域
本发明属于形式化验证技术领域,具体涉及一种基于Noesis逻辑的程序开发与验证方法及系统。
背景技术
现代编程语言基本上都是形式语言,编程语言上的程序是这一形式语言上的表达,而类型系统的编程语言上的形式系统,类型系统本身就是一种形式化方法,它对程序的分析与推断构成了对程序的形式化验证。
随着计算机技术的发展,科技逐渐引领潮流,区块链、人工智能、大数据、云计算和物联网等前沿技术迅速发展起来,一般涉及到程序开发,就必然不可忽视程序代码中隐含的程序漏洞和编程错误问题,这些错误问题有时会带来极严重的后果,造成不可挽回的损失和局面,以区块链为例,其代表性的程序实现就是智能合约,智能合约是一种区块链上可执行的计算机代码,在区块链中,智能合约实现交易的执行,包括资产的转移,所以一旦出现误差,造成的损失是巨大的。
形式化验证是程序开发过程中,对已开发程序进行验证的重要手段之一,但目前实用的形式化验证非常少,根本上,程序验证的困难来自于编程语言一开始就未考虑证明而仅针对程序的执行,将程序翻译到证明系统中,除了增加复杂并不能使程序更易于证明。最常用的方法大多属于模型检测,模型检测也只能找出程序中存在的特定问题,不能验证程序的正确性。由于形式化验证的复杂性,大部分形式化验证还处于理论阶段。
软件开发的商业与工业主流得益于各种形式化方法,形式化方法已渗入软件开发的各个方面,在安全严苛场景已大量地应用,但对软件普遍形式化验证仍未到来。形式化方法有效帮助程序开发,而形式化验证有效地发现并避免了诸多软件缺陷,但缺陷与漏洞依然存在,形式化验证所需的成本代价也是巨大的,而且现实的商业尚未找到一种折合成本与收益后更划算的方案。
发明内容
本发明基于上述背景和现有技术所存在的问题,拟设计一种基于Noesis逻辑的程序开发与验证方法及系统,本发明实现代价不高,实行起来简单容易,并且能够实现低成本消耗,所以能够被普遍地应用在现实的普通工业生产中。本发明还有一个目的是通过设计一种程序开发及验证系统,使得产生彻底证明正确性的程序,以便提供绝对安全的程序实现过程。
为了实现本发明的这些目的和其它优点,提供了一种基于Noesis逻辑的程序开发与验证方法。具体包括如下:
设置Noesis对应关系;
以对应关系替代传统编程语言中的类型关系;
以对应关系构建Noesis逻辑;
以Noesis逻辑替代传统的类型系统;
基于对应关系、Noesis逻辑,构建程序开发及验证方法。
优选的是,所述的Noesis对应关系是一个三元关系,具有三元对应形式,包括程序、理解和本体;程序,其用于程序实现;理解,用于实现理解方式;本体部,用于程序在理解下对应的作为抽象意义的本体。
优选的是,所述以对应关系替代传统编程语言中的类型关系中,对应关系描述为程序在理解下对应的作为抽象意义的本体,还包括:找到程序在理解下对应的作为抽象意义的本体,将程序与对此程序的证明分立,程序负责工程实现,用于实现工程实现的性能;本体是数学形式,实现各种数学分析与证明。
优选的是,所述Noesis逻辑包括:Noesis逻辑为朴素Noesis逻辑,此逻辑围绕Noesis对应关系,提供演绎Noesis对应关系的方法,并以朴素Noesis逻辑构建程序,所述朴素Noesis逻辑,包括:
形式语言:设置LN为朴素Noesis逻辑的形式语言,其语法引用BNF语法,记为<BNF>,分别设置相应给定的单词集,包括无穷单词集,无穷单词集内含表示值变量的字母表和表示预定义常量的字母表,表示预定义常量的字母表包含所有的数字单词、所有的小数单词、所有的字符串字面量单词;
演绎方法:参数律,用于构建参数;一阶同构引入律与一阶同构削除律,用于提供技术性操作;应用律,用于函数调用;抽象律,用于函数构建;对应记号律与同构记号律,用于临时变量的引入;对应记号削除律与同构记号削除律,用于函数构建前临时变量的封装。
优选的是,所述步骤以Noesis逻辑替代传统的类型系统,包括:以Noesis逻辑通过演绎所述Noesis对应关系的方法,取代传统类型系统,用于构建程序,包括构建逻辑、构建参数、调用函数、构建函数、引入临时变量和封装函数构建前临时变量。
优选的是,所述构建程序开发及验证方法包括:
构建Noesis逻辑在证明器上的逻辑实现,进而演绎Noesis对应关系的方法,用于构建程序;
在Noesis逻辑在证明器上的逻辑实现上设定常量与基元函数,基元函数的程序的指令集,构建Noesis逻辑的抽象证明机器,并通过证明器操作Noesis逻辑的抽象证明机器,最终实现在Noesis逻辑的抽象证明机器上编写程序,以及将Noesis逻辑的抽象证明机器上的程序编译到程序的目标执行环境;
Noesis逻辑的抽象证明机器上程序的构建方法包括:Noesis逻辑的抽象证明机器中常量与基元函数作为公理,置于Noesis逻辑在证明器上的逻辑实现系统中,用证明器实现Noesis系统的Noesis逻辑在证明器上的逻辑实现,对这些公理进行演绎,得出Noesis对应关系。
进一步地,一种基于Noesis逻辑的程序开发与验证系统,所述Noesis逻辑包括使用Noesis逻辑实现器实现,所述Noesis逻辑实现器包括:
证明器,用于对高阶逻辑进行证明,包括对对应关系的证明;
编译后端,用于编译前的准备;编辑器前端和编译后端用于对应关系替代传统编程语言中的类型关系的准备;
Noesis逻辑的抽象证明机器,用于构建Noesis逻辑和用于Noesis逻辑的抽象证明;
编辑壳层,构成联结编辑器前端、编译后端和证明器的工具;编辑壳层提供统一的抽象接口,为程序开发提供各种形式的接口;编辑前端连接到此接口;编辑壳层与证明器交互;
编辑器前端,用于和程序开发、编辑壳层交互;编译器,用于对开发的程序进行编译处理,包括中间表达,涉及包括常量和基元函数。
进一步地,Noesis逻辑的程序开发与验证系统,其核心围绕对应关系进行编译,用于程序的开发与验证,编译过程包括:
在编译壳层对证明器的操作下,在证明器中,等价改变Noesis逻辑的抽象证明机器上的程序;定义被逐层展开,最终得到常量与基元函数的表达;
常量与基元函数的表达作为一种中间表达;
由证明器输出传入编辑壳层,编辑壳层再根据程序开发要求传入期望的目标执行环境对应的编译器后端,由编译器后端最终生成目标执行环境上的可执行程序。
本发明的其它优点、目标和特征将部分通过下面的说明体现,部分还将通过对本发明的研究和实践而为本领域的技术人员所理解。本发明至少包括以下有益效果:
1.本发明首先开创性地提出Noesis逻辑,并将其替代传统编程语言中的类型系统,通过演绎Noesis逻辑上的方法来构建程序。
2.本发明允许使用数学语言构建具有明确语义的程序,并允许开发者将逻辑信息与意图完整且精准地表达在抽象语义,一个易于分析的数学对象中,使得在程序开发中不需要直接接触复杂的数学理论变换与演绎方法,就可以实现彻底证明程序的正确性。
3.本发明可以将原本困难的对复杂具象程序的验证转化为相对容易的对易于分析的抽象数学对象(抽象语义)的验证,进而有效简化了形式化验证与分析。
4.本发明实现的方法,代价不高,不需要消耗大量的开发成本,实施简单且容易,而且能有效实现彻底证明程序正确性的能力,不会因程序的缺陷被任何黑客攻陷,达到了绝对安全性,进而能被普遍应用在现实的普通工业生产中。
附图说明
本发明的附图体现了本发明一种基于Noesis逻辑的程序开发与验证方法及系统的原理及实现要点,属于本发明的保护范围,其组成和功能是用来解释本发明的说明的,对本发明的附图所包含的技术的应用、修改和变化对本领域的技术人员来说是显而易见的。下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明朴素Noesis逻辑的形式语言示意图;
图2为本发明朴素Noesis逻辑的演绎规则示意图;
图3为本发明Noesis逻辑的主体框架图;
图4为本发明
Figure BDA0002452167120000061
上的演绎律示意图;
图5为本发明朴素Noesis系统、
Figure BDA0002452167120000062
上的程序之间的关系示意图;
图6为本发明编译流程示意图。
具体实施方式
为了清晰地阐述本发明,使本发明实施例的目的、技术方案和优点更加清楚,下面结合了本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,以令本领域技术人员参照说明书文字能够据以实施。下面将附图结合具体实施方式对本发明的技术加以详细说明。
本发明提出的技术可以在任意生产场景下,用于任意目标执行环境的正确性被彻底证明的程序实现,这些执行环境包括:智能合约场景、嵌入式场景,也可以是其他的传统编程语言,即包括被设定的
Figure BDA0002452167120000063
(Noesis逻辑的抽象证明机器)允许将其上的程序编译到别的编程语言上;甚至允许出传统计算机范畴的执行环境,例如给定量子计算机上的基元指令与常量,这样一来,/>
Figure BDA0002452167120000071
可以生产正确性被证明的量子计算机上的程序实现。简单来说,/>
Figure BDA0002452167120000072
基元指令与常量设定的通用性允许生产任意执行环境上的程序。
Noesis对应(Noesis correspondence)中文解释为理解对应关系,与Noesis对应相关的系统叫做Noesis系统。Noesis本为希腊语,来源于形而上学的本体论,其本义来自本体论的定义,即对现象(phenomenon)理解(Noesis)下的本体(noumenon)。
1.具体实施例1:
本发明提供了一种基于Noesis逻辑的程序开发与验证方法,具体包括如下:
(1)设置Noesis对应关系
Figure BDA0002452167120000073
(2)以
Figure BDA0002452167120000074
替代传统编程语言中的类型关系;
(3)以
Figure BDA0002452167120000075
构建Noesis逻辑;
(4)以Noesis逻辑替代传统的类型系统,传统的类型系统有3中实现方式,第一种类型系统属于形式化方法中的模型检测,保留模型检测简单易用的良好特性而有限加强模型检测的功能;第二种类型系统将编程语言上的程序装入另一个证明系统;第三种类型系统围绕依赖关系,程序与证明合二为一,而后构建算法;
(5)基于上述对应关系、Noesis逻辑,构建程序开发及验证。
所述步骤(1)中,Noesis对应关系
Figure BDA0002452167120000076
是一个三元关系,具有形式/>
Figure BDA0002452167120000077
其中x表示程序,也叫现象,i表示理解方式为理解,∈表示程序x在理解i下的抽象对应,表示抽象意义,为本体。
所述步骤(2)中,对应关系描述为
Figure BDA0002452167120000078
还包括:找到程序x在理解i下对应的作为抽象意义的本体∈,将程序与证明分立,程序x只负责工程实现,用于实现工程实现的性能;本体∈是数学形式,是自然且数学友好的数学对象,允许各种数学分析与证明,这种类型的对应关系是全面的,一切分析与证明只考察抽象的本体∈,而非直接操作复杂的数学不友好的程序x,于是形式化分析与验证的效率被根本地改善。
所述步骤(3)中,Noesis逻辑为朴素Noesis逻辑,其围绕Noesis对应关系,提供演绎Noesis对应关系的方法,并构建程序。所述朴素Noesis逻辑,是形式语言LN和演绎规则构成的形式系统,包括:
1.1形式语言,如图1所示:设置LN为朴素Noesis逻辑的形式语言,其语法引用BNF语法(巴科斯范式,Backus-Naur Form,BNF,是由John Backus和Peter Naur首次引入一种形式化符号来描述给定语言的语法),记为<BNF>,分别设置相应给定的单词集,包括无穷单词集,无穷单词集内含表示值变量的字母表和表示预定义常量的字母表,表示预定义常量的字母表包含所有的数字单词、所有的小数单词、所有的字符串字面量单词;
1.2演绎规则,如图2所示:参数律,用于构建参数;一阶同构引入律与一阶同构削除律,用于提供技术性操作;应用律,用于函数调用;抽象律,用于函数构建;对应记号律与同构记号律,用于临时变量的引入;对应记号削除律与同构记号削除律,用于函数构建前临时变量的封装。
图1和图2共同表示了朴素Noesis逻辑。
所述步骤(4)中,以Noesis逻辑通过演绎Noesis对应关系的方法,取代传统类型系统,用于构建程序,包括构建参数、调用函数、构建函数、引入临时变量和封装函数构建前临时变量,并由相关Noesis逻辑实现器具体实现,此Noesis逻辑实现器为
Figure BDA0002452167120000081
即Noesis逻辑形式系统,其整体架构如图3所示,包括:
2.1HOL(Higher-Order Logic,高阶逻辑)证明器,交互式高阶逻辑证明器,用于对高阶逻辑进行证明;
2.2编译后端,用于编译前的准备;
2.3Noesis逻辑的抽象证明机器,表示为
Figure BDA0002452167120000091
用于Noesis逻辑的抽象证明;
2.4编辑壳层,如图3所示,构成联结编辑器前端、编译后端和HOL证明器的工具;编辑壳层提供统一的抽象接口,为程序开发提供各种形式的接口;编辑前端连接到此接口;编辑壳层直接与HOL证明器交互,省去程序开发过程中的复杂数学理论变换与HOL演绎;
2.5编辑器前端,用于和程序开发、编辑壳层交互;编译,对开发的程序进行编译处理,即利用编译程序从源语言编写的源程序产生目标程序,其中间表达(IntermediateRepresentation,IR)涉及到常量和基元函数。
优选的是,所述步骤(5),包括:
3.1构建Noesis逻辑在HOL证明器上的逻辑实现
Figure BDA0002452167120000092
如图4所示,其使用HOL证明器,并应用Noesis逻辑,进而演绎Noesis对应关系的方法,用于构建程序。
3.2在
Figure BDA0002452167120000093
(Noesis逻辑在HOL证明器上的逻辑实现)上设定常量与基元函数,基元函数的程序的指令集,构建Noesis逻辑的抽象证明机器/>
Figure BDA0002452167120000094
并通过HOL证明器操作
Figure BDA0002452167120000095
(Noesis逻辑的抽象证明机器),最终实现在/>
Figure BDA0002452167120000096
上编写程序(/>
Figure BDA0002452167120000097
上的程序是常量与基元函数的组合),以及将/>
Figure BDA0002452167120000098
上的程序编译到程序的目标执行环境;/>
3.3所述步骤3.2中,
Figure BDA0002452167120000099
上程序的构建方法包括:/>
Figure BDA00024521671200000910
中常量与基元函数作为公理置于/>
Figure BDA0002452167120000101
系统中,用HOL证明器实现Noesis系统/>
Figure BDA0002452167120000102
对这些公理进行演绎,得出Noesis对应关系(即得出Noesis逻辑,Noesis逻辑包含所构造的程序与此程序的Noesis对应关系)。程序的Noesis对应揭示了程序的抽象意义,因此,对程序的形式化验证就只需对其抽象意义进行,而抽象意义是数学友好的数理对象,对其的分析与证明都十分容易与自然,于是对程序的验证变为对其意义的验证,形式化验证就被极大简化了,得到彻底的正确性证明的程序。
所述朴素Noesis系统、
Figure BDA0002452167120000103
上的程序,之间的关系如图5所示。
进一步地,
Figure BDA0002452167120000104
上程序的编译过程如图6所示,包括:
4.1在编译壳层对HOL证明器的操作下,在HOL证明器中,等价改变
Figure BDA0002452167120000105
上的程序;定义被逐层展开,最终得到常量与基元函数的表达;
4.2将上述步骤4.1中的常量与基元函数的表达作为一种IR;
4.3由HOL证明器输出传入编辑壳层,编辑壳层再根据程序开发要求(包括用户指令)传入期望的目标执行环境对应的编译器后端,由编译器后端最终生成目标执行环境上的可执行程序。
2.具体实施例2:
具体实施例2的步骤前标号与具体实施例1区分,此处标号为新起的标号,不应混淆;相应名词介绍和解释通用,不再赘述。另外,对应关系
Figure BDA0002452167120000106
可换做其他任何符号,其表述的功能和意义属于本发明的保护范围。
1.本发明的具体实现步骤包括:
(1)设置Noesis对应关系
Figure BDA0002452167120000107
(2)以
Figure BDA0002452167120000108
替代传统编程语言中的类型关系;
(3)以
Figure BDA0002452167120000111
构建Noesis逻辑;
(4)以Noesis逻辑替代传统的类型系统,传统的类型系统有3中实现方式,第一种类型系统属于形式化方法中的模型检测,保留模型检测简单易用的良好特性而有限加强模型检测的功能;第二种类型系统将编程语言上的程序装入另一个证明系统;第三种类型系统围绕依赖关系,程序与证明合二为一,而后构建算法;
(5)基于上述对应关系、Noesis逻辑,构建程序开发及验证。
所述步骤(1)中,Noesis对应关系
Figure BDA0002452167120000112
是一个三元关系,具有形式/>
Figure BDA0002452167120000113
其中x表示程序,又叫现象,i表示理解方式为理解,∈表示程序x在理解i下的抽象对应,表示抽象意义,为本体。
所述步骤(2)中,对应关系描述为
Figure BDA0002452167120000114
还包括:找到程序x在理解i下对应的作为抽象意义的本体∈,将程序与程序的证明分立,程序x只负责工程实现,用于实现工程实现的性能;本体∈是纯粹抽象的数学形式,是自然且数学友好的数学对象,允许各种数学分析与证明,这种类型的对应关系是全面的,一切分析与证明只考察抽象的本体∈,而非直接操作复杂的数学不友好的程序x,于是形式化分析与验证的效率被根本地改善。
所述步骤(3)中,Noesis逻辑为朴素Noesis逻辑,其围绕Noesis对应关系,提供演绎Noesis对应关系的方法,并构建程序。所述朴素Noesis逻辑,包括:
1.1形式语言,如图1所示:设置LN为朴素Noesis逻辑的形式语言,其语法引用BNF语法,记为<BNF>,分别设置相应给定的单词集,其中的符号作为某种单词的指代;
1.2演绎规则,如图2所示包括:参数律,用于构建参数;一阶同构引入律与一阶同构削除律,用于提供技术性操作;应用律,用于函数调用;抽象律,用于函数构建;对应记号律与同构记号律,用于临时变量的引入;对应记号削除律与同构记号削除律,用于函数构建前临时变量的封装。
图1和图2共同表示了朴素Noesis逻辑。
所述步骤(4)中,以Noesis逻辑通过演绎Noesis对应关系的方法,取代传统类型系统,用于构建程序,包括构建参数、调用函数、构建函数、引入临时变量和封装函数构建前临时变量,并由相关Noesis逻辑实现器具体实现,此Noesis逻辑实现器为
Figure BDA0002452167120000121
即Noesis逻辑形式系统,其整体架构如图3所示,包括:
2.1编辑器前端,用于和程序开发、编辑壳层交互;
2.2编辑壳层,如图3所示,构成联结编辑器前端、编译后端和HOL证明器的工具;编辑壳层提供统一的抽象接口,为程序开发提供各种形式的程序开发接口;编辑前端连接到此接口;编辑壳层直接与HOL证明器交互,省去程序开发的复杂数学理论变换与演绎方法;
2.3HOL证明器,交互式高阶逻辑证明器,用于对高阶逻辑进行证明;
2.4
Figure BDA0002452167120000122
Noesis逻辑的抽象证明机器,用于Noesis逻辑的抽象证明;
2.5编译后端,用于编译前的准备;
2.6编译,对开发的程序进行编译处理,即利用编译程序从源语言编写的源程序产生目标程序,其中间表达(Intermediate Representation,IR)涉及到常量和基元函数。
通过演绎Noesis对应方法以构建程序,即用户并非编写程序,而是操作编辑壳层演绎Noesis对应方法本身,而Noesis对应方法中包含程序与程序的抽象意义对应,通过演绎Noesis对应方法,来构建Noesis对应方法中包含的程序,并运用证明策略完成特定Noesis对应方法的证明,以完成一些更复杂的程序例如递归函数的构建。
所述步骤(5)包括:
3.1构建Noesis逻辑在HOL证明器上的逻辑实现
Figure BDA0002452167120000131
如图4所示,其使用HOL证明器,并应用Noesis逻辑,进而演绎Noesis对应关系的方法,用于构建程序。
3.2在
Figure BDA0002452167120000132
上设定常量与基元函数,基元函数的程序的指令集,构建Noesis逻辑的抽象证明机器/>
Figure BDA0002452167120000133
并通过HOL证明器操作/>
Figure BDA0002452167120000134
最终实现在/>
Figure BDA0002452167120000135
上编写程序(
Figure BDA0002452167120000136
上的程序是常量与基元函数的组合),以及将/>
Figure BDA0002452167120000137
上的程序编译到程序的目标执行环境;/>
3.3所述步骤3.2中,
Figure BDA0002452167120000138
上程序的构建方法包括:/>
Figure BDA0002452167120000139
中常量与基元函数作为公理置于/>
Figure BDA00024521671200001310
系统中,用HOL证明器实现Noesis系统/>
Figure BDA00024521671200001311
对这些公理进行演绎,得出Noesis对应关系(即得出Noesis逻辑,Noesis逻辑包含所构造的程序与此程序的Noesis对应关系)。程序的Noesis对应揭示了程序的抽象意义,因此,对程序的形式化验证就只需对其抽象意义进行,而抽象意义是数学友好的数理对象,对其的分析与证明都十分容易与自然,于是对程序的验证变为对其意义的验证,形式化验证就被极大简化了,得到彻底的正确性证明的程序。
2.所述朴素Noesis系统、
Figure BDA00024521671200001312
上的程序,之间的关系如图5所示。
所述步骤2.6、3.2和3.3中,
Figure BDA00024521671200001313
上程序的编译过程如图6所示,包括:
4.1在编译壳层对HOL证明器的操作下,在HOL证明器中,等价改变
Figure BDA00024521671200001314
上的程序;定义被逐层展开,最终得到常量与基元函数的表达;
4.2将上述步骤4.1中的常量与基元函数的表达作为一种IR;
4.3由HOL证明器输出传入编辑壳层,编辑壳层再根据程序开发要求(包括用户指令)传入期望的目标执行环境对应的编译器后端,由编译器后端最终生成目标执行环境上的可执行程序。
这里说明的Noesis逻辑实现器
Figure BDA0002452167120000141
的整体架构的组成和功能是用来简化本发明的说明的。对本发明的Noesis逻辑的应用、修改和变化对本领域的技术人员来说是显而易见的。
如上所述,根据本发明,由于本发明对程序的分析与验证转移为对抽象本体的分析与验证,分析与验证的效率就被根本改善并得到提升。
上述对实施例的描述是为便于本技术领域的普通技术人员能理解和应用本发明。熟悉本领域技术的人员显然可以容易地对上述实施例做出各种修改,并把在此说明的一般原理应用到其他实施例中而不必经过创造性的劳动。因此,本发明不限于上述实施例,本领域技术人员根据本发明的揭示,对于本发明做出的改进和修改都应该在本发明的保护范围之内。

Claims (7)

1.一种基于Noesis逻辑的程序开发与验证方法,其特征在于,包括如下步骤:
设置Noesis对应关系;所述的Noesis对应关系是一个三元关系,具有三元对应形式,包括程序、理解和本体;程序,其用于程序的实现;理解,用于实现理解方式;本体,用于程序在理解下对应的作为抽象意义的本体;
以对应关系替代传统编程语言中的类型关系;对应关系描述为程序在理解下对应的作为抽象意义的本体;
以对应关系构建Noesis逻辑;Noesis逻辑为朴素Noesis逻辑,所述朴素Noesis逻辑围绕Noesis对应关系,提供演绎Noesis对应关系的方法,并以朴素Noesis逻辑构建程序;
以Noesis逻辑替代传统的类型系统;
基于对应关系、Noesis逻辑,构建程序开发及验证方法;所述构建程序开发及验证方法包括:
构建Noesis逻辑在证明器上的逻辑实现,进而演绎Noesis对应关系的方法,用于构建程序;
在Noesis逻辑在证明器上的逻辑实现上设定常量与基元函数,基元函数的程序的指令集,构建Noesis逻辑的抽象证明机器,并通过证明器操作Noesis逻辑的抽象证明机器,最终实现在Noesis逻辑的抽象证明机器上编写程序,以及将Noesis逻辑的抽象证明机器上的程序编译到程序的目标执行环境。
2.根据权利要求1所述基于Noesis逻辑的程序开发与验证方法,其特征在于,所述以对应关系替代传统编程语言中的类型关系中,还包括:找到程序在理解下对应的作为抽象意义的本体,将程序与对此程序的证明分立,程序负责工程实现,用于实现工程实现的性能;本体是数学形式,实现各种数学分析与证明。
3.根据权利要求1所述基于Noesis逻辑的程序开发与验证方法,其特征在于,所述Noesis逻辑包括:
形式语言:设置LN为朴素Noesis逻辑的形式语言,其语法引用BNF语法,记为<BNF>,分别设置相应给定的单词集,包括无穷单词集,无穷单词集内含表示值变量的字母表和表示预定义常量的字母表,表示预定义常量的字母表包含所有的数字单词、所有的小数单词、所有的字符串字面量单词;
演绎方法:参数律,用于构建参数;一阶同构引入律与一阶同构削除律,用于提供技术性操作;应用律,用于函数调用;抽象律,用于函数构建;对应记号律与同构记号律,用于临时变量的引入;对应记号削除律与同构记号削除律,用于函数构建前临时变量的封装。
4.根据权利要求1所述基于Noesis逻辑的程序开发与验证方法,其特征在于,所述以Noesis逻辑替代传统的类型系统的步骤,包括:以Noesis逻辑通过演绎所述Noesis对应关系的方法,取代传统类型系统,用于构建程序,包括构建逻辑、构建参数、调用函数、构建函数、引入临时变量和封装函数构建前临时变量。
5.根据权利要求1所述基于Noesis逻辑的程序开发与验证方法,其特征在于,Noesis逻辑的抽象证明机器上程序的构建方法包括:Noesis逻辑的抽象证明机器中常量与基元函数作为公理,置于Noesis逻辑在证明器上的逻辑实现系统中,用证明器实现Noesis系统的Noesis逻辑在证明器上的逻辑实现,对这些公理进行演绎,得出Noesis对应关系。
6.一种基于Noesis逻辑的程序开发与验证系统,其特征在于,所述Noesis逻辑包括使用Noesis逻辑实现器实现,在Noesis逻辑在证明器上的逻辑实现上设定常量与基元函数,基元函数的程序的指令集,构建Noesis逻辑的抽象证明机器,并通过证明器操作Noesis逻辑的抽象证明机器,最终实现在Noesis逻辑的抽象证明机器上编写程序,以及将Noesis逻辑的抽象证明机器上的程序编译到程序的目标执行环境;所述Noesis逻辑实现器包括:
证明器,用于对高阶逻辑进行证明,包括对对应关系的证明;Noesis对应关系是一个三元关系,具有三元对应形式,具有三元对应形式,包括程序、理解和本体;程序,其用于程序的实现;理解,用于实现理解方式;本体,用于程序在理解下对应的作为抽象意义的本体;
编译后端,用于编译前的准备;编辑器前端和编译后端用于对应关系替代传统编程语言中的类型关系的准备;对应关系描述为程序在理解下对应的作为抽象意义的本体;
Noesis逻辑的抽象证明机器,用于构建Noesis逻辑和用于Noesis逻辑的抽象证明;Noesis逻辑为朴素Noesis逻辑,所述朴素Noesis逻辑围绕Noesis对应关系,提供演绎Noesis对应关系的方法,并以朴素Noesis逻辑构建程序;
编辑壳层,构成联结编辑器前端、编译后端和证明器的工具;编辑壳层提供统一的抽象接口,为程序开发提供各种形式的接口;编辑前端连接到此接口;编辑壳层与证明器交互;
编辑器前端,用于和程序开发、编辑壳层交互;编译器,用于对开发的程序进行编译处理,包括中间表达,涉及包括常量和基元函数。
7.根据权利要求6所述基于Noesis逻辑的程序开发与验证系统,其特征在于,Noesis逻辑的程序开发与验证系统,其核心围绕对应关系进行编译,用于程序的开发与验证,其中,构建程序开发及验证方法包括:构建Noesis逻辑在证明器上的逻辑实现,进而演绎Noesis对应关系的方法,用于构建程序;在Noesis逻辑在证明器上的逻辑实现上设定常量与基元函数,基元函数的程序的指令集,构建Noesis逻辑的抽象证明机器,并通过证明器操作Noesis逻辑的抽象证明机器,最终实现在Noesis逻辑的抽象证明机器上编写程序,以及将Noesis逻辑的抽象证明机器上的程序编译到程序的目标执行环境;编译过程包括:
在编译壳层对证明器的操作下,在证明器中,等价改变Noesis逻辑的抽象证明机器上的程序;定义被逐层展开,最终得到常量与基元函数的表达;
常量与基元函数的表达作为一种中间表达;
由证明器输出传入编辑壳层,编辑壳层再根据程序开发要求传入目标执行环境对应的编译器后端,由编译器后端最终生成目标执行环境上的可执行程序。
CN202010295856.1A 2020-04-15 2020-04-15 一种基于Noesis逻辑的程序开发与验证方法及系统 Active CN111679809B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010295856.1A CN111679809B (zh) 2020-04-15 2020-04-15 一种基于Noesis逻辑的程序开发与验证方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010295856.1A CN111679809B (zh) 2020-04-15 2020-04-15 一种基于Noesis逻辑的程序开发与验证方法及系统

Publications (2)

Publication Number Publication Date
CN111679809A CN111679809A (zh) 2020-09-18
CN111679809B true CN111679809B (zh) 2023-06-06

Family

ID=72433337

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010295856.1A Active CN111679809B (zh) 2020-04-15 2020-04-15 一种基于Noesis逻辑的程序开发与验证方法及系统

Country Status (1)

Country Link
CN (1) CN111679809B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112685315A (zh) * 2021-01-05 2021-04-20 电子科技大学 面向c源码的自动化形式化验证工具及方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2008021777A2 (en) * 2006-08-07 2008-02-21 National Instruments Corporation Formal verification of graphical programs
CN105049420A (zh) * 2015-06-23 2015-11-11 天津大学 基于扩展uml的轻量级安全协议形式化验证方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050256700A1 (en) * 2004-05-11 2005-11-17 Moldovan Dan I Natural language question answering system and method utilizing a logic prover
US8843908B2 (en) * 2010-12-23 2014-09-23 Microsoft Corporation Compiler validation via program verification
JP5843230B2 (ja) * 2011-06-17 2016-01-13 国立大学法人京都大学 ハイブリッドシステムの検証方法、検証装置、及び検証コンピュータプログラム、並びに、ハイブリッドシステムのモデル変換方法、変換装置、及び変換コンピュータプログラム
CN106708525A (zh) * 2016-12-27 2017-05-24 西安电子科技大学 一种基于Coq的MSVL程序验证方法
CN110989997A (zh) * 2019-12-04 2020-04-10 电子科技大学 基于定理证明的形式化验证方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2008021777A2 (en) * 2006-08-07 2008-02-21 National Instruments Corporation Formal verification of graphical programs
CN105049420A (zh) * 2015-06-23 2015-11-11 天津大学 基于扩展uml的轻量级安全协议形式化验证方法

Also Published As

Publication number Publication date
CN111679809A (zh) 2020-09-18

Similar Documents

Publication Publication Date Title
CN110018829B (zh) 提高pl/sql语言解释器执行效率的方法及装置
Vazou et al. Theorem proving for all: equational reasoning in liquid Haskell (functional pearl)
Agrawal et al. A UML-based graph transformation approach for implementing domain-specific model transformations
Niemetz et al. Towards bit-width-independent proofs in SMT solvers
CN111880784A (zh) 一种面向simscript语言的离散事件仿真图形化建模方法
CN111679809B (zh) 一种基于Noesis逻辑的程序开发与验证方法及系统
Zhao et al. Pattern-based design evolution using graph transformation
Planas et al. Lightweight and static verification of UML executable models
Joseph Generalized arrows
Yang et al. Optimization of executable formal interpreters developed in higher-order logic theorem proving systems
Smith et al. Formal Verification of UML Diagrams: A First Step Towards Code Generation.
Qin et al. SMT-based generation of symbolic automata
Pessaux et al. Hybrid systems and contracts with zélus and dynibex zeldyn: a compilation and verification toolchain
Shi et al. Transformation between BPMN and BPEL based on graph grammar
Pit-Claudel Relational compilation: Functional-to-imperative code generation for performance-critical applications
Steingartner et al. The visualization of a graph semantics of imperative languages
Doré et al. The Elfe System-Verifying mathematical proofs of undergraduate students
Coglio A Simple Java Code Generator for ACL2 Based on a Deep Embedding of ACL2 in Java
CN116820564B (zh) 程序语言的统一形式语义化方法
Cruz et al. Constructing program animations using a pattern based approach
Steckler Correct higher-order program transformations
Blas et al. A Context-Free Grammar for Generating Full Classic DEVS Models
Gajdoš et al. The visualization of a graph semantics of imperative languages
Jeffery Build Your Own Programming Language: A programmer's guide to designing compilers, interpreters, and DSLs for solving modern computing problems
Schuur A type-changing, semantics-preserving program transformation system

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant