Page 312 - 《软件学报》2021年第6期
P. 312

1886                                     Journal of Software  软件学报 Vol.32, No.6,  June 2021

             Lemma tm1_cond1:height tm1=3.
             Lemma tm1_cond2:width tm1 3.
             Definition Tm1:=mkMat nat 3 3 tm1 tm1_cond1 tm1_cond2.
             由于构建一个矩阵所需要写的代码过多,因此我们可以将固定尺寸的矩阵构造封装成函数,后期构造时只
         需输入矩阵内部元素即可得到所构造的矩阵,如构建 3×3 矩阵函数 mkMat_3_3.
             Definition mkMat_3_3′ (a11 a12 a13 a21 a22 a23 a31 a32 a33: A):=
               [[a11;a12;a13]; [a21;a22;a23]; [a31;a32;a33]].
             Definition cond2_mkMat_3_3′:forall a11 a12 a13 a21 a22 a23 a31 a32 a33,
             width(mkMat_3_3′ a11 a12 a13 a21 a22 a23 a31 a32 a33) 3%nat.
             Definition mkMat_3_3 (a11 a12 a13 a21 a22 a23 a31 a32 a33:A):=
               mkMat A 3 3 (mkMat_3_3′ a11 a12 a13 a21 a22 a23 a31 a32 a33)
               eq_refl(cond2_mkMat_3_3′ a11 a12 a13 a21 a22 a23 a31 a32 a33).
             其中,eq_refl 是自定义的一个证明目标,其能够自动证明二维表的高度.在此基础上,Tm1 的构建代码大大减
         少,如下.
             Definition Tm1:=mkMat_3_3    1 2 3    2 3 4    3 4 5.
         2.2   矩阵类型等价性质
             在文献[3]中,对矩阵类型的等价判断是采用 Coq 中的 eq 函数表示,其采用公理 Meq 作为二维表(即矩阵内
         部数据)相等与矩阵相等的转换理论,如下:
                 Axiom Meq: forall (A:Set) (m n:nat) (m1 m2:Mat A m n), mat A m n m1=mat A m n m2↔m1=m2.
         其中:A 为矩阵元素类型;m 和 n 分别为矩阵的高度以及宽度;m1 和 m2 为元素类型为 A、大小为 m×n 的矩阵;mat
         是获取矩阵内部二维表的函数,其参数分别为元素类型、矩阵高度、矩阵宽度以及矩阵.由于 eq 函数对于 Record
         类型相等要求的特性,即要求 Record 类型中每一条记录相等,而当两个矩阵相等时(即内部数据相等),不要求其
         关于该数据的高度以及宽度证明相等,因此该公理存在部分错误,即,由二维表相等无法推导出矩阵相等.
             为了解决该公理存在的问题,我们提出了新的矩阵等价判断函数 M_eq,定义如下:
                    Definition M_eq{A:Set} {m n:nat} (m1 m2:Mat A m n):=mat A m n m1=mat A m n m2.
             其实现原理如图 1 所示.
















                                  Fig.1   Implementation principle of M_eq function
                                          图 1   M_eq 函数实现原理

             该函数用于判断两个矩阵类型中的二维表(即矩阵内部数据)是否相等.该判断方法有效避免了关于 Record
         类型使用 eq 函数进行等价判断所存在的问题,也消除其使用错误公理而产生的漏洞.该函数具有自反性、对称
         性以及传递性,因此,我们借助 Coq 中的重写扩张机制构建重写性质,使其成为一个重写可用的二元关系.下面使
         用“===”标记表示 M_eq 函数.下面是 M_eq 的自反性、对称性和传递性的引理表示.
   307   308   309   310   311   312   313   314   315   316   317