再び、予期しない結果を伴う小さな例です。
theory Scratch
imports Main
begin
datatype test = aa | bb | plus test test
axiomatization where
testIdemo : "x == plus x x"
lemma test1 : "y == plus y y"
今、私は次のメッセージを受け取ります:
Auto solve_direct: The current goal can be solved directly with
Scratch.testIdemo: ?x ≡ test.plus ?x ?x
Auto Quickcheck found a counterexample:
y = aa
Evaluated terms:
test.plus y y = test.plus aa aa
そして、スレッジハンマーを実行しようとすると、次のようになります。
"remote_vampire": Try this: using testIdemo by auto (0.0 ms).
"spass": The prover derived "False" from "test.distinct(5)" and "testIdemo".
This could be due to inconsistent axioms (including "sorry"s) or to a bug in Sledgehammer.
If the problem persists, please contact the Isabelle developers.
これは私が==をいじったせいですか?または、私の公理に他の種類の制限を設定する必要がありますか?
ファローアップ:
どうやら私は等号で遊ぶべきではありません:Pだから私は自分の関係を定義する必要があります。
axiomatization
testEQ :: "test ⇒ test ⇒ bool" (infixl "=" 1)
where
reflexive [intro]: "x = x" and
substitution [elim]: "x = y ⟹ B x = B y" and
symmetric : "x = y ⟹ y = x"
したがって、基本的なプロパティを定義する必要があると思います。再帰性、置換、対称性は、最初はいいように思えます。'a => 'a => bool でジェネリックにすることができます
ここで、私は自分の関係をさらに定義します。例にとどまる:
axiomatization
plus :: "test⇒ test⇒ test" (infixl "+" 35)
where
commutative: "x + y = y + x" and
idemo: "x + x = x"
a) これは今のところ正しいですか b) ここからどのように進めるか これまでのところ、これが等価点のような補題の下位項に取って代わるとは思いません。