Skip to content

feat(MultiTapeTM): input shortening - #12

Open
barni120400 wants to merge 8 commits into
mainfrom
feat/tm-input-shortening
Open

barni120400 wants to merge 8 commits into
mainfrom
feat/tm-input-shortening

Conversation

@barni120400

@barni120400 barni120400 commented Sep 12, 2026 •

Copy link
Copy Markdown
Owner

Adds visit sequences of run paths and an input-shortening theorem for multi-tape Turing machines: when two input cells carry the same symbol and a halting computation path visits them with the same storages, deleting the cells after the first through the second preserves every storage reached by a step on either retained side. A long enough input to a space-bounded machine has such a pair of cells.

Collapsing the cut is a homomorphism from the steps on one retained side to the steps of the machine with its output erased, MultiTapeNTM.eraseOutput, built with adapt. Segments of the path between boundary visits map with RelSeries.map and join with smash, and all statements are about computation paths. Replaces the unused not_halts_of_repeat_nonhalt with its path version, RunPath.injOn_running.

Depends on #32.

Composed with Claude Code.

@barni120400
barni120400 force-pushed the feat/tm-input-shortening branch 2 times, most recently from 23f79eb to 626903e Compare September 18, 2026 14:59
@barni120400
barni120400 changed the base branch from deps/tm-config-bound to main September 21, 2026 16:42
@barni120400 barni120400 reopened this Oct 10, 2026
@barni120400
barni120400 force-pushed the feat/tm-input-shortening branch from 93cbd48 to 7097ae4 Compare October 14, 2026 23:03
@barni120400
barni120400 changed the base branch from main to refactor/multitape-shared-simulations October 14, 2026 23:04
@barni120400
barni120400 force-pushed the feat/tm-input-shortening branch from 7097ae4 to dd7751b Compare October 14, 2026 23:14
@barni120400
barni120400 force-pushed the feat/tm-input-shortening branch 2 times, most recently from 80eaccb to 4ab9db9 Compare October 19, 2026 13:46
@barni120400
barni120400 force-pushed the feat/tm-input-shortening branch from 4ab9db9 to d2f9301 Compare October 19, 2026 21:40
@barni120400
barni120400 force-pushed the feat/tm-input-shortening branch from d2f9301 to 1a7302d Compare October 21, 2026 08:09
@barni120400
barni120400 removed this pull request from stack #38 October 21, 2026 08:09
@barni120400
barni120400 added this pull request to stack #40 October 21, 2026 08:09
@barni120400
barni120400 force-pushed the feat/tm-input-shortening branch 2 times, most recently from 43b395c to a97f309 Compare October 27, 2026 00:31
@barni120400
barni120400 removed this pull request from stack #40 October 27, 2026 00:31
@barni120400
barni120400 added this pull request to stack #45 October 27, 2026 00:32
@barni120400
barni120400 force-pushed the feat/tm-input-shortening branch from a97f309 to e4010fb Compare October 29, 2026 13:46
Adds visit sequences of run paths and an input-shortening theorem for
multi-tape Turing machines: when two input cells carry the same symbol
and a halting computation path visits them with the same storages,
deleting the cells after the first through the second preserves every
storage reached by a step on either retained side. A long enough input
to a space-bounded machine has such a pair of cells.

Collapsing the cut is a homomorphism from the steps on one retained
side to the steps of the machine with its output erased,
`MultiTapeTM.eraseOutput`, built with `adapt`. It comes from the
single-step lemma `Follows.step`, which now also gives `stepHom` and
`runningStepHom`. Segments of the path between boundary visits map
with `RelSeries.map` and join with `smash`, and all statements are
about computation paths. Replaces the unused
`not_halts_of_repeat_nonhalt` with its path version,
`RunPath.injOn_running`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@barni120400
barni120400 force-pushed the feat/tm-input-shortening branch from e4010fb to accf223 Compare November 1, 2026 16:56
@barni120400
barni120400 removed this pull request from stack #45 November 1, 2026 16:56
@barni120400
barni120400 changed the base branch from refactor/multitape-shared-simulations to main November 1, 2026 16:56
@barni120400
barni120400 added this pull request to stack #49 November 1, 2026 16:56
@barni120400
barni120400 removed this pull request from stack #49 November 3, 2026 20:22
@barni120400
barni120400 added this pull request to stack #57 November 3, 2026 20:22
barni120400 and others added 7 commits November 3, 2026 23:28
…cut avoids

Add `InputCut.Retains` and `InputCut.Avoids` for positions on a retained side of the cut,
the latter also away from its endpoints. `exists_storage_eq` now preserves the storage of
every configuration of the path that the cut avoids. `exists_shorter_input_storage` takes
the space of the halting path only and chooses a cut that avoids the given configuration,
so its induction over the path and `exists_inputCut` are gone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Replace `InputCut.Retains` and `InputCut.Avoids` with `∉ Set.Ioo cut.left cut.right` and
`∉ Set.Icc cut.left cut.right`. Make the output erasure and the collapse map private, since
no public statement mentions them. Give `ComputationPath` `CoeFun` and `Membership`
instances through its run path, so `p i` and `c ∈ p` no longer need `toRunPath`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
`Reached c` now says that the run of the output-erased machine on the shortened input
reaches the image of `c` at some time, instead of that some computation path ends there.
A side step becomes the lemma `step_cfg`, replacing `sideStepRel` and `stepHom`, and
`Reached.slice` is an induction over the path indices, so `Reached.path`, the re-typed run
path and `RunPath.inputPos_side` are gone. Several proofs use `grind` with the head-move
lemma instead of explicit instances.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add MultiTapeTM.reachable, the configurations a machine reaches on an input, with
step_mem_reachable. Reached is membership of the image in the erased machine's reachable
set, and exists_storage_eq and exists_shorter_input_storage conclude that a storage lies in
Cfg.storage '' tm.reachable, instead of the existence of a computation path.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add MultiTapeTM.core_step, that the core of a step depends only on the core, and replace
injOn_running by MultiTapeNTM.RunPath.core_injOn_running, both next to Cfg.core. The cut
map keeps the output, so a side step maps to a step of the machine itself, and the
simulation shows that the image's core is reached on the shortened input. This removes
eraseOutput, eraseOutputHom and Reached.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Abbreviate the invariant that the image's core is reached on the shortened input as a private
Reached, shortening the statements of the simulation lemmas.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…oofs

State the side condition of reached_slice and reached_covBy as SameSide with an endpoint. In
exists_shorter_input_storage, infer the signature type, close the side of the cut with grind,
and drop the unneeded classical.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant