induct: fixes P :: "formula \<Rightarrow> bool"   and a0 :: "formula" assumes "\<And>t1 t2. P (formula.Eq t1 t2)"   and "\<And>x y. P (Neg (formula.Eq (Var x) (Var y)))"   and "\<And>t1 t2. P (Less t1 t2)"   and "\<And>t1 t2. P (LessEq t1 t2)"   and "\<And>e ts. P (Pred e ts)"   and "\<And>p \<phi> \<psi>. \<lbrakk>P \<phi>; P \<psi>\<rbrakk> \<Longrightarrow> P (formula.Let p \<phi> \<psi>)"   and "\<And>v va. P (Pred v va) \<Longrightarrow> P (Neg (Pred v va))"   and "\<And>v va vb. P (formula.Let v va vb) \<Longrightarrow> P (Neg (formula.Let v va vb))"   and "\<And>vb va. P (formula.Eq (Const vb) va) \<Longrightarrow> P (Neg (formula.Eq (Const vb) va))"   and "\<And>vb vc va. P (formula.Eq (Plus vb vc) va) \<Longrightarrow> P (Neg (formula.Eq (Plus vb vc) va))"   and "\<And>vb vc va. P (formula.Eq (Minus vb vc) va) \<Longrightarrow> P (Neg (formula.Eq (Minus vb vc) va))"   and "\<And>vb va. P (formula.Eq (UMinus vb) va) \<Longrightarrow> P (Neg (formula.Eq (UMinus vb) va))"   and "\<And>vb vc va. P (formula.Eq (Mult vb vc) va) \<Longrightarrow> P (Neg (formula.Eq (Mult vb vc) va))"   and "\<And>vb vc va. P (formula.Eq (Div vb vc) va) \<Longrightarrow> P (Neg (formula.Eq (Div vb vc) va))"   and "\<And>vb vc va. P (formula.Eq (Mod vb vc) va) \<Longrightarrow> P (Neg (formula.Eq (Mod vb vc) va))"   and "\<And>vb va. P (formula.Eq (F2i vb) va) \<Longrightarrow> P (Neg (formula.Eq (F2i vb) va))"   and "\<And>vb va. P (formula.Eq (I2f vb) va) \<Longrightarrow> P (Neg (formula.Eq (I2f vb) va))"   and "\<And>v vb. P (formula.Eq v (Const vb)) \<Longrightarrow> P (Neg (formula.Eq v (Const vb)))"   and "\<And>v vb vc. P (formula.Eq v (Plus vb vc)) \<Longrightarrow> P (Neg (formula.Eq v (Plus vb vc)))"   and "\<And>v vb vc. P (formula.Eq v (Minus vb vc)) \<Longrightarrow> P (Neg (formula.Eq v (Minus vb vc)))"   and "\<And>v vb. P (formula.Eq v (UMinus vb)) \<Longrightarrow> P (Neg (formula.Eq v (UMinus vb)))"   and "\<And>v vb vc. P (formula.Eq v (Mult vb vc)) \<Longrightarrow> P (Neg (formula.Eq v (Mult vb vc)))"   and "\<And>v vb vc. P (formula.Eq v (Div vb vc)) \<Longrightarrow> P (Neg (formula.Eq v (Div vb vc)))"   and "\<And>v vb vc. P (formula.Eq v (Mod vb vc)) \<Longrightarrow> P (Neg (formula.Eq v (Mod vb vc)))"   and "\<And>v vb. P (formula.Eq v (F2i vb)) \<Longrightarrow> P (Neg (formula.Eq v (F2i vb)))"   and "\<And>v vb. P (formula.Eq v (I2f vb)) \<Longrightarrow> P (Neg (formula.Eq v (I2f vb)))"   and "\<And>v va. P (Less v va) \<Longrightarrow> P (Neg (Less v va))"   and "\<And>v va. P (LessEq v va) \<Longrightarrow> P (Neg (LessEq v va))"   and "\<And>v. P (Neg v) \<Longrightarrow> P (Neg (Neg v))"   and "\<And>v va. P (Or v va) \<Longrightarrow> P (Neg (Or v va))"   and "\<And>v va. P (And v va) \<Longrightarrow> P (Neg (And v va))"   and "\<And>v. P (Ands v) \<Longrightarrow> P (Neg (Ands v))"   and "\<And>v. P (Exists v) \<Longrightarrow> P (Neg (Exists v))"   and "\<And>v va vb vc vd. P (Agg v va vb vc vd) \<Longrightarrow> P (Neg (Agg v va vb vc vd))"   and "\<And>v va. P (Prev v va) \<Longrightarrow> P (Neg (Prev v va))"   and "\<And>v va. P (Next v va) \<Longrightarrow> P (Neg (Next v va))"   and "\<And>v va vb. P (Since v va vb) \<Longrightarrow> P (Neg (Since v va vb))"   and "\<And>v va vb. P (Until v va vb) \<Longrightarrow> P (Neg (Until v va vb))"   and "\<And>v va. P (MatchF v va) \<Longrightarrow> P (Neg (MatchF v va))"   and "\<And>v va. P (MatchP v va) \<Longrightarrow> P (Neg (MatchP v va))"   and "\<And>\<phi> \<psi>. \<lbrakk>P \<phi>; P \<psi>\<rbrakk> \<Longrightarrow> P (Or \<phi> \<psi>)"   and "\<And>\<phi> \<psi>. \<lbrakk>P \<phi>; P \<psi>; \<And>x6. \<psi> = Neg x6 \<Longrightarrow> P x6\<rbrakk> \<Longrightarrow> P (And \<phi> \<psi>)"   and "\<And>l. \<lbrakk>\<And>x. x \<in> set l \<Longrightarrow> P x; \<And>x xa y z. \<lbrakk>x = partition safe_formula l; (xa, y) = x; z \<in> set (map remove_neg y)\<rbrakk> \<Longrightarrow> P z\<rbrakk> \<Longrightarrow> P (Ands l)"   and "\<And>\<phi>. P \<phi> \<Longrightarrow> P (Exists \<phi>)"   and "\<And>y \<omega> b f \<phi>. P \<phi> \<Longrightarrow> P (Agg y \<omega> b f \<phi>)"   and "\<And>I \<phi>. P \<phi> \<Longrightarrow> P (Prev I \<phi>)"   and "\<And>I \<phi>. P \<phi> \<Longrightarrow> P (Next I \<phi>)"   and "\<And>\<phi> I \<psi>. \<lbrakk>P \<phi>; \<And>x6. \<phi> = Neg x6 \<Longrightarrow> P x6; P \<psi>\<rbrakk> \<Longrightarrow> P (Since \<phi> I \<psi>)"   and "\<And>\<phi> I \<psi>. \<lbrakk>P \<phi>; \<And>x6. \<phi> = Neg x6 \<Longrightarrow> P x6; P \<psi>\<rbrakk> \<Longrightarrow> P (Until \<phi> I \<psi>)"   and "\<And>I r. \<lbrakk>\<And>g x. x \<in> regex.atms r \<Longrightarrow> P x; \<And>g x x6. \<lbrakk>x \<in> regex.atms r; x = Neg x6\<rbrakk> \<Longrightarrow> P x6\<rbrakk> \<Longrightarrow> P (MatchP I r)"   and "\<And>I r. \<lbrakk>\<And>g x. x \<in> regex.atms r \<Longrightarrow> P x; \<And>g x x6. \<lbrakk>x \<in> regex.atms r; x = Neg x6\<rbrakk> \<Longrightarrow> P x6\<rbrakk> \<Longrightarrow> P (MatchF I r)" shows "P a0"