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

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

2
สัญชาตญาณเบื้องหลังความเข้มงวดอย่างเข้มงวด?
ฉันสงสัยว่าใครบางคนสามารถให้สัญชาตญาณให้ฉันได้ว่าทำไม positivity ที่เข้มงวดของประเภทข้อมูลอุปนัยรับประกันการฟื้นฟูที่แข็งแกร่ง เพื่อความชัดเจนฉันเห็นว่าการเกิดเหตุการณ์ด้านลบทำให้เกิดความแตกต่างคือการกำหนด: data X where Intro : (X->X) -> X เราสามารถเขียนฟังก์ชันที่แตกต่าง แต่ฉันสงสัยว่าเราจะพิสูจน์ได้อย่างไรว่าประเภทอุปนัยเชิงบวกอย่างเคร่งครัดไม่อนุญาตให้มีความแตกต่าง? นั่นคือมีมาตรการการเหนี่ยวนำบางอย่างที่ช่วยให้เราสามารถสร้างหลักฐานของการทำให้เป็นมาตรฐานที่แข็งแกร่ง (ใช้ความสัมพันธ์เชิงตรรกะหรือคล้ายกัน)? และข้อพิสูจน์ดังกล่าวแตกหักไปที่ไหนสำหรับเหตุการณ์เชิงลบ? มีการอ้างอิงที่ดีที่แสดงการฟื้นฟูที่แข็งแกร่งสำหรับภาษาที่มีประเภทอุปนัยหรือไม่?

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

2
ความแตกต่างระหว่างกลยุทธ์การลดและกลยุทธ์การประเมินคืออะไร?
จากบทความกลยุทธ์การประเมินผลใน Wikipedia: แนวคิดเกี่ยวกับกลยุทธ์การลดแคลคูลัสแลมบ์ดานั้นคล้ายคลึงกัน แต่แตกต่างกัน จากบทความกลยุทธ์การลดลงใน Wikipedia: มันคล้ายกับ แต่แตกต่างอย่างละเอียดจากแนวคิดเรื่องกลยุทธ์การประเมินทางวิทยาศาสตร์คอมพิวเตอร์ อะไรคือความแตกต่างที่ละเอียดอ่อนระหว่างกลยุทธ์การประเมินและกลยุทธ์การลดที่บทความทั้งสองนี้บอกใบ้? พวกเขาเป็นเพียงสองแนวคิดที่คล้ายกันจากโดเมนที่แตกต่างกันหรือไม่

1
การอ้างอิงความจริงที่ว่า (0 = 1) หมายถึงเท็จต้องมีจักรวาลใน MLTT
มันเป็นความจริงที่รู้จักกันดีว่าการได้มาซึ่งความขัดแย้งจากความไม่เท่าเทียมกัน (ตัวอย่างเช่น ) ในทฤษฎีประเภทมาร์ติน - โลฟต้องใช้จักรวาล(0=1)→⊥(0=1)→⊥(0=1) \to \bot การพิสูจน์นั้นค่อนข้างตรงไปตรงมา - ในกรณีที่ไม่มีจักรวาลเราสามารถลบการพึ่งพาจากประเภทใด ๆ เพื่อให้ได้รูปแบบที่เรียบง่ายตามรูปร่างและเพื่อพิสูจน์ว่าหมายความว่าเราสามารถพิสูจน์p → ⊥สำหรับอะตอมpโดยพลการซึ่งเป็นไปไม่ได้แน่นอน(0=1)→⊥(0=1)→⊥(0=1) \to \botp→⊥p→⊥p \to \botppp อย่างไรก็ตามฉันไม่สามารถหาผู้ที่พิสูจน์เรื่องนี้ก่อน! ไม่มีใครมีการอ้างอิง?

1
อัลกอริทึมเพื่อกำหนดความเท่าเทียมกันของฟังก์ชั่นในแคลคูลัสแลมบ์ดาที่พิมพ์หรือไม่
เรารู้ว่าแลมบ์ดาที่พิมพ์ด้วยความเท่าเทียมกันนั้นสามารถตัดสินได้ เมื่อให้ M, N: σ→τมันจะตัดสินใจได้หรือไม่ว่าจะเป็น X: σ, MXหรือไม่≃β≃β≃_β

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

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

1
วรรณคดีเรื่องการวิเคราะห์นามแฝง
ฉันเขียนวิทยานิพนธ์ปริญญาโทของฉันใน CS และฉันทำงานกับการวิเคราะห์นามแฝง สิ่งที่ฉันสนใจคือการวิเคราะห์ที่ละเอียดอ่อนที่จำเป็นต้องมี ฉันกำลังค้นหาข้อความที่อธิบายพื้นฐานของเรื่องนี้อย่างละเอียด แต่ไม่สามารถระบุสิ่งที่เหมาะสมได้ ฉันรอดชีวิตจากหนังสือตำราจำนวนหนึ่งเกี่ยวกับคอมไพเลอร์และการวิเคราะห์แบบคงที่ แต่ไม่พบสิ่งใดที่นั่น ฉันพบเอกสารจำนวนมากที่ใช้การวิเคราะห์นามแฝง แต่ส่วนใหญ่เน้นไปที่ปัญหาที่ใช้การวิเคราะห์นามแฝงและไม่ได้อธิบายขั้นตอนวิธีการวิเคราะห์นามแฝงโดยละเอียด บางคนมุ่งเน้นที่ C ซึ่งไม่เหมาะสมเนื่องจากความซับซ้อนที่เพิ่มขึ้นของตัวชี้ทั่วไป ข้อความที่ดีที่สุดที่ฉันได้ค้นพบคือCompositional Pointer and Escape Analysis สำหรับโปรแกรม Javaโดย Whaley and Rinard มันเป็นกระดาษที่ยอดเยี่ยมและเป็นจุดเริ่มต้นที่ดี แต่มันไม่ได้กล่าวถึงการวิเคราะห์นามแฝงโดยเฉพาะ ปัญหาดูเหมือนทั่วไปดังนั้นฉันคาดหวังว่าจะมีอัลกอริทึมที่ยอมรับได้เพื่อแก้ปัญหา ไม่มีใครมีตัวชี้ไปยังข้อความในเรื่องนี้หรือไม่?

1
ความแตกต่างระหว่างความหมายและ denotation คืออะไร?
ในการเขียนโปรแกรมภาษาความหมายก็มักจะได้ยินว่าคนที่พูดคุยเกี่ยวกับความหมายและdenotation พวกเขาดูเหมือนจะไม่เหมือนกัน อะไรคือความแตกต่าง? อดีตเกี่ยวข้องกับความหมายในการปฏิบัติงานหรือไม่ในขณะที่ความหมายเชิง Denotational? ขอบคุณ

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

1
กฎการกำจัดแบบอิงการรวมเพื่อความเท่าเทียม
ไม่กี่ปีก่อนฉันวิ่งข้ามกฎซ้ายต่อไปนี้เพื่อความเท่าเทียมกันในแคลคูลัสตามลำดับ: s ≐ t ⇝θθ ( Γ ) ⊢ θ ( C)Γ, s ≐ เสื้อ⊢ Cs≐t⇝θθ(Γ)⊢θ(C)Γ,s≐t⊢C \frac{s \doteq t \leadsto \theta \qquad \theta(\Gamma) \vdash \theta(C)} {\Gamma, s \doteq t \vdash C} นี่คำนวณ unifier ทั่วไปมากที่สุดสำหรับและแล้วใช้ substition เพื่อสรุปและสมมติฐานทั้งหมดในบริบท\θ s T C Γs ≐ เสื้อ⇝ θs≐t⇝θs \doteq t \leadsto \thetaθθ\thetasssเสื้อttคCCΓΓ\Gamma สิ่งที่น่าสนใจเกี่ยวกับการรวมนี้คือมันเท่ากับพบการทดแทนสำหรับตัวแปรสากล (เช่น skolem) …

