Theory AttractorStrategy
section ‹Attractor Strategies›
theory AttractorStrategy
imports
Main
Attractor UniformStrategy
begin
text ‹This section proves that every attractor set has an attractor strategy.›
context ParityGame begin
lemma strategy_attracts_extends_VVp:
assumes σ: "strategy p σ" "strategy_attracts p σ S W"
and v0: "v0 ∈ VV p" "v0 ∈ directly_attracted p S" "v0 ∉ S"
shows "∃σ. strategy p σ ∧ strategy_attracts_via p σ v0 (insert v0 S) W"
proof-
from v0(1,2) obtain w where "v0→w" "w ∈ S" using directly_attracted_def by blast
from ‹w ∈ S› σ(2) have "strategy_attracts_via p σ w S W" unfolding strategy_attracts_def by blast
let ?σ = "σ(v0 := w)"
have "strategy p ?σ" using σ(1) ‹v0→w› valid_strategy_updates by blast
moreover have "strategy_attracts_via p ?σ v0 (insert v0 S) W" proof
fix P
assume "vmc_path G P v0 p ?σ"
then interpret vmc_path G P v0 p ?σ .
have "¬deadend v0" using ‹v0→w› by blast
then interpret vmc_path_no_deadend G P v0 p ?σ by unfold_locales
define P'' where [simp]: "P'' = ltl P"
have "lhd P'' = w" using v0(1) v0_conforms w0_def by auto
hence "vmc_path G P'' w p ?σ" using vmc_path_ltl by (simp add: w0_def)
have *: "v0 ∉ S - W" using ‹v0 ∉ S› by blast
have "override_on (σ(v0 := w)) σ (S - W) = ?σ"
by (rule ext) (metis * fun_upd_def override_on_def)
hence "strategy_attracts p ?σ S W"
using strategy_attracts_irrelevant_override[OF σ(2,1) ‹strategy p ?σ›] by simp
hence "strategy_attracts_via p ?σ w S W" unfolding strategy_attracts_def
using ‹w ∈ S› by blast
hence "visits_via P'' S W" unfolding strategy_attracts_via_def
using ‹vmc_path G P'' w p ?σ› by blast
thus "visits_via P (insert v0 S) W"
using visits_via_LCons[of "ltl P" S W v0] P_LCons by simp
qed
ultimately show ?thesis by blast
qed
lemma strategy_attracts_extends_VVpstar:
assumes σ: "strategy_attracts p σ S W"
and v0: "v0 ∉ VV p" "v0 ∈ directly_attracted p S"
shows "strategy_attracts_via p σ v0 (insert v0 S) W"
proof
fix P
assume "vmc_path G P v0 p σ"
then interpret vmc_path G P v0 p σ .
have "¬deadend v0" using v0(2) directly_attracted_contains_no_deadends by blast
then interpret vmc_path_no_deadend G P v0 p σ by unfold_locales
have "visits_via (ltl P) S W"
using vmc_path.strategy_attractsE[OF vmc_path_ltl σ] v0 directly_attracted_def by simp
thus "visits_via P (insert v0 S) W" using visits_via_LCons[of "ltl P" S W v0] P_LCons by simp
qed
lemma attractor_has_strategy_single:
assumes "W ⊆ V"
and v0_def: "v0 ∈ attractor p W" (is "_ ∈ ?A")
shows "∃σ. strategy p σ ∧ strategy_attracts_via p σ v0 ?A W"
using assms proof (induct arbitrary: v0 rule: attractor_set_induction)
case (step S)
have "v0 ∈ W ⟹ ∃σ. strategy p σ ∧ strategy_attracts_via p σ v0 {} W"
using strategy_attracts_via_trivial valid_arbitrary_strategy by blast
moreover {
assume *: "v0 ∈ directly_attracted p S" "v0 ∉ S"
from assms(1) step.hyps(1) step.hyps(2)
have "∃σ. strategy p σ ∧ strategy_attracts p σ S W"
using merge_attractor_strategies by auto
with *
have "∃σ. strategy p σ ∧ strategy_attracts_via p σ v0 (insert v0 S) W"
using strategy_attracts_extends_VVp strategy_attracts_extends_VVpstar by blast
}
ultimately show ?case
using step.prems step.hyps(2)
attractor_strategy_on_extends[of p _ v0 "insert v0 S" W "W ∪ S ∪ directly_attracted p S"]
attractor_strategy_on_extends[of p _ v0 "S" W "W ∪ S ∪ directly_attracted p S"]
attractor_strategy_on_extends[of p _ v0 "{}" W "W ∪ S ∪ directly_attracted p S"]
by blast
next
case (union M)
hence "∃S. S ∈ M ∧ v0 ∈ S" by blast
thus ?case by (meson Union_upper attractor_strategy_on_extends union.hyps)
qed
subsection ‹Existence›
text ‹Prove that every attractor set has an attractor strategy.›
theorem attractor_has_strategy:
assumes "W ⊆ V"
shows "∃σ. strategy p σ ∧ strategy_attracts p σ (attractor p W) W"
proof-
let ?A = "attractor p W"
have "?A ⊆ V" by (simp add: ‹W ⊆ V› attractor_in_V)
moreover
have "⋀v. v ∈ ?A ⟹ ∃σ. strategy p σ ∧ strategy_attracts_via p σ v ?A W"
using ‹W ⊆ V› attractor_has_strategy_single by blast
ultimately show ?thesis using merge_attractor_strategies ‹W ⊆ V› by blast
qed
end
end