次のばかげた例を考えてみましょう
theory meta_all
imports Main
begin
lemma strict_subset: "⟦ A ⊂ B ⟧ ⟹ ∃a ∈ B. a ∉ A"
apply(blast)
done
lemma strict_subset2: "∀A B. A ⊂ B ⟶ (∃a ∈ B. a ∉ A)"
apply(blast)
done
lemma "¬ (∃A. A ⊂ A)"
apply(rule notI)
apply(erule exE)
次に、補題を使用してとの両方をstrict_subset
置き換えたいと思います。それは実行されますが、既存の名前が に変更され、補題を導入する目的が完全に無効になります。A
A
B
A
Aa
apply(insert strict_subset [where A="A" and B="A"])
導出されたレンマを使用すると、strict_subset2
すべてうまくいくので、私の推論は正しいと確信しています。
apply(insert strict_subset2)
apply(erule_tac x="A" in allE, erule_tac x="A" in allE)
apply(drule mp, assumption)
apply(erule bexE, erule notE, assumption)
done
end
要点は、ほとんどの標準補題は形式のものであり、形式のものstrict_subset
ではなくstrict_subset2
、Isabelle の作成者は私がstrict_subset2
最初に自分自身を作成することを意図していない可能性があるということです。したがって、私は何か間違ったことをしているに違いありません.
名前が変更された理由を知りたいA
ですか?タイプが正確である限り、メタユニバーサル定量化が問題にならなかった例も見たことがあると思うので、それはタイピングシステムと関係があると思います。
A
もう1つの質問は、どうにかして名前の変更を防ぐことができるかどうかです。
もちろん、私はまだ Isabelle に慣れていないので、両方の質問が本当に正しい答えと無関係になる可能性は十分にあります。
PS。ここでもイザベルから素敵なシンボルを手に入れることはできますか?