รูปแบบการคำนวณแบบใดที่สามารถแสดงผ่านไวยากรณ์ได้


18

นี่คือการปรับรูปแบบของโปรแกรมไวยากรณ์หรือไม่ หน้าที่แล้วถามโดยVagและคำแนะนำมากมายจากผู้แสดงความคิดเห็น

ไวยากรณ์สามารถมองว่าเป็นการระบุรูปแบบการคำนวณได้อย่างไร ตัวอย่างเช่นถ้าเราใช้ไวยากรณ์ที่ไม่มีบริบทอย่างเช่น

G ::= '1' -> '0' '+' '1'
      '1' -> '1' '+' '0'
      '2' -> '2' '+' '0'
      '2' -> '1' '+' '1'
      '2' -> '0' '+' '2'
      '3' -> '3' '+' '0'
      '3' -> '2' '+' '1'
      '3' -> '1' '+' '2'
      '3' -> '1' '+' '2'

สมมติว่า parser ไม่แยกความแตกต่างระหว่างสัญลักษณ์เทอร์มินัลและไม่ใช่เทอร์มินัลตามที่ฉันได้แสดงไว้ที่นี่จากนั้นก็เป็นไปได้ที่จะดำเนินการทางคณิตศาสตร์อย่างง่ายสำหรับตัวเลขสูงสุด 3

ตัวอย่างเช่นใช้สตริง

"2 + 0 + 1"

การรันตัวแยกวิเคราะห์ LR (1) บนสตริงนี้ควรให้โครงสร้างไวยากรณ์ที่เป็นรูปธรรมต่อไปนี้แก่เราซึ่งผลลัพธ์ของการคำนวณถูกเก็บไว้ที่รากของต้นไม้:

           '3'
         /  |  \
        /   |   \
      '2'  '+'  '1'
     / | \
    /  |  \
  '2' '+' '0' 

ดังนั้นถ้าเราใช้ไวยากรณ์เป็นโปรแกรมและตัวแยกวิเคราะห์เป็นคอมไพเลอร์เราจะเห็นภาษาสเปคไวยากรณ์เป็นภาษาโปรแกรมหรือไม่?

นอกจากนี้เราสามารถสร้างโปรแกรมทัวริงที่สมบูรณ์โดยการระบุไวยากรณ์คล้ายกับวิธีที่คุณสามารถสร้างโปรแกรมทัวริงที่สมบูรณ์ด้วยcelullar automataหรือlambda แคลคูลัสได้ไหม

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

นอกจากนี้วิธีการเกี่ยวกับคลาสย่อยที่รู้จักกันน้อยของไวยากรณ์เช่น

แก้ไข:โดยวิธีนี้เป็น nitpick ในคำถามของฉันเอง แต่ฉันไม่ได้พูดถึงว่าฉันไม่ได้ให้สัญลักษณ์เริ่มต้นสำหรับตัวอย่างไวยากรณ์และโบกมือที่ต้องการแยกแยะระหว่างเทอร์มินัลและ nonterminals ในทางเทคนิคหรือตามเนื้อผ้าฉันคิดว่าไวยากรณ์อาจจะต้องถูกเขียนในรูปแบบที่ซับซ้อนมากขึ้นเช่นนี้ (โดยที่ S เป็นสัญลักษณ์เริ่มต้นและ$แสดงถึงเทอร์มินัลสิ้นสุดการสตรีม):

G ::= S -> R0 '$'
      S -> R1 '$'
      S -> R2 '$'
      R0 -> '0'
      R0 -> R0 '+' '0'
      R1 -> '1'
      R1 -> R0 '+' '1'
      R1 -> '1' '+' R0
      R1 -> R0 '+' '1' '+' R0
      R2 -> '2'
      R2 -> R0 '+' '2'
      R2 -> '2' '+' R0
      R2 -> R0 '+' '2' '+' R0
      R2 -> R1 '+' '1'
      R2 -> R1 '+' '1' '+' R0

... ไม่ใช่ว่ามันจะเปลี่ยนแปลงอะไรจริงๆ แต่ฉันคิดว่าฉันควรพูดถึงมัน

แก้ไข:สิ่งอื่นที่อยู่ในใจเมื่อฉันอ่านคำตอบของแก๊ซคือแต่ละสาขาในต้นไม้ในตัวอย่างของฉันแสดงถึงการคำนวณย่อย หากคุณดูกฎการผลิตแต่ละรายการเป็นฟังก์ชั่นที่ LHS แสดงผลลัพธ์และ RHS แสดงถึงอาร์กิวเมนต์ของมันดังนั้นโครงสร้างของไวยากรณ์จะเป็นตัวกำหนดวิธีที่ฟังก์ชั่นประกอบด้วย

กล่าวอีกนัยหนึ่งบริบทของ parser ร่วมกับกลไก lookahead ช่วยในการพิจารณาไม่เพียง แต่ฟังก์ชันที่จะใช้ ('kinda' เช่น parametric polymorphism) แต่ควรรวมเข้าด้วยกันเพื่อสร้างฟังก์ชันใหม่

อย่างน้อยฉันก็คิดว่าคุณสามารถดูได้ด้วยวิธีนี้สำหรับ CFG ที่ไม่คลุมเครือสำหรับไวยากรณ์อื่น ๆ ยิมนาสติกยิมนาสติกเป็นเรื่องเล็กน้อยสำหรับฉันในตอนนี้


3
คุณลืมที่จะพูดถึง Visumer Pushdown Automaton (Nested Words) ซึ่งเป็นอุปกรณ์ที่น่ารักและมีแนวโน้ม! มันเป็นสิ่งสำคัญเพราะดูเหมือนว่าจะมีการปรับปรุงน้อยกว่า regexps เพื่อให้สามารถวิเคราะห์โปรแกรมที่เขียนด้วยภาษาโปรแกรมที่เป็นที่นิยม ( cis.upenn.edu/~alur/nw.html )
Vag

1
ขอบคุณที่น่าสนใจมากฉันไม่ได้เงยหน้าขึ้น! มีคนอื่นอีกสองสามคนที่ฉันข้ามไปอย่างไม่ จำกัด บริบทติดกับต้นไม้จัดทำดัชนีและอื่น ๆ ฉันแค่คิดว่ามันอาจจะมากไปหน่อยสำหรับคำถามหนึ่ง ... แต่บางทีฉันอาจจะเพิ่มพวกเขา
Rehno Lindeque

1
@imz ฉันหมายถึงไวยากรณ์ตามที่กำหนดไว้อย่างเป็นทางการในลำดับชั้นของ chomsky (Ie เป็นชุดโปรดักชั่น) เนื่องจากฉันอ้างสิ่งที่คุณพูดอย่างแท้จริง: แกรมม่านั้นเป็นโปรแกรมมันก็หมายถึงคลาสของโปรแกรมที่สามารถใช้แทนแกรมม่าได้ (ซึ่งเป็นคำถาม)
Rehno Lindeque

1
@imz ตามจริงแล้วฉันไม่คุ้นเคยกับไวยากรณ์ที่จัดทำดัชนีฉันแค่เพิ่มพวกเขาเป็นความคิด
Rehno Lindeque

1
ฉันเริ่มคิดว่ามันอาจเป็นความคิดที่ดีที่จะโพสต์คำถามนี้ในฟอรัม LtU แทนที่จะดูการอภิปรายที่ยอดเยี่ยม: P Btw @imz อาจเป็นการดีที่สุดที่จะอ่านคำถามว่า "คลาสของไวยากรณ์ใดที่ตรงกับคลาสของโปรแกรมในแง่ 'หน้าที่' ที่อธิบายโดย Jukka ในคำตอบของ Marc Hamman" บางทีฉันควรทำให้เรื่องนี้ชัดเจนยิ่งขึ้น ...
เรนโน Lindeque

คำตอบ:


10

มีการติดต่อแบบตัวต่อตัวระหว่างGrammars Chomsky Type-0และเครื่องจักรทัวริง

สิ่งนี้ถูกเอาเปรียบในภาษาการเขียนโปรแกรม Thueซึ่งอนุญาตให้คุณเขียนโปรแกรมทัวริงสมบูรณ์ที่ระบุโดยสตริงเริ่มต้นและชุดของกฎการเขียนสตริงใหม่ ( ไวยากรณ์กึ่งภาษาอังกฤษซึ่งเทียบเท่ากับไวยากรณ์ type-0)

UPDATE:

นอกเหนือจากภาษา "ทัวริงทาร์ต" ที่มีความลึกลับอย่างเช่น Thue ภาษาที่ใช้งานทั่วไปที่อนุญาตให้โปรแกรมเมอร์ขยายไวยากรณ์ของตัวเองสามารถใช้เพื่อทำการคำนวณทัวริงที่สมบูรณ์ในระหว่างขั้นตอนการแยกวิเคราะห์

