Skip to content
Open

Utm #159

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
270 commits
Select commit Hold shift + click to select a range
7092768
clean up bitape file
BoltonBailey Jan 23, 2026
0711013
use relatesInSteps API
BoltonBailey Jan 23, 2026
a6a1c23
revert ReductionSystem/Basic
BoltonBailey Jan 23, 2026
7d8557b
refactor computer
BoltonBailey Jan 23, 2026
b1384f7
improve variable names
BoltonBailey Jan 23, 2026
faca3ff
claude refactor out time from composition functionality
BoltonBailey Jan 23, 2026
435971c
add private to lemmas
BoltonBailey Jan 23, 2026
6426bc5
rename helper lemmas
BoltonBailey Jan 23, 2026
50b6131
Merge branch 'main' into single-tape-turing-machines
BoltonBailey Jan 23, 2026
bacefc5
claude: uniformize the helper lemmas
BoltonBailey Jan 23, 2026
664f62c
Merge branch 'single-tape-turing-machines' of github.com:BoltonBailey…
BoltonBailey Jan 23, 2026
1576498
clean up helpers
BoltonBailey Jan 23, 2026
e348d76
further trim helpers
BoltonBailey Jan 23, 2026
c5231d9
remove vanilla computable
BoltonBailey Jan 23, 2026
b191ee9
rename fields
BoltonBailey Jan 23, 2026
c9ac367
public import Cslib.Init
BoltonBailey Jan 23, 2026
9286128
add note
BoltonBailey Jan 23, 2026
2ab4751
correct cons and provide API
BoltonBailey Jan 25, 2026
ccd4034
clean up tape apis
BoltonBailey Jan 25, 2026
ba47f4f
add docstrings
BoltonBailey Jan 25, 2026
a387696
more doc linter
BoltonBailey Jan 25, 2026
1a77e7c
imrove docs
BoltonBailey Jan 25, 2026
3d639c2
revert whitespace
BoltonBailey Jan 25, 2026
d14d5ee
clean up lines
BoltonBailey Jan 25, 2026
8b06d4a
use variables
BoltonBailey Jan 25, 2026
f7b6bbb
golfs
BoltonBailey Jan 25, 2026
19ebc8c
more golfs
BoltonBailey Jan 26, 2026
1361553
add movement lemmas
BoltonBailey Jan 26, 2026
4335852
golf
BoltonBailey Jan 26, 2026
4da0154
more line golfing
BoltonBailey Jan 26, 2026
f220ae0
clean up docstring
BoltonBailey Jan 26, 2026
aad3692
namespaces
BoltonBailey Jan 26, 2026
36615f3
Update Cslib/Computability/Machines/SingleTapeTuring/Basic.lean
BoltonBailey Jan 30, 2026
90e6ac4
fix typeclass arg names
BoltonBailey Jan 30, 2026
f5b92e7
remove unneeded parens
BoltonBailey Jan 30, 2026
78733a8
use notation
BoltonBailey Jan 30, 2026
d7f384c
more bundled instances
BoltonBailey Jan 30, 2026
f5d0cfe
Update Cslib/Computability/Machines/SingleTapeTuring/Basic.lean
BoltonBailey Jan 30, 2026
b5e035f
golf
BoltonBailey Jan 30, 2026
c3858fe
reorder args
BoltonBailey Jan 30, 2026
e6a2746
move args before :=
BoltonBailey Jan 30, 2026
0746a77
Update Cslib/Computability/Machines/SingleTapeTuring/Basic.lean
BoltonBailey Jan 30, 2026
e356245
reorder proof
BoltonBailey Jan 30, 2026
9a08b4e
Update Cslib/Computability/Machines/SingleTapeTuring/Basic.lean
BoltonBailey Jan 30, 2026
9a2190e
Merge branch 'single-tape-turing-machines' of github.com:BoltonBailey…
BoltonBailey Jan 30, 2026
3329685
Stmt becomes structure
BoltonBailey Jan 30, 2026
76e7c6e
clean up docs
BoltonBailey Jan 30, 2026
f45d40e
add doc
BoltonBailey Jan 30, 2026
1c251fb
add comment
BoltonBailey Jan 30, 2026
82ed427
add documentation on design
BoltonBailey Jan 30, 2026
a03c551
Merge branch 'main' of github.com:leanprover/cslib into single-tape-t…
BoltonBailey Jan 30, 2026
5516a25
ipossilbe instances removed
BoltonBailey Jan 30, 2026
4944e7a
lake exe mk_all
BoltonBailey Jan 30, 2026
97308fa
lake exe mk_all --module
BoltonBailey Jan 30, 2026
7c097a6
grind annotations
BoltonBailey Jan 30, 2026
600e016
some more grind lemmas
BoltonBailey Jan 30, 2026
b4704d1
more grind annotations
BoltonBailey Jan 31, 2026
ee79f80
scoped grind
BoltonBailey Jan 31, 2026
de5ca7d
Multi-tape Turing machine.
crei Feb 2, 2026
f07cb72
define eval
crei Feb 2, 2026
27dd827
relates_eq_some
crei Feb 2, 2026
4fc2c1c
simplify
crei Feb 2, 2026
363a31c
Merge remote-tracking branch 'origin/main' into multi-tape-turing-mac…
crei Feb 2, 2026
9782a33
Finish eval proof
crei Feb 2, 2026
c3226c0
move_right_nth
crei Feb 2, 2026
9840eb6
move_int
crei Feb 2, 2026
be76f0f
move until
crei Feb 2, 2026
e0b12b6
progress
crei Feb 2, 2026
65c4a32
stacktape_ext
crei Feb 2, 2026
df08110
move_int_move_int
crei Feb 3, 2026
a59a09c
sorry proof
crei Feb 3, 2026
dacb2eb
Merge remote-tracking branch 'origin/main' into multi-tape-turing-mac…
crei Feb 20, 2026
0d0d604
Allow warnings.
crei Feb 20, 2026
89fc03e
Fix imports.
crei Feb 20, 2026
269ed49
Addition and multiplication routines
crei Feb 21, 2026
949a0ef
feat: add background and orientation information on how to contribute…
fmontesi Feb 20, 2026
6fc3949
feat: generalize `TimeM` to arbitrary cost types providing `AddZero` …
eric-wieser Feb 21, 2026
e4c2347
Simplify semantics of succ.
crei Feb 24, 2026
d693e99
Always-halting Turing machines.
crei Feb 24, 2026
dce94e8
Multi-tape Turing machine.
crei Mar 2, 2026
f5da60a
Merge branch 'multi-tape-tm' into multi-tape-turing-machine
crei Mar 4, 2026
11fcde8
Fix some files post-merge.
crei Mar 4, 2026
bf81e99
Merge branch 'main' into multi-tape-turing-machine
crei Mar 4, 2026
3728302
Update files.
crei Mar 4, 2026
19e8c12
lint
crei Mar 4, 2026
3be8999
Add decrement and duplication routine.
crei Mar 5, 2026
e37b53d
Structural encoding.
crei Mar 6, 2026
597b6ec
satisfiability
crei Mar 6, 2026
7d3a5fe
feat(StrEnc): prove more eval lemmas for structural machines
crei Mar 6, 2026
c5d62bb
feat(SAT): state main satisfiability theorem
crei Mar 7, 2026
d6ec2d2
refactor(StrEnc): split any_list/all_list eval into unconditional sim…
crei Mar 7, 2026
3098e3b
feat(SAT): structure sat_eval proof with unconditional simp lemmas
crei Mar 7, 2026
729b8d8
refactor(StrEnc): make *_result take individual tapes for simp chains
crei Mar 7, 2026
40d2395
refactor(StructuralMachines): split routines into separate files
crei Mar 9, 2026
02225a9
feat(Encoding): add TapeView.pushList for prepending to list tapes
crei Mar 9, 2026
8df9713
refactor(Navigation): split outOfArg_eval_struct into valid/empty/non…
crei Mar 9, 2026
a218555
refactor(Navigation): combine toArg_eval_struct into single condition…
crei Mar 9, 2026
5cd73eb
style(Navigation): pull Function.update outside match in toArg_eval_s…
crei Mar 9, 2026
bd48d34
fix(ListOps): rename duplicate pushList_eval_struct to pushList_eval
crei Mar 9, 2026
258afde
feat(CaseDispatch): add case_popList_num_eval_struct lemma
crei Mar 9, 2026
5a0df8c
feat(CaseDispatch): implement case_popList_num using right and case_num
crei Mar 9, 2026
0254beb
refactor(Routines): remove _tape and _eval lemmas, keep only eval_struct
crei Mar 9, 2026
fe57d70
feat(Boolean): implement negateBool using case_popList_num and pushList
crei Mar 9, 2026
2794dd7
refactor(Encoding): change TapeView.data from Option Data to Data
crei Mar 9, 2026
6fc3a31
More structural code.
crei Mar 10, 2026
715018c
list ops
crei Mar 10, 2026
cc7e898
list iteration.
crei Mar 11, 2026
9c4e281
Typed computations.
crei Mar 11, 2026
4419258
cleanup
crei Mar 11, 2026
1408fbd
list iteration
crei Mar 11, 2026
ed63c3a
Using the old method again.
crei Mar 13, 2026
bb44cc1
prove semantics of all list from any list.
crei Mar 15, 2026
440639e
progress
crei Mar 15, 2026
2db3bfb
Try to introduce types.
crei Mar 15, 2026
c56252a
progress on satisfiability.
crei Mar 16, 2026
17d1ce2
simplify proofs
crei Mar 16, 2026
e6583fc
eval_literal
crei Mar 16, 2026
1de0452
core semantics.
crei Mar 16, 2026
20928d2
state semantics of sat
crei Mar 16, 2026
95fc761
start of semantics
crei Mar 16, 2026
86960bb
progress
crei Mar 16, 2026
e9d8468
simplify
crei Mar 16, 2026
307abc5
progress
crei Mar 17, 2026
8ba1641
lint
crei Mar 17, 2026
e0b45b4
some simp lemmas.
crei Mar 17, 2026
8f42ef8
working proof
crei Mar 17, 2026
dc4116b
simplify proof
crei Mar 17, 2026
1c97af3
case_literal
crei Mar 18, 2026
bc39bf9
more proofs
crei Mar 18, 2026
6c69428
cleanup
crei Mar 18, 2026
ed26fe1
Try to prove toElem.
crei Mar 19, 2026
63a295f
Merge remote-tracking branch 'origin/main' into encoding
crei Mar 19, 2026
9fcbe1c
prove toElem.
crei Mar 20, 2026
42743de
proofs and simplification.
crei Mar 20, 2026
7544172
Require TapeView to always be valid.
crei Mar 20, 2026
e026424
fix encoding lemmas
crei Mar 20, 2026
b389a83
fix proof
crei Mar 20, 2026
39b7578
correct proofs.
crei Mar 20, 2026
8822f65
encoded pos
crei Mar 20, 2026
fe00d7d
lemma
crei Mar 22, 2026
c9e4419
partial work
crei Mar 22, 2026
85f55cd
prove right_on_nonempty_list.
crei Mar 22, 2026
305d8dd
clear and while loops.
crei Mar 22, 2026
39b7ec0
fix sat
crei Mar 22, 2026
00a0ee4
prove some lemmas
crei Mar 23, 2026
4dadc2f
partial progress
crei Mar 23, 2026
06875b4
complete proofs in Put.lean
crei Mar 23, 2026
4451250
progress
crei Mar 23, 2026
196e240
outOfList inner
crei Mar 23, 2026
85b360e
split files.
crei Mar 23, 2026
47ec267
Remove encoding
crei Mar 23, 2026
f06593c
ite_enc
crei Mar 23, 2026
e5f13f3
some work
crei Mar 24, 2026
4aae857
Beginning of universal tm.
crei Mar 24, 2026
baefd9d
feat(Data): prove enc_injective and enc_prefix_free
crei Mar 25, 2026
aa03b39
fix(Data): restore StrEnc instances and imports
crei Mar 25, 2026
3206807
refactor(Data): simplify balance and injectivity proofs
crei Mar 25, 2026
10013f9
refactor(Data): further simplify balance proofs
crei Mar 25, 2026
62adaf5
refactor(Data): simplify StrEnc proofs and remove TODO comments
crei Mar 25, 2026
8e36d9f
refactor(Data): use simp only for balance-is-zero proofs
crei Mar 25, 2026
4ca6e6c
refactor(Data): use le_or_gt and shorter membership patterns
crei Mar 25, 2026
489c137
refactor(Dyadic): simplify dyadic_mem_chars to grind [dyadic]
crei Mar 25, 2026
22e2ca0
cleanup
crei Mar 26, 2026
7e9eb8d
Try out more flexible update functions.
crei Mar 26, 2026
e6ade40
try out more flexible update function
crei Mar 26, 2026
6881b4c
proof for any_list complete
crei Mar 26, 2026
150095d
feat(ListIteration): scaffold run_list_fold proof with helpers
crei Mar 26, 2026
ae5a09d
try to prove run_list_fold.
crei Mar 26, 2026
3b4d710
relax ci
crei Mar 26, 2026
6ec3a46
cleanup
crei Mar 26, 2026
dbc0f49
cleanup
crei Mar 26, 2026
57bbcd3
doc: add TODO document stubs for all docBlame lint errors
crei Mar 26, 2026
b3ba7f4
remove spaces
crei Mar 26, 2026
3dfadf2
fix
crei Mar 27, 2026
a905f5c
Merge branch 'main' into encoding
crei Mar 27, 2026
918de0b
Multi-tape TMs and computations on structured data
crei Mar 27, 2026
56b3d2c
Initial definitions for universal tm.
crei Mar 29, 2026
b39f836
refactor(MultiTape): split into Copy.lean and Eq.lean
crei Mar 30, 2026
67fea0b
fix: add missing doWhileEq definition and remove stale While import
crei Mar 30, 2026
58e3f40
Merge pull request #136 from crei/cleanup
crei Mar 30, 2026
cf074f1
Merge remote-tracking branch 'self/main' into utm
crei Mar 30, 2026
5c7488c
Merge pull request #135 from crei/utm
crei Mar 30, 2026
a0a9626
Simplify encoding.
crei Mar 30, 2026
5547224
fix(TapeView): adapt to Data without .num and 4-field TapeView with H…
crei Mar 30, 2026
aae83b1
fix(TapeView): fix enc_drop_prefix for HeadPos
crei Mar 30, 2026
4842ed8
feat(Data): prove StrEnc ℕ fromData_toData roundtrip
crei Mar 30, 2026
e8d1de6
feat(Data): prove all remaining atPath lemmas, eliminating all sorry's
crei Mar 30, 2026
65fae57
refactor(Skip): update skipLeft_eval_struct as inverse of skipRight
crei Mar 30, 2026
aa3997a
refactor(Skip): combine skipLeft lemmas into single skipLeft_eval_struct
crei Mar 30, 2026
db286e8
skip
crei Mar 30, 2026
a67874e
feat(Data): add atPath_dropLast_bind_getLast simp lemma
crei Mar 30, 2026
54eee7f
fix(Navigation): add h_left hypotheses and fix compilation errors
crei Mar 30, 2026
a9934a4
feat(Data): prove atPath_zero_isSome_of_nonempty
crei Mar 30, 2026
f45704a
more work to simplify Data.
crei Mar 30, 2026
a76a532
fix build
crei Mar 30, 2026
f8dd6b7
fix simp lint.
crei Mar 30, 2026
7fdd8f3
doc: add missing documentation strings for Data.toList, toLeftEnd, to…
crei Mar 31, 2026
6e165be
split out ite.
crei Mar 31, 2026
60fe84b
feat(Ite): prove ite.eval_struct with h_left hypothesis
crei Mar 31, 2026
c616e91
refactor(Ite): support both left-end and right-end head positions
crei Mar 31, 2026
acaa8b4
feat(Ite): prove left_n.eval, right_n.eval, ite_enc_from_right.eval
crei Mar 31, 2026
625d9d3
feat(Iterate): add iterate_n utility for repeating TM operations
crei Mar 31, 2026
fb5ba30
feat(Iterate): add iterate_n_eval_of_total lemma
crei Mar 31, 2026
df10a84
feat(Iterate): add iterate_n_eval_bind and simplify iterate_n_eval_of…
crei Mar 31, 2026
f3e2072
refactor(Ite): simplify left_n.eval and right_n.eval using iterate_n_…
crei Mar 31, 2026
4f75d9e
feat(Iterate): add Function.iterate_update simp lemma
crei Mar 31, 2026
069ca59
feat(Navigation): prove skipRight_n.eval_struct
crei Mar 31, 2026
d98c089
feat(Ite): prove ite.eval_struct
crei Mar 31, 2026
03fc32c
refactor(Ite): simplify proofs
crei Mar 31, 2026
fbd2faa
feat(TapeView): prove ite_enc_condition_right_iff and enc_suffix_free
crei Mar 31, 2026
bc139e8
simplify
crei Apr 1, 2026
2a175c7
fix: resolve build errors in Navigation, ListIteration, and ListEncoding
crei Apr 1, 2026
e7854ac
style: fix all non-sorry build warnings
crei Apr 1, 2026
3c00305
feat(Navigation): prove right_on_nonempty_list sorry-free
crei Apr 1, 2026
2cbd220
refactor(Navigation): simplify skipRight_n.eval_struct proof
crei Apr 1, 2026
58e1625
document
crei Apr 1, 2026
a08d1c1
rename, simplify
crei Apr 1, 2026
d45f861
fix(Navigation): prove right_of_leftEnd sorry-free
crei Apr 1, 2026
0de7273
fix algorithms by using atElement
crei Apr 2, 2026
e0ca2c5
fix(Navigation): prove toElem_eval_struct sorry-free
crei Apr 2, 2026
080c41c
style(Navigation): shorten toElem_eval_struct, fix lint errors
crei Apr 2, 2026
1d1c8a7
right_eval_struct
crei Apr 2, 2026
5fd3221
Simplify encoding
crei Apr 2, 2026
d40a44d
feat(Navigation): prove last-child branch of right_eval_struct
crei Apr 2, 2026
34b72ef
feat(Navigation): prove next-sibling branch of right_eval_struct
crei Apr 2, 2026
3a9080d
refactor: simplify encodedPos and right_eval_struct proofs
crei Apr 2, 2026
9a47c43
refactor: add simp lemmas, remove redundant right_of_leftEnd
crei Apr 2, 2026
c48ed98
move lemma
crei Apr 5, 2026
722a98d
lint
crei Apr 17, 2026
53ce134
General lemma for single right movement
crei Apr 17, 2026
c1f2e8e
Merge remote-tracking branch 'origin/main'
crei Apr 29, 2026
693971a
Fix build..
crei Apr 29, 2026
ce302dd
Merge pull request #165 from crei/fix_build
crei Apr 29, 2026
4e9da07
Semantics of atPath
crei Apr 29, 2026
c87ed82
Head position over time
crei Apr 30, 2026
284e1b2
Lemmas about atPath.
crei Apr 30, 2026
5ebcb37
Progress on utm.
crei Apr 30, 2026
0d05f71
Semantics of copying out the symbols under the head.
crei Apr 30, 2026
62f5a7c
Merge remote-tracking branch 'origin/main'
crei May 4, 2026
d3fd75c
Merge remote-tracking branch 'self/main' into utm
crei May 4, 2026
9a4fa29
Introduce encoding type.
crei May 4, 2026
ff7f42f
Remove StrEnc.fromData.
crei May 5, 2026
6b64b45
Merge remote-tracking branch 'self/main' into utm
crei May 5, 2026
02c9109
Function view for tapes. (#160)
crei May 5, 2026
7d78344
Merge remote-tracking branch 'self/main' into utm
crei May 5, 2026
17fcdb9
fix merge.
crei May 5, 2026
c7394a1
Simplify proof.
crei May 5, 2026
c2c1101
Semantics of getHeadSymbols.
crei May 5, 2026
ecf5daa
Semantics of provideTransitionInput
crei May 7, 2026
e24da87
eval fun
crei May 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/lean_action_ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,12 @@ jobs:
- uses: actions/checkout@v4
- name: Set TEST_ARGS manually
run: |
echo "TEST_ARGS='--wfail --iofail'" >> $GITHUB_ENV
echo "TEST_ARGS=''" >> $GITHUB_ENV
shell: bash
- uses: leanprover/lean-action@v1
with:
build-args: "--wfail --iofail"
test-args: "--wfail --iofail"
build-args: ""
test-args: ""
- name: "lake exe mk_all --check --module"
run: |
set -e
Expand Down
4 changes: 0 additions & 4 deletions .github/workflows/pr-title.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,3 @@ jobs:
with:
script: |
const msg = context.payload.pull_request? context.payload.pull_request.title : context.payload.merge_group.head_commit.message;
console.log(`Message: ${msg}`)
if (!/^(ci|feat|fix|doc|style|refactor|test|chore|perf)(\(.*\))?: .*[^.]($|\n\n)/.test(msg)) {
core.setFailed('PR title does not follow the Commit Convention (https://leanprover.github.io/lean4/doc/dev/commit_convention.html).');
}
40 changes: 40 additions & 0 deletions Cslib.lean
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,46 @@ public import Cslib.Computability.Languages.Language
public import Cslib.Computability.Languages.OmegaLanguage
public import Cslib.Computability.Languages.OmegaRegularLanguage
public import Cslib.Computability.Languages.RegularLanguage
public import Cslib.Computability.Machines.MultiTapeTuring.AddRoutine
public import Cslib.Computability.Machines.MultiTapeTuring.Basic
public import Cslib.Computability.Machines.MultiTapeTuring.CopyRoutine
public import Cslib.Computability.Machines.MultiTapeTuring.Data
public import Cslib.Computability.Machines.MultiTapeTuring.DecRoutine
public import Cslib.Computability.Machines.MultiTapeTuring.DuplicateRoutine
public import Cslib.Computability.Machines.MultiTapeTuring.Dyadic
public import Cslib.Computability.Machines.MultiTapeTuring.EqualRoutine
public import Cslib.Computability.Machines.MultiTapeTuring.GraphReachability
public import Cslib.Computability.Machines.MultiTapeTuring.HeadStats
public import Cslib.Computability.Machines.MultiTapeTuring.IsZeroRoutine
public import Cslib.Computability.Machines.MultiTapeTuring.IteCombinator
public import Cslib.Computability.Machines.MultiTapeTuring.ListEncoding
public import Cslib.Computability.Machines.MultiTapeTuring.LoopCombinator
public import Cslib.Computability.Machines.MultiTapeTuring.MoveRoutine
public import Cslib.Computability.Machines.MultiTapeTuring.MulRoutine
public import Cslib.Computability.Machines.MultiTapeTuring.PopRoutine
public import Cslib.Computability.Machines.MultiTapeTuring.PushRoutine
public import Cslib.Computability.Machines.MultiTapeTuring.Routines.Boolean
public import Cslib.Computability.Machines.MultiTapeTuring.Routines.CaseDispatch
public import Cslib.Computability.Machines.MultiTapeTuring.Routines.Copy
public import Cslib.Computability.Machines.MultiTapeTuring.Routines.Eq
public import Cslib.Computability.Machines.MultiTapeTuring.Routines.Ite
public import Cslib.Computability.Machines.MultiTapeTuring.Routines.Iterate
public import Cslib.Computability.Machines.MultiTapeTuring.Routines.ListIteration
public import Cslib.Computability.Machines.MultiTapeTuring.Routines.ListOps
public import Cslib.Computability.Machines.MultiTapeTuring.Routines.Navigation
public import Cslib.Computability.Machines.MultiTapeTuring.Routines.Put
public import Cslib.Computability.Machines.MultiTapeTuring.Routines.Skip
public import Cslib.Computability.Machines.MultiTapeTuring.Routines.Typed
public import Cslib.Computability.Machines.MultiTapeTuring.Routines.While
public import Cslib.Computability.Machines.MultiTapeTuring.Satisfiability
public import Cslib.Computability.Machines.MultiTapeTuring.SequentialCombinator
public import Cslib.Computability.Machines.MultiTapeTuring.StructuralMachines
public import Cslib.Computability.Machines.MultiTapeTuring.SuccRoutine
public import Cslib.Computability.Machines.MultiTapeTuring.TapeExtension
public import Cslib.Computability.Machines.MultiTapeTuring.TapeView
public import Cslib.Computability.Machines.MultiTapeTuring.UniversalTM
public import Cslib.Computability.Machines.MultiTapeTuring.WhileCombinator
public import Cslib.Computability.Machines.MultiTapeTuring.WithTapes
public import Cslib.Computability.Machines.SingleTapeTuring.Basic
public import Cslib.Computability.URM.Basic
public import Cslib.Computability.URM.Computable
Expand Down
107 changes: 107 additions & 0 deletions Cslib/Computability/Machines/MultiTapeTuring/AddRoutine.lean
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
/-
Copyright (c) 2026 Christian Reitwiessner. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Christian Reitwiessner
-/

module

public import Cslib.Computability.Machines.MultiTapeTuring.Basic
public import Cslib.Computability.Machines.MultiTapeTuring.ListEncoding
public import Cslib.Computability.Machines.MultiTapeTuring.SuccRoutine
public import Cslib.Computability.Machines.MultiTapeTuring.CopyRoutine
public import Cslib.Computability.Machines.MultiTapeTuring.PushRoutine
public import Cslib.Computability.Machines.MultiTapeTuring.PopRoutine
public import Cslib.Computability.Machines.MultiTapeTuring.LoopCombinator
public import Cslib.Computability.Machines.MultiTapeTuring.SequentialCombinator
public import Cslib.Computability.Machines.MultiTapeTuring.WithTapes

namespace Turing

variable {k : ℕ}

namespace Routines

@[simp]
lemma succ_iter {k r : ℕ} {i : Fin k.succ} {tapes : Fin k.succ → List (List OneTwo)} :
(Part.bind · (succ i).eval_list)^[r] (.some tapes) = Part.some (Function.update tapes i (
if r ≠ 0 then
(dya ((dya_inv ((tapes i).headD [])) + r)) :: (tapes i).tail
else
tapes i)) := by
induction r with
| zero => simp
| succ r ih =>
rw [Function.iterate_succ_apply']
simp [ih]
grind

--- Add 0 and 1 and store the result in 2.
--- Assumes zero for an empty tape.
def add₀ : MultiTapeTM 6 (WithSep OneTwo) :=
(copy 1 2);ₜ loop 0 (succ 2)

@[simp, grind =]
theorem add₀_eval_list {tapes : Fin 6 → List (List OneTwo)} :
add₀.eval_list tapes = .some
(Function.update tapes 2 ((dya (dya_inv ((tapes 0).headD []) +
dya_inv ((tapes 1).headD [])) :: (tapes 2)))) := by
simp [add₀]
by_cases h : dya_inv ((tapes 0).head?.getD []) = 0
· simp [h]; grind
· grind

/--
A Turing machine that adds the heads of tapes i and j (in dyadic encoding) and pushes the result
to tape l.
Assumes zero for an empty tape. -/
public def add (i j l : Fin (k + 6)) (aux : Fin (k + 6) := ⟨k + 3, by omega⟩)
(h_inj : [i, j, l, aux, aux + 1, aux + 2].get.Injective := by decide) :
MultiTapeTM (k + 6) (WithSep OneTwo) :=
add₀.with_tapes [i, j, l, aux, aux + 1, aux + 2].get h_inj

@[simp, grind =]
public theorem add_eval_list (i j l aux : Fin (k + 6))
{h_inj : [i, j, l, aux, aux + 1, aux + 2].get.Injective}
{tapes : Fin (k + 6) → List (List OneTwo)} :
(add i j l aux h_inj).eval_list tapes =
.some (Function.update tapes l (
(dya (dya_inv ((tapes i).headD []) + dya_inv ((tapes j).headD [])) :: (tapes l)))) := by
simp [add]
grind

-- Add head of 0 to head of 1 (and store it in head of 1).
def add_assign₀ : MultiTapeTM 6 (WithSep OneTwo) :=
add 0 1 2 (h_inj := by decide);ₜ pop 1;ₜ copy 2 1;ₜ pop 2

@[simp]
lemma add_assign₀_eval_list {tapes : Fin 6 → List (List OneTwo)} :
add_assign₀.eval_list tapes = .some
(Function.update tapes 1 ((dya (dya_inv ((tapes 0).headD []) +
dya_inv ((tapes 1).headD [])) :: (tapes 1).tail))) := by
simp [add_assign₀]
grind

/--
A Turing machine that adds the head of tape `i` to the head of tape `j` (and updates the
head of tape `j` with the result). -/
public def add_assign
(i j : Fin (k + 6))
(aux : Fin (k + 6) := ⟨k + 2, by omega⟩)
(h_inj : [i, j, aux, aux + 1, aux + 2, aux + 3].get.Injective := by decide) :
MultiTapeTM (k + 6) (WithSep OneTwo) :=
add_assign₀.with_tapes [i, j, aux, aux + 1, aux + 2, aux + 3].get h_inj

@[simp]
public theorem add_assign_eval_list {i j aux : Fin (k + 6)}
{h_inj : [i, j, aux, aux + 1, aux + 2, aux + 3].get.Injective}
{tapes : Fin (k + 6) → List (List OneTwo)} :
(add_assign i j aux h_inj).eval_list tapes =
.some (Function.update tapes j (
(dya (dya_inv ((tapes i).headD []) +
dya_inv ((tapes j).headD [])) :: (tapes j).tail))) := by
simpa [add_assign] using apply_updates_function_update h_inj

end Routines

end Turing
Loading
Loading