คำถามติดแท็ก pl.programming-languages

ภาษาการเขียนโปรแกรมโดยเฉพาะการเพ่งความสนใจไปที่ความหมายของพวกเขา

2
มีวิธีการแบบกึ่งตัดสินใจสำหรับทฤษฎีนี้หรือไม่?
ฉันมีทฤษฎีที่พิมพ์ต่อไปนี้ |- 1_X : X -> X f : A -> B, g : B -> C |- compose(g,f) : A -> C F, f : A -> B |- apply(F,f) : F(A) -> F(B) ด้วยสมการสำหรับทุกเงื่อนไข: f : A -> B, g : B -> C, h : C -> …

1
อะไรคือ“ คำถาม” ที่ทฤษฎีภาษาโปรแกรมพยายามตอบ?
ฉันสนใจในหัวข้อต่าง ๆ เช่น Combinatory Logic, แลมบ์ดาแคลคูลัส, การเขียนโปรแกรมเชิงฟังก์ชั่นอยู่พักหนึ่งและได้ศึกษามาแล้ว อย่างไรก็ตามแตกต่างจาก "ทฤษฎีการคำนวณ" ซึ่งมุ่งมั่นที่จะตอบคำถามของ "การคำนวณ" คือสิ่งที่สามารถ / ไม่สามารถคำนวณได้ด้วยข้อ จำกัด ต่าง ๆ ฉันกำลังดิ้นรนเพื่อหาอนาล็อกสำหรับ "ทฤษฎีการเขียนโปรแกรม" Wikipediaอธิบายว่าเป็น: Programming language theory (PLT) เป็นสาขาหนึ่งของวิทยาการคอมพิวเตอร์ที่เกี่ยวข้องกับการออกแบบการใช้งานการวิเคราะห์การจำแนกลักษณะและการจำแนกประเภทของภาษาโปรแกรมและคุณลักษณะส่วนบุคคล นี่ก็เหมือนกับการพูดว่า "ทุกอย่าง" ซึ่งไม่เจาะจงจริงๆ ความก้าวหน้าทั่วไปของหัวข้อมักเป็นดังนี้: Combinatory Logic> แลมบ์ดาแคลคูลัส> ทฤษฎีมาร์ตินลอฟประเภท> แคลคูลัสแลมบ์ดาที่พิมพ์> (มีบางอย่างเกิดขึ้นที่นี่)> ภาษาโปรแกรมที่พัฒนาขึ้น - ซึ่งมีการเชื่อมต่อน้อยมากกับ CL /λλ\lambda ฉันสามารถดู "คณิตศาสตร์" พื้นฐานที่เกี่ยวข้องกับ CL /λλ\lambdaและบทพิสูจน์ที่น่าสนใจที่ออกมาเป็นผลรวมถึงทฤษฎีบท Church-Rosser และนั่นก็เรียบร้อย อย่างไรก็ตามฉันพยายามดิ้นรนเพื่อทำความเข้าใจกับ "เป้าหมายสุดท้าย" ของกิจการทั้งหมดนี้ใช่ไหม …

2
การประยุกต์เรขาคณิตเชิงพีชคณิตในทฤษฎีประเภท / ทฤษฎีภาษาโปรแกรม
เมื่อเร็ว ๆ นี้ฉันสนใจเรขาคณิตเชิงพีชคณิตและเริ่มอ่านมัน ฉันยังรู้น้อยมากเกี่ยวกับสาขานี้ แต่ฉันต้องการทราบว่ามีการเชื่อมต่อกับสาขาหลักของฉันทฤษฎีประเภทและภาษาโปรแกรม ฉันรู้ว่าโทโพโลยีพีชคณิตมีแอปพลิเคชั่นจำนวนมากในทฤษฎีประเภท (ทฤษฎีแบบโฮโมโทรสและอื่น ๆ อีกมากมาย) แต่สิ่งที่เกี่ยวกับเรขาคณิตเชิงพีชคณิตนอกจากนี้ทั้งทฤษฎีประเภท / ทฤษฎี PL และ AG เป็นแรงจูงใจที่ดีของทฤษฎีหมวดหมู่?

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

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

