● 最后,我们再定义一个谓词“ want(x)”,表示“要获取 x 而采取的行动”,它的具体定义如下:
● 这样,所有的前提都建立完毕,把“我要去机场”这个意愿表达出来,看看机器会给你什么建议:
根据以上定义,Advice Taker 就可以自动推理出“我要去机场”所要做的行为,下面是依次推理的步骤,最后一个输出的步骤就是结论,即“我要去机场”这个行为应该去做的第一个动作:“从书桌步行到汽车”。
- at(我,书桌)→ can(go(书桌,汽车,步行))
- at(我,汽车)→ can(go(我家,机场,驾车))
- did(go(书桌,汽车,步行)→ at(我,汽车))
- did(go(我家,机场,驾车)→ at(我,机场))
- canachult(at(我,书桌),go(书桌,汽车,步行),at(我,汽车))
- canachult(at(我,汽车),go(我家,机场,驾车),at(我,机场))
- canachult(at(我,书桌),prog(go(书桌,汽车,步行),go(我家,机场,驾车))→ at(我,机场))
- do(go(书桌,汽车,步行))
上面笔者列举的这个例子,来自麦卡锡《常识编程》论文的原文,定义和推理过程虽然对人类来说会觉得很烦琐,但这些“烦琐”对机器来说并不存在任何困难。从这个角度看,机器用逻辑推理模拟人类思考,似乎确实具备可行性。可是,Advice Taker 其实并未解决“常识源自哪里?”这个真正的难题,上面这个例子中,诸如 go、walkable、drivable、canachult、want 这些谓词的定义,都是人类总结后灌输进去的,而不是计算机从某种“公理”或者“公设”性质的常识中推导而来的。使用一小撮最小化、最本质的公理定义和规则的集合就可以推理出人类的所有常识,这样的思路在数学、几何这些抽象世界虽然行得通而且常见,但也是经过了上千年时间和无数数学家的智慧才成功完成的,要在具体的现实世界里做到这点谈何容易。麦卡锡在论文中也承认了现在并不能解决这个问题,所以 Advice Taker 只是给出了一个让计算机获得常识的理论上的可行性,而暂时无法作为一个真正去实施的指导方法。
80
第二部分 学派争鸣