theorem
AP.State.aHws_of_rel
{s s' : State}
{r : State → State → Prop}
[hs : sys.WF s]
[hs' : sys.WF s']
(h₁ : s.aHws)
(ht : s.aTurn = s'.aTurn)
(h₂ : r s s')
(h₃ :
∀ {sa sa' sd : State} {p : PointZ} [AState sa] [AState sa'] [DState sd],
sys.Reachable s sa →
sys.Reachable s' sa' → r sa sa' → sys.tr sa p = some sd → ∃ (sd' : State), sys.tr sa' p = some sd' ∧ r sd sd')
(h₄ :
∀ {sd sd' sa' : State} {p : PointZ} [DState sd] [DState sd'] [AState sa'],
sys.Reachable s sd →
sys.Reachable s' sd' → r sd sd' → sys.tr sd' p = some sa' → ∃ (sa : State), sys.tr sd p = some sa ∧ r sa sa')
:
s'.aHws
theorem
AP.State.aHws_of_fn'
{s : State}
{f : State → State}
[hs : sys.WF s]
[hs' : sys.WF (f s)]
(h₁ : s.aHws)
(ht : s.aTurn = (f s).aTurn)
(h₂ :
∀ {sa sa' sd : State} {p : PointZ} [AState sa] [AState sa'] [DState sd],
sys.Reachable s sa →
sys.Reachable (f s) sa' →
f sa = sa' → sys.tr sa p = some sd → ∃ (sd' : State), sys.tr sa' p = some sd' ∧ f sd = sd')
(h₃ :
∀ {sd sd' sa' : State} {p : PointZ} [DState sd] [DState sd'] [AState sa'],
sys.Reachable s sd →
sys.Reachable (f s) sd' →
f sd = sd' → sys.tr sd' p = some sa' → ∃ (sa : State), sys.tr sd p = some sa ∧ f sa = sa')
:
(f s).aHws
theorem
AP.State.aHws_of_fn
{s : State}
{f : State → State}
[hs : sys.WF s]
[hs' : sys.WF (f s)]
(h₁ : s.aHws)
(ht : s.aTurn = (f s).aTurn)
(h₂ :
∀ {sa sd : State} {p : PointZ} [AState sa] [AState (f sa)] [DState sd],
sys.Reachable s sa → sys.Reachable (f s) (f sa) → sys.tr sa p = some sd → sys.tr (f sa) p = some (f sd))
(h₃ :
∀ {sd sa' : State} {p : PointZ} [DState sd] [DState (f sd)] [AState sa'],
sys.Reachable s sd →
sys.Reachable (f s) (f sd) → sys.tr (f sd) p = some sa' → ∃ (sa : State), sys.tr sd p = some sa ∧ f sa = sa')
:
(f s).aHws
theorem
AP.State.aHws_of_fn₂
{s : State}
{f f' : State → State}
[hs : sys.WF s]
[hs' : sys.WF (f s)]
(h₁ : s.aHws)
(ht : s.aTurn = (f s).aTurn)
(hf₁ : ∀ {s₁ : State} [sys.WF s₁], sys.Reachable s s₁ → f' (f s₁) = s₁)
(hf₂ :
∀ {s₁ s₂' : State} {p : PointZ} [DState s₁] [AState s₂'],
sys.Reachable s s₁ → sys.tr (f s₁) p = some s₂' → ∃ (s₂ : State), sys.tr s₁ p = some s₂ ∧ f s₂ = s₂')
(h₂ :
∀ {sa sd : State} {p : PointZ} [AState sa] [AState (f sa)] [DState sd],
sys.Reachable s sa → sys.Reachable (f s) (f sa) → sys.tr sa p = some sd → sys.tr (f sa) p = some (f sd))
(h₃ :
∀ {sd' sa' : State} {p : PointZ} [DState sd'] [AState sa'],
sys.Reachable s (f' sd') →
sys.Reachable (f s) sd' → sys.tr sd' p = some sa' → ∃ (sa : State), sys.tr (f' sd') p = some sa)
:
(f s).aHws