2
การเป็นตัวแทนอย่างเป็นทางการของลำดับชั้นนามธรรม
บทนำ ฉันกำลังเขียนวิทยานิพนธ์ระดับปริญญาเอกของฉันเกี่ยวกับAbstract Delta Modeling (ADM) ซึ่งเป็นคำอธิบายเกี่ยวกับพีชคณิตนามธรรมของการดัดแปลง (รู้จักกันในชื่อdeltas ) ที่สามารถทำหน้าที่เกี่ยวกับผลิตภัณฑ์ (เช่นเดียวกับใน 'ผลิตภัณฑ์ซอฟต์แวร์') สิ่งนี้สามารถใช้ในการจัดระเบียบชุดผลิตภัณฑ์ที่เกี่ยวข้อง ('สายผลิตภัณฑ์') เป็นผลิตภัณฑ์หลักอย่างง่ายและชุดของ delta ที่ใช้แบบมีเงื่อนไขและทำให้สามารถใช้งานสิ่งประดิษฐ์ที่อยู่ข้างใต้ได้มากขึ้น รายละเอียดของการสร้างแบบจำลองของเดลต้าไม่ได้จริงๆที่สำคัญกับคำถามของฉัน แต่ ADM ทำหน้าที่เป็นตัวอย่างที่ดีที่จะอธิบายปัญหาดังนั้นผมจะแนะนำแนวคิดที่สำคัญที่สุด พื้นหลัง โครงสร้างหลักที่น่าสนใจคือเดลทอยด์ (P,D,⋅,ϵ,[[−]])(P,D,⋅,ϵ,[[−]])(\mathcal P, \mathcal D, \cdot, \epsilon, \mathbf{[\kern-1pt[-]\kern-1pt]}). ผลิตภัณฑ์มาจากชุดสากลPP\mathcal P. สันดอนมาจากหนังสือกับผู้ประกอบการองค์ประกอบและองค์ประกอบที่เป็นกลางD การประเมินความหมายของโอเปอเรเตอร์เปลี่ยนเป็น 'syntactic' deltaเป็นความสัมพันธ์ซึ่งตัดสินใจว่าสามารถแก้ไขผลิตภัณฑ์ได้อย่างไร(D,⋅,ϵ)(D,⋅,ϵ)(\mathcal D, \cdot, \epsilon)⋅:D×D→D⋅:D×D→D\cdot : \mathcal D \times \mathcal D \to \mathcal Dϵ ∈ Dϵ∈D\epsilon \in …

2
คอมไพเลอร์ที่ผ่านการรับรองและการเพิ่มประสิทธิภาพใน Coq / Agda
ฉันสนใจคอมไพเลอร์ที่ผ่านการตรวจสอบอย่างเป็นทางการในทฤษฎีประเภทมาร์ติน - โลฟเช่น Coq / Agda ในขณะนี้ฉันได้เขียนตัวอย่างของเล่นเล็ก ๆ ฉันสามารถพิสูจน์ได้ว่าการเพิ่มประสิทธิภาพของฉันถูกต้อง ตัวอย่างเช่นสามารถลบส่วนที่มีศูนย์ได้เช่นนิพจน์เช่น "x + 0" มีการปรับให้เหมาะสมที่ยากที่จะดำเนินการกับคอมไพเลอร์ปกติซึ่งจะเป็นตัวอย่างที่ดีหรือไม่? เป็นไปได้หรือไม่ที่จะพิสูจน์คุณสมบัติบางอย่างของโปรแกรมที่อนุญาตการเพิ่มประสิทธิภาพที่ไม่สามารถทำได้ด้วยคอมไพเลอร์ปกติ? (เช่นไม่มีข้อสรุปที่เป็นไปได้กับนักทฤษฎีบท) ฉันจะสนใจในความคิดหรือตัวอย่างและอ้างอิงในหัวข้อ คำถามที่เกี่ยวข้อง: การ พิสูจน์ความถูกต้องของคอมไพเลอร์ แก้ไข: ตามที่ Tsuyoshi ใส่ไว้ในข้อคิดเห็น: ฉันกำลังมองหาเทคนิคการปรับให้เหมาะสมซึ่งยากที่จะนำไปใช้ถ้าคอมไพเลอร์เขียนด้วย (พูด) C แต่ง่ายต่อการนำไปใช้ถ้าคอมไพเลอร์เขียนด้วย (พูด) Coq เมื่อ Agda รวบรวมไปยัง C (ผ่าน Haskell) มันเป็นไปได้ที่จะทำทุกอย่างที่เป็นไปได้ใน Agda เช่นกันใน C อาจเป็นประโยชน์เพียงอย่างเดียวของผู้พิสูจน์ทฤษฎีบทเช่น Coq / Agda คือคอมไพเลอร์และการปรับให้เหมาะสมสามารถตรวจสอบได้ edit2: ตามคำแนะนำของ Vijay DI เขียนสิ่งที่ฉันอ่านมา …

