lemma games_lfp_nonempty: "Opair Empty Empty \ games_lfp" proof - have"fixgames {} \ games_lfp" apply (subst games_lfp_unfold) apply (simp add: mono_fixgames[simplified mono_def, rule_format]) done moreoverhave"fixgames {} = {Opair Empty Empty}" by (simp add: fixgames_def explode_Empty) finallyshow ?thesis by auto qed
definition left_option :: "ZF \ ZF \ bool" where "left_option g opt \ (Elem opt (Fst g))"
definition right_option :: "ZF \ ZF \ bool" where "right_option g opt \ (Elem opt (Snd g))"
definition is_option_of :: "(ZF * ZF) set"where "is_option_of \ { (opt, g) | opt g. g \ games_gfp \ (left_option g opt \ right_option g opt) }"
lemma games_lfp_subset_gfp: "games_lfp \ games_gfp" proof - have"games_lfp \ fixgames games_lfp" by (simp add: games_lfp_unfold[symmetric]) thenshow ?thesis by (simp add: games_gfp_def gfp_upperbound) qed
lemma games_option_stable: assumes fixgames: "games = fixgames games" and g: "g \ games" and opt: "left_option g opt \ right_option g opt" shows"opt \ games" proof - from g fixgames have"g \ fixgames games" by auto thenhave"\ l r. g = Opair l r \ explode l \ games \ explode r \ games" by (simp add: fixgames_def) thenobtain l where"\ r. g = Opair l r \ explode l \ games \ explode r \ games" .. thenobtain r where lr: "g = Opair l r \ explode l \ games \ explode r \ games" .. with opt show ?thesis by (auto intro: Elem_explode_in simp add: left_option_def right_option_def Fst Snd) qed
lemma option2elem: "(opt,g) \ is_option_of \ \ u v. Elem opt u \ Elem u v \ Elem v g" apply (simp add: is_option_of_def) apply (subgoal_tac "(g \ games_gfp) = (g \ (fixgames games_gfp))") prefer 2 apply (simp add: games_gfp_unfold[symmetric]) apply (auto simp add: fixgames_def left_option_def right_option_def Fst Snd) apply (rule_tac x=l in exI, insert Elem_Opair_exists, blast) apply (rule_tac x=r in exI, insert Elem_Opair_exists, blast) done
lemma is_option_of_subset_is_Elem_of: "is_option_of \ (is_Elem_of\<^sup>+)" proof -
{ fix opt fix g assume"(opt, g) \ is_option_of" thenhave"\ u v. (opt, u) \ (is_Elem_of\<^sup>+) \ (u,v) \ (is_Elem_of\<^sup>+) \ (v,g) \ (is_Elem_of\<^sup>+)" apply - apply (drule option2elem) apply (auto simp add: r_into_trancl' is_Elem_of_def) done thenhave"(opt, g) \ (is_Elem_of\<^sup>+)" by (blast intro: trancl_into_rtrancl trancl_rtrancl_trancl)
} thenshow ?thesis by auto qed
theorem unique_games: "(g = fixgames g) = (g = games_lfp)" proof -
{ fix g assume g: "g = fixgames g" from g have"fixgames g \ g" by auto thenhave l:"games_lfp \ g" by (simp add: games_lfp_def lfp_lowerbound) from g have"g \ fixgames g" by auto thenhave u:"g \ games_gfp" by (simp add: games_gfp_def gfp_upperbound) from l u games_lfp_eq_gfp[symmetric] have"g = games_lfp" by auto
} note games = this show ?thesis apply (rule iffI) apply (erule games) apply (simp add: games_lfp_unfold[symmetric]) done qed
lemma is_option_of_imp_games: assumes hyp: "(opt, g) \ is_option_of" shows"opt \ games_lfp \ g \ games_lfp" proof - from hyp have g_game: "g \ games_lfp" by (simp add: is_option_of_def games_lfp_eq_gfp) from hyp have"left_option g opt \ right_option g opt" by (auto simp add: is_option_of_def) with g_game games_lfp_option_stable[OF g_game, OF this] show ?thesis by auto qed
typedef game = game unfolding game_def by (blast intro: games_lfp_nonempty)
definition left_options :: "game \ game zet" where "left_options g \ zimage Abs_game (zexplode (Fst (Rep_game g)))"
definition right_options :: "game \ game zet" where "right_options g \ zimage Abs_game (zexplode (Snd (Rep_game g)))"
definition options :: "game \ game zet" where "options g \ zunion (left_options g) (right_options g)"
definition Game :: "game zet \ game zet \ game" where "Game L R \ Abs_game (Opair (zimplode (zimage Rep_game L)) (zimplode (zimage Rep_game R)))"
lemma Repl_Rep_game_Abs_game: "\ e. Elem e z \ e \ games_lfp \ Repl z (Rep_game o Abs_game) = z" apply (subst Ext) apply (simp add: Repl) apply auto apply (subst Abs_game_inverse, simp_all add: game_def) apply (rule_tac x=za in exI) apply (subst Abs_game_inverse, simp_all add: game_def) done
lemma game_split: "g = Game (left_options g) (right_options g)" proof - have"\ l r. Rep_game g = Opair l r" apply (insert Rep_game[of g]) apply (simp add: game_def games_lfp_represent) done thenobtain l r where lr: "Rep_game g = Opair l r"by auto have partizan_g: "Rep_game g \ games_lfp" apply (insert Rep_game[of g]) apply (simp add: game_def) done have"\ e. Elem e l \ left_option (Rep_game g) e" by (simp add: lr left_option_def Fst) thenhave partizan_l: "\ e. Elem e l \ e \ games_lfp" apply auto apply (rule games_lfp_option_stable[where g="Rep_game g", OF partizan_g]) apply auto done have"\ e. Elem e r \ right_option (Rep_game g) e" by (simp add: lr right_option_def Snd) thenhave partizan_r: "\ e. Elem e r \ e \ games_lfp" apply auto apply (rule games_lfp_option_stable[where g="Rep_game g", OF partizan_g]) apply auto done let ?L = "zimage (Abs_game) (zexplode l)" let ?R = "zimage (Abs_game) (zexplode r)" have L:"?L = left_options g" by (simp add: left_options_def lr Fst) have R:"?R = right_options g" by (simp add: right_options_def lr Snd) have"g = Game ?L ?R" apply (simp add: Game_def Rep_game_inject[symmetric] comp_zimage_eq zimage_zexplode_eq zimplode_zexplode) apply (simp add: Repl_Rep_game_Abs_game partizan_l partizan_r) apply (subst Abs_game_inverse) apply (simp_all add: lr[symmetric] Rep_game) done thenshow ?thesis by (simp add: L R) qed
lemma Opair_in_games_lfp: assumes l: "explode l \ games_lfp" and r: "explode r \ games_lfp" shows"Opair l r \ games_lfp" proof - note f = unique_games[of games_lfp, simplified] show ?thesis apply (subst f) apply (simp add: fixgames_def) apply (rule exI[where x=l]) apply (rule exI[where x=r]) apply (auto simp add: l r) done qed
function
neg_game :: "game \ game" where
[simp del]: "neg_game g = Game (zimage neg_game (right_options g)) (zimage neg_game (left_options g))" by auto terminationby (relation "option_of") auto
lemma ge_game_leftright_refl[rule_format]: "\ y. (zin y (right_options x) \ \ ge_game (x, y)) \ (zin y (left_options x) \ \ (ge_game (y, x))) \ ge_game (x, x)" proof (induct x rule: wf_induct[OF wf_option_of]) case (1 "g")
{ fix y assume y: "zin y (right_options g)" have"\ ge_game (g, y)" proof - have"(y, g) \ option_of" by (auto intro: y) with 1 have"ge_game (y, y)"by auto with y show ?thesis by (subst ge_game_eq, auto) qed
} note right = this
{ fix y assume y: "zin y (left_options g)" have"\ ge_game (y, g)" proof - have"(y, g) \ option_of" by (auto intro: y) with 1 have"ge_game (y, y)"by auto with y show ?thesis by (subst ge_game_eq, auto) qed
} note left = this from left right show ?case by (auto, subst ge_game_eq, auto) qed
lemma"\ y. (zin y (right_options x) \ \ ge_game (x, y)) \ (zin y (left_options x) \ \ (ge_game (y, x))) \ ge_game (x, x)" proof (induct x rule: wf_induct[OF wf_option_of]) case (1 "g") show ?case proof (auto, goal_cases)
{case prems: (1 y) from prems have"(y, g) \ option_of" by (auto) with 1 have"ge_game (y, y)"by auto with prems have"\ ge_game (g, y)" by (subst ge_game_eq, auto) with prems show ?caseby auto} note right = this
{case prems: (2 y) from prems have"(y, g) \ option_of" by (auto) with 1 have"ge_game (y, y)"by auto with prems have"\ ge_game (y, g)" by (subst ge_game_eq, auto) with prems show ?caseby auto} note left = this
{case 3 from left right show ?case by (subst ge_game_eq, auto)
} qed qed
definition eq_game :: "game \ game \ bool" where "eq_game G H \ ge_game (G, H) \ ge_game (H, G)"
lemma eq_game_sym: "(eq_game G H) = (eq_game H G)" by (auto simp add: eq_game_def)
lemma eq_game_refl: "eq_game G G" by (simp add: ge_game_refl eq_game_def)
lemma induct_game: "(\x. \y. (y, x) \ lprod option_of \ P y \ P x) \ P a" by (erule wf_induct[OF wf_lprod[OF wf_option_of]])
lemma ge_game_trans: assumes"ge_game (x, y)""ge_game (y, z)" shows"ge_game (x, z)" proof -
{ fix a have"\ x y z. a = [x,y,z] \ ge_game (x,y) \ ge_game (y,z) \ ge_game (x, z)" proof (induct a rule: induct_game) case (1 a) show ?case proof ((rule allI | rule impI)+, goal_cases) case prems: (1 x y z) show ?case proof -
{ fix xr assume xr:"zin xr (right_options x)" assume a: "ge_game (z, xr)" have"ge_game (y, xr)" apply (rule 1[rule_format, where y="[y,z,xr]"]) apply (auto intro: xr lprod_3_1 simp add: prems a) done moreoverfrom xr have"\ ge_game (y, xr)" by (simp add: prems(2)[simplified ge_game_eq[of x y], rule_format, of xr, simplified xr]) ultimatelyhave"False"by auto
} note xr = this
{ fix zl assume zl:"zin zl (left_options z)" assume a: "ge_game (zl, x)" have"ge_game (zl, y)" apply (rule 1[rule_format, where y="[zl,x,y]"]) apply (auto intro: zl lprod_3_2 simp add: prems a) done moreoverfrom zl have"\ ge_game (zl, y)" by (simp add: prems(3)[simplified ge_game_eq[of y z], rule_format, of zl, simplified zl]) ultimatelyhave"False"by auto
} note zl = this show ?thesis by (auto simp add: ge_game_eq[of x z] intro: xr zl) qed qed qed
} note trans = this[of "[x, y, z]", simplified, rule_format] with assms show ?thesis by blast qed
lemma eq_game_trans: "eq_game a b \ eq_game b c \ eq_game a c" by (auto simp add: eq_game_def intro: ge_game_trans)
definition zero_game :: game where"zero_game \ Game zempty zempty"
function
plus_game :: "game \ game \ game" where
[simp del]: "plus_game G H = Game (zunion (zimage (\ g. plus_game g H) (left_options G))
(zimage (\<lambda> h. plus_game G h) (left_options H)))
(zunion (zimage (\<lambda> g. plus_game g H) (right_options G))
(zimage (\<lambda> h. plus_game G h) (right_options H)))" by auto terminationby (relation "gprod_2_2 option_of")
(simp, auto simp: gprod_2_2_def)
lemma plus_game_comm: "plus_game G H = plus_game H G" proof (induct G H rule: plus_game.induct) case (1 G H) show ?case by (auto simp add:
plus_game.simps[where G=G and H=H]
plus_game.simps[where G=H and H=G]
Game_ext zet_ext_eq zunion zimage_iff 1) qed
lemma game_ext_eq: "(G = H) = (left_options G = left_options H \ right_options G = right_options H)" proof - have"(G = H) = (Game (left_options G) (right_options G) = Game (left_options H) (right_options H))" by (simp add: game_split[symmetric]) thenshow ?thesis by auto qed
lemma left_zero_game[simp]: "left_options (zero_game) = zempty" by (simp add: zero_game_def)
lemma right_zero_game[simp]: "right_options (zero_game) = zempty" by (simp add: zero_game_def)
lemma plus_game_zero_right[simp]: "plus_game G zero_game = G" proof - have"H = zero_game \ plus_game G H = G " for G H proof (induct G H rule: plus_game.induct, rule impI, goal_cases) case prems: (1 G H) note induct_hyp = this[simplified prems, simplified] and this show ?case apply (simp only: plus_game.simps[where G=G and H=H]) apply (simp add: game_ext_eq prems) apply (auto simp add:
zimage_cong [where f = "\ g. plus_game g zero_game" and g = "id"]
induct_hyp) done qed thenshow ?thesis by auto qed
lemma plus_game_zero_left: "plus_game zero_game G = G" by (simp add: plus_game_comm)
lemma plus_game_assoc: "plus_game (plus_game F G) H = plus_game F (plus_game G H)" proof - have"\F G H. a = [F, G, H] \ plus_game (plus_game F G) H = plus_game F (plus_game G H)" for a proof (induct a rule: induct_game, (rule impI | rule allI)+, goal_cases) case prems: (1 x F G H) let ?L = "plus_game (plus_game F G) H" let ?R = "plus_game F (plus_game G H)" note options_plus = left_options_plus right_options_plus
{ fix opt note hyp = prems(1)[simplified prems(2), rule_format] have F: "zin opt (options F) \ plus_game (plus_game opt G) H = plus_game opt (plus_game G H)" by (blast intro: hyp lprod_3_3) have G: "zin opt (options G) \ plus_game (plus_game F opt) H = plus_game F (plus_game opt H)" by (blast intro: hyp lprod_3_4) have H: "zin opt (options H) \ plus_game (plus_game F G) opt = plus_game F (plus_game G opt)" by (blast intro: hyp lprod_3_5) note F and G and H
} note induct_hyp = this have"left_options ?L = left_options ?R \ right_options ?L = right_options ?R" by (auto simp add:
plus_game.simps[where G="plus_game F G"and H=H]
plus_game.simps[where G="F"and H="plus_game G H"]
zet_ext_eq zunion zimage_iff options_plus
induct_hyp left_imp_options right_imp_options) thenshow ?case by (simp add: game_ext_eq) qed thenshow ?thesis by auto qed
lemma neg_plus_game: "neg_game (plus_game G H) = plus_game (neg_game G) (neg_game H)" proof (induct G H rule: plus_game.induct) case (1 G H) note opt_ops =
left_options_plus right_options_plus
left_options_neg right_options_neg show ?case by (auto simp add: opt_ops
neg_game.simps[of "plus_game G H"]
plus_game.simps[of "neg_game G""neg_game H"]
Game_ext zet_ext_eq zunion zimage_iff 1) qed
lemma eq_game_plus_inverse: "eq_game (plus_game x (neg_game x)) zero_game" proof (induct x rule: wf_induct[OF wf_option_of], goal_cases) case prems: (1 x) thenhave ihyp: "eq_game (plus_game y (neg_game y)) zero_game"if"zin y (options x)"for y using that by (auto simp add: prems) have case1: "\ (ge_game (zero_game, plus_game y (neg_game x)))" if y: "zin y (right_options x)"for y apply (subst ge_game.simps, simp) apply (rule exI[where x="plus_game y (neg_game y)"]) apply (auto simp add: ihyp[of y, simplified y right_imp_options eq_game_def]) apply (auto simp add: left_options_plus left_options_neg zunion zimage_iff intro: y) done have case2: "\ (ge_game (zero_game, plus_game x (neg_game y)))" if y: "zin y (left_options x)"for y apply (subst ge_game.simps, simp) apply (rule exI[where x="plus_game y (neg_game y)"]) apply (auto simp add: ihyp[of y, simplified y left_imp_options eq_game_def]) apply (auto simp add: left_options_plus zunion zimage_iff intro: y) done have case3: "\ (ge_game (plus_game y (neg_game x), zero_game))" if y: "zin y (left_options x)"for y apply (subst ge_game.simps, simp) apply (rule exI[where x="plus_game y (neg_game y)"]) apply (auto simp add: ihyp[of y, simplified y left_imp_options eq_game_def]) apply (auto simp add: right_options_plus right_options_neg zunion zimage_iff intro: y) done have case4: "\ (ge_game (plus_game x (neg_game y), zero_game))" if y: "zin y (right_options x)"for y apply (subst ge_game.simps, simp) apply (rule exI[where x="plus_game y (neg_game y)"]) apply (auto simp add: ihyp[of y, simplified y right_imp_options eq_game_def]) apply (auto simp add: right_options_plus zunion zimage_iff intro: y) done show ?case apply (simp add: eq_game_def) apply (simp add: ge_game.simps[of "plus_game x (neg_game x)""zero_game"]) apply (simp add: ge_game.simps[of "zero_game""plus_game x (neg_game x)"]) apply (simp add: right_options_plus left_options_plus right_options_neg left_options_neg zunion zimage_iff) apply (auto simp add: case1 case2 case3 case4) done qed
lemma ge_plus_game_left: "ge_game (y,z) = ge_game (plus_game x y, plus_game x z)" proof - have"\x y z. a = [x,y,z] \ ge_game (y,z) = ge_game (plus_game x y, plus_game x z)" for a proof (induct a rule: induct_game, (rule impI | rule allI)+, goal_cases) case prems: (1 a x y z) note induct_hyp = prems(1)[rule_format, simplified prems(2)]
{ assume hyp: "ge_game(plus_game x y, plus_game x z)" have"ge_game (y, z)" proof -
{ fix yr assume yr: "zin yr (right_options y)" from hyp have"\ (ge_game (plus_game x z, plus_game x yr))" by (auto simp add: ge_game_eq[of "plus_game x y""plus_game x z"]
right_options_plus zunion zimage_iff intro: yr) thenhave"\ (ge_game (z, yr))" apply (subst induct_hyp[where y="[x, z, yr]", of "x""z""yr"]) apply (simp_all add: yr lprod_3_6) done
} note yr = this
{ fix zl assume zl: "zin zl (left_options z)" from hyp have"\ (ge_game (plus_game x zl, plus_game x y))" by (auto simp add: ge_game_eq[of "plus_game x y""plus_game x z"]
left_options_plus zunion zimage_iff intro: zl) thenhave"\ (ge_game (zl, y))" apply (subst prems(1)[rule_format, where y="[x, zl, y]", of "x""zl""y"]) apply (simp_all add: prems(2) zl lprod_3_7) done
} note zl = this show"ge_game (y, z)" apply (subst ge_game_eq) apply (auto simp add: yr zl) done qed
} note right_imp_left = this
{ assume yz: "ge_game (y, z)"
{ fix x' assume x': "zin x' (right_options x)" assume hyp: "ge_game (plus_game x z, plus_game x' y)" thenhave n: "\ (ge_game (plus_game x' y, plus_game x' z))" by (auto simp add: ge_game_eq[of "plus_game x z""plus_game x' y"]
right_options_plus zunion zimage_iff intro: x') have t: "ge_game (plus_game x' y, plus_game x' z)" apply (subst induct_hyp[symmetric]) apply (auto intro: lprod_3_3 x' yz) done from n t have"False"by blast
} note case1 = this
{ fix x' assume x': "zin x' (left_options x)" assume hyp: "ge_game (plus_game x' z, plus_game x y)" thenhave n: "\ (ge_game (plus_game x' y, plus_game x' z))" by (auto simp add: ge_game_eq[of "plus_game x' z""plus_game x y"]
left_options_plus zunion zimage_iff intro: x') have t: "ge_game (plus_game x' y, plus_game x' z)" apply (subst induct_hyp[symmetric]) apply (auto intro: lprod_3_3 x' yz) done from n t have"False"by blast
} note case3 = this
{ fix y' assume y': "zin y' (right_options y)" assume hyp: "ge_game (plus_game x z, plus_game x y')" thenhave"ge_game(z, y')" apply (subst induct_hyp[of "[x, z, y']""x""z""y'"]) apply (auto simp add: hyp lprod_3_6 y') done with yz have"ge_game (y, y')" by (blast intro: ge_game_trans) with y' have "False" by (auto simp add: ge_game_leftright_refl)
} note case2 = this
{ fix z' assume z': "zin z' (left_options z)" assume hyp: "ge_game (plus_game x z', plus_game x y)" thenhave"ge_game(z', y)" apply (subst induct_hyp[of "[x, z', y]""x""z'""y"]) apply (auto simp add: hyp lprod_3_7 z') done with yz have"ge_game (z', z)" by (blast intro: ge_game_trans) with z' have "False" by (auto simp add: ge_game_leftright_refl)
} note case4 = this have"ge_game(plus_game x y, plus_game x z)" apply (subst ge_game_eq) apply (auto simp add: right_options_plus left_options_plus zunion zimage_iff) apply (auto intro: case1 case2 case3 case4) done
} note left_imp_right = this show ?caseby (auto intro: right_imp_left left_imp_right) qed from this[of "[x, y, z]"] show ?thesis by blast qed
lemma ge_plus_game_right: "ge_game (y,z) = ge_game(plus_game y x, plus_game z x)" by (simp add: ge_plus_game_left plus_game_comm)
lemma ge_neg_game: "ge_game (neg_game x, neg_game y) = ge_game (y, x)" proof - have"\x y. a = [x, y] \ ge_game (neg_game x, neg_game y) = ge_game (y, x)" for a proof (induct a rule: induct_game, (rule impI | rule allI)+, goal_cases) case prems: (1 a x y) note ihyp = prems(1)[rule_format, simplified prems(2)]
{ fix xl assume xl: "zin xl (left_options x)" have"ge_game (neg_game y, neg_game xl) = ge_game (xl, y)" apply (subst ihyp) apply (auto simp add: lprod_2_1 xl) done
} note xl = this
{ fix yr assume yr: "zin yr (right_options y)" have"ge_game (neg_game yr, neg_game x) = ge_game (x, yr)" apply (subst ihyp) apply (auto simp add: lprod_2_2 yr) done
} note yr = this show ?case by (auto simp add: ge_game_eq[of "neg_game x""neg_game y"] ge_game_eq[of "y""x"]
right_options_neg left_options_neg zimage_iff xl yr) qed from this[of "[x,y]"] show ?thesis by blast qed
instance Pg :: ordered_ab_group_add proof fix a b c :: Pg show"a - b = a + (- b)"by (simp add: Pg_diff_def)
{ assume ab: "a \ b" assume ba: "b \ a" from ab ba show"a = b" apply (cases a, cases b) apply (simp add: eq_game_def) done
} thenshow"(a < b) = (a \ b \ \ b \ a)" by (auto simp add: Pg_less_def) show"a + b = b + a" apply (cases a, cases b) apply (simp add: eq_game_def plus_game_comm) done show"a + b + c = a + (b + c)" apply (cases a, cases b, cases c) apply (simp add: eq_game_def plus_game_assoc) done show"0 + a = a" apply (cases a) apply (simp add: Pg_zero_def plus_game_zero_left) done show"- a + a = 0" apply (cases a) apply (simp add: Pg_zero_def eq_game_plus_inverse plus_game_comm) done show"a \ a" apply (cases a) apply (simp add: ge_game_refl) done
{ assume ab: "a \ b" assume bc: "b \ c" from ab bc show"a \ c" apply (cases a, cases b, cases c) apply (auto intro: ge_game_trans) done
}
{ assume ab: "a \ b" from ab show"c + a \ c + b" apply (cases a, cases b, cases c) apply (simp add: ge_plus_game_left[symmetric]) done
} qed
end
¤ Dauer der Verarbeitung: 0.20 Sekunden
(vorverarbeitet)
¤
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.