娱乐所定义的一个明显的引理,但由于递归而无法证明
在这里,我定义了REGEXP表达式,并尝试证明一些明显的引理,这些引理定义为下面。
datatype ('v)regexp = ESet | LChr 'v| Concat "'v regexp" "'v regexp"|
Alter "('v) regexp" "('v) regexp"| Dot|
Star "'v regexp" | Plus "('v) regexp" | Ques "('v) regexp" | \<epsilon>
fun ConcatRegexp::"'v regexp \<Rightarrow> 'v regexp\<Rightarrow> 'v regexp" where
"ConcatRegexp r1 r2 = Concat r2 r1"
fun ConcatRegexp2::"'v regexp \<Rightarrow> 'v regexp\<Rightarrow> 'v regexp" where
"ConcatRegexp2 r1 r2 = Concat (Concat r2 r1) r1"
fun renameDelta1 :: "('v regexp * 'v set * 'v regexp) set \<Rightarrow> ('v regexp => 'v regexp) \<Rightarrow> ('v regexp *'v set *'v regexp) set" where
"renameDelta1 ss f = {(f q,v, f q')| q v q' . (q, v, q')\<in> ss}"
fun renameDelta2 :: "('v regexp * 'v regexp) set \<Rightarrow> ('v regexp => 'v regexp) \<Rightarrow> ('v regexp *'v regexp) set" where
"renameDelta2 ss f = {(f q, f q')| q q'.(q, q')\<in> ss}"
primrec trans2LTS :: "'v regexp \<Rightarrow> 'v set \<Rightarrow> (('v regexp \<times> 'v set \<times> 'v regexp) set * ('v regexp * 'v regexp) set)" where
"trans2LTS (LChr v) alp_set= ({(LChr v,{v},\<epsilon>)},{})"|
"trans2LTS (ESet) alp_set= ({(ESet,{},\<epsilon>)},{})"|
"trans2LTS (\<epsilon>) alp_set = ({(\<epsilon>,{},\<epsilon>)},{})"|
"trans2LTS (Dot) alp_set = ({(Dot ,alp_set, \<epsilon>)},{})"|
"trans2LTS (Concat r1 r2) alp_set =(renameDelta1 (fst (trans2LTS r1 alp_set)) (ConcatRegexp r2) \<union> (fst (trans2LTS r2 alp_set)),
(renameDelta2 (snd (trans2LTS r1 alp_set)) (ConcatRegexp r2) \<union> {(Concat \<epsilon> r2, r2)} \<union> snd (trans2LTS r2 alp_set)))"|
"trans2LTS (Alter r1 r2) alp_set = (fst (trans2LTS r1 alp_set) \<union> fst (trans2LTS r2 alp_set),
snd (trans2LTS r1 alp_set) \<union> snd (trans2LTS r2 alp_set) \<union> {(Alter r1 r2, r1),(Alter r1 r2, r2)})"|
"trans2LTS (Star r) alp_set = (renameDelta1 (fst (trans2LTS r alp_set)) (ConcatRegexp (Star r)),
(renameDelta2 (snd (trans2LTS r alp_set)) (ConcatRegexp (Star r))) \<union> {(Star r, \<epsilon>),(Star r,Concat r (Star r)),(Concat \<epsilon> (Star r), Star r)})"|
"trans2LTS (Plus r) alp_set = ((renameDelta1 (fst (trans2LTS r alp_set)) (ConcatRegexp2 (Star r))) \<union> (renameDelta1 (fst (trans2LTS r alp_set)) (ConcatRegexp (Star r))),
{(Plus r, Concat (Concat r (Star r)) (Star r)),(Concat (Concat \<epsilon> (Star r)) (Star r),Concat (Star r) (Star r)),(Concat (Star r) (Star r), \<epsilon>),(Concat (Star r) (Star r), Concat r (Star r)),(Concat \<epsilon> (Star r), Concat (Star r) (Star r))}
\<union>(renameDelta2 (snd (trans2LTS r alp_set)) (ConcatRegexp2 (Star r))) \<union> (renameDelta2 (snd (trans2LTS r alp_set)) (ConcatRegexp (Star r))))"|
"trans2LTS (Ques r) alp_set = (fst (trans2LTS r alp_set),
{(Ques r,\<epsilon>), (Ques r, r)} \<union> snd (trans2LTS r alp_set))"
称为ReflexNothold的引理定义为以下:
lemma reflexNotHold:"(r, r) ∈ snd (trans2LTS r v) \<Longrightarrow> False"
apply(induction r)
sorry
我首先尝试通过诱导证明这种引理。但是,由于递归,我无法解决四个子目标。
我不知道如何证明这种引理,任何帮助将不胜感激。
Here, I have defined the regexp expression, and try to prove some obvious lemma, which defined as below.
datatype ('v)regexp = ESet | LChr 'v| Concat "'v regexp" "'v regexp"|
Alter "('v) regexp" "('v) regexp"| Dot|
Star "'v regexp" | Plus "('v) regexp" | Ques "('v) regexp" | \<epsilon>
fun ConcatRegexp::"'v regexp \<Rightarrow> 'v regexp\<Rightarrow> 'v regexp" where
"ConcatRegexp r1 r2 = Concat r2 r1"
fun ConcatRegexp2::"'v regexp \<Rightarrow> 'v regexp\<Rightarrow> 'v regexp" where
"ConcatRegexp2 r1 r2 = Concat (Concat r2 r1) r1"
fun renameDelta1 :: "('v regexp * 'v set * 'v regexp) set \<Rightarrow> ('v regexp => 'v regexp) \<Rightarrow> ('v regexp *'v set *'v regexp) set" where
"renameDelta1 ss f = {(f q,v, f q')| q v q' . (q, v, q')\<in> ss}"
fun renameDelta2 :: "('v regexp * 'v regexp) set \<Rightarrow> ('v regexp => 'v regexp) \<Rightarrow> ('v regexp *'v regexp) set" where
"renameDelta2 ss f = {(f q, f q')| q q'.(q, q')\<in> ss}"
primrec trans2LTS :: "'v regexp \<Rightarrow> 'v set \<Rightarrow> (('v regexp \<times> 'v set \<times> 'v regexp) set * ('v regexp * 'v regexp) set)" where
"trans2LTS (LChr v) alp_set= ({(LChr v,{v},\<epsilon>)},{})"|
"trans2LTS (ESet) alp_set= ({(ESet,{},\<epsilon>)},{})"|
"trans2LTS (\<epsilon>) alp_set = ({(\<epsilon>,{},\<epsilon>)},{})"|
"trans2LTS (Dot) alp_set = ({(Dot ,alp_set, \<epsilon>)},{})"|
"trans2LTS (Concat r1 r2) alp_set =(renameDelta1 (fst (trans2LTS r1 alp_set)) (ConcatRegexp r2) \<union> (fst (trans2LTS r2 alp_set)),
(renameDelta2 (snd (trans2LTS r1 alp_set)) (ConcatRegexp r2) \<union> {(Concat \<epsilon> r2, r2)} \<union> snd (trans2LTS r2 alp_set)))"|
"trans2LTS (Alter r1 r2) alp_set = (fst (trans2LTS r1 alp_set) \<union> fst (trans2LTS r2 alp_set),
snd (trans2LTS r1 alp_set) \<union> snd (trans2LTS r2 alp_set) \<union> {(Alter r1 r2, r1),(Alter r1 r2, r2)})"|
"trans2LTS (Star r) alp_set = (renameDelta1 (fst (trans2LTS r alp_set)) (ConcatRegexp (Star r)),
(renameDelta2 (snd (trans2LTS r alp_set)) (ConcatRegexp (Star r))) \<union> {(Star r, \<epsilon>),(Star r,Concat r (Star r)),(Concat \<epsilon> (Star r), Star r)})"|
"trans2LTS (Plus r) alp_set = ((renameDelta1 (fst (trans2LTS r alp_set)) (ConcatRegexp2 (Star r))) \<union> (renameDelta1 (fst (trans2LTS r alp_set)) (ConcatRegexp (Star r))),
{(Plus r, Concat (Concat r (Star r)) (Star r)),(Concat (Concat \<epsilon> (Star r)) (Star r),Concat (Star r) (Star r)),(Concat (Star r) (Star r), \<epsilon>),(Concat (Star r) (Star r), Concat r (Star r)),(Concat \<epsilon> (Star r), Concat (Star r) (Star r))}
\<union>(renameDelta2 (snd (trans2LTS r alp_set)) (ConcatRegexp2 (Star r))) \<union> (renameDelta2 (snd (trans2LTS r alp_set)) (ConcatRegexp (Star r))))"|
"trans2LTS (Ques r) alp_set = (fst (trans2LTS r alp_set),
{(Ques r,\<epsilon>), (Ques r, r)} \<union> snd (trans2LTS r alp_set))"
The lemma called reflexNotHold defined as below:
lemma reflexNotHold:"(r, r) ∈ snd (trans2LTS r v) \<Longrightarrow> False"
apply(induction r)
sorry
And I first try to prove this lemma by induction. However there are four subgoal that i can not solve, because of the recursive.
I don't know how to prove this lemma, and any help will be appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论