I recently made an esoteric programming language, and I want to know how to test and see if the language is Turing-Complete.
La tua lingua è " Turing-complete " se può simulare qualsiasi arbitrario stato singolo Turing machine . In alternativa, con la definizione di Turing-completezza, la tua lingua è anche Turing-completa se può simulare qualsiasi altra lingua o modello computazionale completa di Turing, come λ-calculus , funzioni μ-ricorsive , la lingua WHILE
, la Calcolo combinatore SK (I) , un sistema di tag ciclici , Brainfuck , Regola 110 , Conway's Game of Life , java , , php , html5 + css3 , sql : 2003, ...
Most places I looked said it needed infinite loops and infinite data storage. Is that all?
Ci sono molti, molti modi in cui una lingua può essere completata da Turing. Un esempio sono le ramificazioni condizionali e la capacità di manipolare la memoria illimitata. (Questa è la funzione minima impostata per i linguaggi imperativi "normali" non patologici, non esoterici.)
Ma, per esempio, il calcolo λ non ha loop e non ha memoria dati; non ha nemmeno "dati". Ha solo due cose: l'astrazione della funzione e l'applicazione della funzione. Ciò nonostante è sufficiente per completare Turing.
Also, do I need to simulate a Turing Machine for proof, or is there an easier way?
Devi simulare, o dover dimostrare che puoi simulare, qualche lingua o sistema completo di Turing. Non deve essere necessariamente collegato a Turing Machines, deve essere solo completo di Turing.
Ad esempio, SQL ha dimostrato di essere Turing -completa implementando un sistema di tag ciclico , HTML5 + CSS3 ha dimostrato di essere completato da Turing implementando la regola 110 , Il sistema di tipo Scala ha dimostrato di essere Turing -completa implementando il calcolo del combinatore SKI .
Nota: è non abbastanza per simulare a Turing Machine. Devi o simulare qualsiasi macchina a nastro singolo o una Universal Turing Machine (che a sua volta può simula qualsiasi macchina di Turing a singolo nastro).