The game, read back #
The backward simulation of the game itself: a winning configuration of the
machine is a winning state of the game. It is one induction on
DescriptiveComplexity.ATMData.AltWin, whose motive is a conjunction with one
clause per phase the game proper can be in.
What each phase proves #
The conclusions at play, splitEx and splitAll are all spec.Wins ρ,
because what a split proves is exactly the premises of the matching constructor
of DescriptiveComplexity.SOGameSpec.Wins. The others are the
DescriptiveComplexity.ContGoal a sweep's continuation names:
start ⟶ IsStart ρ ∧ Wins ρ certify ⟶ Move ρ σ
exMove ⟶ Move ρ σ ∧ Wins σ allMove ⟶ ¬ Move ρ σ ∨ Wins σ
In each case of the induction most clauses are one line: at acc no phase of
the game is accepting, and at ex/all the clauses of the other polarity are
killed by IsUniv.
The one trap, and the motive that avoids it #
A universal sweep cannot be read backwards: its clause is every candidate is answered, and at a half-finished sweep that is false – the cells already written cannot be changed. So the motive is strengthened to
Sound c: for everydreachable fromcby steps whose sources are universal sweeps, the clauses hold atd.
The clauses at c follow by the reflexive chain, and in the all case the
chain's first step is a successor, so the induction hypothesis covers the rest
of it. That lets the universal sweep be proved forward: its run supplies the
chain, the handover the last step, and the motive delivers the clauses at the
rewind configuration – whose clause is the ContGoal wanted.
A configuration in the middle of a walk: the phase at the constant
valuation, the head anywhere among the positions, and the tape holding the two
assignments. Unlike DescriptiveComplexity.CtrlCfg it does not pin the head to
a sentinel, which is exactly what a rewind needs.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
What a sweep's continuation has to prove, one clause per place the control guesses an assignment.
Equations
- DescriptiveComplexity.ContGoal spec DescriptiveComplexity.SweepCont.start r ρ σ = (spec.IsStart (bif r then σ else ρ) ∧ spec.Wins (bif r then σ else ρ))
- DescriptiveComplexity.ContGoal spec DescriptiveComplexity.SweepCont.exMove r ρ σ = (spec.Move (bif r then σ else ρ) (bif !r then σ else ρ) ∧ spec.Wins (bif !r then σ else ρ))
- DescriptiveComplexity.ContGoal spec DescriptiveComplexity.SweepCont.certify r ρ σ = spec.Move (bif r then σ else ρ) (bif !r then σ else ρ)
- DescriptiveComplexity.ContGoal spec DescriptiveComplexity.SweepCont.allMove r ρ σ = (¬spec.Move (bif r then σ else ρ) (bif !r then σ else ρ) ∨ spec.Wins (bif !r then σ else ρ))
Instances For
Dependency graph
What a win proves, phase by phase.
- play (ρ₀ σ₀ : spec.B.Assignment A) (r par : Bool) : CtrlCfg a₀ hdim prog.vars ρ₀ σ₀ (MachPh.playPh r par) (fun (x : Fin (gameDim spec.B V)) => a₀) d → spec.Wins (bif r then σ₀ else ρ₀)
A position of the game is winning.
- splitEx (ρ₀ σ₀ : spec.B.Assignment A) (r par : Bool) : CtrlCfg a₀ hdim prog.vars ρ₀ σ₀ (MachPh.splitExPh r par) (fun (x : Fin (gameDim spec.B V)) => a₀) d → spec.Wins (bif r then σ₀ else ρ₀)
So is the existential clause.
- splitAll (ρ₀ σ₀ : spec.B.Assignment A) (r par : Bool) : CtrlCfg a₀ hdim prog.vars ρ₀ σ₀ (MachPh.splitAllPh r par) (fun (x : Fin (gameDim spec.B V)) => a₀) d → spec.Wins (bif r then σ₀ else ρ₀)
And the universal one.
- splitMove (ρ₀ σ₀ : spec.B.Assignment A) (r par : Bool) : CtrlCfg a₀ hdim prog.vars ρ₀ σ₀ (MachPh.splitMovePh r par) (fun (x : Fin (gameDim spec.B V)) => a₀) d → ContGoal spec SweepCont.exMove r ρ₀ σ₀
After an existential move: it is legal, and the play goes on.
- allStep (ρ₀ σ₀ : spec.B.Assignment A) (r par : Bool) : CtrlCfg a₀ hdim prog.vars ρ₀ σ₀ (MachPh.allStepPh r par) (fun (x : Fin (gameDim spec.B V)) => a₀) d → ContGoal spec SweepCont.allMove r ρ₀ σ₀
After a universal move: it is refuted, or the play goes on.
- splitStart (ρ₀ σ₀ : spec.B.Assignment A) (r par : Bool) : CtrlCfg a₀ hdim prog.vars ρ₀ σ₀ (MachPh.splitStartPh r par) (fun (x : Fin (gameDim spec.B V)) => a₀) d → ContGoal spec SweepCont.start r ρ₀ σ₀
At the start: the position starts the game, and wins it.
- rewind (ρ₀ σ₀ : spec.B.Assignment A) (r tgt : Bool) (cont : SweepCont) (par : Bool) : WalkCfg a₀ hdim prog.vars ρ₀ σ₀ (MachPh.rewindPh r tgt cont par) d → ContGoal spec cont r ρ₀ σ₀
A rewind proves what its continuation must.
- sweepEx (ρ₀ σ₀ : spec.B.Assignment A) (r tgt : Bool) (cont : SweepCont) (par : Bool) : cont ≠ SweepCont.allMove → SweptCfg a₀ hdim prog.vars ρ₀ σ₀ tgt (MachPh.sweepPh r tgt cont par) d → ∃ (ρ' : spec.B.Assignment A) (σ' : spec.B.Assignment A), (∀ (rr : Bool), rr ≠ tgt → (bif rr then σ' else ρ') = bif rr then σ₀ else ρ₀) ∧ ContGoal spec cont r ρ' σ'
An existential sweep proves it for some assignment of its region.
- sweepAll (ρ₀ σ₀ : spec.B.Assignment A) (r tgt par : Bool) : SweptCfg a₀ hdim prog.vars ρ₀ σ₀ tgt (MachPh.sweepPh r tgt SweepCont.allMove par) d → d.head = leftPt a₀ par → ∀ (ρ' σ' : spec.B.Assignment A), (∀ (rr : Bool), rr ≠ tgt → (bif rr then σ' else ρ') = bif rr then σ₀ else ρ₀) → ContGoal spec SweepCont.allMove r ρ' σ'
A universal sweep proves it for every assignment of its region – but only at its entry, the head on the sentinel its parity names.
Instances For
Dependency graph
The guard of the chain the motive quantifies over: a step taken from a universal sweep.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The motive: the clauses hold not only here but everywhere a universal sweep can carry the play. See the module docstring for why.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
Small conversions between the three shapes of a configuration #
Dependency graph
Dependency graph
Dependency graph
No phase of the game is accepting.
Dependency graph
A configuration belongs to the universal player exactly when its phase does.
Dependency graph
The three cases of the induction #
At an accepting configuration the clauses are vacuous: no phase of the game is the accepting one.
Dependency graph
At an existential configuration, the play chose one successor and what that choice proves is read off the step analysis.
Dependency graph
The chain a sweep's run produces is guarded by at a universal sweep.
Dependency graph
At a universal configuration every successor wins, so the play may be instantiated at each of the ones the forward direction knows how to build. The universal sweep is the exception: it is followed forward, through the chain the motive quantifies over.
Dependency graph
The induction, and the entry #
A winning configuration of the machine proves what its phase says. One
induction on DescriptiveComplexity.ATMData.AltWin, the three cases being the
three lemmas above; the chain in the motive is what carries a universal sweep.
Dependency graph
The game accepts when the machine does. The very first sweep is the
one that guessed the starting position, so what it proves – by
DescriptiveComplexity.ContGoal at start – is that some assignment starts
the game and wins it.
Dependency graph
The machine accepts exactly when the game does. Both halves of the
simulation, in one statement – and the whole of what SO-GAME ≤ʳᶠᵒ[≤] ATMAcceptSpace needs of the machine.