私は、Prologのような言語で次のようなものを書くことができることを知っています:
mortal(X):-man(X)。%すべての男性は致命的です 男(ソクラテス)。%ソクラテスは男です ?-致命的(ソクラテス)。%ソクラテスは致命的ですか? はい
私が欲しいのはこのようなものですが、逆です。私がこれを持っているとしましょう:
mortal(X):-man(X)。 男(ソクラテス)。 男(プラトン)。 男(アリストテレス)。
次に、mortal(X)が真であるランダムXを与えるように要求します(したがって、ランダムシードに応じて「ソクラテス」、「プラトン」、または「アリストテレス」のいずれかを与える必要があります)。
私の質問は次のとおりです。
- この種の逆推論には名前がありますか?
- それをサポートする言語やライブラリはありますか?
編集
以下の誰かが指摘しているように、あなたは単にmortal(X)に尋ねることができ、それはすべてのXを返し、そこからあなたは単にリストからランダムなものを選ぶことができます。しかし、そのリストが非常に大きく、おそらく数十億になるとしたらどうでしょうか。明らかにその場合、1つを選ぶ前にすべての可能な結果を生成することはできません。
これが実際の問題になることを確認するために、「adjective1 noun1adverbtransitive_verbadjective2noun2」という形式のランダムな文を生成する単純な文法を想像してみてください。形容詞、名詞、動詞などのリストが非常に大きい場合は、組み合わせ爆発がどのように問題であるかを確認できます。各リストに1000語が含まれている場合、1000^6の可能な文があります。