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

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

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


6
ทำไมต้องเป็นธรรมชาติแทนที่จะเป็นจำนวนเต็ม?
ฉันสนใจว่าเพราะเหตุใดจำนวนธรรมชาติจึงเป็นที่รักของผู้เขียนหนังสือเกี่ยวกับทฤษฎีการเขียนโปรแกรมภาษาและทฤษฎีการพิมพ์ (เช่น J. Mitchell, รากฐานสำหรับภาษาโปรแกรมและ B. Pierce, ประเภทและภาษาโปรแกรม) คำอธิบายของแลมบ์ดาแคลคูลัสที่พิมพ์ได้อย่างง่ายและโดยเฉพาะอย่างยิ่งภาษาการเขียนโปรแกรม PCF มักขึ้นอยู่กับแน็ตและบูล สำหรับคนที่ใช้และสอน PL อุตสาหกรรมที่ใช้งานทั่วไปมันเป็นเรื่องที่เป็นธรรมชาติมากขึ้นในการรักษาจำนวนเต็มแทนที่จะเป็นธรรมชาติ คุณช่วยพูดถึงเหตุผลที่ดีได้ไหมว่าทำไมนักทฤษฎี PL ชอบของนัท นอกจากนั้นมันมีความซับซ้อนน้อยกว่าเล็กน้อย มีเหตุผลพื้นฐานใด ๆ หรือเป็นเพียงประเพณีที่ให้เกียรติ? UPDสำหรับความคิดเห็นทั้งหมดที่เกี่ยวกับ "พื้นฐาน" ของธรรมชาติ: ฉันค่อนข้างรู้เกี่ยวกับสิ่งดีๆเหล่านั้น แต่ฉันอยากจะดูตัวอย่างเมื่อจำเป็นอย่างยิ่งที่จะต้องมีคุณสมบัติเหล่านั้นในทฤษฎีประเภทของทฤษฎีของ PL เช่นการเหนี่ยวนำที่กล่าวถึงอย่างกว้างขวาง เมื่อเรามีลอจิกประเภทใด (ซึ่งก็คือการพิมพ์ LC) เช่นเดียวกับตรรกะลำดับแรกพื้นฐานเราใช้การเหนี่ยวนำจริงๆ - แต่การเหนี่ยวนำบนต้นไม้ที่ได้มา (ซึ่งเรามีในแลมบ์ดาด้วย) โดยทั่วไปแล้วคำถามของฉันมาจากผู้คนในอุตสาหกรรมที่ต้องการได้รับทฤษฎีพื้นฐานเกี่ยวกับการเขียนโปรแกรมภาษา พวกเขาเคยมีจำนวนเต็มในโปรแกรมของพวกเขาและไม่มีข้อโต้แย้งที่เป็นรูปธรรมและการใช้งานกับทฤษฎีที่กำลังศึกษา (ทฤษฎีประเภทในกรณีของเรา) ทำไมการเรียนภาษาที่มีเพียงนัทพวกเขารู้สึกผิดหวังมาก

4
โปรแกรมแยกวิเคราะห์ที่ทรงพลังที่สุดคืออะไร?
ในฐานะโปรเจ็กต์ด้านข้างฉันกำลังเขียนภาษาโดยใช้ Python ฉันเริ่มต้นด้วยการใช้ดิ้น / วัวกระทิงที่เรียกว่า Ply แต่มากับขอบในอำนาจของสิ่งที่ฉันสามารถแสดงด้วยรูปแบบของไวยากรณ์นั้นและฉันไม่สนใจที่จะแฮ็คภาษาของฉันเพราะความต้านทานไม่ตรงกัน เครื่องมือ ดังนั้นฉันไม่รังเกียจที่จะเขียนของตัวเอง ดังนั้นโปรแกรมแยกวิเคราะห์ที่ทรงพลังที่สุดคืออะไร? ยินดีต้อนรับการอ้างอิงถึงเอกสาร (รวมถึงบทความเบื้องต้นเพิ่มเติม) (ฉันรู้ว่า 'พลัง' ไม่ได้นิยามไว้อย่างชัดเจน แต่ลองมาดูกันหน่อยสิและดูว่าคำตอบนั้นไปที่ใด)

