Чи є музична нотація Тьюрінга-завершеною?


63

Цікаво, чи є мова нотації Turing-Complete ?

Перша моя думка - це те, що в музичній нотації є петлі, але немає можливості написати умовні гілки, правда?

Я не музикант, тож, можливо, хтось може допомогти заповнити прогалини?


7
що таке мова музичних розділів ? якась форма музичної нотації ?
гнат

4
Я мало знаю про музичні позначення: чи можете ви якось закодувати необмежену кількість "змінних змінних" (або "стрічки")? Інакше я не бачу, як це може бути завершеним.
nikie

ні, це не так
shabunc

@nikie Я не впевнений, чи рефрен виступає як збережена функція чи щось подібне ...
Klaim

2
Звичайно, це повністю Тюрінг, просто використовуйте 8 різних нот, щоб зобразити 8 символів Brainfuck. :)
Кріс Берт-Браун

Відповіді:


37

Так, якщо ви признаєте кілька інструкцій щодо переміщення - нечасто, але невідомо.

Потім ви можете інтерпретувати твір як Choon , який є повним Тьюрінга. Виконавець - це пам'ять: вони повинні запам'ятати кількість нот, на які зараз перенесена п'єса, і всі ноти, які вони грали до цього часу. Очевидно, що це можливо лише для комп’ютера, а може, і для дивака.

З посібника Choon:

  • Транспозиції

    Є три інструкції щодо переміщення: вгору ( +), вниз ( -) та скасувати ( .). Інструкція з транспозиції переміщує всі наступні ноти, відтворені на суму останньої відтвореної ноти. Інструкція для скасування ( .) встановлює переміщення назад до нуля.

    Транспозиції є кумулятивними, тому код Choon для перенесення майбутніх нот на 2 є b+, а на 4 - би b++. Також використовуване значення - це значення попередньої примітки після того, як було застосовано b+b+транспозиції , тому переносить майбутні нотатки на 6, а не на 4.

  • Джон Кейдж

    Інструкція Джона Кейджа ( %) викликає одномоментну тишу у вихідному потоці. Значення транспозиції Джона Кейджа дорівнює нулю - %-і %+не має жодного опуску (за винятком того, що до виводу додається одна тиша).

  • Повторити бруски

    У повторному Bars інструкція ( ||:і :||) докласти петлю. Цикл виконає кількість разів, яку вказує остання нотатка, відтворена до того, як ||:відбулася зустріч. Нульове або негативне значення означатиме, що Choon негайно стрибне, щоб почати грати з відповідних :||. Джон Кейдж означає повторення назавжди - %||::||це нескінченна петля.

  • Камертон

    Інструкція Tuning Fork ~забезпечує спосіб виходу з циклів. Якщо тюнінг-вилка зустрічається в циклі, а остання відіграна нота мала значення A, тоді Choon негайно стрибне, щоб почати програвати після наступної :||інструкції. Якщо немає ніяких подальших :||інструкцій (значення ~було використано поза будь-якими повторними рядками), продуктивність негайно припиняється.

  • Маркери

    Маркери забезпечують чудову зручність програмування. Маркер - це маленька літера або слово, яке запам'ятовує точку у вихідному потоці. Посилання на маркер (див. Нижче) призведе до відтворення ноти після повторного відтворення маркера. Зауважте, що перенесення вплине на цю нову програну ноту.

    Якщо два або більше маркерів трапляються послідовно, або маркер слідує інструкції відтворення маркера, вони повинні бути відокремлені пробілом.

  • Грати з виходу

    Інструкція Play From Output ( =) дозволяє знову відтворювати ноти, які вже були відтворені у вихідному потоці. Ви можете звернутися до приміток за номером - 5 - й зіграної ноти , так як програма почалася б =5, за відносним кількістю - 3 - е найостанніша нота буде =-3або маркером - зіграна нота після маркера xбуде =x.

    Це загальна ідіома повторно використовувати маркер і негайно після цього звернутися до нього, як це: x=x. Це схоже на вимову x=x+yу звичайній мові програмування (де yпредставлено ефективне значення транспозиції в даний час).

Джон Кейдж просто відпочинок , камертон це (приблизно) Dal Segno і маркер є Segno. Я припускаю, що камертон може зіграти додатковий виконавець, на який відповідає первинний виконавець, але принцип той же.


1
Я б сказав, що це найкраща відповідь на питання: жодна з інших відповідей не підтверджує, що музична нотація не є Тюрінгом завершеною.
K.Steff

24

Тюрінг повноти вимагає, як мінімум, трьох речей: нескінченний цикл, умовний стрибок (якщо - тоді) та спосіб збереження результатів обчислень десь у пам'яті. Навіть якщо музична нотація мала умовні стрибки, вона не має стану, тому ні, це не є Тьюрінгом.


13
Сорт має умовні стрибки, які використовуються в поєднанні з повторними знаками: "на першому повторі грай цю частину, на другому повторюй, грай цю роль". Лічильник повторів (який ви тримали в голові під час гри) - це стан. Але він дійсно не має нескінченної стрічки, що містить стан.
Джеспер

49
Факт забави: в обчисленні лямбда немає циклів, умовного стрибка і жодного способу зберігати результати обчислень десь у пам'яті. І все-таки це завершення ;-)
nikie