ภาษาในการเสียงกระเพื่อมในครอบครัวโดยเฉพาะอย่างยิ่งธรรมดาชัด , อาจจะเป็นตัวอย่างที่เห็นได้ชัดมากที่สุด แต่ยังพูดในวงกว้างภาษาที่มีการตรวจสอบประเภทคงที่ไม่จำเป็นต้องเสมอต้องหยุดชะงักเช่นC ++ กับแม่แบบ , Scalaและฉี


แต่คำถามเกี่ยวกับสิ่งต่าง ๆ ที่ทำงานในทางกลับกัน: เราควรจะบรรลุผลไม่ใช่โดยการเขียนลำดับของสัญลักษณ์ตามกฎเบื้องต้น แต่ "ผลลัพธ์" ของการคำนวณที่กำหนดโดยไวยากรณ์ในคำถามนี้คือการเริ่มต้น สัญลักษณ์ที่สามารถสร้างลำดับ "อินพุต" ตามกฎของไวยากรณ์
imz - Ivan Zakharyaschev

2
โอnaเสื้อ(Qยูโอเสื้ออี(ผมn),โอยูเสื้อ)TM(ผมn)=โอยูเสื้อ

ฉันยอมรับว่าการโต้ตอบระหว่าง Type0 grammars และ TM เป็นคำตอบที่ถูกต้องสำหรับคำถาม (โดยเฉพาะถ้า จำกัด การคำนวณใช่ / ไม่ใช่ฟังก์ชั่น) ข้อเสนอแนะเพิ่มเติมในการสร้างแบบจำลอง TM แบบมีกฎเกณฑ์ด้วยการแนะนำวิธีการแสดงคู่อินพุต - เอาท์พุตดูเหมือนว่าฉันจะไม่ตรงกับความสนใจที่ตั้งใจไว้ของคำถามดั้งเดิม: (จะต่อ)
imz - Ivan Zakharyaschev

ฉันเข้าใจว่าเป็นคำถามสำหรับการใช้ประโยชน์จากกรอบไวยากรณ์ที่มีอยู่และ parsers ที่สอดคล้องกันสำหรับการคำนวณเช่นรูปแบบที่ได้รับอนุญาตของการแปลระหว่างฟังก์ชั่น f และไวยากรณ์สามารถเป็นได้เท่านั้น: อินพุตที่ฉันถูกวิเคราะห์คำด้วย S ฉัน) = S
imz - Ivan Zakharyaschev

1
เผินๆภาษาโปรแกรมของพวกเขาดูเหมือนจะไม่ใช้กรอบไวยากรณ์ประเภทนี้: แม้ว่ามันจะมีกฎการเขียนใหม่เหมือนไวยากรณ์การคำนวณผลลัพธ์จากอินพุตจะไปในทิศทางของกฎไม่ใช่ในสิ่งที่ตรงกันข้าม ทิศทางตามที่ Rehno ต้องการ (แต่อาจเป็นเพียงเรื่องของการเปลี่ยนทิศทางของลูกศรในโปรดักชั่น: การแปลไวยากรณ์ "การคำนวณเป็น parser" ในแง่ของ Q นี้เป็น Thue เท่านั้นที่สามารถเปลี่ยนทิศทางของกฎแล้วโปรแกรม Thue จะมาถึงสัญลักษณ์เริ่มต้นตามผลลัพธ์จริง ๆ ใช่มั้ย .. )
imz - Ivan Zakharyaschev

6

คำตอบของฉันไม่ได้ตั้งใจที่จะเป็นทางการแม่นยำและแน่นอนในหัวข้อ ฉันคิดว่าคำตอบของ Marc Hamman นั้นมั่นคงดี แต่คำถามของคุณทำให้ฉันคิดถึงหัวข้อที่เกี่ยวข้อง

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

ในแง่นั้นคำถามของคุณอาจเกี่ยวข้องกับวิธีการบางส่วนของชุมชนการเขียนโปรแกรมเชิงตรรกะ / การพิสูจน์หลักฐาน (ฉันกำลังคิดถึงDale Millerเป็นต้น) ซึ่งเป็นการค้นหาหลักฐานที่มีเนื้อหาในการคำนวณซึ่งตรงข้ามกับความคลาสสิคมากกว่า ประเภท / จุดพิสูจน์ทฤษฎีของมุมมองที่คำนวณเป็นหลักฐานการฟื้นฟู

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


ข้อสังเกตที่น่าสนใจมากว่า สมองของฉันเป็นบิตเหนื่อยเกินไปที่จะให้การตอบสนองที่ดีในขณะนี้ แต่ในตัวอย่างของฉันสาขาของต้นไม้เป็นหลักแทนย่อยคำนวณที่ประกอบด้วยกันตามกฎแยก ...
Rehno Lindeque

6

นอกจากนี้เราสามารถสร้างโปรแกรมทัวริงที่สมบูรณ์โดยการระบุไวยากรณ์ ... ?

ฉันไม่แน่ใจว่าฉันเข้าใจคำถามของคุณถูกต้องหรือไม่ แต่ถ้าคุณกำลังมองหาภาษาการเขียนโปรแกรมที่อิงกับระบบการเขียนสตริงใหม่คุณอาจจะต้องถูกขัดจังหวะในRefalซึ่งเป็นพื้นฐานของระเบียบวิธีมาร์คอฟ (turing- ซึ่งเป็นระบบการเขียนสตริงเหมือนไวยากรณ์)


1
ฉันเข้าใจคำถามในวิธีต่อไปนี้: Rehno สนใจกระบวนการแยกวิเคราะห์ bootom-up (ถูกกำหนดโดยไวยากรณ์) เพื่อที่จะถูกมองเป็นการคำนวณผล การคำนวณควรสร้างผลลัพธ์จากชิ้นส่วนที่ไปในทิศทางตรงกันข้ามกับกฎการผลิตของไวยากรณ์ กฎการเขียนซ้ำของ Refal (IIUC คล้ายกับภาษาการเขียนโปรแกรมของ Thue ที่กล่าวถึงข้างต้น) จะไปในทิศทางอื่น (จากอินพุตไปจนถึงผลลัพธ์)
imz - Ivan Zakharyaschev

ตอนนี้ที่ฉันคิดเกี่ยวกับมันแม้ว่าไวยากรณ์ไวตามบริบทมีมากกว่าหนึ่งสัญลักษณ์ใน LHS ของกฎการผลิต ดังนั้นฉันคิดว่ามันไม่มีความแตกต่างในทางปฏิบัติที่แท้จริง โปรแกรมแยกวิเคราะห์สำหรับภาษาที่คำนึงถึงบริบทจะเป็นระบบการเขียนสตริงใหม่ไม่ว่าคุณจะมองว่าถูกต้องหรือไม่?
Rehno Lindeque

@imz ขอบคุณสำหรับคำชี้แจงเกี่ยวกับคำถามของ Rehno @ Rehno“ ตัวแยกวิเคราะห์สำหรับภาษาที่คำนึงถึงบริบทจะเป็นระบบการเขียนสตริงไม่ว่าคุณจะมองว่าถูกต้องหรือไม่” - มันอาจจะสมเหตุสมผลใช่ไหม
Artem Pelenitsyn

แต่กฎการเขียนซ้ำของ Refal นั้นได้รับการปฏิบัติที่ไม่เป็นการกำหนดหรือไม่ (หรือใส่ที่แตกต่าง: Refal จะทำการย้อนรอยในการค้นหาเส้นทางการเขียนใหม่ที่ใช้งานได้หรือไม่) ถ้าเราต้องการสร้างแบบจำลอง "การแยกวิเคราะห์เป็นวิธีการคำนวณ" ด้วยวิธีการเขียนกฎใหม่ในทิศทางตรงกันข้ามเราต้องการกฎที่ไม่กำหนด S -> A a; S -> B b; A -> 0; B -> 0พิจารณาไวยากรณ์เช่น ถ้าเราเขียนโปรแกรมนี้โดยการย้อนกลับของกฎที่เราจะต้องเลือกกฎที่แตกต่างสำหรับการประมวลผล0ในเวลาทำงานเพื่อประเมิน "0a" หรือ "0B" Sเพื่อ
imz - Ivan Zakharyaschev

6

(เพียงแค่ข้อควรพิจารณาเล็กน้อยอาจเป็นความเห็น แต่ยาวเกินไป)

ในความเป็นจริงสิ่งที่คุณอธิบายมีผลบังคับใช้เป็นมุมมองที่เป็นธรรมชาติมากต่อสิ่งที่ภาษานั้น (ในความเข้าใจของมนุษย์เกี่ยวกับ "ภาษา" วัตถุประสงค์ของมัน) และวิธีการที่ไวยากรณ์กำหนดภาษา

ประกอบด้วยภาษา (หลายอนันต์) ที่ถูกต้องในรูปแบบประโยคที่มีการตีความเพื่อให้ค่าความหมาย

หากการตีความนั้นสามารถคำนวณได้รูปแบบไวยากรณ์ของภาษานั้นสามารถดูได้เป็นโปรแกรมที่คำนวณค่าความหมาย

หากเราสมมติว่ามีการใช้ภาษาในฐานะอุปกรณ์ จำกัด เราสามารถเรียกการแทนค่า จำกัด นี้ของภาษาว่า "ไวยากรณ์" จากความเข้าใจนี้ไวยากรณ์เกี่ยวกับวากยสัมพันธ์ แต่ยังเกี่ยวกับความหมายคือทำอย่างไรจึงจะคำนวณค่าความหมายของนิพจน์ทั้งหมดจากค่าของส่วนต่าง ๆ (ส่วนอะตอมและค่าจะถูกเก็บไว้ใน "พจนานุกรม") .

บางทฤษฎีของภาษาธรรมชาติมีรูปแบบดังกล่าว (รูปแบบที่สอดคล้องกับการพิจารณาข้างต้นนั้นได้ถูกกล่าวถึงแล้วในคำตอบของ @ gasche ที่นี่): ระบบนิรนัยที่ค้นหาการสืบทอดของอินพุต (ควบคู่กับการคำนวณความหมาย ค่าหรือการสร้างคำศัพท์หลักฐาน cf. การติดต่อกับ Curry-Horward) ดังนั้นหากเราดูระบบเช่นนั้นและพิจารณาไวยากรณ์พวกเขาคำถามของคุณก็เล็กน้อย : ระบบเหล่านี้ถูกออกแบบมาเพื่อทำการคำนวณในลักษณะที่คุณอธิบาย

Gผม (ผม)=SผมSG

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


4

เพียงเพิ่ม:

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

มุมมองทางไวยากรณ์ของการเขียนโปรแกรมลอจิกโดย Pierre Deransart และ Jan Maluszynski


เห็นได้ชัดว่า Prolog เกิดขึ้นจากไวยากรณ์ของคุณลักษณะดังนั้นมุมมองนี้คือสิ่งที่การเขียนโปรแกรมตรรกะเริ่มต้น
reinierpost

1

สิ่งที่เกี่ยวกับบางอย่างเช่นหมายเลข Peano:

S    -> int
int  -> zero
int  -> succ
zero -> "0"
succ -> "#" int

มันจะรับรู้สตริง (จำนวน) ของรูปแบบนี้:

0   // zero
#0  // one
##0 // two

และมันควรจะคืนโครงสร้างที่ซ้อนกันโดยความลึกจะเป็นตัวเลข

แต่มันก็เริ่มมีความซับซ้อนเมื่อเราต้องการที่จะใช้เพียงแค่เพิ่ม:

S    -> int
int  -> sum
int  -> zero
int  -> succ
zero -> "0"
succ -> "#" int
sum  -> int "+" int

มันสมเหตุสมผลอย่างสมบูรณ์ในการที่จะรับรู้ ints ที่เกิดขึ้นเป็นอย่างดีเช่นนี้:

#####0 + ####0

แต่ไวยากรณ์นี้จะแนะนำการแยกในแผนภูมิแยกเมื่อใดก็ตามที่มีผลรวมดังนั้นแทนที่จะมีต้นไม้หนึ่งกิ่งที่ดีที่แมปโดยตรงกับตัวเลขเรามีโครงสร้างของการแสดงออกซึ่งยังคงมีการคำนวณเพียงเล็กน้อยจากประสิทธิภาพ ราคา. ดังนั้นไม่มีการคำนวณเสร็จสิ้นการรับรู้เท่านั้น ปัญหาอาจไม่ใช่ไวยากรณ์ แต่เป็น parser เราอาจใช้อย่างอื่นแทน idk ... อีกประเด็นหนึ่งที่อยู่ในใจก็คือความเพียงพอของพิธีการทางไวยากรณ์เพื่อแสดงการคำนวณ เมื่อคุณมองสัจพจน์ของ Peano (ในรูปแบบของ Haskell):

1) Nat = Zero
2) Nat = Succ Nat
3) Sum ( Succ X ) ( Y ) = Succ ( X + Y )
4) Sum Zero X = X

กฎข้อที่สามระบุการเปลี่ยนแปลงอย่างชัดเจน ทุกคนสามารถจินตนาการให้มีความหมายในปริมาณเท่ากันในกฎไวยากรณ์ที่ไม่มีบริบท และถ้าเป็นเช่นนั้นได้อย่างไร!

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