我知道像 Prolog 这样的语言允许您编写如下内容:
凡人(X):- 人(X)。% 所有的人都会死 人(苏格拉底)。% 苏格拉底是个男人 ?- 凡人(苏格拉底)。% 苏格拉底会死吗? 是的
我想要的是这样的东西,但是倒退了。假设我有这个:
凡人(X):- 人(X)。 人(苏格拉底)。 人(柏拉图)。 人(亚里士多德)。
然后我要求它给我一个随机的 X,其中 mortal(X) 为真(因此根据一些随机种子,它应该给我“苏格拉底”、“柏拉图”或“亚里士多德”之一)。
我的问题是:
- 这种反向推理有名字吗?
- 是否有任何语言或库支持它?
编辑
正如下面有人指出的那样,您可以简单地询问 mortal(X),它会返回所有 X,您可以从中简单地从列表中随机选择一个。但是,如果该列表非常大,可能有数十亿呢?显然在这种情况下,在选择一个之前生成所有可能的结果是行不通的。
要了解这将如何成为一个实际问题,请想象一个简单的语法,它生成了一个形式为“形容词1 名词1 副词传递性_动词形容词2 名词2”的随机句子。如果形容词、名词、动词等的列表非常大,你可以看到组合爆炸是一个问题。如果每个列表有 1000 个单词,那么您将有 1000^6 个可能的句子。