次の式があります。
y(t) = x(t) and not x(t-1)
x, y are boolean variables
t is discrete time
これはエッジ検出器です。私はさらにそれを知っています
y(0) = 0
y(1) = 0
y(2) = 1
y(3) = 0
y(4) = 0
と初期条件
x(0) = 1
x(4) = 0
の満足できる値を見つけるために方程式を解きたいと思いますx(1), x(2), x(3)
。この例では、解決策の 1 つが次のようになると予想しています。
x(1) = 0
x(2) = 1
x(3) = 1
私はProlog初心者ですが、Prologはまさにこのような課題を解決するのに使えるものだと思います。期待される出力と初期条件を事実として書きます。
y(0,0).
y(1,0).
y(2,1).
y(3,0).
y(4,0).
x(0,1).
x(4,0).
および述語としての方程式self。式を Prolog の述語として書き直す方法と をクエリする方法はx
? すべての魂を手に入れることはできますか?すべてのアイデアに感謝します!幸運をお祈りしています。
最初の答えを読んだ後
制約に誤りがあります (この用語をうまく使用すると)。によって刺激される方程式(システム)x(t)
は、特定のy(t)
x(t): 1 0 1 0 0
y(t): X 0 1 0 0
t : 0 1 2 3 4
whereは、計算のために知る必要があるX
ため、「わからない」ことを意味します。x(-1)
y(0)
x(t)
タスクは、t in 1..4
いつy(t)
が既知
であるかを計算することです。x(0)
特定の値を持つかどうかをx(4)
要求できます。これはソリューションの数にのみ影響しますが、タスクの本質にとって重要ではないと思います。
与えられた
y(t): X 0 1 0 0
t : 0 1 2 3 4
2つの解決策があります:
S1:
x(t): 1 0 1 0 0
y(t): X 0 1 0 0
t : 0 1 2 3 4
S2:
x(t): 1 0 1 1 0
y(t): X 0 1 0 0
t : 0 1 2 3 4
の初期/最終制約がない場合x(t)
、少なくとも次のソリューションが追加されます。
S3:
x(t): 1 0 1 1 1
y(t): X 0 1 0 0
t : 0 1 2 3 4
S4:
x(t): 0 0 1 0 0
y(t): X 0 1 0 0
t : 0 1 2 3 4
S5:
x(t): 0 0 1 1 0
y(t): X 0 1 0 0
t : 0 1 2 3 4
S6:
x(t): 0 0 1 1 1
y(t): X 0 1 0 0
t : 0 1 2 3 4
より長いシリーズとより複雑な方程式についてもこれを解決したいと思います。この例は非常に単純化されています。