simps: fixes a1 :: "collection_binop"   and a2 :: "'a OCL_Types.type"   and a3 :: "'a OCL_Types.type"   and a4 :: "'a OCL_Types.type" shows "collection_binop_type a1 a2 a3 a4 = ((\<exists>\<tau> \<rho> \<sigma>. a1 = IncludesOp \<and> a2 = \<tau> \<and> a3 = \<sigma> \<and> a4 = Boolean[1] \<and> element_type \<tau> \<rho> \<and> \<sigma> \<le> to_optional_type_nested \<rho>) \<or> (\<exists>\<tau> \<rho> \<sigma>. a1 = ExcludesOp \<and> a2 = \<tau> \<and> a3 = \<sigma> \<and> a4 = Boolean[1] \<and> element_type \<tau> \<rho> \<and> \<sigma> \<le> to_optional_type_nested \<rho>) \<or> (\<exists>\<tau> \<rho> \<sigma>. a1 = CountOp \<and> a2 = \<tau> \<and> a3 = \<sigma> \<and> a4 = Integer[1] \<and> element_type \<tau> \<rho> \<and> \<sigma> \<le> to_optional_type_nested \<rho>) \<or> (\<exists>\<tau> \<rho> \<sigma> \<upsilon>. a1 = IncludesAllOp \<and> a2 = \<tau> \<and> a3 = \<sigma> \<and> a4 = Boolean[1] \<and> element_type \<tau> \<rho> \<and> element_type \<sigma> \<upsilon> \<and> \<upsilon> \<le> to_optional_type_nested \<rho>) \<or> (\<exists>\<tau> \<rho> \<sigma> \<upsilon>. a1 = ExcludesAllOp \<and> a2 = \<tau> \<and> a3 = \<sigma> \<and> a4 = Boolean[1] \<and> element_type \<tau> \<rho> \<and> element_type \<sigma> \<upsilon> \<and> \<upsilon> \<le> to_optional_type_nested \<rho>) \<or> (\<exists>\<tau> \<rho> \<sigma> \<upsilon>. a1 = ProductOp \<and> a2 = \<tau> \<and> a3 = \<sigma> \<and> a4 = Set (Tuple (fmap_of_list [(STR ''first'', \<rho>), (STR ''second'', \<upsilon>)])) \<and> element_type \<tau> \<rho> \<and> element_type \<sigma> \<upsilon>) \<or> (\<exists>\<tau> \<sigma>. a1 = UnionOp \<and> a2 = Set \<tau> \<and> a3 = Set \<sigma> \<and> a4 = Set (\<tau> \<squnion> \<sigma>)) \<or> (\<exists>\<tau> \<sigma>. a1 = UnionOp \<and> a2 = Set \<tau> \<and> a3 = Bag \<sigma> \<and> a4 = Bag (\<tau> \<squnion> \<sigma>)) \<or> (\<exists>\<tau> \<sigma>. a1 = UnionOp \<and> a2 = Bag \<tau> \<and> a3 = Set \<sigma> \<and> a4 = Bag (\<tau> \<squnion> \<sigma>)) \<or> (\<exists>\<tau> \<sigma>. a1 = UnionOp \<and> a2 = Bag \<tau> \<and> a3 = Bag \<sigma> \<and> a4 = Bag (\<tau> \<squnion> \<sigma>)) \<or> (\<exists>\<tau> \<sigma>. a1 = IntersectionOp \<and> a2 = Set \<tau> \<and> a3 = Set \<sigma> \<and> a4 = Set (\<tau> \<squnion> \<sigma>)) \<or> (\<exists>\<tau> \<sigma>. a1 = IntersectionOp \<and> a2 = Set \<tau> \<and> a3 = Bag \<sigma> \<and> a4 = Set (\<tau> \<squnion> \<sigma>)) \<or> (\<exists>\<tau> \<sigma>. a1 = IntersectionOp \<and> a2 = Bag \<tau> \<and> a3 = Set \<sigma> \<and> a4 = Set (\<tau> \<squnion> \<sigma>)) \<or> (\<exists>\<tau> \<sigma>. a1 = IntersectionOp \<and> a2 = Bag \<tau> \<and> a3 = Bag \<sigma> \<and> a4 = Bag (\<tau> \<squnion> \<sigma>)) \<or> (\<exists>\<tau> \<sigma>. a1 = SetMinusOp \<and> a2 = Set \<tau> \<and> a3 = Set \<sigma> \<and> a4 = Set \<tau>) \<or> (\<exists>\<tau> \<sigma>. a1 = SymmetricDifferenceOp \<and> a2 = Set \<tau> \<and> a3 = Set \<sigma> \<and> a4 = Set (\<tau> \<squnion> \<sigma>)) \<or> (\<exists>\<tau> \<rho> \<sigma> \<upsilon>. a1 = IncludingOp \<and> a2 = \<tau> \<and> a3 = \<sigma> \<and> a4 = \<upsilon> \<and> element_type \<tau> \<rho> \<and> update_element_type \<tau> (\<rho> \<squnion> \<sigma>) \<upsilon>) \<or> (\<exists>\<tau> \<rho> \<sigma>. a1 = ExcludingOp \<and> a2 = \<tau> \<and> a3 = \<sigma> \<and> a4 = \<tau> \<and> element_type \<tau> \<rho> \<and> \<sigma> \<le> \<rho>) \<or> (\<exists>\<sigma> \<tau>. a1 = AppendOp \<and> a2 = OrderedSet \<tau> \<and> a3 = \<sigma> \<and> a4 = OrderedSet \<tau> \<and> \<sigma> \<le> \<tau>) \<or> (\<exists>\<sigma> \<tau>. a1 = AppendOp \<and> a2 = Sequence \<tau> \<and> a3 = \<sigma> \<and> a4 = Sequence \<tau> \<and> \<sigma> \<le> \<tau>) \<or> (\<exists>\<sigma> \<tau>. a1 = PrependOp \<and> a2 = OrderedSet \<tau> \<and> a3 = \<sigma> \<and> a4 = OrderedSet \<tau> \<and> \<sigma> \<le> \<tau>) \<or> (\<exists>\<sigma> \<tau>. a1 = PrependOp \<and> a2 = Sequence \<tau> \<and> a3 = \<sigma> \<and> a4 = Sequence \<tau> \<and> \<sigma> \<le> \<tau>) \<or> (\<exists>\<sigma> \<tau>. a1 = CollectionAtOp \<and> a2 = OrderedSet \<tau> \<and> a3 = \<sigma> \<and> a4 = \<tau> \<and> \<sigma> = UnlimitedNatural[1]\<midarrow>Integer[1]) \<or> (\<exists>\<sigma> \<tau>. a1 = CollectionAtOp \<and> a2 = Sequence \<tau> \<and> a3 = \<sigma> \<and> a4 = \<tau> \<and> \<sigma> = UnlimitedNatural[1]\<midarrow>Integer[1]) \<or> (\<exists>\<sigma> \<tau>. a1 = CollectionIndexOfOp \<and> a2 = OrderedSet \<tau> \<and> a3 = \<sigma> \<and> a4 = Integer[1] \<and> \<sigma> \<le> \<tau>) \<or> (\<exists>\<sigma> \<tau>. a1 = CollectionIndexOfOp \<and> a2 = Sequence \<tau> \<and> a3 = \<sigma> \<and> a4 = Integer[1] \<and> \<sigma> \<le> \<tau>))"