induct: fixes x1 :: "Syntax.term \<times> (Syntax.var, Syntax.term) fmap"   and x2 :: "Syntax.term"   and P :: "Syntax.term \<times> (Syntax.var, Syntax.term) fmap \<Rightarrow> Syntax.term \<Rightarrow> bool" assumes "psubst_term_graph x1 x2"   and "\<And>psubst_term_sum f. P (Unit, f) Unit"   and "\<And>psubst_term_sum y f. P (Var y, f) (case f $$ y of None \<Rightarrow> Var y | Some t \<Rightarrow> t)"   and "\<And>psubst_term_sum y f t. \<lbrakk>atom y \<sharp> f; psubst_term_graph (t, f) (psubst_term_sum (t, f)); P (t, f) (psubst_term_sum (t, f))\<rbrakk> \<Longrightarrow> P (Lam y t, f) (Lam y (psubst_term_sum (t, f)))"   and "\<And>psubst_term_sum y f t. \<lbrakk>atom y \<sharp> f; psubst_term_graph (t, f) (psubst_term_sum (t, f)); P (t, f) (psubst_term_sum (t, f))\<rbrakk> \<Longrightarrow> P (Rec y t, f) (Rec y (psubst_term_sum (t, f)))"   and "\<And>psubst_term_sum t f. \<lbrakk>psubst_term_graph (t, f) (psubst_term_sum (t, f)); P (t, f) (psubst_term_sum (t, f))\<rbrakk> \<Longrightarrow> P (Inj1 t, f) (Inj1 (psubst_term_sum (t, f)))"   and "\<And>psubst_term_sum t f. \<lbrakk>psubst_term_graph (t, f) (psubst_term_sum (t, f)); P (t, f) (psubst_term_sum (t, f))\<rbrakk> \<Longrightarrow> P (Inj2 t, f) (Inj2 (psubst_term_sum (t, f)))"   and "\<And>psubst_term_sum t1 t2 f. \<lbrakk>psubst_term_graph (t1, f) (psubst_term_sum (t1, f)); P (t1, f) (psubst_term_sum (t1, f)); psubst_term_graph (t2, f) (psubst_term_sum (t2, f)); P (t2, f) (psubst_term_sum (t2, f))\<rbrakk> \<Longrightarrow> P (Syntax.Pair t1 t2, f) (Syntax.Pair (psubst_term_sum (t1, f)) (psubst_term_sum (t2, f)))"   and "\<And>psubst_term_sum t f. \<lbrakk>psubst_term_graph (t, f) (psubst_term_sum (t, f)); P (t, f) (psubst_term_sum (t, f))\<rbrakk> \<Longrightarrow> P (Roll t, f) (Roll (psubst_term_sum (t, f)))"   and "\<And>psubst_term_sum y f t1 t2. \<lbrakk>atom y \<sharp> f; psubst_term_graph (t1, f) (psubst_term_sum (t1, f)); P (t1, f) (psubst_term_sum (t1, f)); psubst_term_graph (t2, f) (psubst_term_sum (t2, f)); P (t2, f) (psubst_term_sum (t2, f))\<rbrakk> \<Longrightarrow> P (Syntax.Let t1 y t2, f) (Syntax.Let (psubst_term_sum (t1, f)) y (psubst_term_sum (t2, f)))"   and "\<And>psubst_term_sum t1 t2 f. \<lbrakk>psubst_term_graph (t1, f) (psubst_term_sum (t1, f)); P (t1, f) (psubst_term_sum (t1, f)); psubst_term_graph (t2, f) (psubst_term_sum (t2, f)); P (t2, f) (psubst_term_sum (t2, f))\<rbrakk> \<Longrightarrow> P (App t1 t2, f) (App (psubst_term_sum (t1, f)) (psubst_term_sum (t2, f)))"   and "\<And>psubst_term_sum t1 t2 t3 f. \<lbrakk>psubst_term_graph (t1, f) (psubst_term_sum (t1, f)); P (t1, f) (psubst_term_sum (t1, f)); psubst_term_graph (t2, f) (psubst_term_sum (t2, f)); P (t2, f) (psubst_term_sum (t2, f)); psubst_term_graph (t3, f) (psubst_term_sum (t3, f)); P (t3, f) (psubst_term_sum (t3, f))\<rbrakk> \<Longrightarrow> P (Case t1 t2 t3, f) (Case (psubst_term_sum (t1, f)) (psubst_term_sum (t2, f)) (psubst_term_sum (t3, f)))"   and "\<And>psubst_term_sum t f. \<lbrakk>psubst_term_graph (t, f) (psubst_term_sum (t, f)); P (t, f) (psubst_term_sum (t, f))\<rbrakk> \<Longrightarrow> P (Prj1 t, f) (Prj1 (psubst_term_sum (t, f)))"   and "\<And>psubst_term_sum t f. \<lbrakk>psubst_term_graph (t, f) (psubst_term_sum (t, f)); P (t, f) (psubst_term_sum (t, f))\<rbrakk> \<Longrightarrow> P (Prj2 t, f) (Prj2 (psubst_term_sum (t, f)))"   and "\<And>psubst_term_sum t f. \<lbrakk>psubst_term_graph (t, f) (psubst_term_sum (t, f)); P (t, f) (psubst_term_sum (t, f))\<rbrakk> \<Longrightarrow> P (Unroll t, f) (Unroll (psubst_term_sum (t, f)))"   and "\<And>psubst_term_sum t f. \<lbrakk>psubst_term_graph (t, f) (psubst_term_sum (t, f)); P (t, f) (psubst_term_sum (t, f))\<rbrakk> \<Longrightarrow> P (Auth t, f) (Auth (psubst_term_sum (t, f)))"   and "\<And>psubst_term_sum t f. \<lbrakk>psubst_term_graph (t, f) (psubst_term_sum (t, f)); P (t, f) (psubst_term_sum (t, f))\<rbrakk> \<Longrightarrow> P (Unauth t, f) (Unauth (psubst_term_sum (t, f)))"   and "\<And>psubst_term_sum h f. P (Hash h, f) (Hash h)"   and "\<And>psubst_term_sum h t f. \<lbrakk>psubst_term_graph (t, f) (psubst_term_sum (t, f)); P (t, f) (psubst_term_sum (t, f))\<rbrakk> \<Longrightarrow> P (Hashed h t, f) (Hashed h (psubst_term_sum (t, f)))" shows "P x1 x2"