6
ลบการเรียกซ้ำ - ดูทฤษฎีหลังฉาก
ฉันยังใหม่กับไซต์นี้และคำถามนี้ไม่ได้อยู่ในระดับการวิจัย - แต่ก็ดี ฉันมีพื้นฐานด้านวิศวกรรมซอฟต์แวร์เล็กน้อยและแทบไม่มีเลยใน CSTheory แต่ฉันคิดว่ามันน่าสนใจ เพื่อให้เรื่องราวสั้น ๆ ฉันต้องการคำตอบที่ละเอียดยิ่งขึ้นต่อไปนี้หากคำถามนี้เป็นที่ยอมรับในไซต์นี้ ดังนั้นฉันรู้ว่าโปรแกรมแบบเรียกซ้ำทุกตัวมีแอนะล็อกซ้ำแล้วซ้ำอีกและฉันเข้าใจคำอธิบายยอดนิยมที่เสนอให้โดยการรักษาบางสิ่งที่คล้ายกับ "ระบบสแต็ก" และผลักดันการตั้งค่าสภาพแวดล้อมเช่นที่อยู่ผู้ส่ง ฯลฯ . เป็นรูปธรรมมากขึ้นผมอยากจะ (อย่างเป็นทางการ) ดูวิธีการหนึ่งไม่ได้พิสูจน์ว่าคำสั่งนี้ในกรณีที่คุณมีฟังก์ชั่นห่วงโซ่กล่าวอ้าง 0 นอกจากนี้จะเกิดอะไรขึ้นถ้ามีข้อความบางส่วนที่มีเงื่อนไขซึ่งอาจทำให้F ฉันโทรไปหาF j ได้บ้าง? นั่นคือกราฟการเรียกใช้ฟังก์ชันที่มีศักยภาพมีองค์ประกอบที่เชื่อมโยงกันอย่างมากF0→F1...Fผม→ Fฉัน+ 1...Fn→F0F0→F1...Fผม→Fผม+1...Fn→F0F_0 \rightarrow F_1 \ldots F_i \rightarrow F_{i+1} \ldots F_n \rightarrow F_0FผมFผมF_iFJFJF_j ฉันต้องการทราบว่าสถานการณ์เหล่านี้สามารถจัดการได้อย่างไรโดยแจ้งให้เราพูดถึงตัวแปลงซ้ำซ้ำบางส่วน และคำอธิบายด้วยคลื่นวิทยุที่ฉันอ้างถึงก่อนหน้านี้เพียงพอจริงๆสำหรับปัญหานี้หรือไม่? ฉันหมายความว่าเหตุใดฉันจึงพบว่าการลบการเรียกซ้ำในบางกรณีทำได้ง่าย โดยเฉพาะการลบการเรียกซ้ำออกจากการสำรวจเส้นทางล่วงหน้าของต้นไม้ไบนารีนั้นง่ายมาก - เป็นคำถามสัมภาษณ์มาตรฐาน แต่การลบการสอบถามซ้ำในกรณีที่ลำดับการโพสต์เป็นฝันร้ายสำหรับฉันเสมอ สิ่งที่ฉันถามจริงๆคือคำถาม222 (1) มีหลักฐานที่เป็นทางการ (น่าเชื่อถือมากกว่านี้) จริง ๆ หรือไม่ว่าการเรียกซ้ำสามารถเปลี่ยนเป็นการวนซ้ำได้? (2) …

3
การอนุมานประเภทสำหรับคำสั่งที่จำเป็นนอกเหนือจากที่ได้รับมอบหมาย
ในการค้นหาเอกสารวิจัยเกี่ยวกับระบบการพิมพ์สำหรับภาษาที่จำเป็นฉันจะหาวิธีแก้ปัญหาสำหรับภาษาที่มีการอ้างอิงที่ไม่แน่นอน แต่ไม่มีโครงสร้างการควบคุมที่จำเป็นอย่างแท้จริงเช่นตัวดำเนินการผสมลูปหรือเงื่อนไข ดังนั้นจึงไม่มีความชัดเจนว่าภาษาที่จำเป็นกับการอนุมานบางส่วนเช่นhttp://rust-lang.orgสามารถนำไปใช้ได้อย่างไร เอกสารไม่ได้กล่าวถึงประเภท parametrized เช่นList of aเนื่องจากประเภท parametrized เป็นส่วนขยายเล็กน้อยของระบบประเภท Hindley-Milner - อัลกอริทึมการรวมควรจะขยายและการอนุมานที่เหลือทำงานตามที่เป็นอยู่ อย่างไรก็ตามไม่สามารถเพิ่มงานที่มอบหมายได้เนื่องจากความขัดแย้งเกิดขึ้นดังนั้นต้องใช้เทคนิคพิเศษเช่นข้อ จำกัด ค่า ML คุณสามารถแนะนำเอกสารหรือหนังสือที่อธิบายถึงระบบการพิมพ์สำหรับภาษาที่มีลูปคำสั่งเงื่อนไขเงื่อนไข IO และคำสั่งผสมได้หรือไม่?

