induct: fixes x1 :: "Syntax.term \<times> Syntax.term \<times> Syntax.var"   and x2 :: "Syntax.term"   and P :: "Syntax.term \<times> Syntax.term \<times> Syntax.var \<Rightarrow> Syntax.term \<Rightarrow> bool" assumes "subst_term_graph x1 x2"   and "\<And>subst_term_sum t' x. P (Unit, t', x) Unit"   and "\<And>subst_term_sum y t' x. P (Var y, t', x) (if x = y then t' else Var y)"   and "\<And>subst_term_sum y x t' t. \<lbrakk>atom y \<sharp> (x, t'); subst_term_graph (t, t', x) (subst_term_sum (t, t', x)); P (t, t', x) (subst_term_sum (t, t', x))\<rbrakk> \<Longrightarrow> P (Lam y t, t', x) (Lam y (subst_term_sum (t, t', x)))"   and "\<And>subst_term_sum y x t' t. \<lbrakk>atom y \<sharp> (x, t'); subst_term_graph (t, t', x) (subst_term_sum (t, t', x)); P (t, t', x) (subst_term_sum (t, t', x))\<rbrakk> \<Longrightarrow> P (Rec y t, t', x) (Rec y (subst_term_sum (t, t', x)))"   and "\<And>subst_term_sum t t' x. \<lbrakk>subst_term_graph (t, t', x) (subst_term_sum (t, t', x)); P (t, t', x) (subst_term_sum (t, t', x))\<rbrakk> \<Longrightarrow> P (Inj1 t, t', x) (Inj1 (subst_term_sum (t, t', x)))"   and "\<And>subst_term_sum t t' x. \<lbrakk>subst_term_graph (t, t', x) (subst_term_sum (t, t', x)); P (t, t', x) (subst_term_sum (t, t', x))\<rbrakk> \<Longrightarrow> P (Inj2 t, t', x) (Inj2 (subst_term_sum (t, t', x)))"   and "\<And>subst_term_sum t1 t2 t' x. \<lbrakk>subst_term_graph (t1, t', x) (subst_term_sum (t1, t', x)); P (t1, t', x) (subst_term_sum (t1, t', x)); subst_term_graph (t2, t', x) (subst_term_sum (t2, t', x)); P (t2, t', x) (subst_term_sum (t2, t', x))\<rbrakk> \<Longrightarrow> P (Syntax.Pair t1 t2, t', x) (Syntax.Pair (subst_term_sum (t1, t', x)) (subst_term_sum (t2, t', x)))"   and "\<And>subst_term_sum t t' x. \<lbrakk>subst_term_graph (t, t', x) (subst_term_sum (t, t', x)); P (t, t', x) (subst_term_sum (t, t', x))\<rbrakk> \<Longrightarrow> P (Roll t, t', x) (Roll (subst_term_sum (t, t', x)))"   and "\<And>subst_term_sum y x t' t1 t2. \<lbrakk>atom y \<sharp> (x, t'); subst_term_graph (t1, t', x) (subst_term_sum (t1, t', x)); P (t1, t', x) (subst_term_sum (t1, t', x)); subst_term_graph (t2, t', x) (subst_term_sum (t2, t', x)); P (t2, t', x) (subst_term_sum (t2, t', x))\<rbrakk> \<Longrightarrow> P (Syntax.Let t1 y t2, t', x) (Syntax.Let (subst_term_sum (t1, t', x)) y (subst_term_sum (t2, t', x)))"   and "\<And>subst_term_sum t1 t2 t' x. \<lbrakk>subst_term_graph (t1, t', x) (subst_term_sum (t1, t', x)); P (t1, t', x) (subst_term_sum (t1, t', x)); subst_term_graph (t2, t', x) (subst_term_sum (t2, t', x)); P (t2, t', x) (subst_term_sum (t2, t', x))\<rbrakk> \<Longrightarrow> P (App t1 t2, t', x) (App (subst_term_sum (t1, t', x)) (subst_term_sum (t2, t', x)))"   and "\<And>subst_term_sum t1 t2 t3 t' x. \<lbrakk>subst_term_graph (t1, t', x) (subst_term_sum (t1, t', x)); P (t1, t', x) (subst_term_sum (t1, t', x)); subst_term_graph (t2, t', x) (subst_term_sum (t2, t', x)); P (t2, t', x) (subst_term_sum (t2, t', x)); subst_term_graph (t3, t', x) (subst_term_sum (t3, t', x)); P (t3, t', x) (subst_term_sum (t3, t', x))\<rbrakk> \<Longrightarrow> P (Case t1 t2 t3, t', x) (Case (subst_term_sum (t1, t', x)) (subst_term_sum (t2, t', x)) (subst_term_sum (t3, t', x)))"   and "\<And>subst_term_sum t t' x. \<lbrakk>subst_term_graph (t, t', x) (subst_term_sum (t, t', x)); P (t, t', x) (subst_term_sum (t, t', x))\<rbrakk> \<Longrightarrow> P (Prj1 t, t', x) (Prj1 (subst_term_sum (t, t', x)))"   and "\<And>subst_term_sum t t' x. \<lbrakk>subst_term_graph (t, t', x) (subst_term_sum (t, t', x)); P (t, t', x) (subst_term_sum (t, t', x))\<rbrakk> \<Longrightarrow> P (Prj2 t, t', x) (Prj2 (subst_term_sum (t, t', x)))"   and "\<And>subst_term_sum t t' x. \<lbrakk>subst_term_graph (t, t', x) (subst_term_sum (t, t', x)); P (t, t', x) (subst_term_sum (t, t', x))\<rbrakk> \<Longrightarrow> P (Unroll t, t', x) (Unroll (subst_term_sum (t, t', x)))"   and "\<And>subst_term_sum t t' x. \<lbrakk>subst_term_graph (t, t', x) (subst_term_sum (t, t', x)); P (t, t', x) (subst_term_sum (t, t', x))\<rbrakk> \<Longrightarrow> P (Auth t, t', x) (Auth (subst_term_sum (t, t', x)))"   and "\<And>subst_term_sum t t' x. \<lbrakk>subst_term_graph (t, t', x) (subst_term_sum (t, t', x)); P (t, t', x) (subst_term_sum (t, t', x))\<rbrakk> \<Longrightarrow> P (Unauth t, t', x) (Unauth (subst_term_sum (t, t', x)))"   and "\<And>subst_term_sum h t' x. P (Hash h, t', x) (Hash h)"   and "\<And>subst_term_sum h t t' x. \<lbrakk>subst_term_graph (t, t', x) (subst_term_sum (t, t', x)); P (t, t', x) (subst_term_sum (t, t', x))\<rbrakk> \<Longrightarrow> P (Hashed h t, t', x) (Hashed h (subst_term_sum (t, t', x)))" shows "P x1 x2"