CSSチューリングは完全ですか?


297

CSSは、私の知る限り、チューリングは完全ではありません。しかし、CSSに関する私の知識は非常に限られています。

  • CSSチューリングは完全ですか?
  • 既存のドラフトまたは委員会のいずれかが、現在ではない場合にチューリングの完全性を可能にする可能性がある言語機能を検討していますか?

28
ie6を使用している場合は、すでに完了しています。それらはCSS式と呼ばれ、コンセンサスはそれらがひどく壊れていて危険であることです。CSSに埋め込まれたJS ...
kibibu 2010年

13
@キビブ-いいね!それが折りたたまれる前に、その考えを私の脳から消してください!
DVK 2010年

どのようにCSSは可能性があり、おそらくチューリング完全では?
SLaks

1
@DVK:実際には、特に解像度に依存しないレイアウトに関して、CSSでまだテーブルに頼らずにトリッキーまたは風変わりないくつかのクールなことができます。スクリプトエンジンへのフルアクセスを許可するのではなく、副作用のない厳密に宣言型の表現言語に制限した場合、より適切に受け取られたと思います(Webkitが最初にそれを考え出した場合も同様です)
kibibu

5
@SLaks:HTML5 / CSS3のパワーを過小評価しないでください:)
Niklas B.

回答:


385

CSS3でルール110をエンコードできるので、適切な付随するHTMLファイルとユーザーインタラクションがCSSの「実行」の一部である考える限り、チューリング完全です。かなり良い実装が可能で、他の実装がここに含まれています:

body {
    -webkit-animation: bugfix infinite 1s;
    margin: 0.5em 1em;
}
@-webkit-keyframes bugfix { from { padding: 0; } to { padding: 0; } }

/*
 * 111 110 101 100 011 010 001 000
 *  0   1   1   0   1   1   1   0
 */

body > input {
    -webkit-appearance: none;
    display: block;
    float: left;
    border-right: 1px solid #ddd;
    border-bottom: 1px solid #ddd;
    padding: 0px 3px;
    margin: 0;
    font-family: Consolas, "Courier New", monospace;
    font-size: 7pt;
}
body > input::before {
    content: "0";
}

p {
    font-family: Verdana, sans-serif;
    font-size: 9pt;
    margin-bottom: 0.5em;
}

