theory Gen_Hash imports "../Intf/Intf_Hash" begin definition "prod_bhc bhc1 bhc2 ≡ λn (a,b). (bhc1 n a * 33 + bhc2 n b) mod n" lemma prod_bhc_ga[autoref_ga_rules]: "⟦ GEN_ALGO_tag (is_bounded_hashcode R eq1 bhc1); GEN_ALGO_tag (is_bounded_hashcode S eq2 bhc2)⟧ ⟹ is_bounded_hashcode (R×⇩rS) (prod_eq eq1 eq2) (prod_bhc bhc1 bhc2)" unfolding is_bounded_hashcode_def prod_bhc_def prod_eq_def[abs_def] apply safe apply (auto dest: fun_relD simp: Domain_unfold; metis)+ done lemma prod_dhs_ga[autoref_ga_rules]: "⟦ GEN_ALGO_tag (is_valid_def_hm_size TYPE('a) n1); GEN_ALGO_tag (is_valid_def_hm_size TYPE('b) n2) ⟧ ⟹ is_valid_def_hm_size TYPE('a*'b) (n1+n2)" unfolding is_valid_def_hm_size_def by auto end