induct: fixes P :: "Formula.formula \<Rightarrow> bool"   and a0 :: "Formula.formula" assumes "\<And>t1 t2. P (formula.Eq t1 t2)"   and "\<And>x y. P (formula.Neg (formula.Eq (trm.Var x) (trm.Var y)))"   and "\<And>t1 t2. P (formula.Less t1 t2)"   and "\<And>t1 t2. P (formula.LessEq t1 t2)"   and "\<And>e ts. P (formula.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 (formula.Pred v va) \<Longrightarrow> P (formula.Neg (formula.Pred v va))"   and "\<And>v va vb. P (formula.Let v va vb) \<Longrightarrow> P (formula.Neg (formula.Let v va vb))"   and "\<And>vb va. P (formula.Eq (trm.Const vb) va) \<Longrightarrow> P (formula.Neg (formula.Eq (trm.Const vb) va))"   and "\<And>vb vc va. P (formula.Eq (trm.Plus vb vc) va) \<Longrightarrow> P (formula.Neg (formula.Eq (trm.Plus vb vc) va))"   and "\<And>vb vc va. P (formula.Eq (trm.Minus vb vc) va) \<Longrightarrow> P (formula.Neg (formula.Eq (trm.Minus vb vc) va))"   and "\<And>vb va. P (formula.Eq (trm.UMinus vb) va) \<Longrightarrow> P (formula.Neg (formula.Eq (trm.UMinus vb) va))"   and "\<And>vb vc va. P (formula.Eq (trm.Mult vb vc) va) \<Longrightarrow> P (formula.Neg (formula.Eq (trm.Mult vb vc) va))"   and "\<And>vb vc va. P (formula.Eq (trm.Div vb vc) va) \<Longrightarrow> P (formula.Neg (formula.Eq (trm.Div vb vc) va))"   and "\<And>vb vc va. P (formula.Eq (trm.Mod vb vc) va) \<Longrightarrow> P (formula.Neg (formula.Eq (trm.Mod vb vc) va))"   and "\<And>vb va. P (formula.Eq (trm.F2i vb) va) \<Longrightarrow> P (formula.Neg (formula.Eq (trm.F2i vb) va))"   and "\<And>vb va. P (formula.Eq (trm.I2f vb) va) \<Longrightarrow> P (formula.Neg (formula.Eq (trm.I2f vb) va))"   and "\<And>v vb. P (formula.Eq v (trm.Const vb)) \<Longrightarrow> P (formula.Neg (formula.Eq v (trm.Const vb)))"   and "\<And>v vb vc. P (formula.Eq v (trm.Plus vb vc)) \<Longrightarrow> P (formula.Neg (formula.Eq v (trm.Plus vb vc)))"   and "\<And>v vb vc. P (formula.Eq v (trm.Minus vb vc)) \<Longrightarrow> P (formula.Neg (formula.Eq v (trm.Minus vb vc)))"   and "\<And>v vb. P (formula.Eq v (trm.UMinus vb)) \<Longrightarrow> P (formula.Neg (formula.Eq v (trm.UMinus vb)))"   and "\<And>v vb vc. P (formula.Eq v (trm.Mult vb vc)) \<Longrightarrow> P (formula.Neg (formula.Eq v (trm.Mult vb vc)))"   and "\<And>v vb vc. P (formula.Eq v (trm.Div vb vc)) \<Longrightarrow> P (formula.Neg (formula.Eq v (trm.Div vb vc)))"   and "\<And>v vb vc. P (formula.Eq v (trm.Mod vb vc)) \<Longrightarrow> P (formula.Neg (formula.Eq v (trm.Mod vb vc)))"   and "\<And>v vb. P (formula.Eq v (trm.F2i vb)) \<Longrightarrow> P (formula.Neg (formula.Eq v (trm.F2i vb)))"   and "\<And>v vb. P (formula.Eq v (trm.I2f vb)) \<Longrightarrow> P (formula.Neg (formula.Eq v (trm.I2f vb)))"   and "\<And>v va. P (formula.Less v va) \<Longrightarrow> P (formula.Neg (formula.Less v va))"   and "\<And>v va. P (formula.LessEq v va) \<Longrightarrow> P (formula.Neg (formula.LessEq v va))"   and "\<And>v. P (formula.Neg v) \<Longrightarrow> P (formula.Neg (formula.Neg v))"   and "\<And>v va. P (formula.Or v va) \<Longrightarrow> P (formula.Neg (formula.Or v va))"   and "\<And>v va. P (formula.And v va) \<Longrightarrow> P (formula.Neg (formula.And v va))"   and "\<And>v. P (formula.Ands v) \<Longrightarrow> P (formula.Neg (formula.Ands v))"   and "\<And>v. P (formula.Exists v) \<Longrightarrow> P (formula.Neg (formula.Exists v))"   and "\<And>v va vb vc vd. P (formula.Agg v va vb vc vd) \<Longrightarrow> P (formula.Neg (formula.Agg v va vb vc vd))"   and "\<And>v va. P (formula.Prev v va) \<Longrightarrow> P (formula.Neg (formula.Prev v va))"   and "\<And>v va. P (formula.Next v va) \<Longrightarrow> P (formula.Neg (formula.Next v va))"   and "\<And>v va vb. P (formula.Since v va vb) \<Longrightarrow> P (formula.Neg (formula.Since v va vb))"   and "\<And>v va vb. P (formula.Until v va vb) \<Longrightarrow> P (formula.Neg (formula.Until v va vb))"   and "\<And>v va. P (formula.MatchF v va) \<Longrightarrow> P (formula.Neg (formula.MatchF v va))"   and "\<And>v va. P (formula.MatchP v va) \<Longrightarrow> P (formula.Neg (formula.MatchP v va))"   and "\<And>\<phi> \<psi>. \<lbrakk>P \<phi>; P \<psi>\<rbrakk> \<Longrightarrow> P (formula.Or \<phi> \<psi>)"   and "\<And>\<phi> \<psi>. \<lbrakk>P \<phi>; P \<psi>; \<And>x6. \<psi> = formula.Neg x6 \<Longrightarrow> P x6\<rbrakk> \<Longrightarrow> P (formula.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 (formula.Ands l)"   and "\<And>\<phi>. P \<phi> \<Longrightarrow> P (formula.Exists \<phi>)"   and "\<And>y \<omega> b f \<phi>. P \<phi> \<Longrightarrow> P (formula.Agg y \<omega> b f \<phi>)"   and "\<And>I \<phi>. P \<phi> \<Longrightarrow> P (formula.Prev I \<phi>)"   and "\<And>I \<phi>. P \<phi> \<Longrightarrow> P (formula.Next I \<phi>)"   and "\<And>\<phi> I \<psi>. \<lbrakk>P \<phi>; \<And>x6. \<phi> = formula.Neg x6 \<Longrightarrow> P x6; P \<psi>\<rbrakk> \<Longrightarrow> P (formula.Since \<phi> I \<psi>)"   and "\<And>\<phi> I \<psi>. \<lbrakk>P \<phi>; \<And>x6. \<phi> = formula.Neg x6 \<Longrightarrow> P x6; P \<psi>\<rbrakk> \<Longrightarrow> P (formula.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 = formula.Neg x6\<rbrakk> \<Longrightarrow> P x6\<rbrakk> \<Longrightarrow> P (formula.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 = formula.Neg x6\<rbrakk> \<Longrightarrow> P x6\<rbrakk> \<Longrightarrow> P (formula.MatchF I r)" shows "P a0"