음악 표기법이 Turing-Complete입니까?


63

궁금한 점은 음악 표기법 언어 Turing-Complete 입니까?

내 첫 번째 생각은 음악 표기법에 루프가 있지만 조건부 분기를 작성할 수있는 방법이 없다는 것입니다.

나는 음악가가 아니기 때문에 누군가가 그 차이를 메울 수 있습니까?


7
무엇 음악 파티션 언어는 ? 어떤 형태의 음악 표기법 ?
gnat

4
음악 표기법에 대해 잘 모르겠습니다. 무한한 양의 "변경 가능한 변수"(또는 "테이프")를 어떻게 인코딩 할 수 있습니까? 그렇지 않으면 튜링이 어떻게 완료되는지 알 수 없습니다.
니키

아니, 그것은하지 않습니다
13:04

@nikie 억제가 저장된 함수 또는 이와 유사한 것으로 작동하는지 잘 모르겠습니다.
Klaim

2
물론 Turing-complete입니다. Brainfuck의 8자를 나타 내기 위해 8 개의 다른 음표를 사용하십시오. :)
Chris Burt-Brown

답변:


37

예, 전염에 대한 몇 가지 지시 사항을 인정한다면 드물지만 알 수 없습니다.

그런 다음 조각을 Choon 으로 해석하여 Turing-complete입니다. 연주자는 기억입니다. 조각이 현재 조바꿈 된 음표 수와 지금까지 연주 한 모든 음표를 기억해야합니다. 분명히 그것은 컴퓨터 또는 아마도 종에게만 가능합니다.

Choon 매뉴얼에서 :

  • 조옮김

    위 ( +), 아래 ( -) 및 취소 ( .)의 세 가지 전치 명령이 있습니다 . 조옮김 명령은 마지막으로 연주 한 음량만큼 연주 된 모든 후속 음표를 조 옮깁니다. 취소 명령 ( .)은 조옮김을 다시 0으로 설정합니다.

    조옮김은 누적되므로 미래의 음표를 2 씩 조옮김하는 Choon 코드는 b+4가됩니다 b++. 또한, 사용 된 값은 조옮김이 적용된 후 이전 음표의 값이므로 b+b+앞으로 음표를 4가 아니라 6 만큼 조 옮깁니다.

  • 존 케이지

    John Cage 명령어 ( %)는 출력 스트림에서 하나의 음표 침묵을 유발합니다. John Cage의 조옮김 값은 0 %-이며 %+ops가 아닙니다 (단일 침묵이 출력에 추가되는 것을 제외하고).

  • 반복 바

    반복 막대 지침 ( ||::||)은 루프를 둘러 쌉니다. 루프 ||:는 발생 하기 전에 가장 최근에 연주 한 음으로 표시된 횟수만큼 실행 됩니다. 0 또는 음수 값은 Choon이 즉시 점프하여 일치하는 게임을 시작 함을 의미합니다 :||. 존 케이지는 영원히 반복한다는 것을 의미합니다- %||::||무한 루프입니다.

  • 소리굽쇠

    Tuning Fork 명령어 ~는 루프에서 벗어날 수있는 방법을 제공합니다. 루프에서 튜닝 포크가 발생하고 마지막으로 연주 된 음이 value의 음표 인 경우 AChoon은 즉시 다음 :||명령 후 재생을 시작 합니다. 추가 :||지시 가 없으면 ( ~반복 막대 외부에서 사용 된 의미 ), 즉시 연주가 종료됩니다.

  • 마커

    마커는 놀라운 프로그래밍 편의성을 제공합니다. 마커는 출력 스트림의 한 지점을 기억하는 소문자 또는 단어입니다. 마커를 참조하면 (아래 참조) 마커가 발생한 후 연주 된 음이 다시 연주됩니다. 조옮김은 새로 연주 한이 음에 영향을줍니다.

    둘 이상의 마커가 순차적으로 발생하거나 마커가 마커에서 재생 명령을 따르는 경우 공백으로 분리해야합니다.

  • 출력에서 재생

    Play From Output 명령 ( =)을 사용하면 출력 스트림에서 이미 연주 된 음을 다시 재생할 수 있습니다. 당신은 번호로 노트를 참조 할 수 있습니다 - 프로그램이 될 것 시작된 이후 5 노트는 경기 =5상대 번호로, - 가장 최근의 참고가 될 것이다 경기 3 =-3또는 마커에 의해 - 마커 후 음이 연주 x될 것이다 =x.

    다음과 같이 마커를 재사용 한 다음 즉시 참조하는 것이 일반적 관용구 x=x입니다. 이것은 x=x+y기존의 프로그래밍 언어 ( y현재 효과적인 전치 값을 나타냄) 로 말하는 것과 유사합니다 .