1
อ้างอิงถึงความไม่แน่นอนของโมดูลัสของความต่อเนื่องของฟังก์ชันใน PCF
ใครสามารถชี้ให้ฉันดูการอ้างอิงสำหรับความไม่แน่นอนของโมดูลัสการทำงานต่อเนื่องใน PCF \newcommand{\N}{\mathbb{N}} \newcommand{\bool}{\mathsf{bool}} Andrej Bauer ได้เขียนโพสต์บล็อกที่ดีมากในการสำรวจปัญหาบางอย่างในรายละเอียดเพิ่มเติม แต่ฉันจะสรุปเพียงเล็กน้อยของโพสต์ของเขาเพื่อให้ความรู้เกี่ยวกับคำถามนี้ Baire พื้นที่BBBเป็นชุดของลำดับจำนวนธรรมชาติหรือเท่าชุดของฟังก์ชั่นจากธรรมชาติเพื่อธรรมชาติN→NN→N\N \to \N n สำหรับคำถามนี้เราจะ จำกัด ความสนใจของเราเฉพาะสตรีมที่คำนวณได้เท่านั้น ตอนนี้ฟังก์ชั่นf:B→boolf:B→boolf : B \to \boolนั้นต่อเนื่องหากทุก ๆxs∈Bxs∈Bxs \in Bค่าของf(xs)f(xs)f(xs)ขึ้นอยู่กับจำนวนที่แน่นอนขององค์ประกอบของxsxsxsและมันต่อเนื่องได้ถ้าเราสามารถคำนวณบน จำกัด จำนวนองค์ประกอบของxsxsxsที่ต้องการ ในการคำนวณบางรุ่นมันเป็นไปได้ที่จะเขียนโปรแกรม modulus:(B→bool)→B→Nmodulus:(B→bool)→B→N\mathsf{modulus} : (B \to \bool) \to B \to \Nซึ่งรับฟังก์ชั่นคำนวณบนพื้นที่ Baire และองค์ประกอบของพื้นที่ Baire และคืนขอบเขตบนจำนวนองค์ประกอบของสตรีม เคล็ดลับหนึ่งสำหรับการนำสิ่งนี้ไปใช้คือการใช้ที่จัดเก็บในตัวเครื่องเพื่อบันทึกดัชนีสูงสุดลงในสตรีมที่เห็น: let modulus f xs = let r = ref …

2
จำกัด เฉพาะคอลเล็กชันที่ปลอดล็อคหรือไม่
David Rodríguez - dribeas เขียนไว้ในความคิดเห็นเกี่ยวกับ StackOverflowว่า "คอลเลกชันบางอย่างอาจไม่สามารถใช้งานได้โดยไม่ล็อค" ฉันไม่แน่ใจว่านี่เป็นเรื่องจริงหรือไม่และฉันไม่สามารถหาข้อพิสูจน์ได้ คำสั่งนี้ไม่แม่นยำมาก แต่ให้ฉันลองใช้คำใหม่อย่างเป็นทางการเล็กน้อย: สำหรับคอลเลกชันทุกประเภทCมีคอลเลกชันประเภทล็อคฟรีCLFที่มีชุดปฏิบัติการเดียวกันและที่แต่ละการดำเนินการบนCLFมีความซับซ้อนขนาดใหญ่-O Cเช่นเดียวกับการดำเนินงานที่สอดคล้องกันใน ฉันไม่คิดว่าจะมีการเปลี่ยนแปลงอีกต่อไป

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