src/HOL/Fun.thy
changeset 15691 900cf45ff0a6
parent 15531 08c8dad8e399
child 16733 236dfafbeb63
equal deleted inserted replaced
15690:1da2cfd1ca45 15691:900cf45ff0a6
    37 translations
    37 translations
    38  "fun_sum" == sum_case
    38  "fun_sum" == sum_case
    39 *)
    39 *)
    40 
    40 
    41 constdefs
    41 constdefs
    42  overwrite :: "('a => 'b) => ('a => 'b) => 'a set => ('a => 'b)"
    42  override_on :: "('a => 'b) => ('a => 'b) => 'a set => ('a => 'b)"
    43               ("_/'(_|/_')"  [900,0,0]900)
    43 "override_on f g A == %a. if a : A then g a else f a"
    44 "f(g|A) == %a. if a : A then g a else f a"
       
    45 
    44 
    46  id :: "'a => 'a"
    45  id :: "'a => 'a"
    47 "id == %x. x"
    46 "id == %x. x"
    48 
    47 
    49  comp :: "['b => 'c, 'a => 'b, 'a] => 'c"   (infixl "o" 55)
    48  comp :: "['b => 'c, 'a => 'b, 'a] => 'c"   (infixl "o" 55)
   390 
   389 
   391 lemma fun_upd_image:
   390 lemma fun_upd_image:
   392      "f(x:=y) ` A = (if x \<in> A then insert y (f ` (A-{x})) else f ` A)"
   391      "f(x:=y) ` A = (if x \<in> A then insert y (f ` (A-{x})) else f ` A)"
   393 by auto
   392 by auto
   394 
   393 
   395 subsection{* overwrite *}
   394 subsection{* @{text override_on} *}
   396 
   395 
   397 lemma overwrite_emptyset[simp]: "f(g|{}) = f"
   396 lemma override_on_emptyset[simp]: "override_on f g {} = f"
   398 by(simp add:overwrite_def)
   397 by(simp add:override_on_def)
   399 
   398 
   400 lemma overwrite_apply_notin[simp]: "a ~: A ==> (f(g|A)) a = f a"
   399 lemma override_on_apply_notin[simp]: "a ~: A ==> (override_on f g A) a = f a"
   401 by(simp add:overwrite_def)
   400 by(simp add:override_on_def)
   402 
   401 
   403 lemma overwrite_apply_in[simp]: "a : A ==> (f(g|A)) a = g a"
   402 lemma override_on_apply_in[simp]: "a : A ==> (override_on f g A) a = g a"
   404 by(simp add:overwrite_def)
   403 by(simp add:override_on_def)
   405 
   404 
   406 subsection{* swap *}
   405 subsection{* swap *}
   407 
   406 
   408 constdefs
   407 constdefs
   409   swap :: "['a, 'a, 'a => 'b] => ('a => 'b)"
   408   swap :: "['a, 'a, 'a => 'b] => ('a => 'b)"
   410    "swap a b f == f(a := f b, b:= f a)"
   409    "swap a b f == f(a := f b, b:= f a)"
   411 
   410 
   412 lemma swap_self: "swap a a f = f"
   411 lemma swap_self: "swap a a f = f"
   413 by (simp add: swap_def) 
   412 by (simp add: swap_def)
   414 
   413 
   415 lemma swap_commute: "swap a b f = swap b a f"
   414 lemma swap_commute: "swap a b f = swap b a f"
   416 by (rule ext, simp add: fun_upd_def swap_def)
   415 by (rule ext, simp add: fun_upd_def swap_def)
   417 
   416 
   418 lemma swap_nilpotent [simp]: "swap a b (swap a b f) = f"
   417 lemma swap_nilpotent [simp]: "swap a b (swap a b f) = f"