คาดคะเนออโตมาโต้ประมาณสองตัว


19

ฉันต้องการพิสูจน์ (หรือหักล้าง) การคาดเดาต่อไปนี้:

การคาดเดา : สองตัวนับอัตโนมัติ (2CA) ไม่สามารถตัดสินใจภาษาต่อไปนี้:

L={nประกอบไปด้วยไตรภาคและเลขฐานสองของnมีทั้งความยาวหรือความยาวคี่}

2CA สามารถตรวจสอบได้อย่างง่ายดายว่าการแสดงแบบไบนารี่นั้นมีความยาวเท่ากันหรือคี่ (เพียงแค่ทำการหารด้วยสองและอัปเดตการตั้งค่าสถานะ "แม้ความยาว" หลังจากแต่ละส่วน); ในลักษณะเดียวกันมันสามารถตรวจสอบว่าการเป็นตัวแทนสามส่วนนั้นมีความยาวเท่ากันหรือคี่ (เพียงแค่ทำการหารด้วยสามและอัปเดตธง "คู่ความยาว" หลังจากแต่ละส่วน)

แต่เพื่อที่จะคำนวณหนึ่งของพวกเขานั้นจะต้องทำลายอินพุตของมันและไม่สามารถกู้คืนเพื่อคำนวณอื่น ๆ ; เพื่อให้ดูเหมือนว่ามีวิธีการที่จะตัดสินใจไม่มีLL

คุณรู้เทคนิคที่สามารถใช้ในการพิสูจน์การคาดเดาได้หรือไม่?
หรือคุณสามารถพิสูจน์หักล้างการสร้าง 2CA ที่ตัดสินใจ ? L

ฉันลองใช้วิธีเดียวกันตามด้วย Ibarra เพื่อพิสูจน์ว่า2CA ไม่สามารถตัดสินใจ{n2n1}แต่ดูเหมือนจะไม่ใช่วิธีที่ถูกต้อง

หมายเหตุ : เพื่อความเรียบง่าย 2CA นั้นเทียบเท่ากับโปรแกรมที่มีตัวแปรหนึ่งตัว ซึ่งเริ่มต้นด้วยอินพุตและชุดคำสั่งต่อไปนี้:c

  • INC : เพิ่มหนึ่งตัวแปร
  • DEC : ลดค่า (เฉพาะในกรณีที่มากกว่าศูนย์);c
  • JZ lab : ถ้าเป็นศูนย์ข้ามไปที่ป้ายมิฉะนั้นดำเนินการต่อ;l a bclab
  • MULK : คูณด้วยตัวแปล ;เคcK
  • DIVK[,lab0,lab1,...,labK1] : หารด้วยค่าคงที่และเก็บผลหารกับ ( ); อาจข้ามไปยังป้ายกำกับต่าง ๆ ตามส่วนที่เหลือ ( );K c c = c / K c mod KcKcc=c/KcmodK
  • ห้องปฏิบัติการ GOTOlab : การกระโดดอย่างไม่มีเงื่อนไข
  • HALT ยอมรับ | ปฏิเสธ : หยุดและยอมรับหรือหยุดและปฏิเสธ

ตัวอย่างเช่นโปรแกรมเพื่อตรวจสอบว่าการแทนค่าฐานสองของnมีความยาวเท่ากันหรือไม่:

   loop: JZ even   // test if n = 0
         DIV 2
         JZ odd    // test if n = 0
         DIV 2
         GOTO loop
   even: HALT Accept
    odd: HALT Reject

(เราสามารถสร้าง 2CA ที่เทียบเท่ากันได้)


2
ฉันไม่รู้ว่าการพิสูจน์ที่เป็นไปไม่ได้เป็นไปอย่างไร แต่กรณี { ∣ การเป็นตัวแทนที่ประกอบไปด้วยมีความยาวแปลก ๆ }2 n2n2nเป็นแก้ปัญหาได้เพราะเมื่อใดก็ตามที่ป้อนข้อมูลของคุณได้รู้จักเพียงปัจจัยสำคัญคุณสามารถรักษาเลขชี้กำลังของคุณ (n ที่นี่ ) เป็นตัวนับในหุ่นยนต์จำลองที่มีตัวนับจำนวนมาก (จำลองตามช่วงเวลาพิเศษ) ตามที่คุณต้องการทัวริงจึงสมบูรณ์
Ørjan Johansen

2
ฉันส่งอีเมลถึงคุณ "รหัส" และยังใส่ไว้ในเว็บไซต์ของฉันในกรณีที่คนอื่นดูอยู่
Ørjan Johansen

