まず、実際に値を追加するために、ルールとしてdeclare
追加する方法を示します。次に、あなたの に関するいくつかの要求されていないポインターを提供し、次に、Stackoverflow のエチケットに関するいくつかの要求されていないポインターを (私の観点から) 提供します。C1_def
simp
lemma
単純なルールとして定義を宣言する
アレクサンダーが指摘したように、 aはルールdefinition
として自動的に追加されません。simp
simp
次のようなルールとして宣言できます。
declare C1_def [simp add]
auto
自動証明メソッド、simp
、などで単純なルールを使用すると、不適切fastforce
なループが発生したり、数式を展開したくない方法で数式を展開したりする可能性があるため、追加した後、次のsimp
ようにルールとして削除できます。
declare C1_def [simp del]
あなたの補題についてのコメント
あなたの補題の式はまさにあなたが望むものである可能性がありますが、私の意見では、あなたの表記法は混乱の潜在的な原因です. 特に、Person
型の名前とセット変数の両方として使用していること。私は明確化を求めずにこれらのコメントをします。
私自身の質問は、「集合があるのに、集合ではないのにp ∈ Person
、なぜエラーが発生しないのですか。Person
Person
typedecl Person
より多くの情報を得る 1 つの方法は、 を使用することdeclare [[show_types, show_consts]]
です。
私の質問に答えるために、私は次のことを行いました (ブラウザーの移植性のためにシンボルを変換します)。出力パネルに表示されたものの一部を示します。
declare [[show_types, show_consts]]
lemma "[|(!p::Person. age p > 20); p ∈ Person|] ==> (age p > 20)"
oops
(*OUTPUT:
variables:
Person :: Person set
p :: Person *)
Person
が自由変数であることを示しています。に関してはp
、それは の束縛変数ですが(!p::Person. age p > 20)
、補題の残りの部分では自由なので、仮説にはすべてp
の型Person
がすべての型のセットにあるという式が含まれていますPerson set
。
それはあなたが望むものかもしれませんが、この場合、補題は基本的に の形式であるため、違いはありませんA and B implies A
。
回答済みの SO 質問への回答を受け入れる必要があります
約2時間で姿を消す前に、isabelle
タッグのために、SOエチケットポリスとしての念願の任務を再び遂行する。
3 つの質問をしました。特に、これがあります:
それは率直な質問であり、率直な答えが与えられています。あなたはそれを答えとして受け入れる必要があります。さもないと、
- 「isabelle」タグの「未回答」タブをクリックすると、未回答として表示される場合があり、未回答の場合、
- 与えられた答えに対して、適切な感謝の気持ちを示していません。
私がリンクした質問の場合、(私とは異なり) Isbelle/HOL の専門家の 1 人から回答を得ました。人がそのような回答を入力するには、かなりの時間がかかります。極端に長くはありませんが、ワンライナーでもありません。