private lemma map_uprod_parametric': "((A ===> B) ===> rel_prod A A ===> rel_prod B B) (\f. map_prod f f) (\f. map_prod f f)" by transfer_prover
lift_definition map_uprod :: "('a \ 'b) \ 'a uprod \ 'b uprod" is "\f. map_prod f f"
parametric map_uprod_parametric' by auto
lemma map_uprod_simps [simp, code]: "map_uprod f (Upair x y) = Upair (f x) (f y)" by transfer simp
private lemma rel_uprod_transfer': "((A ===> B ===> (=)) ===> rel_prod A A ===> rel_prod B B ===> (=))
(\<lambda>R (a, b) (c, d). R a c \<and> R b d \<or> R a d \<and> R b c) (\<lambda>R (a, b) (c, d). R a c \<and> R b d \<or> R a d \<and> R b c)" by transfer_prover
lift_definition rel_uprod :: "('a \ 'b \ bool) \ 'a uprod \ 'b uprod \ bool" is"\R (a, b) (c, d). R a c \ R b d \ R a d \ R b c" parametric rel_uprod_transfer' by auto
lemma rel_uprod_simps [simp, code]: "rel_uprod R (Upair a b) (Upair c d) \ R a c \ R b d \ R a d \ R b c" by transfer auto
lemma Upair_parametric [transfer_rule]: "(A ===> A ===> rel_uprod A) Upair Upair" unfolding rel_fun_def by transfer auto
lemma case_uprod_parametric [transfer_rule]: "(rel_commute A B ===> rel_uprod A ===> B) case_uprod case_uprod" unfolding rel_fun_def by transfer(force dest: rel_funD)
end
bnf uprod: "'a uprod"
map: map_uprod
sets: set_uprod
bd: natLeq
rel: rel_uprod proof - show"map_uprod id = id"unfolding fun_eq_iff by transfer auto show"map_uprod (g \ f) = map_uprod g \ map_uprod f" for f :: "'a \ 'b" and g :: "'b \ 'c" unfolding fun_eq_iff by transfer auto show"map_uprod f x = map_uprod g x"if"\z. z \ set_uprod x \ f z = g z" for f :: "'a \ 'b" and g x using that by transfer auto show"set_uprod \ map_uprod f = (`) f \ set_uprod" for f :: "'a \ 'b" by transfer auto show"card_order natLeq"by(rule natLeq_card_order) show"BNF_Cardinal_Arithmetic.cinfinite natLeq"by(rule natLeq_cinfinite) show"regularCard natLeq"by(rule regularCard_natLeq) show"ordLess2 (card_of (set_uprod x)) natLeq"for x :: "'a uprod" by (auto simp flip: finite_iff_ordLess_natLeq) show"rel_uprod R OO rel_uprod S \ rel_uprod (R OO S)" for R :: "'a \ 'b \ bool" and S :: "'b \ 'c \ bool" by(rule predicate2I)(transfer; auto) show"rel_uprod R = (\x y. \z. set_uprod z \ {(x, y). R x y} \ map_uprod fst z = x \ map_uprod snd z = y)" for R :: "'a \ 'b \ bool" by transfer(auto simp add: fun_eq_iff) qed
lemma pred_uprod_code [simp, code]: "pred_uprod P (Upair x y) \ P x \ P y" by(simp add: pred_uprod_def)
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.