그래서 사람들은 단순화 된 버전의 문제 만 해결 하더라도이 게시물을 게시하도록 잔소리합니다. 좋아, 그럼 :)
마지막에, 나는 Ibarra와 Trân의 논문에서 배운 것의 일부와 그 방법이 우리의 일반적인 문제에 대해 왜 분해 되는지 , 그러나 여전히 유용한 정보를 제공 할 것입니다.
먼저, 우리는 세트를 결정하려는 간단한 문제를 살펴 보겠습니다.
L={2n∣ 원계 그리고 이진 표현 짝수 또는 홀수 길이의 길이가 모두2n}
참고이 얼마나 보다는 원래의 문제에있다. 입력 된 숫자 인 경우 특히 하지 2의 거듭 제곱, 우리는 어떤베이스 길이를 계산하는 시도보다는 그것을 거부합니다.2nn
원래 숫자가 경우 를 제외한 모든 대해 확인하면됩니다. 그것들은 모두 입니다.2v23v35v57v7...viv20
이것은 우리가 곱셈 / 나눗셈 오토 마톤의 단일 변수의 주요 인수 분해 지수에서 카운터 오토 마톤 의 상태를 인코딩하는 기존 방법 (Minsky I의 가정) 주위에 래퍼를 사용하여 단순화 된 문제를 해결할 수있게합니다 . 위의 OP에서 언급했듯이 2 카운터 오토 마톤과 거의 같습니다.k
먼저, 랩을하려면 카운터 오토 마톤이 필요합니다 . , 및 라는 3 개의 카운터를 사용합니다 .kv2v3v5
오토 마톤은 초기 카운터 값 IFF 받아들이는 원과의 이진 표현이 짝수 또는 홀수 길이의 길이가 양쪽 과 모두 및 제로가됩니다. 수락하면 먼저 모든 카운터를 0으로 만듭니다.2v2v3v5
다음은 OP와 유사한 어셈블리 형식의 코드입니다 (명령에 변수를 추가했습니다). 나는 그것을 테스트 할 것이 없기 때문에 실제로 테스트하지는 않았지만 이것을 공식적인 것으로 생각합니다 .3 카운터 오토마타는 Turing-complete로 잘 알려져 있으며 그들의 기능 중 하나의 계산 가능한 기능을 구성 할 수 있습니다. 초기 값.
// Check that v3 and v5 are both zero.
JZ v3, check5
GOTO reject
check5: JZ v5, init3
GOTO reject
// Decrement v2 until it is zero, constructing 2^n in the process. If 2^n
// was even, we will then pass to even2 with 2^n in v3; If 2^n was odd, we
// will pass to odd2 with 2^n in v5.
init3: INC v3 // Set v3 to 1 = 2^0 to start with.
even1: // We have decremented v2 an even number of times so far.
// 2^decremented amount is in v3.
JZ v2, odd2
DEC v2
dup3to5: JZ v3, odd1
DEC v3
INC v5
INC v5
GOTO dup3to5
odd1: // We have decremented v2 an odd number of times so far.
// 2^decremented amount is in v5.
JZ v2, even2
DEC v2
dup5to3: JZ v5, even1
DEC v5
INC v3
INC v3
GOTO dup5to3
// The second part checks the ternary length of 2^n, which starts out in v3
// or v5 according to whether the *binary* length of 2^n (i.e. n+1) was odd
// or even.
odd2: // v3 needs to have odd ternary length to accept.
// It is simplest to consider 0 to have even length in both
// binary and ternary. This works out as long as we're
// consistent.
JZ v3, reject
trisect3to5: DEC v3
DEC v3
JZ v3, even2
DEC v3
INC v5
GOTO trisect3to5
even2: // v5 needs to have even ternary length to accept
JZ v5, accept
trisect5to3: DEC v5
DEC v5
JZ v5, odd2
DEC v5
INC v3
GOTO trisect5to3
accept: HALT Accept
reject: HALT Reject
다음 단계는 단일 변수 오토 마톤의 지수에서 위의 내용을 다시 인코딩하는 것입니다. 결과가 꽤 길기 때문에 일반적인 방법을 설명 할 것이지만 정식 버전 (약간 "현장에서 최적화")이 내 웹 사이트에 있습니다.
JZ vp, label
DEC vp
next: ...
(기본적으로 p로 나눈 다음 나누기가 균일하지 않은 경우 정리를 취소하여 취소) :
DIV p, next, ..., newlabel.fp-1
newlabel.f1: MUL p
GOTO newlabel.i1
...
newlabel.fp-1: MUL p
INC
newlabel.ip-2: INC
...
newlabel.i1: INC
GOTO label
next: ...
INC vp
됩니다 MUL p
. 개인 JZ
및 DEC
결합 된 양식으로 먼저 변경할 수 있습니다. GOTO label
그리고 HALT Reject
변하지 않습니다.
HALT Accept
우리가 숫자에는 주요 요소가 없는지 확인해야한다는 우리의 경우에 우리는 아직도 할 일 최종 점검이를 제외하고 변경되지 않은 것 , 다른 우리, 특히 3 카운터 자동 장치 제로부터 2, 3, 5 카운터 그 이상을 수락 할 때 사용하는 것은 간단합니다. 최종 변수가 1인지 테스트하면 코드로 건너 뛸 수 있습니다.
DEC // BTW it cannot be zero before this.
JZ accept
HALT Reject
accept: HALT Accept
내 웹 사이트의 코드 에는 숫자가 0이 아니라는 초기 검사가 있습니다 .v3, v5 0 검사와 중복됩니다.
앞에서 언급했듯이 위의 방법은 단순화 된 문제에 효과적이지만 일반적으로 문제가 발생할 가능성 은 없습니다 . 일반적인 문제에서 모든 소수의 정확한 값이 일반적인 크기를 결정하기 위해 계산하므로 길이는 어느 것입니까? 다양한 기지에 있습니다. 이것은 다음을 의미합니다.
- 카운터에 사용할 "무료"프라임은 없습니다.
- 우리가해도 한 카운터에 대한 무료 소수를 가지고, 우리는 정말 모든 지수 값 무한히 많은 소수에서 필요한 정보를 추출 할 수있는 방법이 없습니다 할 문제입니다.
따라서 Ibarra와 Trân ( 무료 다운로드 버전 )이 링크 한 논문 에서 일반적인 방법의 요지에 대한 설명으로 2CA 가 특정 문제 를 해결할 수 없음 을 증명하는 방법과 우리의 문제 가 어떻게 성가 신지에 대해 설명하겠습니다. 케이스.
먼저, 2CA는 모든 "CA"를 "정상적인 형태"로 수정합니다. 두 카운터는 "상"으로 바뀌면서 하나만 증가하고 다른 하나는 0에 도달 할 때까지 감소합니다. 국가의 수는 이 정상화 자동 장치는 추정에 중요한 역할을의.s
그런 다음이 오토 마톤을 분석하여 동작이 연결된 특정 숫자의 산술 시퀀스를 구성 할 수 있다고 결론을 내립니다. 정확하게하기 위해 (이 중 일부는 이론으로 언급되어 있지 않지만, 두 가지 주요 예 모두에 대한 증거로 암시되어 있음) :
- 다수의 X는 사이즈없이 오토 마톤에 의해 수락되면 위상의 시작에서 제로 카운터 어느 것 다음 존재 정수 이되도록 모든 숫자 , 이 허용됩니다.vxii ≤sD>0x+nDn≥0
세트 에 각 에 대해 허용되는 숫자 가 포함되어 있다면, 와 같은 위상 가 있으면 및 정수를 찾을 수 있습니다 와 같은Xs2+1x∈Xivxi≤sp,r∈XK1,K2
- 모든 정수 에 대해 및 가 모두 자동 장치에 의해 수락되거나 거부됩니다.n≥0p+nK1r+nK2
(생각 :
- 그들은 필요 를 위해 하지만이 실제로 필요하다고 생각합니다. 실제로 그들은 받아 들여진다.x>sx∈X
- 거부가 비 종료보다는 명시 적으로 중단되는 한 대부분의 경우 거부 된 숫자를 유지해야합니다 .)
그들 자신의 예를 위해 그들은 또한 에는 주요 인자 가 없다는 사실을 자주 사용합니다 . 불가능을 증명하기 위해, 그들은 그러한 산술적 순서가 존재할 수 없다는 것을 보여줌으로써 모순을 이끌어냅니다.D,K1,K2>s
우리의 문제에서, 이것으로부터 모순을 얻는 것은 두 번째 경우로 분류됩니다. 우리가있는 경우 , 것이 큰 충분히 더 사이의 수 및 하나로 나누어 없다 또는 다음과 같은 사이의 2의 거듭 제곱 또는 3가 없을 것 과 이므로 둘 다 수락되거나 거부됩니다.K1=K2=6kkpr2k3kp+6knq+6kn
2와 3의 거듭 제곱은 대부분 점점 더 멀어 지므로 점 1은 여전히 불가능한 것으로 보입니다. 그리고 (나는 @MarzioDeBiasi에게 인수를 이메일로 보냈다) 인 경우 불가능한 두 번째 사례를 보여줄 수 있다고 생각 합니다. 아마도 누군가가이 정보를 사용하여 오토 마톤의 형태를 더욱 제한하고 결국 그와 모순을 이끌어 낼 수있을 것입니다.K1≠K2