**ทฤษฎีบทเวียนบังเกิดของคลีน** (อังกฤษ: Kleene's recursion theorem) ในทฤษฎีการคำนวณได้ เป็นทฤษฎีบทเกี่ยวกับการมีอยู่ของฟังก์ชันคำนวณได้ที่ใช้คำบรรยายตัวเองในการคำนวณผลลัพธ์ สตีเฟน คลีน เป็นผู้พิสูจน์ทฤษฎีบทนี้ในปี ค.ศ. 1938 โดยมีเนื้อหาดังต่อไปนี้

> 
> ให้ {\displaystyle t:\Sigma ^{\*}\times \Sigma ^{\*}\rightarrow \Sigma ^{\*}} เป็นฟังก์ชันคำนวณได้ใดๆ แล้ว จะมีเครื่องจักรทัวริง {\displaystyle R\,} ที่เมื่อรับ {\displaystyle w\,} เป็นข้อมูลเข้า แล้วจะคำนวณ {\displaystyle t(\langle R\rangle ,w)} เมื่อ {\displaystyle \langle R\rangle } คือคำบรรยายของ {\displaystyle R\,} เอง
> 
> 
> 

กล่าวคือ สำหรับฟังก์ชันคำนวณได้ที่มีข้อมูลเข้าสองตัวใดๆ จะมีฟังก์ชันคำนวณได้อีกฟังก์ชันหนึ่งที่ใช้ตัวเองเป็นข้อมูลเข้าตัวแรกโดยไม่ต้องอ่านข้อมูลจากภายนอก ตัวอย่างเช่น ถ้า {\displaystyle t(x,y)=x} เครื่องจักรทัวริง {\displaystyle R} ให้คำบรรยายตัวเองออกมาเป็นผลลัพธ์ โปรแกรมคอมพิวเตอร์ที่ทำงานเหมือนกับ {\displaystyle R} จะพิมพ์ซอร์สโค้ดของตัวเองออกมา เราเรียกโปรแกรมประเภทนี้ว่าไควน์

การพิสูจน์
----------

เราเริ่มต้นโดยการพิสูจน์บทตั้งต่อไปนี้

> 
> มีฟังก็ชันคำนวณได้ {\displaystyle q:\Sigma ^{\*}\times \Sigma ^{\*}\rightarrow \Sigma ^{\*}} ที่ สำหรับสายอักษร {\displaystyle w\,} ใดๆ {\displaystyle q(w)\,} เป็นคำบรรยายเครื่องจักรทัวริง {\displaystyle P\_{w}\,} ที่รับข้อมูลเข้า {\displaystyle x\,} และพิมพ์ผลลัพธ์ {\displaystyle (w,x)\,}
> 
> 
> 

โดยแสดงเครื่องจักรทัวริงที่คำนวณ {\displaystyle q} เครื่องจักรทัวริงนั้นอาจนิยามได้ดังต่อไปนี้

```
{\displaystyle Q} = "เมื่อได้รับข้อมูลเข้า {\displaystyle w}
    1. สร้างเครื่องจักรทัวริง {\displaystyle P\_{w}} ดังต่อไปนี้
       {\displaystyle P\_{w}} = "เมื่อได้รับข้อมูลเข้า {\displaystyle x}
            1. เลื่อน {\displaystyle x} ให้มีช่องว่างจากต้นเทปพอที่จะเขียน {\displaystyle w} และเครื่องหมาย "เว้นวรรค"
            2. พิมพ์ {\displaystyle w} ลงบนเทป
            3. หยุดการทำงาน"
    2. พิมพ์ {\displaystyle \langle P\_{w}\rangle }"
```

สำหรับการสร้างเครื่องจักรทัวริง {\displaystyle R} ในทฤษฎีบทนั้น เราแบ่ง {\displaystyle R} ออกเป็นเครื่องจักรทัวริงย่อยๆ สามเครื่อง ได้แก่ {\displaystyle A}, B, และ {\displaystyle T} โดยที่ {\displaystyle T} เป็นเครื่องจักรทัวริงหนึ่งที่คำนวณ {\displaystyle t} โดยเครื่องจักรทั้งสามเครื่องมีลำดับการทำงานคือ {\displaystyle A} ทำงานจนเสร็จสิ้นแล้ว B จึงเริ่มทำงาน และเมื่อ B ทำงานเสร็จสิ้นแล้ว {\displaystyle T} จึงเริ่มทำงาน

เครื่องจักร B มีนิยามดังต่อไปนี้

```
B = "เมื่อได้รับข้อมูลเข้า {\displaystyle (\langle M\rangle ,x)} เมื่อ {\displaystyle \langle M\rangle } เป็นคำอธิบายเครื่องจักรทัวริง {\displaystyle M}
    1. คำนวณ {\displaystyle q(\langle M\rangle )} โดยใช้บทตั้งข้างต้น
    2. ต่อเติมคำอธิบายเครื่องจักร {\displaystyle M} ให้เป็นเครื่องจักร {\displaystyle N} ที่ใช้ {\displaystyle q(\langle M\rangle )} ทำงานก่อน
       แล้วจึงใช้ {\displaystyle M} ทำงานตาม
    3. พิมพ์ {\displaystyle (N,x)} ลงบนเทป"
```

ส่วนเครื่องจักร {\displaystyle A} คือเครื่องจักรที่ได้จากการคำนวณ {\displaystyle q(\langle BT\rangle )} เมื่อ {\displaystyle \langle BT\rangle } คือคำบรรยายเครื่องจักรที่ใช้ B ทำงานก่อนตามด้วย {\displaystyle T}

สังเกตว่าเครื่องจักร {\displaystyle R} ตามที่ได้นิยามข้างต้นเป็นเครื่องจักรทัวริงที่สอดคล้องกับทฤษฎีบท กล่าวคือ {\displaystyle A=P\_{\langle BT\rangle }} เป็นเครื่องจักรที่พิมพ์คำบรรยายของ {\displaystyle BT} ดังนั้นเมื่อนำคำบรรยายนี้ไปผนวกกับ {\displaystyle q(\langle BT\rangle )=A} ก็จะใช้เครื่องจักร {\displaystyle ABT} ซึ่งก็คือตัว {\displaystyle R} นั่นเอง ฉะนั้นผลลัพธ์ของ B คือ {\displaystyle (\langle R\rangle ,x)} และ {\displaystyle T} ก็จะคำนวณ {\displaystyle t(\langle R\rangle ,x)} ตามที่เราต้องการ

ประโยชน์
--------

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

สมมติเพื่อข้อขัดแย้งว่ามีเครื่องจักรทัวริง {\displaystyle H} ที่แก้ปัญหาการหยุดทำงาน พิจารณาเครื่องจักร {\displaystyle M} ดังต่อไปนี้

```
{\displaystyle M} = "เมื่อได้รับอินพุต {\displaystyle x}
    1. หาค่า {\displaystyle \langle M\rangle } โดยใช้ทฤษฎีบทเวียนบังเกิดของคลีน
    2. ให้ {\displaystyle H} ทำงานบนข้อมูลเข้า {\displaystyle (\langle M\rangle ,x)}
    3. ถ้า {\displaystyle H} บอกว่า "หยุดทำงาน" ให้เข้าลูปอนันต์
       ถ้า {\displaystyle H} บอกว่า "ไม่หยุดทำงาน" ให้หยุดทำงาน
```

เนื่องจาก {\displaystyle M} ทำงานตรงกันข้ามกับการวินิจฉัยของ {\displaystyle H} เราจึงได้ข้อขัดแย้งและสรุปได้ว่า {\displaystyle H} ไม่มีอยู่จริง

ข้อความอื่นๆ ที่สามารถพิสูจน์ได้ด้วยทฤษฎีบทเวียนบังเกิดของคลีน เช่น

* ฟังก์ชันบีเวอร์คนขยันไม่ใช่ฟังก์ชันคำนวณได้
* ไม่มีเครื่องจักรทัวริงใดทีสามารถ่คำนวณเครื่องจักรทัวริงที่มีขนาดของคำบรรยายสั้นที่สุดที่ำสมมูลกับเครื่องจักรทัวริงที่ให้เป็นข้อมูลเข้าได้
* สำหรับฟังก์ชันคำนวณได้ {\displaystyle t:\Sigma ^{\*}\rightarrow \Sigma ^{\*}} ใดๆ ที่ทำการ "ดัดแปลง" เครื่องจักรทัวริงที่ได้รับเป็นข้อมูลเข้า จะมีเครื่องจักรทัวริง {\displaystyle F} ที่ {\displaystyle t(\langle F\rangle )} สมมูลกับ {\displaystyle F}

อ้างอิง
-------


* Kleene, Stephen, "On notation for ordinal numbers," *The Journal of Symbolic Logic,* **3** (1938), 150-155.
* Sipser, Michael. *Introduction to the Theory of Computation.* Boston: PWS, 1997.