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

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

7
การใช้งานที่มั่นคงของทฤษฎีหมวดหมู่ใน TCS?
ฉันได้เรียนรู้ทฤษฎีหมวดหมู่เล็กน้อย แน่นอนว่ามันเป็นวิธีที่แตกต่างในการมองสิ่งต่าง ๆ (สรุปคร่าวๆสำหรับผู้ที่ไม่ได้เห็น: ทฤษฎีหมวดหมู่ให้วิธีการแสดงพฤติกรรมทางคณิตศาสตร์ทุกชนิดเพียงอย่างเดียวในแง่ของความสัมพันธ์การทำงานระหว่างวัตถุตัวอย่างเช่นสิ่งต่าง ๆ เช่นผลิตภัณฑ์คาร์ทีเซียนของทั้งสองชุดถูกกำหนดอย่างสมบูรณ์ในแง่ของ ฟังก์ชั่นอื่น ๆ ทำงานอย่างไรกับมันไม่ใช่ในแง่ขององค์ประกอบที่เป็นสมาชิกของชุด) ฉันมีความเข้าใจที่คลุมเครือว่าทฤษฎีหมวดหมู่มีประโยชน์ในด้านการเขียนโปรแกรมภาษา / ตรรกะ ("ทฤษฎี B") และฉันสงสัยว่าอัลกอริทึมและความซับซ้อน ("ทฤษฎี A") จะมีประโยชน์มากเพียงใด มันอาจช่วยให้ฉันลงจากพื้นได้ถ้าฉันรู้ว่ามีการใช้งานที่เป็นของแข็งของทฤษฎีหมวดหมู่ในทฤษฎี B. (ฉันอยู่แล้วโดยปริยายสมมติว่าไม่มีการใช้งานในทฤษฎี A ที่พบจนถึงตอนนี้ แต่ถ้าคุณมีบางอย่างนั้น ดีกว่าสำหรับฉัน!) โดย "แอปพลิเคชันแข็ง" ฉันหมายถึง: (1) แอปพลิเคชันขึ้นอยู่กับทฤษฎีหมวดหมู่เป็นอย่างมากซึ่งทำได้ยากมากโดยไม่ต้องใช้เครื่องจักร (2) แอปพลิเคชันจะเรียกใช้อย่างน้อยหนึ่งทฤษฎีที่ไม่น่าสนใจของทฤษฎีหมวดหมู่ (เช่นบทแทรกของ Yoneda) อาจเป็นไปได้ว่า (1) หมายถึง (2) แต่ฉันต้องการตรวจสอบให้แน่ใจว่านี่เป็นแอปพลิเคชัน "ของจริง" ในขณะที่ฉันมีพื้นหลัง "ทฤษฎี B" บางอย่างมันเป็นเวลานานดังนั้นการยกเลิกการพูดปดใด ๆ จะได้รับการชื่นชมมาก (ขึ้นอยู่กับชนิดของคำตอบที่ฉันได้รับฉันอาจเปลี่ยนคำถามนี้เป็นวิกิชุมชนในภายหลัง แต่ฉันต้องการแอปพลิเคชันที่ดีพร้อมคำอธิบายที่ดีดังนั้นจึงเป็นเรื่องน่าอายที่จะไม่ให้รางวัลผู้ตอบด้วยบางสิ่ง)

7
ทฤษฎีบทที่น่าสนใจใน TCS ใดขึ้นอยู่กับสัจพจน์ของทางเลือก (หรืออีกนัยหนึ่งความจริงของความมุ่งมั่น?)
บางครั้งนักคณิตศาสตร์ต้องกังวลเกี่ยวกับสัจพจน์ของทางเลือก (AC) และสัจพจน์ของความมุ่งมั่น (AD) จริงของการเลือก : ให้คอลเลกชันใด ๆชุด nonempty มีฟังก์ชั่นฉว่าได้รับชุดSในCกลับเป็นสมาชิกของSCC{\cal C}fffSSSCC{\cal C}SSS สัจพจน์ของความมุ่งมั่น : ให้เป็นชุดของสตริงบิตที่มีความยาวไม่สิ้นสุด อลิซและบ็อบเล่นเกมที่อลิซเลือกที่ 1 บิตb 1 , Bob เลือกที่ 2 บิตb 2และต่อไปเรื่อย ๆ จนกระทั่งสตริงที่ไม่มีที่สิ้นสุดx = b 1 b 2 ⋯ถูกสร้างขึ้น อลิซชนะเกมถ้าx ∈ Sบ๊อบชนะเกมถ้าx ∉ S สมมติฐานคือสำหรับทุกSมีกลยุทธ์การชนะสำหรับหนึ่งในผู้เล่น (ตัวอย่างเช่นหากSประกอบด้วยสายอักขระทั้งหมดเท่านั้น Bob สามารถชนะได้ในหลายจังหวะการเคลื่อนไหว)SSSb1b1b_1b2b2b_2x=b1b2⋯x=b1b2⋯x = b_1 b_2 \cdots x∈Sx∈Sx \in Sx∉Sx∉Sx \not …

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

