Coq에서 임의의 귀납적 명제 정의가 주어지면 귀납적 명제에 유도 전술을 호출 할 때 합리적인 disj_conj_intro_pattern을 유도하는 일반적인 공식이 있습니까?귀납 命題에 대한 Coq - disj_conj_intro_patterns
일반적으로 귀납적 정의의 생성자 중 하나에 대한 완전한 intro_pattern은 두 개 이상의 가설과 하나 이상의 귀납적 가설을 요구할 수 있으며,이 경우 패턴에 제공된 이름의 순서는 모두 하나의 가설과 그에 상응하는 귀납적 가설, 그 다음에 가설과 귀납적 가설로 구성된 하나 이상의 추가 짝이 뒤 따른다. 가설 및 유도 가설 두 쌍을 가지고 각각의 MAPP와 MStarApp이 예에서
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].
의 intro_patterns -이 두 생성자 각 양식
의 표현을 포함 아마도 때문에 : 예를 들어, 소프트웨어 재단은 다음을 포함한다X -> Y -> Z이 약
, 현재의 참조 설명서에만
말 것 이 같은 용어를 유도 동작하지만 문맥 도입 변수 이름 disj_conj_intro_pattern의 이름을 사용 disj_conj_intro_pattern0
유도 용어. disj_conj_intro_pattern은 일반적으로 [ p11 ... p1n1 | ... | pm1 ... pmnm] m은 생성자의 수입니다. 용어 유형입니다. i 번째 목표의 컨텍스트에서 유도에 의해 도입 된 각 변수는 목록에서 pi1 ... pini의 이름을 순서로 가져옵니다. 이름이 충분하지 않은 경우 유도는 나머지 변수가 도입 될 이름을 만듭니다 (이름은 ). 보다 일반적으로 pij는 임의의 이항/결합 소개 패턴 (8.3.2 절 참조) 일 수 있습니다. 인스턴스의 경우 생성자가 하나 인 귀납적 유형의 경우 [p1 ... pn] 대신 표기법 (p1, ..., pn)을 사용할 수 있습니다.
이하지 주어진 유도 정의에 대한 완전한 disj_conj_intro_pattern에 대한 올바른 양식을 결정하는 방법을 지정하는 것 같다 않습니다.
위의 경험적 관찰은 1) 각 생성자의 형식적 매개 변수가 먼저오고, 생성자의 가설이 해당 유도 성 가설과 쌍을 이룹니다. 2) 가설의 쌍과 귀납적 가설의 갯수는 생성자의 가설의 수, 그 문제의 합에 따라 결정된다. 아니면 더 이상 거기에 있습니까?
참조 설명서의 전술 장과 제 1 장의 Gallina 문법 패턴에 대한 매우 일반적인 토론 외에도 관련 문서가 있습니까?
나는 또한 '유도'에 필요한 패턴이 '파괴'에 필요한 패턴과 동일하다는 경험적 관찰을했다. 그러나 유도 가설은 유형이 동일한 생성자의 각 인수 뒤에 추가되어야한다 귀납적 유형은 속합니다 (이것은 재귀 호출이라고 말할 수 있습니다). 귀하의 예제에서,'exp_match'의 생성자에 대한 모든 가설은'exp_match' 유형이지만 유도 가설을 생성하지 않는 다른 가설을 가질 수 있습니다. – eponier