Z3的QnA任务.有可能吗



我正试图解决一个问答任务。有几种方法可以做到这一点,比如深度学习方法、查询知识图、语义搜索等。但我想,是否也可以使用Z3定理证明器来完成这项任务?例如,如果我们可以将知识表示为一组公理,每个公理由谓词(关系(、主语和宾语组成,并用FOL子句表示,那么我们可以遍历它们并找到查询的答案(也可以表示为公理(。例如,我可以编码一个简单的知识";英语就是语言;在FOL子句中:

exists l.(language(l) & exists n.(name(n) & :op1(n,"English") & :name(l,n)))

如何将其翻译成Z3?以及我如何提取查询"的答案;{unknown}是语言";查找{未知}变量或子句?请注意,{unknown}可以是任何东西。它可以是原子子句,也可以是逻辑子句,具体取决于与查询的匹配情况。

我认为SMT求解器不太适合执行此任务。这并不是因为你不能使用z3,而是像Prolog这样的系统或你构建的自定义程序也可以正常工作。SMT求解器在理论(数字、算术、数组、数据结构等(相结合时会大放异彩;对于您的问题域,您所需要的只是一个类似Prolog的简单数据库和一个查询引擎。

编码您建议的语句实际上取决于您心目中的谓词类型。注意,SMTLib是";键入";语言所以像language(l)这样的谓词是多余的:只有当调用类型检查时,才有类型语言的值;也就是说,你无论如何都不能传递谓词language任何不是语言的东西。(这类似于用Haskell/O’Caml等类型化语言编程,而不是用Lisp/Scheme/Python等动态类型化语言(

有关如何使用SMT求解器处理一阶逻辑建模问题的示例,请参阅使用Z3 SMT解决谓词演算问题。

相关内容

  • 没有找到相关文章

最新更新