11
@Nikie: Не плутайте абстракції з реаліями. Обчислення лямбда має поняття умовного оцінювання, рекурсія використовується як для циклу, так і для стрибків, а стан обчислюється як результати оцінки виразів. Концепції існують; вони просто реалізовані зовсім іншими способами від реального комп'ютерного програмування.
Мейсон Уілер

5
@MasonWheeler: У LC немає принципових понять циклів, стану та умовних умов, але ви можете отримати речі, які служать подібній меті. Це просто ще один спосіб сказати, що Тьюрінг завершений. Тож питання не в тому: чи нотні нотації мають ці поняття, а: чи можна їх якось вивести? Ви просто заявили, що не можете без доказів. (Я згоден з вашим висновком, я просто не думаю, що ваші міркування є дійсними.)
nikie

9
@MasonWheeler: Обчислення лямбда - це справжнє комп'ютерне програмування.
dan_waterworth

23

Стандартним доказом мови, якою Тюрінг повинен бути повний, є написання машини Тьюрінга цією мовою. Це доводить, що існує еквівалентність між мовою (зазвичай її підмножиною) та машиною Тюрінга.

Поняття «Музична нотація» трохи слизьке. Є багато стандартизованої гравюри, яка використовується. Однак. Є композитори, що штовхають конверт, які записують на папір усілякі шалені речі.

Давайте зробимо вигляд, що хочете зосередити увагу на підмножині музичних нотацій, які вважаються достатньо стандартними, щоб бути частиною Фінале або Сибеліуса або деяким набором інструментів для гравірування основного потоку.

Тому.

Для Python (або C або будь-якого іншого) ви визначаєте символи, стрічку, правила переходу та різні дії, які оновлюють стрічку для відображення зміни стану та руху стрічки, читання та записування символів на стрічку.

Використовуючи "Музичну нотацію", ми повинні визначити символи та стан-стрічку, правила переходу та різні дії, які оновлюють стрічку.

Нам не вистачає великої стрічки та правил, які розповідають музикантам, як реагувати на символи на стрічці та як оновити цю стрічку.

У певному сенсі шуми, що протікають у повітрі, можуть стати надзвичайною стрічкою. Але. Немає простого способу перемотати стрічку. Ця відсутність перемотування означає, що виконавцю довелося б зберігати приватну "стрічку" якогось типу.

Це виходить за межі музичної нотації і в деяких інших позамузичних інструкціях виконавцю.


Що ж, ви не можете реально перемотувати запущену програму ... (Але так, я розумію, що ви маєте на увазі під час оновлення штату, але це, в свою чергу, може бути функціональною мовою?)
Izkata,

2
Ви не перемотуєте програму. Ви перемотуєте стрічку. Справа в тому, що стрічка Тьюрінга має всі позиції, доступні. Це "Пам'ять із випадковим доступом" спрощена до лінійного часу з рухами вперед і назад.
S.Lott

Ох, я це пам’ятаю зараз, вибач. Я думав про "стрічку", як те, про що музика була написана чомусь =)
Izkata

Побудова машини Тьюрінга є стандартним способом довести щось - Тьюрінг завершений, але навпаки це неправда - просто тому, що ви не можете зрозуміти, як побудувати машину Тьюрінга, не означає, що щось не є Тюрінгом завершеним. Машина Тьюрінга (зі стрічкою та всіма) - це лише довільна абстракція, яка має достатню обчислювальну потужність; Є й інші абстракції настільки ж потужні, що не мають поняття про стрічки. Погляньте на обчислення лямбда, обчислення SKI або деякі езотеричні мови (Fractran - це круто).
Тихон Єлвіс

3

Значна частина нотацій є відкритою для інтерпретації, а вказівки з природної мови є загальноприйнятим аспектом музичної нотації - і були в більшості, якщо не у всій історії західної нотированої музики.

Фермати за визначенням залежать від розсуду виконавця, а це означає, що це залежало б від їх власного стану, який майже завжди змінюється музикою в поєднанні із зовнішніми факторами - тому це викликає деякі питання щодо бездержавного характеру музичної нотації.

Canon 2 за Тонус із музичної пропозиції Баха - це нескінченно розграблений твір, тональність якого щоразу піднімається на весь крок протягом тих пір, поки виконується твір.

З недавніх пір, звичайно, можна побачити такі інструкції, як "повторити для кожного соліста", наприклад, в нотаційній версії джазових п'єс, таких як " Взяти п'ять" Дейва Брубека .

Це сказало, окрім суттєво довільних аспектів, як, наприклад, "Фермата", як свідчать інші відповіді, музичне позначення, окрім загальних символів, ймовірно, не є Тюрінгом повним.


1

Це не пов'язане з Тюрінгом повних мов, оскільки це описова мова. Немає команд з точки зору обчислення чи модифікації даних, немає станів, немає введення, немає виводу, крім результату самого опису.

Також немає ніяких умовних стрибків залежно від вводу. Коли ви вирішите всі стрибки, ви отримаєте лінійну структуру, а не дерево. Отже, всі "програми", які можна моделювати цією мовою, лінійні, без циклів і стрибків.


1
Те, що ви перерахували, не потрібне для мови Тюрінга. Обчислення лямбда має лише програми, змінні та лямбда (наприклад, немає циклів, станів чи команд), але Turing завершений. Те саме стосується і багатьох інших моделей обчислень, таких як SKI комбінатори.
Тихон Єлвіс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.