존 케이지는 단지입니다 휴식 하는 튜닝 포크 (약)의 달 SEGNO이며, 마커 SEGNO입니다. 튜닝 포크는 주요 연주자가 응답하는 추가 연주자가 연주 할 수 있지만 원칙은 동일합니다.


1
나는 이것이 질문에 대한 가장 좋은 대답이라고 말하고 싶습니다. 다른 답변 은 음악 표기법 튜링이 완전 하지 않다는 것을 입증 하지 못합니다 .
K.Steff

24

튜링 완성도에는 최소한 무한 루프, 조건부 점프 (if-then) 및 계산 결과를 메모리의 어딘가에 저장하는 방법이 필요합니다. 뮤지컬 표기법에 조건부 점프가 있어도 상태 가 없으므로 튜링 완료가 아닙니다.


13
그것은 일종의 조건부 점프를 가지고 반복 기호와 함께 사용됩니다 : "첫 번째 반복에서이 부분을 연주하고, 두 번째 반복에서 해당 부분을 연주하십시오". 반복 카운터 (재생하는 동안 머리에 고정)는 상태입니다. 그러나 실제로 상태를 포함하는 무한 테이프는 없습니다.
Jesper

49
재미있는 사실 : Lambda 미적분에는 루프, 조건부 점프 및 메모리의 어딘가에 계산 결과를 저장할 수있는 방법이 없습니다. 그러나 그것은 완전히 끝나고있다 ;-)
nikie

11
@Nikie : 추상화와 현실을 혼동하지 마십시오. 람다 미적분학은 조건부 평가의 개념을 가지고, 재귀는 루핑과 점프에 모두 사용되며, 상태는 표현식을 평가 한 결과로 계산됩니다. 개념이 있습니다. 실제 컴퓨터 프로그래밍과는 매우 다른 방식으로 구현되었습니다.
메이슨 휠러

5
@MasonWheeler : LC에는 루프, 상태 및 조건에 대한 기본 개념이 없지만 비슷한 목적에 맞는 것을 파생시킬 수 있습니다. 그것이 튜링 완료라고 말하는 또 다른 방법입니다. 문제는 음악적 표기법에 이러한 개념이 있지만 어떻게해서 든 파생시킬 수 있습니까? 당신은 단순히 증거 없이는 할 수 없다고 주장했습니다. (나는 당신의 결론에 동의합니다, 당신의 추론이 타당하다고 생각하지 않습니다.)
nikie

9
@MasonWheeler : Lambda 미적분학 실제 컴퓨터 프로그래밍입니다.
dan_waterworth

23

튜링이 완료되는 언어에 대한 표준 증거는 해당 언어로 튜링 머신을 작성하는 것입니다. 이는 언어 (일반적으로 언어의 하위 집합)와 튜링 머신이 동등 함을 증명합니다.

"음악 표기법"의 개념은 약간 미끄 럽습니다. 사용되는 표준화 된 조각이 많이 있습니다. 하나. 종이에 모든 종류의 미친 물건을 쓰는 봉투 밀기 작곡가가 있습니다.

피날레 또는 시벨리우스 또는 일부 주류 조각 도구 세트의 일부가 될 정도로 표준으로 여겨지는 음악 표기법의 하위 세트에 초점을 맞추고 자합니다.

그래서.

Python (또는 C 등)의 경우 기호, 테이프, 전환 규칙 및 테이프의 상태 변경 및 테이프 동작, 테이프의 기호 읽기 및 쓰기를 반영하도록 테이프를 업데이트하는 다양한 작업을 정의합니다.

