Coqの任意の誘導命題定義が与えられた場合、誘導命題に対して誘導戦略を呼び出すときに使用する合理的なdisj_conj_intro_patternを導出する一般的な式はありますか?誘導命題のCoq - disj_conj_intro_patterns
一般に、帰納的定義のコンストラクタのいずれかの完全なintro_patternは、複数の仮説と複数の帰納仮説を(名前を)必要とすることがあります。この場合、パターンに含まれる名前の順序付けには、パラメータ、続いて1つの仮説および対応する帰納的仮説、続いて仮説および帰納仮説からなる1つまたは複数の追加の対が続く。例えば、ソフトウェアの基礎は、以下を含む: - これら2つのコンストラクタ各フォーム
の表現が含まれているため、おそらくInductive exp_match {T} : list T -> reg_exp T -> Prop :=
| MEmpty : exp_match [] EmptyStr
| MChar : forall x, exp_match [x] (Char x)
| MApp : forall s1 re1 s2 re2,
exp_match s1 re1 ->
exp_match s2 re2 ->
exp_match (s1 ++ s2) (App re1 re2)
| MUnionL : forall s1 re1 re2,
exp_match s1 re1 ->
exp_match s1 (Union re1 re2)
| MUnionR : forall re1 s2 re2,
exp_match s2 re2 ->
exp_match s2 (Union re1 re2)
| MStar0 : forall re, exp_match [] (Star re)
| MStarApp : forall s1 s2 re,
exp_match s1 re ->
exp_match s2 (Star re) ->
exp_match (s1 ++ s2) (Star re).
Notation "s =~ re" := (exp_match s re) (at level 80).
Theorem in_re_match : forall T (s : list T) (re : reg_exp T) (x : T),
s =~ re ->
In x s ->
In x (re_chars re).
Proof.
intros T s re x Hmatch Hin.
induction Hmatch
as [
|x'
|s1 re1 s2 re2 Hmatch1 IH1 Hmatch2 IH2
|s1 re1 re2 Hmatch IH|re1 s2 re2 Hmatch IH
|re|s1 s2 re Hmatch1 IH1 Hmatch2 IH2].
この例では、MAPPとMStarAppためintro_patterns各仮説と誘導仮説の二対を有します
X - > Y - > zがこのについて
、現在のリファレンスマニュアルのみ
を言っているようですdisj_conj_intro_patternとして0
誘導用語これは、誘導用語として動作しますが、 文脈で導入された変数に名前を付けるために disj_conj_intro_patternで名前を使用しています。 disj_conj_intro_patternは、通常、[ p11 ... p1n1 | ... | pm1 ... pmnm] mはコンストラクタの数で、 という種類のものです。 i番目の目標の 文脈で誘導によって導入された各変数は、の順序でリストpi1 ... piniからその名前を取得します。十分な名前がない場合、帰納変数は の残りの変数の名前を作り出します。より一般的には、pijは任意の離散的/結合的な導入パターン(8.3.2節を参照)とすることができます。 インスタンスの場合、1つのコンストラクタを持つ誘導型の場合、[p1 ... pn]の代わりに という表記(p1、...、pn)を使用できます。
これは、指定された誘導定義の完全なdisj_conj_intro_patternの正しい形式を決定する方法を指定していないようです。
上記の私の経験的観察は、1)各コンストラクタの仮パラメータが最初に来て、コンストラクタの仮説が対応する帰納的仮説と対になっていること。 2)仮説と帰納仮説の組の数は、コンストラクタ内の仮説の数、問題の総和から求められる。それともそれ以上はありますか?
リファレンスマニュアルのTacticsの章と、第1章のGallina文法のパターンに関する非常に一般的な議論の他に、関連する他の文書はありますか?
「誘導」に必要なパターンは「破壊」に必要なものと同じであるという経験的な観察をしました。ただし、誘導型仮説は、それが属している帰納的型です(これは再帰呼び出しであると言えます)。あなたの例では、 'exp_match'のコンストラクタのすべての仮説は' exp_match'型ですが、誘導仮説を生成しない他の仮説を持つことができます。 – eponier