6
พลังการคำนวณสูงสุดของการนำ C ไปใช้งาน
ถ้าเราไปตามหนังสือ (หรือรุ่นอื่น ๆ ของข้อกำหนดภาษาถ้าคุณต้องการ), การใช้พลังงาน C สามารถมีเท่าไหร่? โปรดทราบว่า“ การติดตั้ง C” มีความหมายทางเทคนิค: มันเป็นอินสแตนซ์เฉพาะของสเปคภาษาการเขียนโปรแกรม C ที่มีการบันทึกพฤติกรรมการใช้งานที่กำหนดไว้ การติดตั้ง AC ไม่จำเป็นต้องสามารถทำงานบนคอมพิวเตอร์จริงได้ มันต้องใช้ภาษาทั้งหมดรวมถึงวัตถุทุกชิ้นที่มีการแทนค่าบิตสตริงและประเภทที่มีขนาดที่กำหนดการนำไปใช้ สำหรับวัตถุประสงค์ของคำถามนี้ไม่มีที่เก็บข้อมูลภายนอก อินพุต / เอาต์พุตเดียวที่คุณสามารถทำได้คือgetchar(เพื่ออ่านอินพุตโปรแกรม) และputchar(เพื่อเขียนเอาต์พุตของโปรแกรม) นอกจากนี้ยังมีโปรแกรมใด ๆ ที่จะเรียกไม่ได้กำหนดพฤติกรรมที่ไม่ถูกต้อง: โปรแกรมที่ถูกต้องจะต้องมีพฤติกรรมที่กำหนดโดยสเปค C บวกรายละเอียดการดำเนินงานของพฤติกรรมการดำเนินงานที่กำหนดไว้ในภาคผนวก J (สำหรับ C99) โปรดทราบว่าการเรียกฟังก์ชั่นห้องสมุดที่ไม่ได้กล่าวถึงในมาตรฐานเป็นพฤติกรรมที่ไม่ได้กำหนด ปฏิกิริยาเริ่มต้นของฉันคือการใช้งาน C ไม่มีอะไรมากไปกว่าระบบ จำกัด อัตโนมัติเนื่องจากมันมีข้อ จำกัด เกี่ยวกับจำนวนหน่วยความจำที่กำหนดแอดเดรสได้ (คุณไม่สามารถจัดการกับหน่วยความจำได้มากกว่าsizeof(char*) * CHAR_BITบิตเนื่องจากหน่วยความจำที่แตกต่างกัน ในตัวชี้ไบต์) อย่างไรก็ตามฉันคิดว่าการใช้งานสามารถทำได้มากกว่านี้ เท่าที่ฉันสามารถบอกได้มาตรฐานไม่มีข้อ จำกัด เกี่ยวกับความลึกของการเรียกซ้ำ ดังนั้นคุณสามารถเรียกใช้ฟังก์ชันเรียกซ้ำได้มากเท่าที่คุณต้องการเฉพาะการโทรจำนวน จำกัด …

6
ข้อเสนอและการตัดสินต่างกันอย่างไร?
ฉันสับสนกับข้อแตกต่างเล็กน้อยระหว่างข้อเสนอและการตัดสินเมื่อสัมผัสกับทฤษฎีประเภทสัญชาตญาณ มีใครสามารถอธิบายให้ฉันฟังได้ว่าอะไรคือประเด็นของการแยกแยะพวกเขาและอะไรที่ทำให้พวกเขาแตกต่าง? โดยเฉพาะอย่างยิ่งในมุมมองของ Curry-Howard Isomorphsim

2
การดำเนินการลอการิทึมหรือรูทในประเภทพื้นที่คืออะไร?
ผมเพิ่งอ่านสอง dualities การคำนวณ: ประเภทเชิงลบและ กระดาษขยายผลรวมชนิดและสินค้าประเภทให้ความหมายไปชนิดและa - ba/b ซึ่งแตกต่างจากการเพิ่มและการคูณไม่มีหนึ่งในสองผู้ผกผันของการยกกำลังลอการิทึมและการรูท หากฟังก์ชันประเภท (a → b) เป็นการยกกำลังตามทฤษฎีประเภทให้ประเภทa → b(หรือb^a) มันมีความหมายว่ามีประเภทlogb(c)หรือประเภทa√c? มันสมเหตุสมผลไหมที่จะขยายลอการิทึมและรูทเป็นประเภทเลย? ถ้าเป็นเช่นนั้นมีงานใด ๆ ในพื้นที่นี้และมีคำแนะนำที่ดีเกี่ยวกับวิธีที่จะเข้าใจผลกระทบอย่างไรบ้าง? ฉันพยายามหาข้อมูลเกี่ยวกับเรื่องนี้ผ่านทางตรรกะโดยหวังว่าการโต้ตอบของ Curry-Howard จะช่วยฉันได้ แต่ก็ไม่มีประโยชน์