7
ความหมายเชิง denotational คืออะไร?
ในเธรดอื่น Andrej Bauer กำหนดซีแมนติก denotational semantics เป็น: ความหมายของโปรแกรมคือฟังก์ชั่นของความหมายของส่วนต่างๆ สิ่งที่รบกวนจิตใจผมเกี่ยวกับความหมายนี้ก็คือว่ามันไม่ได้ดูเหมือนจะออกเดียวสิ่งที่ร่วมกันคิดว่าเป็นความหมาย denotationalจากสิ่งที่ร่วมกันคิดว่าเป็นความหมายที่ไม่ denotational คือโครงสร้างความหมายในการดำเนินงาน อย่างแม่นยำยิ่งขึ้นส่วนผสมที่สำคัญที่นี่คือแบบแยกส่วนหรือองค์ประกอบของความหมายหรือใส่แตกต่างกันความจริงที่ว่าพวกเขาจะถูกกำหนดตามโครงสร้างนามธรรมของโปรแกรม ความหมายที่เป็นทางการ (ทั้งหมด?) ส่วนใหญ่ในปัจจุบันมีแนวโน้มที่จะมีโครงสร้างนี่เป็นคำจำกัดความที่จำเป็นหรือไม่ ดังนั้นคำถามของฉันคือ: ความหมายเชิง Denotational คืออะไร?

7
การใช้แลมบ์ดาแคลคูลัสเพื่อหาเวลาที่ซับซ้อน?
มีประโยชน์ใด ๆ ในการคำนวณความซับซ้อนของเวลาของอัลกอริทึมโดยใช้แลมบ์ดาแคลคูลัสหรือไม่? หรือมีระบบอื่นที่ออกแบบมาเพื่อการนี้? การอ้างอิงใด ๆ จะได้รับการชื่นชม

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

6
การแสดงออกปกติไม่ได้
ถามคนที่มีพื้นฐานด้านวิทยาศาสตร์คอมพิวเตอร์ว่านิพจน์ปกติคืออะไรและคำตอบน่าจะเกินกว่าข้อ จำกัด ของการเข้าถึงออโตเมติก จำกัด ของรัฐ ตัวอย่างเช่น“ นิพจน์ทั่วไป” /^1?$|^(11+?)\1+$/ ที่สร้างขึ้นโดยบุคลิกภาพ Perl ตั้งข้อสังเกตAbigail (และเป็นส่วนหนึ่งของชุดทดสอบของ Perlตั้งแต่ปี 2002) อธิบายเครื่องที่ยอมรับตัวเลขเอกเพียงคอมโพสิต แต่การออกกำลังกาย 4.5 (ข)ในรุ่นที่สามของปีเตอร์ลินซ์ของแนะนำอย่างเป็นทางการภาษาและออโตมีการใช้ผู้อ่านแทรกสูบน้ำที่จะพิสูจน์ว่า L={an:n is not a prime number}L={an:n is not a prime number}\mathcal{L} = \left\{ a^n : n\ \mathrm{is\ not\ a\ prime\ number} \right\} ไม่ใช่ภาษาปกติ ในบริบทที่ความแตกต่างสำคัญเราควรเรียกการแสดงออกที่ทรงพลังกว่านี้อย่างเคร่งครัดว่าอย่างไร

8
อัลกอริธึมที่สูงกว่า
อัลกอริทึมที่รู้จักกันดีส่วนใหญ่เป็นลำดับแรกในแง่ที่ว่าอินพุตและเอาต์พุตเป็นข้อมูล "ธรรมดา" บางอย่างเป็นลำดับที่สองในลักษณะที่ไม่สำคัญเช่นการเรียงลำดับแฮชเทเบิลหรือฟังก์ชั่นแผนที่และการพับ: พวกมันถูกกำหนดค่าโดยฟังก์ชั่น แต่พวกเขาไม่ได้ทำสิ่งที่น่าสนใจเลย บางอันก็เป็นลำดับที่สอง แต่ค่อนข้างน่าสนใจกว่า: Fingertrees แปรผันตาม monoids การแยกนิ้วบนเพรดิเคตแบบจำเจ คำนำหน้ารวมอัลกอริธึมอีกครั้งโดยพารามิเตอร์หรือ monoid ฯลฯ ในที่สุดบางคำสั่งที่สูงกว่า "แท้จริง" ในแง่ที่น่าสนใจที่สุดสำหรับฉัน: Y combinator รายการความแตกต่าง มีอัลกอริทึมการสั่งซื้อที่สูงกว่าอื่น ๆ หรือไม่? ในความพยายามที่จะชี้แจงคำถามของฉันภายใต้ "nontrivial-ลำดับสูงกว่า" ฉันหมายถึง "การใช้สิ่งอำนวยความสะดวกขั้นสูงของระเบียบการคำนวณในวิธีที่สำคัญในส่วนต่อประสานของอัลกอริทึมและ / หรือการใช้งาน"