1
@ โจโร่วิธีที่ฉันอธิบายมีข้อ จำกัด อย่างเข้มงวด: มันสามารถจัดการกับปัจจัยสำคัญเฉพาะจำนวนมากของอินพุต (ยกเว้นสำหรับการทดสอบว่าส่วนที่เหลือทั้งหมด 0 หรือไม่) ปัญหาคือว่าในปัญหาทั่วไปเลขยกกำลังของนายกทั้งหมดปัจจัยนับ จริงๆคุณสามารถคำนวณอย่างใดอย่างหนึ่งของคุณหรือคุณถึงความเท่าเทียมกัน แต่เท่าที่ผมรู้ว่าไม่มีทางที่จะเปรียบเทียบการป้อนข้อมูลทั่วไปที่จะไม่มีหรือโดยไม่ต้องทำลายมันในกระบวนการเพื่อให้คุณไม่สามารถทดสอบอื่น ๆหนึ่งหลังจากนั้น ลางสังหรณ์ของฉันตอนนี้คือปัญหาทั่วไปไม่สามารถแก้ไขได้ด้วย 2CA m 2 k 3 mkm2k3m
Ørjan Johansen

1
@ ØrjanJohansen: ฉันเห็นด้วยกับ vzn: ถ้าคุณต้องการคุณสามารถโพสต์คำตอบด้วยวิธีแก้ปัญหาที่ จำกัด ง่ายกว่า (คุ้มค่าเงิน :-) และสามารถช่วยเหลือผู้ที่ต้องการแก้ไขปัญหาดั้งเดิมได้อย่างรวดเร็ว) คุณยังสามารถทราบสั้น ๆว่าเหตุใดแนวทางของ Ibarra จึงล้มเหลวสำหรับปัญหาทั่วไปและสาเหตุที่วิธีแก้ปัญหาของเวอร์ชันที่ง่ายกว่านั้นล้มเหลวสำหรับรุ่นทั่วไป (คัดลอกความคิดเห็นไปที่ joro)
Marzio De Biasi

1
ขอบคุณ! ยอดเยี่ยม / หายากที่จะเห็นความสนใจ / กิจกรรมทั้งหมดในปัญหานี้ ไม่กี่เพิ่มเติมความคิดเห็น / คำถามเกี่ยวกับปัญหานี้
vzn

คำตอบ:


11

ดังนั้นผู้คนที่จู้จี้ฉันจะโพสต์สิ่งนี้ต่อไปแม้ว่ามันจะแก้ปัญหาเวอร์ชันง่าย เอาล่ะ :)

ในตอนท้ายของเรื่องนี้ฉันจะใส่บางสิ่งที่ฉันเรียนรู้จากกระดาษของ Ibarra และTrânและทำไมวิธีการดังกล่าวถึงปัญหาทั่วไปของเรา แต่อาจให้ข้อมูลที่เป็นประโยชน์บางอย่าง

แต่ก่อนอื่นเราจะมาดูปัญหาที่ง่ายขึ้นในการตัดสินใจเลือกชุด

การประกอบไปด้วยไตรภาคและไบนารีของ 2 nมีทั้งความยาวหรือความยาวคี่ }L={2n2n}

สังเกตว่ามันมีมากกว่าn2nnเหมือนในปัญหาดั้งเดิม โดยเฉพาะอย่างยิ่งหากหมายเลขอินพุตไม่ได้เป็นกำลัง 2 เราต้องการปฏิเสธมันแทนที่จะพยายามคำนวณความยาวของมันในฐานใด ๆ

นี้ง่ายมากเรื่อง: ถ้าจำนวนเดิมที่เขียนนายก factorized เป็นดังนั้นสำหรับทั้งหมดยกเว้น2v23v35v57v7...v 2 0viv2เราก็ต้องตรวจสอบว่าพวกเขาทั้งหมด00

สิ่งนี้ช่วยให้เราสามารถแก้ปัญหาที่ทำให้เข้าใจง่ายโดยใช้ wrapper รอบวิธีเก่า (โดย Minsky I สมมติ) ของการเข้ารหัสสถานะของ k -counter automaton ในเลขชี้กำลังของการแยกตัวประกอบเฉพาะของตัวแปรเดียวของการคูณ / หารอัตโนมัติ ซึ่งดังที่ได้กล่าวไว้ใน OP ข้างต้นนั้นค่อนข้างใกล้เคียงกับหุ่นยนต์ 2 ตัวนับ

อันดับแรกเราต้องมีหุ่นยนต์ -counter เพื่อห่อ เราจะใช้ 3 เคาน์เตอร์ชื่อ ,และv 2 v 3 v 5kv2v3v5 v_5

หุ่นยนต์จะยอมรับ iff สำหรับค่าตัวนับเริ่มต้นการแทนส่วนที่สามและไบนารีของมีทั้งความยาวเท่ากันหรือความยาวคี่และทั้งและเป็นศูนย์ เมื่อมันยอมรับมันจะเป็นศูนย์แรกที่เคาน์เตอร์ทั้งหมด v 3 v 52v2v3v5

