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" |