Accidentally Turing-Complete
beza1e1.tuxen.de
beza1e1.tuxen.de
https://everything2.com/title/Tetris+complete
Tetris Completion extends Turing Completion by adding the minimum requirements for a functional implementation of Tetris. From the link above:
* a display with at least 20 rows and 10 columns, and enough read/write random access memory to store the current contents of the display,
* a way of repainting one row or column of the display without affecting the others,
* a timer with a resolution of at least 100 milliseconds
* a small set of keys whose state can be read without blocking execution, which for Tetris are left, right, clockwise, and anticlockwise
* a linear bounded automaton programmed for the particular puzzle game
Not really. A plain turing machine only has one input and one output over the lifetime of the execution.
> certainly any TC system has the capacity to keep track of time if the pieces are manipulated at a constant rate.
Only if the turing-equivalent machine is iterating at a specific rate and can pause. Lots of these systems run through the entire machine in a single shot and can't manage timing.
Much more interesting is what we can compute without Turing completeness.
(Shameless plug: https://tkatchev.bitbucket.io/tab/index.html)
My computer can fall into an infinite loop even though it doesn't have infinite storage (to emulate an infinite tape of a Turing machine).
I think our disagreement is specious because it’s trying to import terms like “infinite loop”, “halt”, “program” from a formal theory into the material world.
I think I can only ask, how do you define infinite loop and forever?
Yes. A computer can be in an infinite loop, lose power, and then stop functioning.
>how do you define infinite loop and forever
Infinite Loop: A system is in an infinite loop when that system keeps returning to the same state making it unable to progress (depending on the context the definition might change to where making progress is okay and it in only returning to a partial match of an existing state (think of an echo server for example))
Forever: A time period that ranges from t=now to t=infinity.
Ok. Are these claims accurate?
1. All physical systems must eventually halt.
2. In many cases physical systems correspond to formal computational systems.
> Infinite Loop: A system is in an infinite loop when that system keeps returning to the same state making it unable to progress
A system is called deterministic if all future states can be calculated from complete knowledge of any particular state.
So then because the system is deterministic, we know that if it returns to a previous state it must keep returning to this state forever?
> Forever: A time period that ranges from t=now to t=infinity.
Right, it’s a period of time, but the word “infinity” is not clarifying for me. Maybe, a period of time with no end?
In terms of physical computers I don't agree with must, but I will say there is a very high chance that it will. In terms of an arbitrary physical system something like gravity doesn't just halt.
>In many cases physical systems correspond to formal computational systems.
It is possible to model physical systems. It can also be useful to reason about a simplified model of something.
>So then because the system is deterministic, we know that if it returns to a previous state it must keep returning to this state forever?
Assuming it's deterministic then yes. Depending on how complicated your model is it may be hard to go back to a state you were in before.
>Maybe, a period of time with no end?
Sure.
It has allowed us to emulate (numeric) const generics in crates like typenum (https://docs.rs/typenum) long before they were implemented as a proper language feature. Even today, typenum is more powerful in some regards than the stable version of const generics.
Never did get it to work properly :(
The C++ template really is just fill-in-the-blanks, (but with a special behaviour named SFINAE, Substitution Failure Is Not An Error) so I believe this trick would have worked if you'd been doing C++, producing all the necessary layers of flattening for whatever input you had.
To me, if I find that manually writing two more layers of flatten isn't enough, I would start to think this is the wrong problem to be solving.
> To me, if I find that manually writing two more layers of flatten isn't enough, I would start to think this is the wrong problem to be solving.
Definitely! This was more of a fun intellectual exercise than anything else. I absolutely love seeing what can be done at compile time, and a lot of stuff that isn't useful in practice can still be pretty entertaining.
This sort of thing is why I wrote https://crates.io/crates/misfortunate
Rust lets me write safe implementations of well-known Traits like Ord (the trait which compares things because they are ordered) but promises the outcome when these traits are relied upon elsewhere is always safe even if my implementations are very silly.
So I can sort() things for which I've implemented nonsensical ordering (e.g. they all claim they're before each other) and Rust promises that's still safe. This futile task might well not finish and if it does finish they won't seem any more or less "sorted" than they were before I tried, but it won't crash or do anything unfathomable.
And indeed that's exactly what happens, cementing my faith in the idea of Rust.
[Not all Rust's traits are safe. If you have to say "unsafe" to write the implementation then it wasn't safe, and if you do something nonsensical in an unsafe trait then you get to keep both halves when it breaks, misfortunate is only interested in safe traits]
Nice, I didn't know of this one. It's the continuation and completion of work by the first author of the linked paper, Alex Churchill, who had earlier shown a method to prove M:tG Turing-Complete but in a setup that was not a full game:
https://www.toothycat.net/~hologram/Turing/HowItWorks.html
It's good to see he kept at it and seems to have produced a generally interesting result that applies well beyond M:tG, to boot. Wow.
Edit: Oh, shit. That means I'll never get funding to make an M:tG AI XD
Accidentally Turing-Complete - https://news.ycombinator.com/item?id=22964441 - April 2020 (58 comments)
A collection of things that are Turing-complete by accident (2013) - https://news.ycombinator.com/item?id=16383072 - Feb 2018 (63 comments)
Accidentally Turing Complete (2013) - https://news.ycombinator.com/item?id=9195519 - March 2015 (1 comment)
Accidentally Turing-Complete - https://news.ycombinator.com/item?id=6577671 - Oct 2013 (48 comments)
Two stacks can simulate a Turing Tape. E.g. moving left is simulated by popping off one stack and pushing onto other. One counter can encode the tape while the other is used to encode the tape position.
This is thought to be entirely secure against the Meltdown and Spectre CPU vulnerabilities, which require speculative execution on branch instructions.
The mov-only DOOM renders approximately one frame every 7 hours, so playing this version requires somewhat increased patience."
This means, we need about twenty doublings of the computing speed to play it smoothly. Will we ever reach it? And if yes, when?
https://groups.csail.mit.edu/mac/users/bob/sliding-blocks.pd...
> Technically, a problem is called PSPACE-complete if it is equal in computational power to a particular mathematical model of computation (called “polynomial-space-bounded Turing machines”).
Turing completeness is already a low bar, because arithmetic+iteration is enough, and this doesn't clear the bar.
> All knowledge growth is by incremental improvement, but in many fields there comes a point when one of the incremental improvements in a system of knowledge or technology causes a sudden increase in reach, making it a universal system in the relevant domain. In the past, innovators who brought about such a jump to universality had rarely been seeking it, but since the Enlightenment they have been, and universal explanations have been valued both for their own sake and for their usefulness. Because error-correction is essential in processes of potentially unlimited length, the jump to universality only ever happens in digital systems.
What examples are you thinking of?
> in many fields there comes a point when one of the incremental improvements in a system of knowledge or technology causes a sudden increase in reach, making it a universal system in the relevant domain
If you're learning to balance a stick on your finger, there's no digital algorithm executing. You're just trying to tune your feedback loop to move the base of the inverted pendulum so as to keep it upright. Yet there's a clear point where you move from being able to balance the stick for 1 second, to 2 seconds, to 5 seconds, and suddenly you can now do it indefinitely until you mess up or get bored.
So of course, you can implement Game of Life within Game of Life:
https://news.ycombinator.com/item?id=10161002
>DonHopkins on Sept 2, 2015 | parent | context | favorite | on: The most obsolete infrastructure money could buy –...
>I remember running across a Turing machine emulator implemented in TECO in Minsky's home directory that I'd REALLY love to get ahold of.
>hga on Sept 2, 2015 [–]
>Ask and yea shall receive:
MSG: APL 1
DISTRIB: *BBOARD
EXPIRES: 03/17/81 23:08:54
MINSKY@MIT-MC 03/11/81 23:08:54 Re: too-short programs
APL is compact, I suppose. So is TECO. When I wrote the following
Universal Turing Machine, which works, I actually understood it.
[ I've interpolated the non-printing characters as displayed by (Gnu) EMACS,
escape is ^], ^^ is one character, as is \356: ]
i1Aul qq+^^0:iqm^[29iiq\356y0L1 00L1 11L2 A1L1
y0L1 0yR2 1AR2 AyR6 yyL3 00L0 1AL3 A1L4 yyL4 0yR5 11L7 A1L4
yyR5 0yL3 1AR5 A1R5 yyR6 0AL3 1AR6 A1R6 y0R7 0yR6 11R7 A0R2
^[j<sR^[;-d-2ciql-^^^[ci"ed^^^[cii^[ciuq'^[>
j<sL^[;-d-2ciql-^^^[ci"ed^^^[cii-2c^[ciuq'^[>jxblx1lx2lx3lx4lx5lx6lx7hk
iyyAyyAyy^[32<i0^[>ji110101110000010011011^[ 1uq<htmbqq=>
I do not advise attempting to understand this code, which is
almost as bad as that for the Universal Turing machine.
>ADDED: or http://ancell-ent.com/share/minsky-TECO-turing-machine.txt>Please ack receipt of this and/or send me email (in my HN info); for others, note this is ITS TECO, which I was told was by far the most powerful version of it (fortunately, by the time I showed up learning it was no longer really necessary).
>DonHopkins on Sept 3, 2015 | root | parent [–]
>OOP ACK! It was a shot in the dark, but I am SO GLAD I asked!!! Thank you Harold!
>It looks just like I remember. ;)
TECO eminently qualifies as a "Turing Tar Pit":
https://en.wikipedia.org/wiki/Turing_tarpit
>A Turing tarpit (or Turing tar-pit) is any programming language or computer interface that allows for flexibility in function but is difficult to learn and use because it offers little or no support for common tasks. The phrase was coined in 1982 by Alan Perlis in the Epigrams on Programming:
>>54. Beware of the Turing tar-pit in which everything is possible but nothing of interest is easy.
>In any Turing complete language, it is possible to write any computer program, so in a very rigorous sense nearly all programming languages are equally capable. Showing that theoretical ability is not the same as usefulness in practice, Turing tarpits are characterized by having a simple abstract machine that requires the user to deal with many details in the solution of a problem. At the extreme opposite are interfaces that can perform very complex tasks with little human intervention but become obsolete if requirements change slightly.
>Some esoteric programming languages, such as Brainfuck, are specifically referred to as "Turing tarpits" because they deliberately implement the minimum functionality necessary to be classified as Turing complete languages. Using such languages is a form of mathematical recreation: programmers can work out how to achieve basic programming constructs in an extremely difficult but mathematically Turing-equivalent language.
https://en.wikipedia.org/wiki/TECO_(text_editor)#As_a_progra...
>As a programming language: The obscurity of the TECO programming language is described in the following quote from "Real Programmers Don't Use Pascal", a letter from Ed Post to Datamation, July 1983:
>>It has been observed that a TECO command sequence more closely resembles transmission line noise than readable text. One of the more entertaining games to play with TECO is to type your name in as a command line and try to guess what it does. Just about any possible typing error while talking with TECO will probably destroy your program, or even worse - introduce subtle and mysterious bugs in a once working subroutine.
https://en.wikipedia.org/wiki/Real_Programmers_Don%27t_Use_P...