นี่คือรหัสบางส่วนในรูปแบบชุดประกอบคล้ายกับ OP (ฉันเพิ่งเพิ่มตัวแปรให้คำแนะนำ) ฉันไม่ได้ทำการทดสอบจริง ๆ แล้วเนื่องจากฉันไม่มีอะไรให้รันด้วย แต่ฉันคิดว่านี่เป็นทางการ: ออโตมาตา 3 ตัวนับเป็นที่รู้กันดีว่าทัวริงสมบูรณ์และสามารถสร้างฟังก์ชันที่คำนวณได้ของหนึ่งในพวกเขา ค่าเริ่มต้น

// 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 vpMUL pจะกลายเป็น บุคคลJZและDECสามารถเปลี่ยนเป็นแบบรวมกันก่อน GOTO labelและHALT Rejectไม่เปลี่ยนแปลง

HALT Acceptจะไม่เปลี่ยนแปลงยกเว้นว่าในกรณีของเราเรายังคงมีหนึ่งตรวจสอบขั้นสุดท้ายที่จะทำเราต้องให้แน่ใจว่าจะไม่มีปัจจัยสำคัญในจำนวนอื่น ๆกว่า 2,3 และ 5 โดยเฉพาะอย่างยิ่งตั้งแต่ 3 เคาน์เตอร์ศูนย์หุ่นยนต์ของเรานับมัน ใช้เมื่อยอมรับนี่เป็นเรื่องง่ายเพียงแค่ทดสอบว่าตัวแปรสุดท้ายคือ 1 ซึ่งสามารถทำได้โดยการกระโดดไปที่รหัส

                DEC     // BTW it cannot be zero before this.
                JZ accept
                HALT Reject
accept:         HALT Accept

รหัสในเว็บไซต์ของฉันยังมี ตรวจสอบเบื้องต้นว่าหมายเลขนั้นไม่ใช่ศูนย์ซึ่งฉันเพิ่งรู้ว่าซ้ำซ้อนกับการตรวจสอบ v3, v5 ศูนย์เลยดี

ดังที่ได้กล่าวไปแล้ววิธีการข้างต้นใช้สำหรับปัญหาที่ทำให้ง่ายขึ้น แต่จริงๆแล้วมันไม่มีโอกาสที่จะทำงานให้กับคนทั่วไปเพราะในปัญหาทั่วไปค่าที่แม่นยำของจำนวนเอกซ์โปเนนเชียลทุกตัวของการตัดสินใจขนาดทั่วไป มีในฐานต่าง ๆ ซึ่งหมายความว่า:

  • เราไม่มีช่วงเวลา "ฟรี" ที่จะใช้สำหรับเคาน์เตอร์
  • แม้ว่าเราจะไม่ได้มีเฉพาะฟรีสำหรับเคาน์เตอร์เราไม่ได้จริงๆมีวิธีที่จะดึงข้อมูลที่จำเป็นทั้งหมดจากช่วงเวลาอื่น ๆ อีกมากมายที่มีค่าอนันต์ตัวแทนทำเรื่อง

ดังนั้นขอจบด้วยคำอธิบายเกี่ยวกับส่วนสำคัญของวิธีการทั่วไปจากบทความที่เชื่อมโยงข้างต้นโดย Ibarra และTrân ( เวอร์ชันที่ดาวน์โหลดได้ฟรี ) สำหรับวิธีการพิสูจน์ว่าปัญหาบางอย่างไม่สามารถแก้ไขได้ด้วย 2CA และวิธีการแบ่งย่อยของเราอย่างน่ารำคาญ กรณี.

sของหุ่นยนต์ปกตินี้มีบทบาทสำคัญในการประมาณการ

จากนั้นพวกเขาวิเคราะห์หุ่นยนต์นี้เพื่อสรุปว่าพวกเขาสามารถสร้างลำดับเลขคณิตบางอย่างของตัวเลขที่มีการเชื่อมโยงพฤติกรรม จะแม่นยำ (บางส่วนนี้ไม่ได้ระบุว่าเป็นทฤษฎีบท แต่เป็นนัยในการพิสูจน์ของทั้งสองตัวอย่างหลักของพวกเขา):

  1. vixi sD>0x+nDn0
  2. Xs2+1xXivixsp,rXK1,K2

    • n0p+nK1r+nK2

(ความคิด:

  • x>sxXแต่ฉันคิดว่านี่ไม่จำเป็นจริง ๆ จริง ๆ แล้วเป็นที่ยอมรับ
  • สิ่งเหล่านี้ส่วนใหญ่ควรมีไว้สำหรับตัวเลขที่ถูกปฏิเสธตราบใดที่การปฏิเสธนั้นเกิดจากการหยุดชะงักอย่างชัดเจนมากกว่าการไม่ทำการทำลาย)

D,K1,K2>s sเพื่อพิสูจน์ความเป็นไปไม่ได้จากนั้นพวกเขาได้รับความขัดแย้งโดยแสดงให้เห็นว่าลำดับเลขคณิตดังกล่าวไม่สามารถดำรงอยู่ได้

K1=K2=6kkpr2k3kp+6knq+6kn

K1K2


1
คำตอบที่ดีและชัดเจนมาก!
Marzio De Biasi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.