Equations
- AP.aStratChoose p = AP.AStrat.mk fun (sa : AP.State) => choose? (AP.aStratChooseCnd p sa)
Instances For
Equations
- s.getMoveAt s_target = AP.getMoveFromHist s_target (AP.initState s.pw s.aPos₀) s.hist.reverse.tail
Instances For
Equations
- AP.dStratOfDWins sa = AP.DStrat.mk fun (sd : AP.State) => do let pa ← sd.getMoveAt sa let sd' ← AP.sys.tr sa pa let pd ← choose? fun (pd : PointZ) => ∃ (sa' : AP.State), AP.sys.tr sd' pd = some sa' ∧ ∃ (d : AP.DStrat), d.WF ∧ ∀ (a : AP.AStrat), a.WF → sa'.dWins { a := a, d := d } if sd' = sd then some pd else do let sa' ← AP.sys.tr sd' pd let d ← choose? fun (d : AP.DStrat) => d.WF ∧ ∀ (a : AP.AStrat), a.WF → sa'.dWins { a := a, d := d } pure (d.f sd)
Instances For
Equations
Instances For
theorem
AP.AState.aWins_of_ind_two'
{sa₀ : State}
[ha₀ : AState sa₀]
{st : Strat}
[hst : st.WF]
{p : State → Prop}
(hp : p sa₀)
(h :
∀ {sa : State} [AState sa],
sys.Reachable sa₀ sa →
p sa →
∃ (sd : State), sys.tr sa (st.a.f sa) = some sd ∧ ∀ (sa' : State), sys.tr sd (st.d.f sd) = some sa' → p sa')
:
theorem
AP.AState.aWins_of_ind_two
{sa₀ : State}
[ha₀ : AState sa₀]
{st : Strat}
[hst : st.WF]
{p : State → Prop}
(hp : p sa₀)
(h :
∀ {sa : State} [AState sa],
sys.Reachable sa₀ sa →
p sa →
∃ (sd : State), sys.tr sa (st.a.f sa) = some sd ∧ ∀ (sa' : State), sys.tr sd (st.d.f sd) = some sa' → p sa')
:
sa₀.aWins st
theorem
AP.getMoveFromHist_append_eq_some_of
{s acc : State}
{ps ps₁ : List PointZ}
{p : PointZ}
(h : getMoveFromHist s acc ps = some p)
:
theorem
AP.simulate_congr
{s : State}
[hs : sys.WF s]
{st₁ st₂ : Strat}
[hst₁ : st₁.WF]
[hst₂ : st₂.WF]
{n : ℕ}
(h₁ :
∀ k < n,
∀ (sa : State) [AState sa],
sys.simulate st₁.f s k = (sa, 0) → sys.simulate st₂.f s k = (sa, 0) → sys.hasTr sa → st₁.a.f sa = st₂.a.f sa)
(h₂ :
∀ k < n,
∀ (sd : State) [DState sd],
sys.simulate st₁.f s k = (sd, 0) → sys.simulate st₂.f s k = (sd, 0) → sys.hasTr sd → st₁.d.f sd = st₂.d.f sd)
:
theorem
AP.AState.aHws_of_ind'
{s : State}
[ha : AState s]
{p : State → Prop}
(h₁ : p s)
(h₂ :
∀ (sa : State) [AState sa], sys.Reachable s sa → p sa → ∃ (pa : PointZ) (sd : State), sys.tr sa pa = some sd ∧ p sd)
(h₃ : ∀ (sd : State) [DState sd] (pd : PointZ) (sa : State), sys.Reachable s sd → p sd → sys.tr sd pd = some sa → p sa)
:
theorem
AP.AState.aHws_of_ind
{s : State}
[ha : AState s]
{p : State → Prop}
(h₁ : p s)
(h₂ :
∀ (sa : State) [AState sa], sys.Reachable s sa → p sa → ∃ (pa : PointZ) (sd : State), sys.tr sa pa = some sd ∧ p sd)
(h₃ : ∀ (sd : State) [DState sd] (pd : PointZ) (sa : State), sys.Reachable s sd → p sd → sys.tr sd pd = some sa → p sa)
:
s.aHws
theorem
AP.AState.aWins_of_ind'
{s : State}
[ha : AState s]
{st : Strat}
[hst : st.WF]
{p : State → Prop}
(h₁ : p s)
(h₂ : ∀ (sa : State) [AState sa], sys.Reachable s sa → p sa → ∃ (sd : State), sys.tr sa (st.a.f sa) = some sd ∧ p sd)
(h₃ : ∀ (sd : State) [DState sd] (sa : State), sys.Reachable s sd → p sd → sys.tr sd (st.d.f sd) = some sa → p sa)
:
theorem
AP.AState.aWins_of_ind
{s : State}
[ha : AState s]
{st : Strat}
[hst : st.WF]
{p : State → Prop}
(h₁ : p s)
(h₂ : ∀ (sa : State) [AState sa], sys.Reachable s sa → p sa → ∃ (sd : State), sys.tr sa (st.a.f sa) = some sd ∧ p sd)
(h₃ : ∀ (sd : State) [DState sd] (sa : State), sys.Reachable s sd → p sd → sys.tr sd (st.d.f sd) = some sa → p sa)
:
s.aWins st
theorem
AP.State.aWins_of_ind'
{s : State}
[hs : sys.WF s]
{st : Strat}
[hst : st.WF]
{p : State → Prop}
(h₁ : p s)
(h₂ : ∀ (sa : State) [AState sa], sys.Reachable s sa → p sa → ∃ (sd : State), sys.tr sa (st.a.f sa) = some sd ∧ p sd)
(h₃ : ∀ (sd : State) [DState sd] (sa : State), sys.Reachable s sd → p sd → sys.tr sd (st.d.f sd) = some sa → p sa)
:
theorem
AP.State.aWins_of_ind
{s : State}
[hs : sys.WF s]
{st : Strat}
[hst : st.WF]
{p : State → Prop}
(h₁ : p s)
(h₂ : ∀ (sa : State) [AState sa], sys.Reachable s sa → p sa → ∃ (sd : State), sys.tr sa (st.a.f sa) = some sd ∧ p sd)
(h₃ : ∀ (sd : State) [DState sd] (sa : State), sys.Reachable s sd → p sd → sys.tr sd (st.d.f sd) = some sa → p sa)
:
s.aWins st
theorem
AP.State.aHws_of_ind'
{s : State}
[hs : sys.WF s]
{p : State → Prop}
(h₁ : p s)
(h₂ :
∀ (sa : State) [AState sa], sys.Reachable s sa → p sa → ∃ (pa : PointZ) (sd : State), sys.tr sa pa = some sd ∧ p sd)
(h₃ : ∀ (sd : State) [DState sd] (pd : PointZ) (sa : State), sys.Reachable s sd → p sd → sys.tr sd pd = some sa → p sa)
:
theorem
AP.State.aHws_of_ind
{s : State}
[hs : sys.WF s]
{p : State → Prop}
(h₁ : p s)
(h₂ :
∀ (sa : State) [AState sa], sys.Reachable s sa → p sa → ∃ (pa : PointZ) (sd : State), sys.tr sa pa = some sd ∧ p sd)
(h₃ : ∀ (sd : State) [DState sd] (pd : PointZ) (sa : State), sys.Reachable s sd → p sd → sys.tr sd pd = some sa → p sa)
:
s.aHws
theorem
AP.State.exi_aWins_of_ind'
{s : State}
[hs : sys.WF s]
{d : DStrat}
[Hd : d.WF]
{p : State → Prop}
(h₁ : p s)
(h₂ : ∀ (sa : State) [AState sa], p sa → ∃ (pa : PointZ) (sd : State), sys.tr sa pa = some sd ∧ p sd)
(h₃ : ∀ (sd : State) [DState sd] (sa : State), p sd → sys.tr sd (d.f sd) = some sa → p sa)
:
theorem
AP.State.exi_aWins_of_ind
{s : State}
[hs : sys.WF s]
{d : DStrat}
[Hd : d.WF]
{p : State → Prop}
(h₁ : p s)
(h₂ : ∀ (sa : State) [AState sa], p sa → ∃ (pa : PointZ) (sd : State), sys.tr sa pa = some sd ∧ p sd)
(h₃ : ∀ (sd : State) [DState sd] (sa : State), p sd → sys.tr sd (d.f sd) = some sa → p sa)
:
theorem
AP.State.dWins_of_lt_lt
{s : State}
[hs : sys.WF s]
{a : AStrat}
[Ha : a.WF]
{d : DStrat}
[Hd : d.WF]
{p : State → Prop}
{f : State → ℕ}
(h₁ : p s)
(h₂ : ∀ (sa sd : State) [AState sa] [DState sd], p sa → sys.tr sa (a.f sa) = some sd → p sd ∧ f sd < f sa)
(h₃ : ∀ (sd sa : State) [DState sd] [AState sa], p sd → sys.tr sd (d.f sd) = some sa → p sa ∧ f sa < f sd)
:
theorem
AP.State.dWins_of_le_lt
{s : State}
[hs : sys.WF s]
{a : AStrat}
[Ha : a.WF]
{d : DStrat}
[Hd : d.WF]
{p : State → Prop}
{f : State → ℕ}
(h₁ : p s)
(h₂ : ∀ (sa sd : State) [AState sa] [DState sd], p sa → sys.tr sa (a.f sa) = some sd → p sd ∧ f sd ≤ f sa)
(h₃ : ∀ (sd sa : State) [DState sd] [AState sa], p sd → sys.tr sd (d.f sd) = some sa → p sa ∧ f sa < f sd)
:
theorem
AP.State.dWins_of_lt_le
{s : State}
[hs : sys.WF s]
{a : AStrat}
[Ha : a.WF]
{d : DStrat}
[Hd : d.WF]
{p : State → Prop}
{f : State → ℕ}
(h₁ : p s)
(h₂ : ∀ (sa sd : State) [AState sa] [DState sd], p sa → sys.tr sa (a.f sa) = some sd → p sd ∧ f sd < f sa)
(h₃ : ∀ (sd sa : State) [DState sd] [AState sa], p sd → sys.tr sd (d.f sd) = some sa → p sa ∧ f sa ≤ f sd)
:
theorem
AP.State.dWins_of_lt_lt_uncond
{s : State}
[hs : sys.WF s]
{a : AStrat}
[Ha : a.WF]
{d : DStrat}
[Hd : d.WF]
{f : State → ℕ}
(h₁ : ∀ (sa sd : State) [AState sa] [DState sd], sys.tr sa (a.f sa) = some sd → f sd < f sa)
(h₂ : ∀ (sd sa : State) [DState sd] [AState sa], sys.tr sd (d.f sd) = some sa → f sa < f sd)
:
theorem
AP.State.dWins_of_le_lt_uncond
{s : State}
[hs : sys.WF s]
{a : AStrat}
[Ha : a.WF]
{d : DStrat}
[Hd : d.WF]
{f : State → ℕ}
(h₁ : ∀ (sa sd : State) [AState sa] [DState sd], sys.tr sa (a.f sa) = some sd → f sd ≤ f sa)
(h₂ : ∀ (sd sa : State) [DState sd] [AState sa], sys.tr sd (d.f sd) = some sa → f sa < f sd)
:
theorem
AP.State.dWins_of_lt_le_uncond
{s : State}
[hs : sys.WF s]
{a : AStrat}
[Ha : a.WF]
{d : DStrat}
[Hd : d.WF]
{f : State → ℕ}
(h₁ : ∀ (sa sd : State) [AState sa] [DState sd], sys.tr sa (a.f sa) = some sd → f sd < f sa)
(h₂ : ∀ (sd sa : State) [DState sd] [AState sa], sys.tr sd (d.f sd) = some sa → f sa ≤ f sd)
: