พื้นฐานทางทฤษฎีของการเขียนโปรแกรมที่จำเป็นคืออะไร?


48

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

มีพื้นฐานทางคณิตศาสตร์เทียบเท่าของการเขียนโปรแกรมที่จำเป็นหรือว่ามันเพิ่งเกิดจากการใช้งานฮาร์ดแวร์ที่ใช้งานได้จริงในภาษาเครื่องและการพัฒนาFORTRANในภายหลัง?

คำตอบ:


27

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

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

หากคุณใส่ใจในความถูกต้องโมเดลอื่น ๆ ก็ยังมีประโยชน์ ที่นี่คุณมีความหมายในการดำเนินงาน (ซึ่งผมว่าเป็นอะนาล็อกของแคลคูลัสแลมบ์ดาสำหรับการคำนวณ statefull) ให้ความหมายจริง (พัฒนาในปี 1969 โดยโฮร์ตั้งอยู่บนพื้นฐานของฟลอยด์ยืนยันอุปนัยจากปี 1967 ซึ่งได้รับความนิยมโดยนูในศิลปะของการเขียนโปรแกรมคอมพิวเตอร์ , เล่ม 1) และอื่น ๆ

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

ในที่สุดฉันขอพูดว่ามีหนังสือเล่มใหญ่ทางออนไลน์เกี่ยวกับModels of Computationโดย John Savage มันเกี่ยวกับประสิทธิภาพเป็นส่วนใหญ่ สำหรับส่วนของความถูกต้องผมขอแนะนำให้คุณเริ่มต้นด้วยเอกสารคลาสสิกของฟลอยด์ (1967) , โฮร์ (1969) , Dijkstra (1975)และPlotkin (1981) พวกเขาทั้งหมดค่อนข้างเย็น


4
ฉันคิดว่า Operational Semantics เป็นสิ่งที่โปสเตอร์ต้องการ ข้อมูลเพิ่มเติมเล็กน้อยเกี่ยวกับวิกิพีเดีย: en.wikipedia.org/wiki/Operational_semantics
sclv

22

แบบจำลองเชิงทฤษฎีที่ง่ายที่สุดของโปรแกรมจำเป็นคือเครื่องทัวริง มันมีทั้งองค์ประกอบที่สำคัญของโปรแกรมที่จำเป็น: สถานะที่แก้ไขไม่ได้มากมายและเครื่องรัฐที่ทำงานกับมัน

นอกจากนี้คุณยังสามารถกำหนดโปรแกรมที่จำเป็นให้เป็นฟังก์ชันการเขียนโปรแกรมได้โดยการพิจารณาว่าโปรแกรมเป็นองค์ประกอบของการดำเนินการแบบ monadic ที่ส่งและส่งกลับเวอร์ชันที่แก้ไขของรัฐทั่วโลกเช่นเดียวกับในภาษาโปรแกรม Haskell


2
การใช้ monads เพื่อสร้างสิ่งที่คล้ายคำสั่งในภาษาที่ใช้งานได้อย่างหมดจด (เช่น Haskell) ไม่ได้ให้พลังเต็มที่ของการเขียนโปรแกรมที่จำเป็น โดยเฉพาะอย่างยิ่งหากไม่มีสถานะที่ไม่แน่นอนอย่างแท้จริง (เช่นในหลาย ๆ ภาษาที่มีการอ้างอิง) ยังมีโครงสร้างข้อมูลจำนวนมากที่ยังไม่มีการใช้งานอย่างมีประสิทธิภาพในภาษาที่ใช้งานได้จริง
Joshua Grochow

@ โจชัว: ทำไมคุณคิดว่ารัฐ monads ไม่แสดงความหมายของการอ้างอิง? ฉันกำลังสูญเสียที่จะเข้าใจสิ่งที่คัดค้านอาจจะ
Charles Stewart

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

6
หนึ่งสามารถจับภาพความหมายของการกลายพันธุ์กับ monads อย่างสมบูรณ์แบบ - ดูเช่น ST monad ใน Haskell เรากำลังพูดถึงความหมายที่นี่ไม่ใช่การใช้งาน
sclv

20

ในระยะสั้นฉันจะบอกว่าการเขียนโปรแกรมที่จำเป็นวิวัฒนาการมาจากภาษาเครื่องและการปฏิบัติการเขียนโปรแกรม บนมืออื่น ๆ , monadsให้กรอบความหมายที่เหมาะสมสำหรับการอธิบายความหมายของคุณสมบัติการเขียนโปรแกรมภาษาความจำเป็น แนวคิดของการคำนวณและพระมหากษัตริย์กระดาษ โดย Moggi จัดตั้งรากฐานที่เป็นทางการ Phil Wadler ทำให้ความคิดดังกล่าวเป็นที่นิยมและมีส่วนสำคัญในการเป็นฟีเจอร์สำคัญในการเขียนโปรแกรม Haskell งานล่าสุดโดย Plotkin และ Power Notions of Computation กำหนด Monads ไปทางอื่นที่ระบุว่าบางคน แต่ไม่ใช่ทั้งหมดความคิดของการคำนวณ (จำเป็น) ให้ monad ซึ่งหมายความว่าในทางที่สำคัญมาก monads นั้นสอดคล้องกับแนวคิดการคำนวณที่จำเป็น (และอื่น ๆ )


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

1
Monads เป็นวิธีในการเขียน semantic denotational ที่ชัดเจนสำหรับภาษาที่มีประสิทธิภาพดังนั้นทำไมไม่
nponeccop

15

หากคุณกำลังมองหาการรักษาทางคณิตศาสตร์อย่างเข้มงวดเกี่ยวกับภาษาการเขียนโปรแกรมที่จำเป็นหนังสือของ Winskel "ความหมายที่เป็นทางการของภาษาโปรแกรม" (1993) เป็นตัวอย่าง

ในหนังสือเล่มนี้เขากำหนดภาษาการเขียนโปรแกรมที่จำเป็นที่เรียกว่า IMP และให้ความหมายในการดำเนินงาน denotational และสัจพจน์ที่เป็นจริงของมัน


14

ฉันมาถึงคำถามนี้ช้า แต่มันเป็นคำถามที่น่าสนใจ ดังนั้นนี่คือมุมมองของฉัน

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

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

ดังนั้นฉันจะไม่สนใจโดยเฉพาะอย่างยิ่งว่ามีพื้นฐานทางทฤษฎีเบื้องต้นสำหรับการเขียนโปรแกรมที่จำเป็นหรือไม่ หากไม่มีให้เราไปหา สิ่งที่เรารู้แล้วบอกเราว่าการเขียนโปรแกรมที่จำเป็นนั้นน่าอัศจรรย์และล้ำลึกมาก pales การเขียนโปรแกรมการทำงานในการเปรียบเทียบ แต่เรามีงานมากมายที่ต้องทำเพื่อนำทฤษฏีทั้งหมดนี้ออกมาสู่ผู้คน


msgstr "การเขียนโปรแกรมใช้งานได้ดีในการเปรียบเทียบ". ตอนนี้ถ้าเพียง แต่ฉันจะได้รับคุณและ Bob Harper เข้าสู่เวทีการต่อสู้ คุณต้องการแกว่งคำสั่งขนาดใหญ่และเขาจะพยายามปิดเมื่อคุณ (ป.ล. : คำตอบที่ดีมากฉัน upvote มัน.)
Andrej Bauer

เขาหลีกเลี่ยงฉัน ฉันไม่รู้ว่านั่นหมายถึงอะไร :-)
Uday Reddy

11

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

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

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

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


11

An Axiomatic Basis for Computer Programming โดยรถยนต์ HOARE

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

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.85.8553&rep=rep1&type=pdf


8

ฉันสองสิ่งที่ Alexandre พูดว่าเครื่องทัวริงเป็นพื้นฐานทางทฤษฎีดั้งเดิมสำหรับการเขียนโปรแกรมที่จำเป็น เท่าที่องค์กรของภาษาการเขียนโปรแกรมที่จำเป็นสะท้อนสถาปัตยกรรมเครื่องผมคิดว่างานของJohn Von Neumannก็จะเป็นส่วนสำคัญของรากฐานทางทฤษฎีของพวกเขา


7

มีพื้นฐานทางคณิตศาสตร์เทียบเท่าของการเขียนโปรแกรมที่จำเป็นหรือว่ามันเพิ่งเกิดจากการใช้งานฮาร์ดแวร์ที่ใช้งานได้จริงในภาษาเครื่องและการพัฒนา FORTRAN ในภายหลัง?

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


คุณหมายถึงการทำให้ชุมชนนี้เป็นวิกิหรือไม่
Suresh Venkat

ใช่ฉันตั้งใจทำให้ชุมชนเป็นวิกิ
jbapple

7

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

คำตอบเกี่ยวกับ monads นั้นไม่ถูกต้องแม่นยำเนื่องจากใน haskell monad ถูกใช้เพียงเพราะมันเป็นนามธรรมที่ช่วยให้การเข้ารหัสของลำดับของข้อ จำกัด การประเมินผลและการติดตามอย่างชัดเจนของคุณสมบัติ "อาจใช้ IO"

เป็นสิ่งที่ควรค่าแก่การชี้ให้เห็นว่าตรรกะการแยกทาง / การแยกสามารถดูเป็น monads และมีโครงการร่วมสมัยจำนวนมากเช่นโครงการ ynot ที่ฮาร์วาร์ดซึ่งกำลังสำรวจหัวข้อเหล่านี้

การวิจัยในการแยกลอจิกเป็นเขตต่อเนื่อง


ดูเหมือนว่าฉันจะมีข้อผิดพลาดที่ทำให้สับสนว่า Haskell ใช้แนวคิดของ monads (และ Monad typeclass) ด้วยวิธีการทั่วไปที่มากขึ้นตามที่ยกตัวอย่างโดย Moggi ที่ใช้ monads เพื่อจัดโครงสร้างบัญชีของ semantics ที่มีความหมาย การใช้ monads เป็นเครื่องมือในการเขียนโปรแกรมโครงสร้างไม่ควรทำให้เราตาบอดกับการใช้ semantics เชิงความหมายเป็นเครื่องมือในการจัดโครงสร้างการใช้เหตุผลเกี่ยวกับการเขียนโปรแกรม
sclv

คำอธิบายที่ดีมาก แต่ฉันเชื่อว่าคนที่ถูกสังหารทั้งปวงได้ใช้ monads a la haskell เพื่อสำรวจความหมายผ่านทาง monad transformers โดยเฉพาะอย่างยิ่งความหมายที่แตกต่างกันสำหรับการดำเนินงานที่เกิดขึ้นจากองค์ประกอบที่แตกต่างกันของหม้อแปลงดังกล่าว (เช่นสำหรับสถานะ / ความไม่แน่นอน, ความต่อเนื่อง, ความไม่เชื่องศาสนา ฯลฯ )
Carter Tazio Schonwald

5

ฉันมาถึงคำถามนี้ในภายหลัง แต่ฉันก็รู้สึกทึ่ง

ทำไมทฤษฏีของการเขียนโปรแกรมเชิงบังคับจึงถูกพิจารณาน้อยกว่าการเขียนโปรแกรมเชิงหน้าที่ที่ทำให้ฉันไม่ทำงาน อาจเริ่มจริงจังกับ Scott และ de Bakker ในปี 1969 ด้วยการวิเคราะห์ความหมายของการเรียกซ้ำในภาษาที่จำเป็นอย่างง่าย [1] เมื่อภาษาที่จำเป็นเพิ่มพูนคุณสมบัติเรื่องราวก็จะยุ่งเหยิงขึ้นเล็กน้อย แต่นั่นเป็นเพียงราคาที่ต้องจ่ายเมื่ออยู่ใกล้กับโลหะ เพื่อตั้งชื่อหนึ่งในความพยายามที่ครอบคลุมมากขึ้นในปี 1980 เดอ Bakker, de Bruin และ Zucker เขียนเอกสารเกี่ยวกับเรื่องนี้ [2] คนอื่น ๆ ถูกกล่าวถึงข้างต้น การอ้างอิงเหล่านี้ของตรรกะการแยกวันที่ล่วงหน้าของหลักสูตร แต่ [2] ยังคงมีการจัดการกับอาร์เรย์และกระบวนการเรียกซ้ำ

[1]: ไม่เผยแพร่ในปี 1969 แต่ปรากฏเป็น Jaco W. de Bakker และ Dana S. Scott ทฤษฎีของโปรแกรมหน้า 1-30 ใน Klop และคณะ JW de Bakker, 25 ปีที่ผ่านมา CWI, Amsterdam, 1989 Liber Amoricum

[2]: Jacobus W. de Bakker, Arie de Bruin, Jeffrey Zucker: ทฤษฎีทางคณิตศาสตร์ของความถูกต้องของโปรแกรม ศิษย์ในห้องโถง 2523


1
การเขียนโปรแกรมที่จำเป็นอย่างชัดเจนนั้นเป็นที่เข้าใจกันเป็นอย่างดี ฉันคิดว่าสิ่งที่ผู้คนหมายถึงเมื่อพวกเขาบอกว่ามันน้อยลงก็คือการเขียนโปรแกรมเชิงโครงสร้างยิ่งขึ้นกว่าการเขียนโปรแกรมฟังก์ชั่นที่บริสุทธิ์และโครงสร้างทางคณิตศาสตร์น้อยลงได้รับการค้นพบว่าพืชในรูปแบบนี้ ตัวอย่างเช่นโปรแกรมที่จำเป็นบางประเภทอาจมีเหตุผลเกี่ยวกับการใช้ตรรกะการแยก นี่อาจเป็นรูปแบบการแบ่งปัน บางทีโปรแกรมประเภทนี้มีลักษณะทางคณิตศาสตร์ที่ดีและเป็นนามธรรม?
Martin Berger

1
โดยส่วนตัวแล้วฉันหมายถึงทฤษฎีการแยกส่วนในภาษาที่จำเป็นนั้นไม่มีความชัดเจนมาก เรารู้ว่า modularity มีความหมายอย่างไรสำหรับภาษาที่ใช้งานได้: parametricity เชิงสัมพันธ์ สำหรับภาษาที่จำเป็นนั้นมีสำนวนซ่อนข้อมูลมากมายที่ (a) ทำงานได้อย่างชัดเจน แต่ (b) ที่เราขาดเทคนิคการพิสูจน์ที่ดี มีคำแนะนำยั่วเย้าว่ามีทฤษฎีที่ลึกที่นี่: ตัวอย่างเช่นเมื่อฉันทำปรู๊ฟแบบแยกส่วนของโปรแกรมที่จำเป็นต่อเนื่องฉันจบลงด้วยเทคนิคที่ต้องการจากการทำงานพร้อมกัน ทางการ aliasing เป็นเหมือนเห็นพ้องด้วย แต่ผมไม่ทราบจริงๆว่าจะทำพิธีความคิดที่ว่า ...
Neel Krishnaswami

@Kai ยินดีต้อนรับสู่กระทู้! เป็นเวลานานแล้วที่ฉันได้ดูงานของ de Bakker แต่ฉันคิดว่าปัญหาพื้นฐานคือแนวทางไม่ได้เพิ่มขึ้น สำหรับการสรุปอย่างรวดเร็วของความคืบหน้าเกี่ยวกับการเขียนโปรแกรมที่จำเป็นตั้งแต่นั้นมาดูโพสต์ของฉันใน "ความหมายเชิงลบความหมายคืออะไร" หัวข้อการเชื่อมโยง
Uday Reddy

@NeelKrishnaswami ฉันชอบที่จะเห็นหลักฐานเหล่านั้น พวกเขาอยู่บนหน้าเว็บของคุณหรือไม่ การใช้นามแฝงเป็นเหมือนการเห็นพ้องกันในการที่พวกเขาทั้งสองเกี่ยวข้องกับการแบ่งปันที่ซับซ้อนและ interleaving ในการเกิดภาวะพร้อมกันคุณสรุปการสอดแทรกและสันนิษฐานว่าไม่ใช่สิ่งชั่วร้าย (ซึ่งดี) ในนามแฝงคุณต้องบังคับตัวเองให้จัดการกับการสอดแทรก ความหมายของเกมเป็นตัวอย่างที่ยอดเยี่ยมของการบังคับแทรกสอดซึ่งเป็นเหตุผลที่ฉันไม่ชอบ
Uday Reddy

3

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

การกำหนดแคลคูลัสประกอบด้วยเพียงสี่โครงสร้างพื้นฐานที่ได้รับมอบหมายX:=tลำดับt;uการก่อตัวขั้นตอนและวิธีการภาวนา¡t !tมีการตีความสามแบบสำหรับ AC: ซีแมนทิกส์การปฏิบัติการ, ซีแมนติกเชิงลบและระบบการเขียนคำซ้ำ ทั้งสามแสดงให้เห็นว่าเทียบเท่า

วิทยานิพนธ์ของ Mark Bender ยังคงดำเนินต่อไปในการสำรวจความหลากหลายที่ขยายออกไปด้วยการประเมินผลที่ขี้เกียจการย้อนรอยการจัดองค์ประกอบขั้นตอน สิ่งนี้คล้ายกับการสำรวจแคลคูลัสแลมบ์ดาโดยใช้ส่วนขยายขนาดเล็ก

โดยรวมแล้ววิทยานิพนธ์ให้คำตอบที่ตรงกับคำถาม OP


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