5
อะไรคือข้อแตกต่างระหว่างการพิสูจน์และโปรแกรม (หรือระหว่างข้อเสนอและประเภท)?
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Theoretical Computer Science Exchange Exchange อพยพ 8 ปีที่ผ่านมา เนื่องจากCurry-Howard Correspondenceแพร่กระจายอย่างกว้างขวางดังนั้นจึงมีความแตกต่างระหว่างหลักฐานและโปรแกรม (หรือระหว่างข้อเสนอและประเภท)? เราสามารถระบุได้จริงเหรอ?

5
มีระบบตรวจสอบอย่างเป็นทางการที่มีคำอธิบายประกอบสำหรับภาษาการเขียนโปรแกรมที่ใช้งานได้จริงหรือไม่?
ACSL (ภาษาข้อกำหนดของ Ansi C) เป็นข้อกำหนดสำหรับรหัส C ซึ่งมีหมายเหตุประกอบเป็นความคิดเห็นพิเศษที่ช่วยให้สามารถตรวจสอบรหัส C ได้อย่างเป็นทางการ ฉันไม่ได้ดูมัน แต่ฉันคิดว่าวิธีการอย่างเป็นทางการที่ใช้ในการตรวจสอบACSLจะคล้ายกับ Hoare Logic สำหรับภาษาที่ใช้งานได้จริงเช่น Haskell ฉันไม่สามารถจินตนาการได้ว่าจะใช้วิธีการแบบใดในการยืนยันที่เป็นทางการ มีใครทำสิ่งที่คล้ายกับACSLแต่สำหรับภาษาทำงานบริสุทธิ์? ถ้าไม่ได้มีการวิจัยใด ๆ เกี่ยวกับการตรวจสอบอย่างเป็นทางการในรูปแบบคำอธิบายประกอบข้อมูลจำเพาะสำหรับภาษาทำงาน ฉันรู้ว่ามีการพิมพ์ที่ต้องพึ่งพาซึ่งรองรับหลายภาษา (Agda, Idris, ฯลฯ ... ) แต่ในการพิมพ์ที่ขึ้นอยู่กับ Haskell นั้นเป็นเรื่องยากโดยไม่ต้องใช้ตัวช่วยพิมพ์ (ไม่สามารถอ่านได้บ้าง) ด้วยความคิดนั้นและเนื่องจาก Haskell มีการสนับสนุนห้องสมุดที่ดีกว่า Agda และ Idris ฉันจึงเชื่อว่าระบบดังกล่าวสำหรับการตรวจสอบการทำงานอย่างเป็นทางการอาจมีประโยชน์ แต่ฉันไม่ทราบว่ามีการทำวิจัยนี้หรือไม่

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

2
บริบทไวและไวยากรณ์ที่สำคัญ
1) อะไรคือสิ่งที่ถ้ามีความสัมพันธ์ระหว่างการพิมพ์แบบคงที่และไวยากรณ์อย่างเป็นทางการคืออะไร? 2) โดยเฉพาะอย่างยิ่งมันเป็นไปได้ไหมที่หุ่นยนต์ที่มีข้อ จำกัด เชิงเส้นเพื่อตรวจสอบว่าพูดว่าโปรแกรม C ++ หรือ SML นั้นพิมพ์ได้ดีหรือไม่? ออโตเมติกแบบซ้อนกัน? 3) มีวิธีธรรมชาติในการแสดงกฎการพิมพ์แบบคงที่ในแง่ไวยากรณ์ที่เป็นทางการ?

6
ฉันควรคิดอย่างไรเกี่ยวกับมุ้งพิสูจน์
ในคำตอบของเขาที่จะคำถามนี้ , สเตฟานดอนชี้ให้ฉันไปเป็นขั้นตอนวิธีการฟื้นฟูพหุนามเวลาสำหรับการพิสูจน์ในตรรกะเชิงเส้น การพิสูจน์ในกระดาษของ Girard ใช้อวนพิสูจน์ซึ่งเป็นลักษณะเชิงตรรกะเชิงเส้นที่จริงฉันไม่รู้มากเกี่ยวกับ ตอนนี้ฉันได้ลองอ่านเอกสารเกี่ยวกับมุ้งมาก่อน (เช่นบันทึกของ Pierre-Louis Curienที่พวกเขา) แต่ฉันไม่เข้าใจพวกเขาจริงๆ ดังนั้นคำถามของฉันคือฉันจะคิดถึงพวกเขาอย่างไร โดย "วิธีคิดเกี่ยวกับพวกเขา" ฉันหมายถึงทั้งสัญชาตญาณอย่างไม่เป็นทางการที่อยู่เบื้องหลังพวกเขา (เช่นวิธีที่พวกเขาประพฤติตนคำนวณหรือวิธีที่พวกเขาเกี่ยวข้องกับการเรียงลำดับ) และทฤษฎีบทเกี่ยวกับพวกเขาที่ฉันควรพิสูจน์ด้วยตนเองว่า ในการตอบคำถามนี้คุณสามารถสันนิษฐานได้ว่า (1) ฉันรู้ทฤษฎีการพิสูจน์ของลอจิกเชิงเส้นอย่างดี (รวมถึงสิ่งต่าง ๆ เช่นวิธีการพิสูจน์การตัดการตัดและในรูปแบบที่โฟกัสด้วย), (2) ความหมายเชิงของพวกมัน หรือผ่านการโน้มน้าวระหว่างวันและ (3) พื้นฐานขั้นพื้นฐานของการก่อสร้าง GoI

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