"음악 표기법"을 사용하여 기호와 상태 저장 테이프, 전환 규칙 및 테이프를 업데이트하는 다양한 작업을 정의해야합니다.

우리가 부족한 것은 음악가에게 테이프의 기호에 응답하는 방법과 테이프를 업데이트하는 방법을 알려주는 상태 저장 테이프와 규칙입니다.

어떤 의미에서, 공기 중에 흐르는 소음은 상태 저장 테이프 일 수 있습니다. 그러나. 테이프를 되 감는 쉬운 방법은 없습니다. 되감기의 부족은 연주자가 일종의 개인 "테이프"를 유지해야한다는 것을 의미합니다.

이것은 외부 악보 표기법과 연주자에게 다른 악보 지침으로 들어갑니다.


글쎄, 당신은 실제로 실행중인 프로그램을 되감기 할 수는 없습니다 ... (
그렇습니다

2
프로그램을 되 감지 마십시오. 테이프를 되감습니다. 요점은 튜링 테이프가 모든 위치에 접근 할 수 있다는 것입니다. 전진 및 후진 모션으로 선형 시간으로 단순화 된 "랜덤 액세스 메모리"입니다.
S.Lott

오, 기억 나네요. 죄송합니다. 나는 어떤 이유로 음악이 쓰여진 것에 따라 "테이프"를 생각하고 있었다 =)
Izkata

튜링 머신을 구축하는 것은 무언가가 튜링 완료임을 증명하는 표준 방법이지만, 그 반대는 사실이 아닙니다. 단순히 튜링 머신을 구축하는 방법을 알 수 없어서 튜링이 완료되지 않았다는 의미는 아닙니다. 튜링 머신 (테이프 및 모두 포함)은 충분한 컴퓨팅 성능을 갖춘 임의의 추상화 일뿐입니다. 테이프에 대한 개념이없는 다른 추상화도 있습니다. 람다 미적분학, SKI 미적분학 또는 난해한 언어를 살펴보십시오 (Fractran은 시원합니다).
Tikhon Jelvis 2016 년

3

대부분의 표기법은 해석에 개방적이며 자연어 교육은 음악 표기법의 허용되는 측면이며, 서양의 표기된 음악의 역사가 전부는 아니지만 대부분에 걸쳐 있습니다.

페르마타의 정의는 연주자의 재량에 따라 달라지며, 이는 외부 요소와 관련하여 음악에 의해 거의 항상 변경되는 자신의 상태에 달려 있음을 의미합니다.

바흐의 뮤지컬 오퍼링에서 Tonus 당 2 번 캐논은 무한 반복되는 곡으로 곡이 연주되는 동안 매 단계마다 음조가 증가합니다.

더 최근에는 Dave Brubeck의 Take Five 와 같은 표기된 버전의 재즈 곡에서 "각 솔로이스트에 대한 반복"과 같은 지침을 보는 것이 일반적 입니다.

즉, 페르마타와 같은 본질적으로 임의적 인 측면을 제외하고는 다른 답변은 일반적인 기호 이외의 음악 표기법은 튜링 완료가 아닐 것입니다.


1

설명 언어이므로 튜링 완성 언어와 관련이 없습니다. 설명 자체의 결과를 제외하고 데이터 계산 또는 수정, 상태, 입력, 출력에 관한 명령은 없습니다.

또한 입력에 따라 조건부 점프가 없습니다. 모든 점프를 해결하면 나무가 아닌 선형 구조를 얻게됩니다. 따라서이 언어로 모델링 할 수있는 모든 "프로그램"은 루프 나 점프없이 선형입니다.


1
Turing 완전한 언어에는 귀하가 기재 한 내용이 필요하지 않습니다. Lambda 미적분에는 응용 프로그램, 변수 및 람다 만 포함되지만 (예 : 루프, 상태 또는 명령 없음) 튜링 완료입니다. SKI 결합기와 같은 다른 계산 모델도 마찬가지입니다.
Tikhon Jelvis 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.