3
พิมพ์คลาส vs วัตถุอินเตอร์เฟส
ฉันไม่คิดว่าฉันเข้าใจคลาสประเภท ฉันได้อ่านที่ไหนสักแห่งที่คิดว่า class classes เป็น "interfaces" (จาก OO) ที่การใช้งานประเภทนั้นผิดและทำให้เข้าใจผิด ปัญหาคือฉันมีปัญหาที่เห็นพวกเขาเป็นสิ่งที่แตกต่างและวิธีการที่ผิด ตัวอย่างเช่นถ้าฉันมีคลาสประเภท (ในไวยากรณ์ Haskell) class Functor f where fmap :: (a -> b) -> f a -> f b มันแตกต่างจากอินเตอร์เฟส [1] อย่างไร (ในไวยากรณ์ Java) interface Functor<A> { <B> Functor<B> fmap(Function<B, A> fn) } interface Function<Return, Argument> { Return apply(Argument arg); } …

4
การวิจัยและความท้าทายแบบเปิดในทฤษฎีภาษาโปรแกรม
ในจิตวิญญาณของบางอภิปรายทั่วไปเช่นนี้หนึ่งผมเปิดกระทู้นี้ด้วยความตั้งใจที่จะรวบรวมความคิดเห็นเกี่ยวกับสิ่งที่เป็นความท้าทายที่เปิดกว้างและหัวข้อที่ร้อนในการวิจัยเกี่ยวกับการเขียนโปรแกรมภาษา ฉันหวังว่าการอภิปรายอาจนำมาซึ่งความคิดเห็นเกี่ยวกับอนาคตของการวิจัยในภาษาโปรแกรม ฉันเชื่อว่าการอภิปรายในลักษณะนี้จะช่วยให้นักวิจัยใหม่เช่นตัวฉันเองสนใจ PL และผู้ที่มีส่วนเกี่ยวข้องอยู่แล้ว

5
ภาษาโปรแกรมสำหรับการคำนวณที่มีประสิทธิภาพ
เป็นไปไม่ได้ที่จะเขียนภาษาการเขียนโปรแกรมที่อนุญาตให้เครื่องทั้งหมดหยุดทำงานในอินพุตทั้งหมดและไม่มีผู้อื่น อย่างไรก็ตามดูเหมือนว่าจะง่ายต่อการกำหนดภาษาการเขียนโปรแกรมสำหรับคลาสความซับซ้อนมาตรฐานใด ๆ โดยเฉพาะอย่างยิ่งเราสามารถกำหนดภาษาที่เราสามารถแสดงการคำนวณที่มีประสิทธิภาพทั้งหมดและการคำนวณที่มีประสิทธิภาพเท่านั้น ยกตัวอย่างเช่นบางอย่างเช่น : ใช้ภาษาการเขียนโปรแกรมที่คุณชื่นชอบและหลังจากที่คุณเขียนโปรแกรมของคุณ (ตรงกับทัวริงเครื่อง ), เพิ่มสามค่าส่วนหัว: จำนวนเต็มและจำนวนเต็มและเอาท์พุทเริ่มต้นdเมื่อคอมไพล์โปรแกรมเอาท์พุทเครื่องทัวริงที่ให้อินพุตของขนาดรันบนสำหรับขั้นตอน หากไม่หยุดก่อนที่ขั้นตอนจะเพิ่มขึ้นให้เอาต์พุตเอาต์พุตดีฟอลต์PPPM′M′M'ccckkkdddMMMxxxnnnM′M′M'xxxcnkcnkc n^kM′M′M'cnkcnkc n^kddd. ภาษาของการเขียนโปรแกรมนี้จะทำให้เราสามารถแสดงการคำนวณทั้งหมดในและไม่มีอะไรเพิ่มเติมนอกจากว่าฉันเข้าใจผิด อย่างไรก็ตามภาษาที่นำเสนอนี้ไม่ได้มีความน่าสนใจPPP คำถามของฉัน: มีภาษาการเขียนโปรแกรมที่จับส่วนย่อยของฟังก์ชั่นที่คำนวณได้ (เช่นฟังก์ชั่นคำนวณได้อย่างมีประสิทธิภาพทั้งหมด) ในลักษณะที่ไม่สำคัญหรือไม่? หากไม่มีจะมีเหตุผลสำหรับสิ่งนี้หรือไม่?

