私はZ3の初心者です(今日開始)。今のところそれはたくさん好きです。素晴らしいツール。残念ながら、構文は私を少し混乱させます。Z3の場合、a3 = x * y * zの場合、3a <= x + y + z
Iは、IFことを証明する:(
^3 = X Y Z = M、X、Y、Z、M(0..1)とその後)
:
私はそれを満たすモデルを見つけることを試みることによってそう3A < =(X + Y + Z)
:
3A>(X + Y + Z)
ここで
はZ3コードです:
(declare-const a Real)
(declare-const x Real)
(declare-const y Real)
(declare-const z Real)
(declare-const m Real)
(assert (> a 0))
(assert (< a 1))
(assert (> x 0))
(assert (< x 1))
(assert (> y 0))
(assert (< y 1))
(assert (> z 0))
(assert (< z 1))
(assert (> m 0))
(assert (< m 1))
(assert (= (* (* a a) a) m))
(assert (= (* (* x y) z) m))
(assert (> (* 3.0 a) (+ (+ z y) x)))
(check-sat)
モデルは満足できません。
私は何を望んでいたのですか?私が言ったように、私は完全な初心者なので、構文は私を混乱させます。
詳細な回答をお寄せいただきありがとうございます@トラウンタウンは、よく書かれており、明確です。私はすでにそれをupvotedしている:D。しかし私の質問は、数学的な証明ではなく、Z3の構文とセマンティクスの行のほうにあります。私はZ3を数時間以上使用していないので、私が書いたプログラムが正しいかどうかを知りたいと思っています。実際には数学的な証明を表しています。あなたはこれを拡大できますか?シンプルな "あなたのプログラムは正しい"と思うでしょう –
@ Trung私は妥当性と充足可能性との間の関係のこの一般的な説明が気に入っています。私は別の答えを投稿しました - 私は、数学的背景を持つ人々があなたが書いたものに満足していると思っていますが、ソフトウェアエンジニアリングやプログラミングの経験を持つ人は、 –
@ElMarceはい、あなたのプログラムは正しいです。 @ Douglas B. Stapleによって与えられた詳細な解答を参照することができます。あなたのコードについて詳しく説明します。 –