body > input:nth-of-type(-n+30) { border-top: 1px solid #ddd; }
body > input:nth-of-type(30n+1) { border-left: 1px solid #ddd; clear: left; }

body > input::before { content: "0"; }

body > input:checked::before { content: "1"; }
body > input:checked { background: #afa !important; }


input:not(:checked) +
        *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+
        input::before {
    content: "1";
}
input:not(:checked) +
        *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+
        input {
    background: #fa0;
}


input:checked +
        *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+
        input::before {
    content: "1";
}
input:checked +
        *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+
        input {
    background: #fa0;
}


input:checked +
        *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+
        input::before {
    content: "1";
}
input:checked +
        *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+
        input {
    background: #fa0;
}

input:checked + input:checked + input:checked +
        *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+
        input::before {
    content: "0";
}
input:checked + input:checked + input:checked +
        *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+
        input {
    background: #fff;
}

input:not(:checked) + input:not(:checked) + input:not(:checked) +
        *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+
        input::before {
    content: "0";
}
input:not(:checked) + input:not(:checked) + input:not(:checked) +
        *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+
        input {
    background: #fff;
}

body > input:nth-child(30n) { display: none !important; }
body > input:nth-child(30n) + label { display: none !important; }
<p><a href="http://en.wikipedia.org/wiki/Rule_110">Rule 110</a> in (webkit) CSS, proving Turing-completeness.</p>

<!-- A total of 900 checkboxes required -->
<input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/><input type="checkbox"/>


2
チューリングマシンの正式な定義(最も単純)は、状態セット、シンボルセット、初期状態、受け入れ状態セット、および遷移関数のタプルです。クランクはありません。計算とは、誰かがトランジション関数をテープに忠実に適用する必要があることを意味します。この場合、クリックとまったく同じです。より正式には、計算のモデルは、誰かが計算を行うために従う必要がある一連のルールと見なすことができます。その意味で、CSSはTuring-Completeだと思います。
John

2
このスニペットは機能していないようです(Firefox 61)。空のチェックボックスのグリッドが表示されます-チェックしても何も起こりません。
OrangeDog

2
@ジョン「CSSは完全にチューリングしている」と私は不安になりますが、私は「CSSはビーチのいくつかの岩のように完全にチューリングしています」と問題はありません。後者の記述は正しいでしょうか?
ラファエルシュミッツ

1
@R。シュミッツいいえ、その場合、人間は岩を置く場所を選択しているので、人間と岩を組み合わせたシステムが完成します。上記のCSSの例では、タブ+スペースのキープレスは、フィードバック回路と同様に、単純な繰り返しプロセスです。したがって、C ++がコンピューターハードウェアを使用して命令を実行している場合、CSSが繰り返しキーを押して命令を実行していると言っても問題ありません
woojoo666

これは、同じソリューションを使用したRule 110のCodePenに加えて、アノテーションといくつかのSassを使用して、DRYの問題解決し
notlaura

89

チューリング完全性の1つの側面は、停止問題です。

つまり、CSSが完全にチューリングしている場合、CSSプログラムが実行を終了するか、永久にループするかを決定するための一般的なアルゴリズムはありません。

しかし、CSSのこのようなアルゴリズムを導出できます。ここにあります:

  • スタイルシートがアニメーションを宣言していない場合、停止します。

  • アニメーションがある場合:

    • いずれかanimation-iteration-countinfiniteであり、それを含むセレクターがHTMLで一致する場合、それ停止しません

    • それ以外の場合は停止します。

それでおしまい。CSSの停止問題を解決しただけなので、CSSはチューリング完全ではありません

(他の人々は、CSSに任意のJavaScript式を埋め込むことができるIE 6について言及しました。これにより、チューリングの完全性が明らかに追加されます。しかし、その機能は非標準であり、いずれにせよ、右心の誰もそれを使用していません。)


ダニエルワグナーは、元の回答では見逃していた点を指摘しました。彼は、アニメーションについては説明しましたが、セレクターのマッチングレイアウトなど、スタイルエンジンの他の部分についても言及しています。もチューリングの完全性につながる可能性があるとしています。これらについて正式な議論をすることは難しいですが、チューリングの完全性がまだ起こりそうにない理由を概説しようと思います。

最初に、完全な言語をチューリングすることは、それが再帰であれループであれ、データをそれ自体フィードバックする何らかの方法を持っています。しかし、CSS言語の設計はこのフィードバックに対して敵対的です。

  • @mediaクエリは、ビューポートサイズやピクセル解像度など、ブラウザ自体のプロパティのみをチェックできます。これらのプロパティは、ユーザーの操作またはJavaScriptコード(ブラウザウィンドウのサイズ変更など)を介して変更できますが、CSSのみを介して変更することはできません。

  • ::beforeそして::after擬似要素は、DOMの一部とは見なされない、任意の他の方法で一致させることができません。

  • セレクタコンビネータは要素だけを検査することができ、上記前に、彼らが依存サイクルを作成するために使用することができないので、現在の要素。

  • それはすることができますときにホバーその上に離れた要素をシフトしていますが、マウスを移動するときの位置にのみ更新されます。

セレクタのマッチングだけではチューリング完全ではないことを納得させるには、これで十分です。しかし、レイアウトはどうですか?

最新のCSSレイアウトアルゴリズムは非常に複雑で、FlexboxGridなどの機能によって水が濁っています。しかし、レイアウトで無限ループをトリガーすることができたとしても、これを活用して有用な計算を実行することは困難です。これは、CSSセレクターが検査するのはDOMの内部構造のみであり、これらの要素が画面にどのように配置されているかではないためです。したがって、レイアウトシステムを使用したチューリングの完全性の証明は、レイアウトのみに依存する必要があります

最後に、これがおそらく最も重要な理由です。ブラウザベンダーは、CSSを完全なものにしないことに関心を持っています。言語を制限することにより、ベンダーは賢い最適化を可能にし、誰にとってもウェブをより高速にします。さらに、Googleはサーバーファーム全体をChromeのバグの検索専用にしています。CSSを使用して無限ループを作成する方法があった場合、おそらくすでに発見されているはずです😉


4
「CSSは完全にチューリングしています」と人々が言うとき、それは「アニメーションをサポートするCSSがチューリング完全であること」を意味します。ロジックを使用してプログラミング言語を制限し、それらがTuring Completeではないと結論付けることができますが、制限を指定する必要があります。
philix

36
この回答は「停止」の面白い定義を使用していると思います-確かに、少なくとも質問をしたいのであれば、私が望んでいたものとは違います。「停止」は、「各要素の計算されたプロパティが変化しなくなる時間がある」という意味で使用されているようです。しかし、「停止」は「宣言的なCSSをすべての要素の計算されたプロパティに変換するアルゴリズムが実行を終了すること」を意味するようにしたいと思います。後者の定義では、単に「アニメーションがない」というよりも、かなり多くの議論が必要であるように思われます。
Daniel Wagner、

4
あなたの論理はここで逆です。チューリングの完全性は、停止を決定できないことを意味しますが、停止を決定できないことは、チューリングの完全性を意味します。
asmeurer 2017年

3
@LambdaFairy CSSの停止問題は何ですか?そんなことあるとは思いません。停止の問題はマシンにのみ関係します。今日私たちが持っている最も強力な計算モデルはチューリングマシンです。お使いのコンピューターは、チューリングマシン(無限メモリなし)と同じくらい強力です。CSSだけをマシンとして定義することはできません。おそらく、ブラウザのCSSエンジンをマシンとして定義できますが、それでも、TMと同じくらい強力なだけです。CSSがチョムスキーの階層の新しいオートマトンにならない限り、「CSSの問題停止する」という文は単に意味をなさないだけです。
Mike Shi

3
@LambdaFairy不完全なチューリングの証明がどのようになるかを誤解しています。TMは停止の問題を決定できないことを知っています。CSSは完全に調整されていない停止問題を解決できるため、元の証明は主張をしているようです。CSSが停止の問題を本当に解決できる場合、CSはTMができないものを計算できるため、チューリングマシンよりも強力です。TM / The Lambda Calculusよりも強力なマシンは構築できないことを(Church-Turing論文によって)知っています。したがって、これは矛盾であり、元のステートメントは正しくありません。
アイザックダイヤモンド

32

この記事によると、そうではありません。記事はまたそれを作ることは良い考えではないと主張しています。

コメントの1つから引用するには:

したがって、CSSが完全に機能しているとは思いません。CSSで関数を定義する機能はありません。システムが完全に機能するためには、インタープリター、つまり実行するプログラムを表す式を解釈する関数を作成できる必要があります。CSSには、ユーザーが直接アクセスできる変数はありません。したがって、CSSで解釈されるプログラムを表す構造をモデル化することもできません。


4
CSSは決して実行可能ではありません。引用されたコメントを書いた人はそれを理解していないようです。:-\
ライアン

33
CSSは、プロセッサ(レイアウトエンジン)に対する一連の命令です。それについて「実行可能」ではないのは何ですか?
DVK

47
思い通りにプログラムを書くことができるかどうかは、チューリングの完全性だけではありません。計算可能性に関する数学的特性です。CSSがチューリング完全であるとは信じられないかもしれませんが、証拠が必要です。この場合、ルール110により、CSSはチューリング完全です。
ミカエルメイヤー

15
@MikaëlMayer-「110」の回答の多くのコメントに記載されているように、ユーザーがアクションを実行する必要があります。ユーザーのアクションが必要な場合、ユーザーのいないCSSは完全なチューリングではありません
DVK

1
@DVK CSS 110の例で必要な繰り返しキープレスは、ユーザーの「アクション」とは異なり、繰り返しデジタル回路で実行できます。実際のチューリングマシンは、実行を駆動するために何らかの電気ハードウェアを必要とするため、これがどのように異なるかはわかりません
woojoo666

6

チューリングの完全性は、「関数の定義」または「ifs /ループ/ etcを持っている」だけではありません。たとえば、Haskellには「ループ」がなく、ラムダ計算には「if」がないなどです。

たとえば、このサイト:http : //experthuman.com/programming-with-nothing。著者はRubyを使用して、クロージャーのみ(文字列や数値などは含まない)で「FizzBu​​zz」プログラムを作成します...

型システムのみを使用してScalaでいくつかの算術関数を計算する例があります

だから、はい、私の意見では、CSS3 + HTMLはチューリング完全です(それでも、狂ってしまうことなく実際の計算を正確に行うことができない場合でも)


11
Haskellとlambda-caclculusには再帰があります。CSSはありますか?Malbolgeで実際の計算を行うには、頭がおかしい必要があります。CSSでは、あなたがどれほど頭がおかしいかは関係ありません。それは機能せず、CSSは完全なものではなく、それは意見の問題ではありません。
JMCF125 2013年

11
このページでは、あなたのコメントは他に見つかりませんでした。しかし、受け入れられた回答に記載されているように、ユーザーの対話がCSSの「実行」の一部であると考える限り(...)、チューリング完全です(...)。そして私はしません。
JMCF125 2013年

20
攻撃的であるつもりがなくても、完全性を調整することは誰の意見にも反応しません。
trisweb 2014

5
@MaurícioSzaboいいえ、CSS3とHTMLに加えて、人間がシミュレーションを継続的に進めていることで、チューリングの完成です。
ラムダ妖精

4
@LambdaFairyこれは、すべての物理的なチューリングマシンにも当てはまります。
Miles Rout

5

ここでの基本的な問題は、HTML + CSSで記述されたマシンは、コードが無限に長くない限り、無限に多くのステップを評価できない(つまり、「実際の」再帰が存在しない)ことです。そして、このマシンが有限である場合H、このマシンが設定n以下の段階で到達するかどうかnは常に答えられますか?


1
Turing Machineの要件のどこに無限ループを処理する機能が指定されているのかわかりません。2番目のポイントが有効ではないようです。チューリングは彼のチューリングマシンを使用して計算可能性の問題を証明しましたが、これらのルールは、停止の問題と同様に、マシンがチューリングマシンであるかどうかを決定しません。チューリングマシンがこれらの仮説を要件として含んでいた場合、チューリングマシンを使用してそれらを証明することはできませんでした。
アダムデイビス

4
@AdamDavisこれは完全に有効な引数です。チューリング完全形式の停止問題を解決するアルゴリズムが存在する場合、これは一般的に停止問題を解決することと同等です。もちろん、これは不可能であることが証明されています。つまり、特定の形式について停止問題を解決できる場合、その形式はチューリング完全であってなりませ。したがって、有限数のステップしか評価できないすべての形式は、CSSを含めてチューリング完全にすることはできません。
00dani 2016年

3
それはだない Bならば、A!場合、それはだBませんその後、Aではありません!前者は後件を肯定している、あなたが正しく指摘した後件を間違っているいます。後者、つまりcontrapositiveによる議論は、私が使用するものであり、有効です。最後のコメントで否定を慎重に使用していることに注意してください-間違いを避けるために特別に作成しました。
Lambda Fairy

1
@ woojoo666いいえ。一連のルールに従って状態を変換できることは、チューリング完全であることと同じではありません。限られた数のステップでしかできないことは、完全に完了することはできません。一連の変換ルールを有限回数しか適用できない場合、「システムはこれまでに状態に達しますか?Hか?」は常に決定可能であるため、チューリング完全ではありません。有限回数の反復しか実行できないセルオートマトンの実装は、完全に実現することはできません。
Henrik Sommerland

1
「そしてもちろん、CSSも完成し
つつあり

4

UTMとUTM自体(ユニバーサルチューリングマシン)の説明が混在しているため、この回答は正確ではありません。

良い答えありますが、別の見方をすると、現在のトップの答えに直接欠陥はありません。


まず第一に、人間はUTMとして働くことができるということに同意できます。これは

CSS + Human == UTM

そのCSS場合、HumanUTMパートを誰が行うかによってすべての作業を実行できるため、パートは役に立たない。ランダムにクリックするのではなく、特定の場所のみをクリックするため、クリックする行為はUTMになる可能性があります。

CSSの代わりに、次のテキストを使用できます(ルール110):

000 -> 0
001 -> 1
010 -> 1
011 -> 1
100 -> 0
101 -> 1
110 -> 1
111 -> 0

私の行動と結果を導くことは同じです。これは、このテキストUTMを意味しますか?いいえ、これは他のUTM(人間またはコンピューター)が読み取りおよび実行できる入力(説明)にすぎません。クリックするだけで、UTMを実行できます。


CSSに欠けている重要な部分は、CSSがクリックを生成できる場合、それ自体がUTMになる独自の状態を任意の方法で変更できることです。CSSの実際の「クランク」はそれを実行するレイアウトエンジンであり、CSSがUTMであることを証明するには十分であるため、CSSのクリックが「クランク」であるという主張は正確ではありません。


ルール110はUTMです。あなたのテキストはルール110の(おそらく少し不十分な)説明なので、テキストは(aの表現)UTMです。
OrangeDog 2018

「CSSがクリックを生成する可能性がある場合」私は自分のプロジェクトで多くのAVRマイクロコントローラーを使用しています。8MHzに制限されている内部クロックを使用することもできます。あるいは、外部水晶を接続して、最大20MHzにすることもできます。あるいは、完全に外部クロックを供給することもできます。そのため、実際に水晶を駆動しているのはCPUハードウェアでもありません。つまり、スイッチと回路の一部を実際に接続してデバウンスし、文字通りそれを時計として使用してボタンを押すことができます。それは私がそうするならそれが完了するのをやめるのを止めることを意味しますか?
Cedric Mamo

1
@CedricMamoしかし、あなたのクリックは状態を変えるので、正しい場所をクリックするだけで十分です。eli.fox-epste.in/rule110-full.htmlを正確に見てください。すべてのセルをクリックできます。CSSが無効になっている場合でも、正しいセルをクリックしてUTM を取得できます。「次へ」ボタンを1つクリックするだけの場合、実際にはCSSはUTMになりますが、そのようなものを作成するには、ボタンクリックごとに呼び出されるJSが必要です。CSSの場合、結果を正しく解釈して状態を更新するものが必要です。
ヤンクス

1
@CedricMamoそれへのリンクはありますか?今、私はそこからいくつかの例を調べますが、それは私にとってはうまくいきません。全体的に、CSSが正しいことを理解し、いくつかのチェックボックスの表示を変更し、タブを使用して次のチェックボックスに移動すると、CSSではない非表示のUTMが再び表示されます。複雑なコードを大量に実行するには、CSSを使用しますが、さらに多くのことを行います。これは、ブラウザがCSSではなくUTMであることを証明することを意味します。
ヤンクス

1
@CedricMamoしかし、セルラーオートマトンは独自の定義でループを持ちます。状態遷移が行われると、ループが再度実行されます。それを削除して、この状態遷移のみを残すと、このオートマトンはUTMでなくなります。これはCSSとまったく同じ状況になります。CAで2つのステップを定義できます。- R読み取り状態とW-書き込み状態。通常のCAはRWRWRWRW...、CSSの場合のみ無限シーケンスRを実行します。W追加できない場合は、読み取ることができないものを変更するのでありません。B-ブラウザアクションは、我々は持っている可能性がありRBRBRBR...ますが、その後BBBBBB、独自のUTMです。
Yankes、

-28

CSSはプログラミング言語ではないため、チューリング完全性の問題は無意味です。IE6の場合のようにプログラミング拡張機能がCSSに追加された場合、その新しい合成はまったく異なります。

CSSは単なるスタイルの説明です。ロジックはなく、構造はフラットです。


1
また(IIRC)、複数の競合する(重複する)スタイルが使用されている場合、どのスタイルが優先されるかについてはあいまいさがいくつかあります。そして、異なるブラウザーが処理するマークアップスタイルを実装/解釈する方法は少し異なります。
デビッドRトリブル

70
「CSSはプログラミング言語ではないため、チューリング完全性の問題は無意味です。」トートロジーの文はトートロジーです。
アダムデイビス

3
なぜあなたの答えがそれほど反対票を投じられているのか疑問に思うなら、プログラミング言語Prologを見てください。
エドウィン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.