4
ความสัมพันธ์ระหว่างสัญญาและการพิมพ์ที่ขึ้นอยู่กับ
ฉันอ่านบทความเกี่ยวกับประเภทและสัญญาการเขียนโปรแกรม จากส่วนใหญ่ของสิ่งที่ฉันได้อ่านดูเหมือนว่าสัญญาจะถูกตรวจสอบข้อ จำกัด แบบไดนามิกและประเภทขึ้นอยู่กับการตรวจสอบแบบคงที่ มีเอกสารบางฉบับที่ทำให้ฉันคิดว่าเป็นไปได้ที่จะมีสัญญาที่ตรวจสอบบางส่วนแบบคงที่: การตรวจสอบประเภทลูกผสม (C. Flanagan - 2006) การรวมประเภทและสัญญาแบบผสมผสาน (J. Gronski, C. Flanagan - 2007) ด้วยสิ่งนี้ดูเหมือนว่าจะมีการทับซ้อนจำนวนมากและการจัดประเภทสัญญาของฉันกับประเภทที่ขึ้นต่อกันเริ่มหายไป มีบางอย่างที่ลึกซึ้งยิ่งขึ้นในแนวคิดที่ฉันขาดหายไปหรือไม่? หรือเป็นเพียงหมวดหมู่คลุมเครือจริง ๆ ของการแสดงแนวคิดพื้นฐานเดียวกันหรือไม่

7
หนังสือเกี่ยวกับความหมายของภาษาโปรแกรม
ฉันอ่าน " ความหมายกับแอปพลิเคชัน " ของ Nielson & Nielson แล้วและฉันก็ชอบวิชานี้มาก ฉันต้องการมีหนังสืออีกหนึ่งเล่มเกี่ยวกับความหมายของภาษาการเขียนโปรแกรม - แต่ฉันสามารถรับหนังสือเล่มเดียวได้จริงๆ ฉันดูหนังสือTurbak / Giffordแต่มันยืดยาวเกินไป ฉันคิดว่าวินสเคลจะใช้ได้ แต่ฉันไม่สามารถเข้าถึงได้ (มันไม่ได้อยู่ในห้องสมุดมหาวิทยาลัยของเราและฉันขาดเงิน) และฉันก็ไม่แน่ใจด้วยซ้ำว่ามันไม่ได้ลงวันที่แล้ว Slonnegerดูโอเค แต่ส่วนที่ใช้ได้จริงทำให้มันค่อนข้างยาวเกินไปและฉันไม่ค่อยสบายใจกับสไตล์ของเขา ดังนั้นคำถามของฉันคือ - หนังสือวินสเคลเป็นหนังสือที่ดีหรือไม่ และมันเป็นวันที่? นอกจากนี้ยังมีหนังสือเล่มอื่น ๆ ที่กระชับเกี่ยวกับเรื่องนี้หรือไม่

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

3
Curry-Howard และโปรแกรมจากบทพิสูจน์ที่ไม่สร้างสรรค์
นี่เป็นคำถามติดตาม อะไรคือข้อแตกต่างระหว่างการพิสูจน์และโปรแกรม (หรือระหว่างข้อเสนอและประเภท)? โปรแกรมอะไรจะสอดคล้องกับการที่ไม่สร้างสรรค์ (คลาสสิก) หลักฐานของแบบฟอร์ม∀k T(e,k)∨¬∀k T(e,k)∀k T(e,k)∨¬∀k T(e,k)\forall k \ T(e,k) \lor \lnot \forall k \ T(e,k) ? (สมมติว่าTTTเป็นความสัมพันธ์ที่สามารถตัดสินใจได้ที่น่าสนใจเช่นeee th TM ไม่หยุดในขั้นตอนkkk ) (ps: ฉันกำลังโพสต์คำถามนี้ส่วนหนึ่งเพราะฉันสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับความหมายของ Neel โดย " การแปล Godel-Gentzenเป็นการเปลี่ยนแปลงที่ต่อเนื่อง" ในความคิดเห็นของเขา )

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