induct: fixes P :: "nat rexp \<Rightarrow> nat rexp \<Rightarrow> bool"   and a0 :: "nat rexp"   and a1 :: "nat rexp" assumes "\<And>r. P Zero r"   and "P One Zero"   and "\<And>v. P (Atom v) Zero"   and "\<And>v va. P (Plus v va) Zero"   and "\<And>v va. P (Times v va) Zero"   and "\<And>v. P (Star v) Zero"   and "\<And>v. P (rexp.Not v) Zero"   and "\<And>v va. P (rexp.Inter v va) Zero"   and "\<And>r s. \<lbrakk>P s One; P r (nPlus s One)\<rbrakk> \<Longrightarrow> P (Plus r s) One"   and "\<And>r s v. \<lbrakk>P s (Atom v); P r (nPlus s (Atom v))\<rbrakk> \<Longrightarrow> P (Plus r s) (Atom v)"   and "\<And>r s v va. \<lbrakk>P s (Plus v va); P r (nPlus s (Plus v va))\<rbrakk> \<Longrightarrow> P (Plus r s) (Plus v va)"   and "\<And>r s v va. \<lbrakk>P s (Times v va); P r (nPlus s (Times v va))\<rbrakk> \<Longrightarrow> P (Plus r s) (Times v va)"   and "\<And>r s v. \<lbrakk>P s (Star v); P r (nPlus s (Star v))\<rbrakk> \<Longrightarrow> P (Plus r s) (Star v)"   and "\<And>r s v. \<lbrakk>P s (rexp.Not v); P r (nPlus s (rexp.Not v))\<rbrakk> \<Longrightarrow> P (Plus r s) (rexp.Not v)"   and "\<And>r s v va. \<lbrakk>P s (rexp.Inter v va); P r (nPlus s (rexp.Inter v va))\<rbrakk> \<Longrightarrow> P (Plus r s) (rexp.Inter v va)"   and "\<And>s t. (\<lbrakk>One \<noteq> s; \<not> le_rexp One s\<rbrakk> \<Longrightarrow> P One t) \<Longrightarrow> P One (Plus s t)"   and "\<And>v s t. (\<lbrakk>Atom v \<noteq> s; \<not> le_rexp (Atom v) s\<rbrakk> \<Longrightarrow> P (Atom v) t) \<Longrightarrow> P (Atom v) (Plus s t)"   and "\<And>v va s t. (\<lbrakk>Times v va \<noteq> s; \<not> le_rexp (Times v va) s\<rbrakk> \<Longrightarrow> P (Times v va) t) \<Longrightarrow> P (Times v va) (Plus s t)"   and "\<And>v s t. (\<lbrakk>Star v \<noteq> s; \<not> le_rexp (Star v) s\<rbrakk> \<Longrightarrow> P (Star v) t) \<Longrightarrow> P (Star v) (Plus s t)"   and "\<And>v s t. (\<lbrakk>rexp.Not v \<noteq> s; \<not> le_rexp (rexp.Not v) s\<rbrakk> \<Longrightarrow> P (rexp.Not v) t) \<Longrightarrow> P (rexp.Not v) (Plus s t)"   and "\<And>v va s t. (\<lbrakk>rexp.Inter v va \<noteq> s; \<not> le_rexp (rexp.Inter v va) s\<rbrakk> \<Longrightarrow> P (rexp.Inter v va) t) \<Longrightarrow> P (rexp.Inter v va) (Plus s t)"   and "P One One"   and "\<And>v. P One (Atom v)"   and "\<And>v va. P One (Times v va)"   and "\<And>v. P One (Star v)"   and "\<And>v. P One (rexp.Not v)"   and "\<And>v va. P One (rexp.Inter v va)"   and "\<And>v. P (Atom v) One"   and "\<And>v va. P (Atom v) (Atom va)"   and "\<And>v va vb. P (Atom v) (Times va vb)"   and "\<And>v va. P (Atom v) (Star va)"   and "\<And>v va. P (Atom v) (rexp.Not va)"   and "\<And>v va vb. P (Atom v) (rexp.Inter va vb)"   and "\<And>v va. P (Times v va) One"   and "\<And>v va vb. P (Times v va) (Atom vb)"   and "\<And>v va vb vc. P (Times v va) (Times vb vc)"   and "\<And>v va vb. P (Times v va) (Star vb)"   and "\<And>v va vb. P (Times v va) (rexp.Not vb)"   and "\<And>v va vb vc. P (Times v va) (rexp.Inter vb vc)"   and "\<And>v. P (Star v) One"   and "\<And>v va. P (Star v) (Atom va)"   and "\<And>v va vb. P (Star v) (Times va vb)"   and "\<And>v va. P (Star v) (Star va)"   and "\<And>v va. P (Star v) (rexp.Not va)"   and "\<And>v va vb. P (Star v) (rexp.Inter va vb)"   and "\<And>v. P (rexp.Not v) One"   and "\<And>v va. P (rexp.Not v) (Atom va)"   and "\<And>v va vb. P (rexp.Not v) (Times va vb)"   and "\<And>v va. P (rexp.Not v) (Star va)"   and "\<And>v va. P (rexp.Not v) (rexp.Not va)"   and "\<And>v va vb. P (rexp.Not v) (rexp.Inter va vb)"   and "\<And>v va. P (rexp.Inter v va) One"   and "\<And>v va vb. P (rexp.Inter v va) (Atom vb)"   and "\<And>v va vb vc. P (rexp.Inter v va) (Times vb vc)"   and "\<And>v va vb. P (rexp.Inter v va) (Star vb)"   and "\<And>v va vb. P (rexp.Inter v va) (rexp.Not vb)"   and "\<And>v va vb vc. P (rexp.Inter v va) (rexp.Inter vb vc)" shows "P a0 a1"