1
Martin-Löf Type Theory จะนำไปสู่ความสามารถในการเขียนโค้ดที่ถูกต้องหรือไม่?
โพสต์นี้หมายถึงมอร์ฟแกงฮาวเวิร์ดและมาร์ตินLöfประเภททฤษฎี โพสต์ทำให้การเรียกร้องของ 'การรวมกันในอนาคต' ระหว่างภาษาอธิบายของคณิตศาสตร์และภาษาการดำเนินงานตามการเขียนโปรแกรมคอมพิวเตอร์ คำถามของฉันคือ: ความคิดเหล่านี้จะนำไปสู่ความสามารถที่ดีกว่า (ผ่านภาษา) ในการเขียนรหัสที่ถูกต้องหรือไม่? มีนัยยะสมบูรณ์ของ MLTT ถูกค้นพบในระดับทฤษฎีหรือไม่? โพสต์นี้อธิบายสิ่งที่ไม่สามารถทำได้ใน COQ หรือ Agda หรือไม่?

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

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

2
คำจำกัดความที่เป็นทางการ / ส่วนที่เคาน์เตอร์ในคณิตศาสตร์สำหรับ "วัตถุ" ของแบบจำลองเชิงวัตถุ
นี่เป็นคำถามที่ฉันถามในฟอรัม SE ทางคณิตศาสตร์และฉันถูกเรียกที่นี่ ดังนั้นนี่คือคำถาม - ฉันเป็นมือใหม่ทั้งในวิชาคณิตศาสตร์และวิทยาการคอมพิวเตอร์เชิงทฤษฎีดังนั้นโปรดอดทนกับฉันหากคุณพบว่าคำถามของฉันไม่มีกรอบอย่างเหมาะสม การจำลองแบบเชิงวัตถุดูเหมือนว่ามีประโยชน์มากในการกำหนดปฏิสัมพันธ์ที่ซับซ้อนเมื่อจำลองโลกแห่งความจริง แต่ส่วนใหญ่จะใช้ในการเขียนโปรแกรม ฉันสงสัยว่าถ้าเรามีแนวคิดที่คล้ายกันในวิชาคณิตศาสตร์ เมื่อเราทำการเขียนโปรแกรมเราสามารถเข้าใจแนวคิดของ "Objects" และ "Object Oriented Programming" และใช้มัน แต่เรามีคำจำกัดความอย่างเป็นทางการของ "วัตถุ" ในแง่ของทฤษฎีเซตหรือไม่? หรือสำหรับเรื่องนั้นทฤษฎีทางคณิตศาสตร์อย่างเป็นทางการอื่น ๆ เราสามารถใช้ / กำหนดสามแนวความคิดการสร้างแบบจำลองวัตถุหลักอย่างเป็นทางการ - 1. Encapsulation 2. การสืบทอด 3. Polymorphism ฉันรู้ว่าคำถามกว้างเกินไป แต่จะขอบคุณจริง ๆ ถ้าคุณสามารถให้ตัวชี้บางอย่างเช่นกันเพื่อให้ฉันสามารถเข้าใจแนวคิดเหล่านี้ได้ดีขึ้น

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

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

5
ฟังก์ชั่นการเขียนซ้ำสากล [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับการแลกเปลี่ยนวิทยาการคอมพิวเตอร์เชิงทฤษฎี ปิดให้บริการใน3 ปีที่ผ่านมา มีการสร้างฟังก์ชั่นเรียกซ้ำแบบสากลสั้น ๆหรือไม่? คำจำกัดความทั้งหมดที่ฉันได้เห็นเกี่ยวข้องกับการกำหนดหมายเลขเครื่องทัวริงในทางใดทางหนึ่งซึ่งเป็นไปได้ แต่ดูเหมือนยากและไม่สามารถจัดการได้ในการเขียนด้วยภาษาโปรแกรมระดับสูงกว่า (เช่น Python, Haskell เป็นต้น)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.