src/HOL/ex/FinFunPred.thy
changeset 48037 6c4b3e78f03e
parent 48036 1edcd5f73505
child 48038 72a8506dd59b
equal deleted inserted replaced
48036:1edcd5f73505 48037:6c4b3e78f03e
    18 definition [code del]: "(f\<Colon>'a \<Rightarrow>f 'b) < g \<longleftrightarrow> f \<le> g \<and> \<not> f \<ge> g"
    18 definition [code del]: "(f\<Colon>'a \<Rightarrow>f 'b) < g \<longleftrightarrow> f \<le> g \<and> \<not> f \<ge> g"
    19 
    19 
    20 instance ..
    20 instance ..
    21 
    21 
    22 lemma le_finfun_code [code]:
    22 lemma le_finfun_code [code]:
    23   "f \<le> g \<longleftrightarrow> finfun_All ((\<lambda>(x, y). x \<le> y) \<circ>\<^isub>f (f, g)\<^sup>f)"
    23   "f \<le> g \<longleftrightarrow> finfun_All ((\<lambda>(x, y). x \<le> y) \<circ>$ (f, g)\<^sup>f)"
    24 by(simp add: le_finfun_def finfun_All_All o_def)
    24 by(simp add: le_finfun_def finfun_All_All o_def)
    25 
    25 
    26 end
    26 end
    27 
    27 
    28 instance "finfun" :: (type, preorder) preorder
    28 instance "finfun" :: (type, preorder) preorder
    46 
    46 
    47 lemma top_finfun_apply [simp]: "op $ top = (\<lambda>_. top)"
    47 lemma top_finfun_apply [simp]: "op $ top = (\<lambda>_. top)"
    48 by(auto simp add: top_finfun_def)
    48 by(auto simp add: top_finfun_def)
    49 
    49 
    50 instantiation "finfun" :: (type, inf) inf begin
    50 instantiation "finfun" :: (type, inf) inf begin
    51 definition [code]: "inf f g = (\<lambda>(x, y). inf x y) \<circ>\<^isub>f (f, g)\<^sup>f"
    51 definition [code]: "inf f g = (\<lambda>(x, y). inf x y) \<circ>$ (f, g)\<^sup>f"
    52 instance ..
    52 instance ..
    53 end
    53 end
    54 
    54 
    55 lemma inf_finfun_apply [simp]: "op $ (inf f g) = inf (op $ f) (op $ g)"
    55 lemma inf_finfun_apply [simp]: "op $ (inf f g) = inf (op $ f) (op $ g)"
    56 by(auto simp add: inf_finfun_def o_def inf_fun_def)
    56 by(auto simp add: inf_finfun_def o_def inf_fun_def)
    57 
    57 
    58 instantiation "finfun" :: (type, sup) sup begin
    58 instantiation "finfun" :: (type, sup) sup begin
    59 definition [code]: "sup f g = (\<lambda>(x, y). sup x y) \<circ>\<^isub>f (f, g)\<^sup>f"
    59 definition [code]: "sup f g = (\<lambda>(x, y). sup x y) \<circ>$ (f, g)\<^sup>f"
    60 instance ..
    60 instance ..
    61 end
    61 end
    62 
    62 
    63 lemma sup_finfun_apply [simp]: "op $ (sup f g) = sup (op $ f) (op $ g)"
    63 lemma sup_finfun_apply [simp]: "op $ (sup f g) = sup (op $ f) (op $ g)"
    64 by(auto simp add: sup_finfun_def o_def sup_fun_def)
    64 by(auto simp add: sup_finfun_def o_def sup_fun_def)
    76 
    76 
    77 instance "finfun" :: (type, distrib_lattice) distrib_lattice
    77 instance "finfun" :: (type, distrib_lattice) distrib_lattice
    78 by(intro_classes)(simp add: sup_finfun_def inf_finfun_def expand_finfun_eq o_def sup_inf_distrib1)
    78 by(intro_classes)(simp add: sup_finfun_def inf_finfun_def expand_finfun_eq o_def sup_inf_distrib1)
    79 
    79 
    80 instantiation "finfun" :: (type, minus) minus begin
    80 instantiation "finfun" :: (type, minus) minus begin
    81 definition "f - g = split (op -) \<circ>\<^isub>f (f, g)\<^sup>f"
    81 definition "f - g = split (op -) \<circ>$ (f, g)\<^sup>f"
    82 instance ..
    82 instance ..
    83 end
    83 end
    84 
    84 
    85 lemma minus_finfun_apply [simp]: "op $ (f - g) = op $ f - op $ g"
    85 lemma minus_finfun_apply [simp]: "op $ (f - g) = op $ f - op $ g"
    86 by(simp add: minus_finfun_def o_def fun_diff_def)
    86 by(simp add: minus_finfun_def o_def fun_diff_def)
    87 
    87 
    88 instantiation "finfun" :: (type, uminus) uminus begin
    88 instantiation "finfun" :: (type, uminus) uminus begin
    89 definition "- A = uminus \<circ>\<^isub>f A"
    89 definition "- A = uminus \<circ>$ A"
    90 instance ..
    90 instance ..
    91 end
    91 end
    92 
    92 
    93 lemma uminus_finfun_apply [simp]: "op $ (- g) = - op $ g"
    93 lemma uminus_finfun_apply [simp]: "op $ (- g) = - op $ g"
    94 by(simp add: uminus_finfun_def o_def fun_Compl_def)
    94 by(simp add: uminus_finfun_def o_def fun_Compl_def)
   248 
   248 
   249 lemma iso_finfun_Bex_Bex:
   249 lemma iso_finfun_Bex_Bex:
   250   "(\<exists>x. A $ x \<and> P x) \<longleftrightarrow> finfun_Bex A P"
   250   "(\<exists>x. A $ x \<and> P x) \<longleftrightarrow> finfun_Bex A P"
   251 by(simp add: finfun_Bex_def)
   251 by(simp add: finfun_Bex_def)
   252 
   252 
   253 text {* Test replacement setup *}
   253 text {* Test code setup *}
   254 
   254 
   255 notepad begin
   255 notepad begin
   256 have "inf ((\<lambda>_ :: nat. False)(1 := True, 2 := True)) ((\<lambda>_. True)(3 := False)) \<le> 
   256 have "inf ((\<lambda>_ :: nat. False)(1 := True, 2 := True)) ((\<lambda>_. True)(3 := False)) \<le> 
   257       sup ((\<lambda>_. False)(1 := True, 5 := True)) (- ((\<lambda>_. True)(2 := False, 3 := False)))"
   257       sup ((\<lambda>_. False)(1 := True, 5 := True)) (- ((\<lambda>_. True)(2 := False, 3 := False)))"
   258   by eval
   258   by eval