induct: fixes x1 :: "Syntax.term"   and x2 :: "Syntax.term"   and P :: "Syntax.term \<Rightarrow> Syntax.term \<Rightarrow> bool" assumes "shallow_graph x1 x2"   and "\<And>shallow_sum. P Unit Unit"   and "\<And>shallow_sum v. P (Var v) (Var v)"   and "\<And>shallow_sum x e. \<lbrakk>shallow_graph e (shallow_sum e); P e (shallow_sum e)\<rbrakk> \<Longrightarrow> P (Lam x e) (Lam x (shallow_sum e))"   and "\<And>shallow_sum x e. \<lbrakk>shallow_graph e (shallow_sum e); P e (shallow_sum e)\<rbrakk> \<Longrightarrow> P (Rec x e) (Rec x (shallow_sum e))"   and "\<And>shallow_sum e. \<lbrakk>shallow_graph e (shallow_sum e); P e (shallow_sum e)\<rbrakk> \<Longrightarrow> P (Inj1 e) (Inj1 (shallow_sum e))"   and "\<And>shallow_sum e. \<lbrakk>shallow_graph e (shallow_sum e); P e (shallow_sum e)\<rbrakk> \<Longrightarrow> P (Inj2 e) (Inj2 (shallow_sum e))"   and "\<And>shallow_sum e\<^sub>1 e\<^sub>2. \<lbrakk>shallow_graph e\<^sub>1 (shallow_sum e\<^sub>1); P e\<^sub>1 (shallow_sum e\<^sub>1); shallow_graph e\<^sub>2 (shallow_sum e\<^sub>2); P e\<^sub>2 (shallow_sum e\<^sub>2)\<rbrakk> \<Longrightarrow> P (Syntax.Pair e\<^sub>1 e\<^sub>2) (Syntax.Pair (shallow_sum e\<^sub>1) (shallow_sum e\<^sub>2))"   and "\<And>shallow_sum e. \<lbrakk>shallow_graph e (shallow_sum e); P e (shallow_sum e)\<rbrakk> \<Longrightarrow> P (Roll e) (Roll (shallow_sum e))"   and "\<And>shallow_sum e\<^sub>1 x e\<^sub>2. \<lbrakk>shallow_graph e\<^sub>1 (shallow_sum e\<^sub>1); P e\<^sub>1 (shallow_sum e\<^sub>1); shallow_graph e\<^sub>2 (shallow_sum e\<^sub>2); P e\<^sub>2 (shallow_sum e\<^sub>2)\<rbrakk> \<Longrightarrow> P (Syntax.Let e\<^sub>1 x e\<^sub>2) (Syntax.Let (shallow_sum e\<^sub>1) x (shallow_sum e\<^sub>2))"   and "\<And>shallow_sum e\<^sub>1 e\<^sub>2. \<lbrakk>shallow_graph e\<^sub>1 (shallow_sum e\<^sub>1); P e\<^sub>1 (shallow_sum e\<^sub>1); shallow_graph e\<^sub>2 (shallow_sum e\<^sub>2); P e\<^sub>2 (shallow_sum e\<^sub>2)\<rbrakk> \<Longrightarrow> P (App e\<^sub>1 e\<^sub>2) (App (shallow_sum e\<^sub>1) (shallow_sum e\<^sub>2))"   and "\<And>shallow_sum e e\<^sub>1 e\<^sub>2. \<lbrakk>shallow_graph e (shallow_sum e); P e (shallow_sum e); shallow_graph e\<^sub>1 (shallow_sum e\<^sub>1); P e\<^sub>1 (shallow_sum e\<^sub>1); shallow_graph e\<^sub>2 (shallow_sum e\<^sub>2); P e\<^sub>2 (shallow_sum e\<^sub>2)\<rbrakk> \<Longrightarrow> P (Case e e\<^sub>1 e\<^sub>2) (Case (shallow_sum e) (shallow_sum e\<^sub>1) (shallow_sum e\<^sub>2))"   and "\<And>shallow_sum e. \<lbrakk>shallow_graph e (shallow_sum e); P e (shallow_sum e)\<rbrakk> \<Longrightarrow> P (Prj1 e) (Prj1 (shallow_sum e))"   and "\<And>shallow_sum e. \<lbrakk>shallow_graph e (shallow_sum e); P e (shallow_sum e)\<rbrakk> \<Longrightarrow> P (Prj2 e) (Prj2 (shallow_sum e))"   and "\<And>shallow_sum e. \<lbrakk>shallow_graph e (shallow_sum e); P e (shallow_sum e)\<rbrakk> \<Longrightarrow> P (Unroll e) (Unroll (shallow_sum e))"   and "\<And>shallow_sum e. \<lbrakk>shallow_graph e (shallow_sum e); P e (shallow_sum e)\<rbrakk> \<Longrightarrow> P (Auth e) (Auth (shallow_sum e))"   and "\<And>shallow_sum e. \<lbrakk>shallow_graph e (shallow_sum e); P e (shallow_sum e)\<rbrakk> \<Longrightarrow> P (Unauth e) (Unauth (shallow_sum e))"   and "\<And>shallow_sum h. P (Hash h) (Hash h)"   and "\<And>shallow_sum h e. P (Hashed h e) (Hash h)" shows "P x1 x2"