一种基于定理证明器Coq的稀疏矩阵形式化验证方法

文档序号:33401814发布日期:2023-03-08 17:48阅读:67来源:国知局
一种基于定理证明器Coq的稀疏矩阵形式化验证方法
一种基于定理证明器coq的稀疏矩阵形式化验证方法
技术领域
1.本发属于形式化验证领域,具体涉及一种基于定理证明器coq的稀疏矩阵形式化验证方法,是一种基于定理证明器的安全可靠性验证方法,主要用于安全关键控制系统的验证。


背景技术:

2.安全攸关领域的软件的规模越来越大,传统的软件测试技术难以保证系统功能的正确性。另一方面,系统的漏洞为黑客的入侵提供了机会,严重影响系统的安全性。这种情况使得信息行业重新思考传统的软件开发方法,于是各种形式化方法和基于模型的方法被引入到软件开发流程中。当前,基于coq定理证明器的交互式证明技术是形式化方法的代表性成果之一。coq基于先进的依赖类型理论,并具有大量数学库,已经广泛应用于数学定理证明和软硬件系统的安全性验证,以此来确保安全攸关系统的正确构造及可靠性。为此,把稀疏矩阵运算和形式化方法结合在一起,可保证稀疏矩阵函数库具有高层次的安全性。
3.研究coq定理证明器的形式化工程数学验证技术。这一工作的大方向是在coq中建立完善的形式化工程数学理论库,稀疏矩阵是诸多领域中的主要研究对象与研究工具,近年来随着芯片领域的发展,保证稀疏矩阵运算的正确性具有重大意义。


技术实现要素:

4.发明目的:为了保证稀疏矩阵变换以及运算正确性,本发明提出一种基于定理证明器coq的稀疏矩阵形式化验证方法,在定理证明器coq中对稀疏矩阵进行形式化定义并且验证稀疏矩阵运算的基本性质,根据定理证明的可靠性和完备性,保证代码运行的正确性,并能够应用于低密度奇偶校验的模型构建中。
5.技术方案:本发明提供了一种基于定理证明器coq的稀疏矩阵形式化验证方法,具体包括以下步骤:
6.(1)稀疏矩阵的形式化定义;
7.(2)稀疏矩阵生成的形式化定义;
8.(3)稀疏矩阵取元素运算的形式化定义;
9.(4)稀疏矩阵运算的形式化定义;
10.(5)基本性质的形式化证明。
11.进一步地,所述步骤(1)实现过程如下:
12.舍弃矩阵内部值为0的元素;矩阵高度不变,每一行分别记录不为0的元素,记录方式为一维列表的形式,列表元素由两部分组成,第一部分是nat类型纵坐标,第二部分是a类型的元素值。
13.进一步地,所述步骤(2)实现过程如下:
14.稀疏矩阵的生成,依据映射的方式完成构建,构建函数需要三个参数,分别是描述矩阵高度,宽度,以及描述矩阵元素信息的映射函数f;映射函数的类型为nat-》nat-》a,nat
表示自然数类型,两个nat类型分别表示横坐标以及纵坐标,然后得到一个值域在a下的元素值;
[0015]“generate”函数,用于构建稀疏矩阵,“nat_list”函数输入参数为两个nat类型,“nat_list m m”用于产生从1到m的列表,用于控制矩阵高度;“map”函数为coq系统自带函数,作用是严格限制映射的一一对应关系,防止出现长度不匹配等程序错误;最后“generate_row”函数,根据nat-》nat-》a类型的描述函数f,横坐标i,以及纵坐j进行赋值;递归产生m行矩阵元素,得到重新排列后的稀疏矩阵。
[0016]
进一步地,所述步骤(3)实现过程如下
[0017]
设计稀疏矩阵取元素运算,即“sparse_get”函数,该函数需要5个输入参数,m,n表示m*n的矩阵高度和宽度,m为目标稀疏矩阵,i,j则表示需要查询元素的增坐标以及纵坐标;查询过程中“andb(i《?m)(j《?n)”严格限制坐标越界问题,“nth_default”函数保证坐标i不存在返回值时,返回nil空值,进一步保证结果的正确性;“get_v”函数,需要2个输入参数,l类型为“list(nat*a)”,表示稀疏矩阵中具体某一列,k为该列第k个元素;假如不为第k个元素,则返回0,假如为第k个元素,则拿出当前元素并与其他返回结果进行相加。
[0018]
进一步地,所述步骤(4)实现过程如下:
[0019]
稀疏矩阵运算包括矩阵加法减法和矩阵乘法;
[0020]
矩阵加减法借助“sparse_get”函数,对各自矩阵中每个元素读取并相加减后,生成新的稀疏矩阵;
[0021]
矩阵乘法函数的构造需依次构造多个递归函数,从底层至上层依次为“v_v_mul_le”,“v_matrix_mul”,“sparsematrix_mul”;其中“v_v_mul_le”函数为列表的内积函数,其接受两个列表作为输入参数并返回其内积结果;“v_v_mul_le”函数是列表与二维表相乘函数,其利用递归将列表与二维表中每个列分别进行内积,将其结果以表类型输出,在完成该函数的构造后还需对其输出结果的长度进行证明;“v_matrix_mul”为二维表与二维表的相乘函数,其基于“v_v_mul_le”函数利用递归实现两个二维表中的表依次内积,并以二维表类型输出;“sparsematrix_mul”以两个稀疏矩阵类型作为输入参数,基于“v_matrix_mul”函数,要求乘号左边的矩阵的每一行乘上与乘号右边的矩阵的每一列作内积。
[0022]
进一步地,所述步骤(5)实现过程如下:
[0023]
在coq定理证明器中将矩阵运算的证明转化为元素运算的证明,若证明经过矩阵运算后矩阵的内部元素,等于矩阵内部元素经过运算后得到的结果,则得证;稀疏矩阵m1,m2加减之后得到的结果稀疏矩阵,通过证明其内部的每一个元素“(sparse_op op m1 m2)&[i,j]”,与取出稀疏矩阵m1,m2内部元素再加减之后的结果相等,可得证;稀疏矩阵m1,m2相乘之后得到的结果稀疏矩阵,通过证明其内部的每一个元素“(sparse_mul m1 m2)&[i,j]”,其中,与稀疏矩阵m1内部元素乘稀疏矩阵m2内部元素累加之后的结果相等,可得证。
[0024]
有益效果:与现有技术相比,本发明的有益效果:本发明使用定理证明器coq对稀疏矩阵进行形式化验证,相较于传统的验证方法,具有可靠性和严谨性的特点,避免了实际数学推理中的错误。
附图说明
[0025]
图1为本发明的流程图。
具体实施方式
[0026]
下面结合附图对本发明做进一步详细说明。
[0027]
如附图1所示,本发明为一种基于定理证明器coq的稀疏矩阵形式化验证方法,具体包括以下步骤:
[0028]
步骤1:稀疏矩阵的形式化定义。
[0029]
舍弃矩阵内部值为0的元素;矩阵高度不变,每一行分别记录不为0的元素,记录方式为一维列表(list)的形式,列表元素由两部分组成,用*号隔开表示。第一部分是nat类型纵坐标,第二部分是a类型的元素值。类型a是一个抽象值域,具有多态性质,可作为float,int等其他类型的抽象,因此可应用于工程问题的数学模型构建:definition sparsematrix_ta:=list(list(nat*a))。
[0030]
步骤2:稀疏矩阵生成的形式化定义。
[0031]
稀疏矩阵的生成,依据映射的方式完成构建。构建函数需要三个参数,分别是描述矩阵高度,宽度,以及描述矩阵元素信息的映射函数f。映射函数的类型为nat-》nat-》a,nat表示自然数类型,两个nat类型分别表示横坐标以及纵坐标,然后得到一个值域在a下的元素值,这是整个形式化验证工作的开始。
[0032]“generate”函数,用于构建稀疏矩阵。“nat_list”函数输入参数为两个nat类型,“nat_list m m”用于产生从1到m的列表,用于控制矩阵高度。“map”函数为coq系统自带函数,作用是严格限制映射的一一对应关系,防止出现长度不匹配等程序错误。最后“generate_row”函数,根据nat-》nat-》a类型的描述函数f,横坐标i,以及纵坐j进行赋值。递归产生m行矩阵元素,得到重新排列后的稀疏矩阵。这种方案利用coq递归机制,使nat自然数类型从m递归到0,相比于其他程序语言,可有效控制数组越界问题。
[0033][0034]
步骤3:稀疏矩阵取元素运算的形式化定义。
[0035]
为解决稀疏矩阵的加减法,设计稀疏矩阵取元素运算“sparse_get”函数。该函数需要5个输入参数,m,n表示m*n的矩阵高度和宽度,m为目标稀疏矩阵,i,j则表示需要查询元素的增坐标以及纵坐标。查询过程中“andb(i《?m)(j《?n)”严格限制坐标越界问题,“nth_default”函数保证坐标i不存在返回值时,返回nil空值,进一步保证结果的正确性。“get_v”函数,该函数需要2个输入参数,第一个参数l类型为“list(nat*a)”,表示稀疏矩阵中具体某一列,第二个参数k为该列第k个元素。判断思路为假如不为第k个元素,则返回0,假如为第k个元素,则拿出当前元素并与其他返回结果(即0)进行相加。后文以符号&[i,j]表示取运算运算,其中i,j表示矩阵下标。
[0036]
步骤4:稀疏矩阵运算的形式化定义。
[0037]
(4.1)稀疏矩阵加减法
[0038]
加减法本质上是取出相同坐标的元素,同时进行运算,因此可以抽象成同一种矩阵运算。“sparse_op”函数遵循上述设计思路,需要5个参数,前两个为高度宽度,第三个为
运算符号(加或者是减),接着是两个稀疏矩阵。构建思路是借助“sparse_get”函数,对各自矩阵中每个同一位置的元素进行读取并相加减后,生成新的稀疏矩阵。期间依靠“sparse_get”参数类型以及数组不会越界的可靠性,初步保证运算正确。运算结果的正确性在下一小节专门进行证明。
[0039]
(4.2)稀疏矩阵乘法
[0040]
矩阵乘法函数的构造需依次构造多个递归函数,从底层至上层依次为“v_v_mul_le”,“v_matrix_mul”,“sparsematrix_mul”。其中“v_v_mul_le”函数为列表的内积函数,其接受两个列表作为输入参数并返回其内积结果。“v_v_mul_le”函数是列表与二维表相乘函数,其利用递归将列表与二维表中每个列分别进行内积,将其结果以表类型输出,在完成该函数的构造后还需对其输出结果(表)的长度进行证明。
[0041]“v_matrix_mul”为二维表与二维表的相乘函数,其基于“v_v_mul_le”函数利用递归实现两个二维表中的表依次内积,并以二维表类型输出。
[0042]“sparsematrix_mul”以两个稀疏矩阵类型作为输入参数,基于“v_matrix_mul”函数,要求乘号左边的矩阵的每一行乘上与乘号右边的矩阵的每一列作内积。
[0043]
步骤5:基本性质的形式化证明。
[0044]
相比于其他程序语言,本发明利用coq中的机制,以自然数域代替int类型处理数组、递归越界问题,可保证每种矩阵运算结果的长度和宽度的正确性。并且,类似c语言等命令式语言需要抛出异常后,捕获异常再输出相应报错信息,不同于其他语言的是,在运算函数内部,集成了null值情况下函数所需要的做出的处理。以上是对于程序健壮性的处理。接下来证明程序本身运算正确性的验证,这是其他命令式语言不具备的特性。
[0045]
加减乘运算的正确性:矩阵运算的本质是矩阵内部元素的运算,由于元素加减乘等运算的正确性已经由coq保证,证明的思路是将矩阵运算的证明转化为元素运算的证明。若证明经过矩阵运算后矩阵的内部元素,等于矩阵内部元素经过运算后得到的结果,则得证。
[0046]
加减法运算证明思路为,稀疏矩阵m1,m2加减之后得到的结果稀疏矩阵,通过证明其内部的任意一个元素“(sparse_op op m1 m2)&[i,j]”,与稀疏矩阵m1,m2内部同一位置元素经过加(或者减)运算之后的结果相等,可得证。
[0047]
乘法证明思路是,稀疏矩阵m1,m2相乘之后得到的结果稀疏矩阵,通过证明其内部的任意一个元素“(sparse_mul m1 m2)&[i,j]”,其中,与稀疏矩阵m1内部元素乘稀疏矩阵m2内部元素累加之后的结果相等,可得证。
[0048][0049]“fold_nat”函数用于处理coq在自然数下的递归调用,保证递归越界问题。n为递归层数,acc从零开始累加,每层调用增加“acc+m1&[i,x]*m2&[x,j]”,最终递归n次得到累加结果。m1矩阵下标为i,x的元素与m2矩阵下标为x,j的元素相乘得到的结果,与acc
[0050]
实用案例,低密度奇偶校验(ldpc)码是目前5g通信常用的信道编码码字的一种,其具有接近香农极限的编译码性能。其中low density指校验矩阵为稀疏矩阵,校验矩阵与生成矩阵的关系为两者的矩阵乘的模二和为0。使用稀疏校验矩阵构造编码,有利于降低译
码复杂度。以下是本发明利用本次形式化方法构建的校验模型:
[0051]
原码:s=(c1 c2 c3)
[0052]
ldpc码:c(s)=(c1 c2 c3 c4 c5 c6)
[0053]
其中ldpc码的计算方法是:
[0054][0055]
上式可以简写为c(s)=sg(元素和元素之间的加法是模二加法,即“异或”),其中s为原码,g被称为生成矩阵。
[0056][0057]
上式可改成其中h称为校验矩阵。
[0058][0059]
值得注意的是,校验矩阵和生成矩阵是一一对应的,在coq中构建上述引理模型,进行验证。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1