4
CS เชิงทฤษฎีสนใจเรื่องการพิสูจน์สัญชาตญาณเมื่อใด
จากสิ่งที่ฉันเข้าใจ (ซึ่งน้อยมากดังนั้นโปรดแก้ไขฉันในที่ที่ฉันทำผิด!) ทฤษฎีภาษาการเขียนโปรแกรมมักเกี่ยวข้องกับบทพิสูจน์ "สัญชาตญาณ" ในการตีความของฉันเองวิธีการกำหนดให้เราจริงจังกับผลที่ตามมาของการคำนวณทางตรรกะและการพิสูจน์ได้ ไม่สามารถพิสูจน์ได้เว้นแต่ว่ามีอัลกอริทึมที่สร้างผลที่ตามมาจากสมมติฐาน เราอาจปฏิเสธในฐานะที่เป็นหลักการของกลางที่ถูกแยกออกเช่นเพราะมันแสดงวัตถุบางอย่างซึ่งเป็นหรือซึ่งไม่เป็นโครงสร้าง¬ XXXX¬X¬X\lnot X ปรัชญาข้างต้นอาจทำให้เราชอบการพิสูจน์ที่ถูกต้องตามสัญชาตญาณมากกว่าสิ่งที่ไม่ใช่ อย่างไรก็ตามฉันไม่เคยเห็นข้อกังวลใด ๆ เกี่ยวกับการใช้ตรรกะเชิงสัญชาตญาณในเอกสารในส่วนอื่น ๆ ของ CS เชิงทฤษฎี เรามีความสุขที่จะพิสูจน์ผลลัพธ์ของเราโดยใช้ตรรกะคลาสสิก ตัวอย่างเช่นเราอาจจินตนาการโดยใช้หลักการของตัวกลางที่แยกเพื่อพิสูจน์ว่าอัลกอริทึมนั้นถูกต้อง กล่าวอีกนัยหนึ่งเราใส่ใจและยึดถือจักรวาลที่มีข้อ จำกัด ด้านการคำนวณอย่างจริงจังในผลลัพธ์ของเรา แต่ไม่จำเป็นในการพิสูจน์ผลลัพธ์เหล่านี้ของเรา 1. นักวิจัยในทฤษฎี CS มีความกังวลเกี่ยวกับการเขียนหลักฐานที่ถูกต้องตามสัญชาตญาณหรือไม่? ฉันสามารถจินตนาการได้ง่าย ๆ ว่าสาขาย่อยของวิทยาการคอมพิวเตอร์เชิงทฤษฎีที่พยายามเข้าใจเมื่อผลลัพธ์ TCS โดยเฉพาะอย่างยิ่งอัลกอริทึมนั้นอยู่ในตรรกะของสัญชาตญาณ แต่ฉันยังไม่เจอเลย 2. มีข้อโต้แย้งทางปรัชญาใดบ้างที่ควร? ดูเหมือนว่าเราสามารถอ้างได้ว่าผลลัพธ์ของวิทยาการคอมพิวเตอร์ควรได้รับการพิสูจน์โดยสัญชาตญาณเมื่อเป็นไปได้และเราควรจะรู้ว่าต้องใช้ผลลัพธ์ใดเช่น PEM มีใครพยายามโต้แย้งเช่นนี้หรือไม่? หรืออาจจะมีฉันทามติว่าคำถามนี้ไม่สำคัญมาก? 3.ในฐานะที่เป็นคำถามด้านฉันอยากรู้อยากเห็นตัวอย่างของกรณีที่สิ่งนี้จริง: มีผล TCS สำคัญที่รู้จักกันในตรรกะคลาสสิก แต่ไม่ได้อยู่ในตรรกะปรีชาญาณ? หรือสงสัยว่าจะไม่ถือในตรรกะปรีชา ขอโทษสำหรับความนุ่มนวลของคำถาม! มันอาจต้องใช้ rewording หรือ reinterpretation …

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

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