induct: fixes x1 :: "collection_binop"   and x2 :: "'a OCL_Types.type"   and x3 :: "'a OCL_Types.type"   and x4 :: "'a OCL_Types.type"   and P :: "collection_binop \<Rightarrow> 'a OCL_Types.type \<Rightarrow> 'a OCL_Types.type \<Rightarrow> 'a OCL_Types.type \<Rightarrow> bool" assumes "collection_binop_type x1 x2 x3 x4"   and "\<And>\<tau> \<rho> \<sigma>. \<lbrakk>element_type \<tau> \<rho>; \<sigma> \<le> to_optional_type_nested \<rho>\<rbrakk> \<Longrightarrow> P IncludesOp \<tau> \<sigma> Boolean[1]"   and "\<And>\<tau> \<rho> \<sigma>. \<lbrakk>element_type \<tau> \<rho>; \<sigma> \<le> to_optional_type_nested \<rho>\<rbrakk> \<Longrightarrow> P ExcludesOp \<tau> \<sigma> Boolean[1]"   and "\<And>\<tau> \<rho> \<sigma>. \<lbrakk>element_type \<tau> \<rho>; \<sigma> \<le> to_optional_type_nested \<rho>\<rbrakk> \<Longrightarrow> P CountOp \<tau> \<sigma> Integer[1]"   and "\<And>\<tau> \<rho> \<sigma> \<upsilon>. \<lbrakk>element_type \<tau> \<rho>; element_type \<sigma> \<upsilon>; \<upsilon> \<le> to_optional_type_nested \<rho>\<rbrakk> \<Longrightarrow> P IncludesAllOp \<tau> \<sigma> Boolean[1]"   and "\<And>\<tau> \<rho> \<sigma> \<upsilon>. \<lbrakk>element_type \<tau> \<rho>; element_type \<sigma> \<upsilon>; \<upsilon> \<le> to_optional_type_nested \<rho>\<rbrakk> \<Longrightarrow> P ExcludesAllOp \<tau> \<sigma> Boolean[1]"   and "\<And>\<tau> \<rho> \<sigma> \<upsilon>. \<lbrakk>element_type \<tau> \<rho>; element_type \<sigma> \<upsilon>\<rbrakk> \<Longrightarrow> P ProductOp \<tau> \<sigma> (Set (Tuple (fmap_of_list [(STR ''first'', \<rho>), (STR ''second'', \<upsilon>)])))"   and "\<And>\<tau> \<sigma>. P UnionOp (Set \<tau>) (Set \<sigma>) (Set (\<tau> \<squnion> \<sigma>))"   and "\<And>\<tau> \<sigma>. P UnionOp (Set \<tau>) (Bag \<sigma>) (Bag (\<tau> \<squnion> \<sigma>))"   and "\<And>\<tau> \<sigma>. P UnionOp (Bag \<tau>) (Set \<sigma>) (Bag (\<tau> \<squnion> \<sigma>))"   and "\<And>\<tau> \<sigma>. P UnionOp (Bag \<tau>) (Bag \<sigma>) (Bag (\<tau> \<squnion> \<sigma>))"   and "\<And>\<tau> \<sigma>. P IntersectionOp (Set \<tau>) (Set \<sigma>) (Set (\<tau> \<squnion> \<sigma>))"   and "\<And>\<tau> \<sigma>. P IntersectionOp (Set \<tau>) (Bag \<sigma>) (Set (\<tau> \<squnion> \<sigma>))"   and "\<And>\<tau> \<sigma>. P IntersectionOp (Bag \<tau>) (Set \<sigma>) (Set (\<tau> \<squnion> \<sigma>))"   and "\<And>\<tau> \<sigma>. P IntersectionOp (Bag \<tau>) (Bag \<sigma>) (Bag (\<tau> \<squnion> \<sigma>))"   and "\<And>\<tau> \<sigma>. P SetMinusOp (Set \<tau>) (Set \<sigma>) (Set \<tau>)"   and "\<And>\<tau> \<sigma>. P SymmetricDifferenceOp (Set \<tau>) (Set \<sigma>) (Set (\<tau> \<squnion> \<sigma>))"   and "\<And>\<tau> \<rho> \<sigma> \<upsilon>. \<lbrakk>element_type \<tau> \<rho>; update_element_type \<tau> (\<rho> \<squnion> \<sigma>) \<upsilon>\<rbrakk> \<Longrightarrow> P IncludingOp \<tau> \<sigma> \<upsilon>"   and "\<And>\<tau> \<rho> \<sigma>. \<lbrakk>element_type \<tau> \<rho>; \<sigma> \<le> \<rho>\<rbrakk> \<Longrightarrow> P ExcludingOp \<tau> \<sigma> \<tau>"   and "\<And>\<sigma> \<tau>. \<sigma> \<le> \<tau> \<Longrightarrow> P AppendOp (OrderedSet \<tau>) \<sigma> (OrderedSet \<tau>)"   and "\<And>\<sigma> \<tau>. \<sigma> \<le> \<tau> \<Longrightarrow> P AppendOp (Sequence \<tau>) \<sigma> (Sequence \<tau>)"   and "\<And>\<sigma> \<tau>. \<sigma> \<le> \<tau> \<Longrightarrow> P PrependOp (OrderedSet \<tau>) \<sigma> (OrderedSet \<tau>)"   and "\<And>\<sigma> \<tau>. \<sigma> \<le> \<tau> \<Longrightarrow> P PrependOp (Sequence \<tau>) \<sigma> (Sequence \<tau>)"   and "\<And>\<sigma> \<tau>. \<sigma> = UnlimitedNatural[1]\<midarrow>Integer[1] \<Longrightarrow> P CollectionAtOp (OrderedSet \<tau>) \<sigma> \<tau>"   and "\<And>\<sigma> \<tau>. \<sigma> = UnlimitedNatural[1]\<midarrow>Integer[1] \<Longrightarrow> P CollectionAtOp (Sequence \<tau>) \<sigma> \<tau>"   and "\<And>\<sigma> \<tau>. \<sigma> \<le> \<tau> \<Longrightarrow> P CollectionIndexOfOp (OrderedSet \<tau>) \<sigma> Integer[1]"   and "\<And>\<sigma> \<tau>. \<sigma> \<le> \<tau> \<Longrightarrow> P CollectionIndexOfOp (Sequence \<tau>) \<sigma> Integer[1]" shows "P x1 x2 x3 x4"