Page 57 - 《软件学报》2025年第8期
P. 57

3480                                                       软件学报  2025  年第  36  卷第  8  期



                    例如, 在  chain 元规则中  P(x,y) ← Q(x,z),R(z,y), 大写字母   P,Q 和  R 表示存在量化的二阶变量, 而小写字母      x,
                 y 和   表示全称量化的一阶变量. 每个元规则都与一个阶               (order) 约束相关联, 以确保证明过程的终止.        H  表示通过
                    z
                 将元替换   Σ = {v 1 /t 1 ,...,v n /t n } 应用到其对应元规则而形成的假设, 其中, 存在量化变量  v i  被替换为项  . MIL  的任务
                                                                                             t i
                                         +   +      +          −  −      −
                 是学习一个假设      H  使得对于  ∀e ∈ E ,B,H ⊨ E  并且对于   ∀e ∈ E ,B,H ⊭ e . 这里  ⊨ 表示蕴涵.

                 2   问题: 冗余证明
                    在本节, 我们使用一个具有激励意义的例子“青蛙与荷叶问题”来揭示                      MIL  中的冗余证明问题. 青蛙与荷叶问
                 题的任务描述如下: 有      2n+1 片荷叶和    2n 只青蛙, 其中包括    n 只黄色青蛙和    n 只绿色青蛙. 我们假定每片荷叶最多
                 只容纳一只青蛙.      n 只绿色青蛙蹲在最左边的        n 片荷叶上, 其余    n 只黄色青蛙蹲在最右边的        n 片荷叶上, 中间的荷
                 叶是空的. 由于荷叶之间的距离限制, 每只青蛙可采用以下两种方式跳跃:
                    1) 如果青蛙与空荷叶相邻, 它可以直接跳到空荷叶上;
                    2) 如果青蛙不与空荷叶相邻, 它只能跨过一只青蛙跳到空荷叶上.

                    目标是找到一种跳跃策略, 以最少的跳跃步数完成在黄蛙和绿蛙之间的位置交换. 例如, 当                           n = 2 时, 任务的初
                 始状态和最终状态如图        1  所示.

                                                                         初始状态


                                                                         最终状态

                                      图 1 青蛙与荷叶问题的初始状态和最终状态, 其中                n = 2

                    我们将绿色青蛙、黄色青蛙和空荷叶分别表示为                  1、−1  和  0. 因此, 这个问题的初始状态和最终状态可以表
                                     [−1,−1,0,1,1]. 注意, 青蛙的移动等同于空荷叶的移动. 针对这个任务, 我们设计了                4  个
                 示为列表   [1,1,0,−1,−1] 和
                 基本的   2-元谓词  right_one/2、right_two/2、left_one/2  和  left_two/2 (简称为  r1/2、 r2/2、 l1/2 和  l2/2) 来描述空荷
                 叶的移动. 这些谓词表示空荷叶向其左或右移动了                1  或  2  个位置. 数字  2  表示这些谓词有两个参数      (输入和输出).
                 例如在图   2  中, 谓词  right_one/2  表示空荷叶移动到了其右侧的第      1  个位置, 这也意味着空荷叶右侧的第          1  只青蛙

                 跳到了空荷叶上. 因此, 该任务可以描述为一个原子               f ([1,1,0,−1,−1],[−1,−1,0,1,1]). 我们需要基于可用的背景知
                                                                            P(X,Y) : −Q(X,Z),R(Z,Y). 青蛙与荷
                 识学习原子     f ([1,1,0,−1,−1],[−1,−1,0,1,1]) 的定义. 此实验使用链式元规则
                 叶问题的具体输入设置如表          2  所示.

                                                                         初始状态

                                                                         right_one/2

                                           图 2 由  2-元谓词  right_one/2  引起的状态变化

                                               表 2 青蛙和荷叶问题的输入设置.

                                      输入                                 设置
                                                               [                      ]
                                      实例集                       f ([1,1,0,−1,−1],[−1,−1,0,1,1])
                                     元规则集                         [P(X,Y) : −Q(X,Z),R(Z,Y)]
                                     背景知识                           r1/2 r2/2 l1/2 l2/2
                                                                           ,
                                                                               ,
                                                                       ,

                    通用元解释器的理论框架如代码            1  所示. 为了生成一个程序, MIL      系统首先尝试通过       (call(Atom)) 将  Atom 作
                 为目标进行证明. 当证明失败时, MIL         系统尝试将目标与元规则的头部匹配, 检查              Order 约束, 并将元规则中存在
                 量化的变量绑定到谓词签名中的符号. MIL             系统保存产生的元替换        MetaSub 并尝试证明元规则的体目标. 在证明
   52   53   54   55   56   57   58   59   60   61   62