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

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

4
แบบจำลองวัตถุ (OOP) ในทฤษฎีประเภทขึ้นอยู่กับ
ฉันสนใจในการสร้างแบบจำลองวัตถุจากการเขียนโปรแกรมเชิงวัตถุในทฤษฎีประเภทขึ้นอยู่กับ ในฐานะที่เป็นแอพพลิเคชั่นที่เป็นไปได้ฉันต้องการมีแบบจำลองที่ฉันสามารถอธิบายคุณสมบัติที่แตกต่างของภาษาการเขียนโปรแกรมที่จำเป็น ฉันสามารถหาเอกสารเกี่ยวกับการสร้างแบบจำลองวัตถุในทฤษฎีประเภทพึ่งพาซึ่งก็คือ: การเขียนโปรแกรมเชิงวัตถุในทฤษฎีชนิดพึ่งพาโดย A. Setzer (2006) มีการอ้างอิงเพิ่มเติมในหัวข้อที่ฉันพลาดไปหรืออาจจะมีการอ้างอิงล่าสุดหรือไม่ อาจมีการดำเนินการ (เช่นหลักฐาน) สำหรับนักทฤษฎีบทเช่น Coq หรือ Agda หรือไม่?

2
อะไรคือกฎเท่าเทียมกันสำหรับประเภทศูนย์?
ข้อจำกัดความรับผิดชอบ : ในขณะที่ฉันสนใจทฤษฎีประเภทฉันไม่คิดว่าตัวเองเป็นผู้เชี่ยวชาญด้านทฤษฎีประเภท ในแคลคูลัสแลมบ์ดาที่พิมพ์ไว้ชนิด zeroไม่มีตัวสร้างและตัวกำจัดที่ไม่ซ้ำกัน: Γ⊢M:0Γ⊢initial(M):AΓ⊢M:0Γ⊢initial(M):A\frac{\Gamma \vdash M \colon 0}{\Gamma \vdash initial (M) \colon A} จากจุด denotational ในมุมมองของสมการที่ initial(M1)=initial(M2)initial(M1)=initial(M2)initial (M_1) = initial(M_2)จะเห็นได้ชัด (เมื่อชนิดทำให้ความรู้สึก) แต่จากมุมมองที่ฉันยังสามารถอนุมานว่าเมื่อM,M′:0M,M′:0M,M' \colon 0แล้ว: M=M′M=M′M = M' ' การหักนี้ดูแข็งแกร่งขึ้นถึงแม้จะมีรุ่นใดรุ่นหนึ่งที่แสดงว่ามันทำให้ฉันหลง (ฉันมีสัญชาตญาณเชิงทฤษฎีที่พิสูจน์ว่า: มันไม่สำคัญว่าคุณใช้ความขัดแย้งเพื่อให้ได้มาซึ่งพลเมือง แต่อาจมีหลักฐานที่แตกต่างกัน) ดังนั้นคำถามของฉันคือ: อะไรคือกฎหมายสมการมาตรฐานสำหรับประเภทศูนย์? มีใครบ้างที่จำแนกเป็นηη\etaหรือββ\betaกฎหมาย?

3
ความปลอดภัยของหน่วยความจำประเภทที่ไม่มีหน่วยความจำแบบแมนนวลจัดการหรือการรวบรวมขยะรันไทม์?
สมมติว่าเราต้องการภาษาการเขียนโปรแกรมที่ใช้งานง่ายและบริสุทธิ์เช่น Haskell หรือ Idris ซึ่งมีจุดประสงค์เพื่อการเขียนโปรแกรมระบบโดยไม่มีการรวบรวมขยะและไม่มีเวลาทำงาน (หรืออย่างน้อยก็ไม่เกิน C และ Rust "runtimes") สิ่งที่สามารถทำงานได้ไม่มากก็น้อยบนโลหะเปลือย มีตัวเลือกอะไรบ้างสำหรับความปลอดภัยของหน่วยความจำแบบสแตติกที่ไม่ต้องการการจัดการหน่วยความจำแบบแมนนวลหรือการรวบรวมขยะแบบเรียลไทม์และวิธีการแก้ไขปัญหาโดยใช้ระบบประเภทของฟังก์ชั่นบริสุทธิ์เช่น Haskell หรือ Idris

2
อะไรคือความสัมพันธ์ระหว่าง Alternative, MonadPlus (LeftCatch) และ MonadPlus (LeftDistributive)?
การติดตามตัวอย่างของ Monad ซึ่งเป็นทางเลือก แต่ไม่ใช่ MonadPlus คืออะไร : สมมติว่าเป็น monad อะไรคือความสัมพันธ์ betweem เมตรเป็นทางเลือกที่MonadPlusCatchและMonadPlusDistr ? mmmmmmสำหรับแต่ละคู่ที่เป็นไปได้ทั้งหกคู่นั้นฉันต้องการพิสูจน์ว่ามีนัยหนึ่งหรืออีกตัวอย่างหนึ่งที่ไม่เป็นเช่นนั้น (ฉันกำลังใช้ MonadPlusCatchเพื่อแยกความแตกต่างของMonadPlusที่เป็นไปตามกฎLeft-Catch : mplus (return a) b = return a MonadPlusDistrเพื่อแยกความแตกต่างของMonadPlusที่ทำให้กฎการกระจายซ้าย : mplus a b >>= k = mplus (a >>= k) (b >>= k) ดูMonadPlus บน HaskellWiki ) ความรู้และสัญชาตญาณปัจจุบันของฉันคือ: MonadPlusDist ทางเลือก - น่าจะเป็นจริง - ดูเหมือนว่าตรงไปตรงมาฉันเชื่อว่าฉันมีร่างของหลักฐานฉันจะตรวจสอบและถ้ามันถูกต้องฉันจะโพสต์มัน …

6
ฟังก์ชั่นที่แคลคูลัสแลมบ์ดาไม่สามารถคำนวณได้
ฉันแค่อยากรู้ตัวอย่างของฟังก์ชั่นที่สามารถคำนวณได้โดยแคลคูลัสแลมบ์ดาที่ไม่ได้พิมพ์ ในฐานะที่ฉันเป็นผู้เริ่มต้นการกล่าวซ้ำ ๆ ของข้อมูลพื้นฐานบางอย่างจะได้รับการชื่นชม ขอบคุณ แก้ไข: โดย lambda calculi ที่พิมพ์ฉันตั้งใจจะรู้เกี่ยวกับ System F และแคลคูลัสแลมบ์ดาที่พิมพ์ง่าย ตามฟังก์ชั่นฉันหมายถึงฟังก์ชันใด ๆ ที่คำนวณได้ของทัวริง

2
มีการสำรวจความหมายของฟีเจอร์ภาษาการเขียนโปรแกรมต่างๆหรือไม่?
มีแบบสำรวจ (จากบทความในบทหนังสือบทช่วยสอนการเชื่อมโยง ... ) ของความหมายของฟีเจอร์ภาษาการเขียนโปรแกรมต่างๆหรือไม่? เดิมทีฉันมีคุณสมบัติของ D อยู่ที่นี่แล้วhttp://www.digitalmars.com/d/2.0/comparison.html ฉันอยากจะดูว่าฉันจะได้อะไรจากที่นี่แม้ว่าฉันจะถามคำถามแบบเดียวกันกับ stackoverflowและเข้าใจว่าทั้งสองไซต์มีมุมมองที่แตกต่างกัน ขอบคุณคำตอบของคุณจริงๆ! ขอบคุณ Dave Clarke สำหรับคำแนะนำของเขาเกี่ยวกับเมตาดาต้า!


1
ตัวอย่างที่คำแลมบ์ดาปกติที่เล็กที่สุดนั้นไม่เร็วที่สุด
ให้ของλ -terms ถูกนิยามดังนี้:sizesizesizeλλ\lambda ,size(x)=1size(x)=1size(x) = 1 size(λx.t)=size(t)+1size(λx.t)=size(t)+1size(λx.t) = size(t) + 1 , size(ts)=size(t)+size(s)+1size(ts)=size(t)+size(s)+1size(t s) = size(t) + size(s) + 11 ปล่อยให้ความซับซ้อนของ -termถูกกำหนดเป็นจำนวนการลดเบต้าแบบขนานจากเป็นรูปแบบปกติ (ใช้ผู้ประเมินที่ดีที่สุดในแง่ความรู้สึกของ Levy)λλ\lambdattttxtxt x ฉันกำลังมองหาตัวอย่างของปกติ สองตัวสำหรับฟังก์ชั่นเดียวกันโดยที่คำที่ใหญ่กว่ามีความซับซ้อนต่ำกว่าλλ\lambda ... แก้ไขเพื่อความชัดเจน เนื่องจากดูเหมือนว่ามันไม่ชัดเจนว่าฉันขออะไรฉันจะลองยกตัวอย่าง มักจะมีความเชื่อว่าคำจำกัดความ "ไร้เดียงสา" / "ง่ายที่สุด" ของฟังก์ชั่นนั้นช้าและไม่เหมาะสม ประสิทธิภาพที่ดีขึ้นจะเพิ่มความซับซ้อนของคำศัพท์เนื่องจากคุณต้องการเพิ่มโครงสร้างข้อมูลสูตร ฯลฯ ตัวอย่างที่ยอดเยี่ยมคือfibonacciซึ่งสามารถนิยามได้ว่า "ไร้เดียงสา" ดังนี้: -- The fixed fibonacci definition fib_rec fib n = if …

1
ช่องว่างการเชื่อมโยงกันมี pullbacks และ pushouts?
\newcommand{\symp}{\Bumpeq} ≎X≎X\symp_XXXX(X,≎X)(X,≎X)(X, \symp_X)f:X→Yf:X→Yf : X \to Yf⊆X×Yf⊆X×Yf \subseteq X \times Y(x,y)∈f(x,y)∈f(x,y) \in f(x′,y′)∈f(x′,y′)∈f(x',y') \in f ถ้าดังนั้นและx≎Xx′x≎Xx′x \symp_X x'y≎Yy′y≎Yy′y \symp_Y y' ถ้าและแล้วx'x≎Xx′x≎Xx′x \symp_X x'y=y′y=y′y = y'x=x′x=x′x = x' หมวดหมู่ของช่องว่างการเชื่อมโยงกันเป็นทั้งคาร์ทีเซียนและ monoidal ปิด ฉันต้องการที่จะรู้ว่าเมื่อ pullbacks หรือ pushouts มีอยู่สำหรับหมวดหมู่นี้และเมื่อมีอนาล็อกแบบ monoidal บางส่วนของ pullbacks หรือ pushout อยู่ (และวิธีการกำหนดในกรณีที่แนวคิดนี้เหมาะสม)

2
การทดแทนทางพันธุกรรมด้วยลำดับชั้นจักรวาล
ฉันได้อ่านเกี่ยวกับการทดแทนทางพันธุกรรมสำหรับแคลคูลัสแลมบ์ดาอย่างง่ายและสำหรับกรอบตรรกะที่มีคำศัพท์และประเภทที่แตกต่างกัน ฉันสงสัยว่ามีตัวอย่างของการทดแทนทางพันธุกรรมในระบบที่พิมพ์อย่างพึ่งพากันด้วยลำดับชั้นจักรวาลหรือไม่? เช่นที่Tr u e : Se t0: Se t1: Se t2TRยูอี:Sอีเสื้อ0:Sอีเสื้อ1:Sอีเสื้อ2 True : Set_0 : Set_1:Set_2เป็นต้น ฉันสงสัยโดยเฉพาะอย่างยิ่งว่าจะสร้างมาตรการการเหนี่ยวนำในระบบดังกล่าวได้อย่างไร รุ่นที่พิมพ์ง่าย ๆ จะลดลงตามโครงสร้างในประเภทของตัวแปรที่ถูกแทนที่ วิธีนี้ใช้ไม่ได้กับประเภทที่ขึ้นต่อกันสำหรับกระดาษที่ฉันเชื่อมโยงนั้นใช้การลบแบบง่ายๆของคำศัพท์และทำการเหนี่ยวนำรูปร่างของประเภทนั้น อย่างไรก็ตามการลบประเภทง่าย ๆ ไม่สามารถใช้กับลำดับชั้นของจักรวาลได้เพราะถ้าคุณมีสิ่งนี้: ฉ: ( x : Se t1) → x → Tอายูอีฉ:(x:Sอีเสื้อ1)→x→TRยูอี f : (x : Set_1)\to x \to Trueบอกเป็นนัยว่า ฉ ( ( y: Tr u e …

5
การแทนค่าตัวแปรที่ถูกผูกไว้กับฟังก์ชั่นจากการใช้งานเพื่อยึดประสาน
ปัญหาของการเป็นตัวแทนของตัวแปรที่ถูกผูกไว้ในไวยากรณ์และโดยเฉพาะอย่างยิ่งที่ทดแทนการหลีกเลี่ยงการจับภาพเป็นที่รู้จักกันดีและมีจำนวนของการแก้ปัญหา: ชื่อตัวแปรที่มีความเท่าเทียมกันอัลฟา, ดัชนี de Bruijn แต่ดูเหมือนว่าจะมีวิธีอื่นที่ค่อนข้างชัดเจนซึ่งฉันไม่เคยเห็นมาก่อนเลย กล่าวคือในไวยากรณ์พื้นฐานเรามีเพียงหนึ่ง "ตัวแปร" คำพูดที่เขียนแล้วแยกเราให้ฟังก์ชั่นที่แผนที่แต่ละตัวแปรเครื่องผูกในที่มีขอบเขตมันโกหก ดังนั้นλระยะยาวเช่น∙∙\bulletλλ\lambda λx.(λy.xy)λx.(λy.xy) \lambda x. (\lambda y. x y) จะเขียนλและฟังก์ชั่นจะ map แรก∙แรกλและครั้งที่สอง∙ที่สองλ ดังนั้นมันเหมือนกับดัชนี de Bruijn เพียงแทนที่จะต้อง "นับλ s" เมื่อคุณกลับออกจากคำศัพท์เพื่อค้นหาสารยึดเกาะที่สอดคล้องกันคุณเพียงแค่ประเมินฟังก์ชั่น (หากแสดงสิ่งนี้เป็นโครงสร้างข้อมูลในการดำเนินการฉันจะคิดว่าการจัดเตรียมออบเจ็กต์คำศัพท์แต่ละตัวแปรด้วยตัวชี้ / การอ้างอิงอย่างง่ายไปยังออบเจ็กต์คำที่สอดคล้องกัน)λ.(λ.∙∙)λ.(λ.∙∙)\lambda. (\lambda. \bullet\bullet)∙∙\bulletλλ\lambda∙∙\bulletλλ\lambdaλλ\lambda เห็นได้ชัดว่าสิ่งนี้ไม่เหมาะสมสำหรับการเขียนไวยากรณ์บนหน้าเว็บเพื่อให้มนุษย์อ่าน แต่แล้วก็ไม่มีดัชนี de Bruijn ฉันคิดว่ามันสมเหตุสมผลดีทางคณิตศาสตร์และโดยเฉพาะอย่างยิ่งมันทำให้การทดแทนการหลีกเลี่ยงการจับภาพเป็นเรื่องง่ายมาก: เพียงแค่วางในเทอมที่คุณใช้แทนและใช้ฟังก์ชันการรวมกัน มันเป็นความจริงที่ว่ามันไม่ได้มีความคิดเกี่ยวกับ "ตัวแปรอิสระ" แต่แล้ว (อีกครั้ง) ไม่ได้ทำดัชนีเดอบรูจน์จริง ๆ ; ในทั้งสองกรณีคำที่มีตัวแปรอิสระจะแสดงคำที่มีรายการ "ตัวยึด" บริบทอยู่ด้านหน้า ฉันทำบางสิ่งบางอย่างหายไปและมีเหตุผลบางอย่างที่การแสดงนี้ไม่ทำงานหรือไม่ มีปัญหาที่ทำให้แย่กว่าคนอื่น …

3
ทฤษฎีภาษาโปรแกรมและพีชคณิตนามธรรม
มีแอพพลิเคชั่นของ Abstract Algebra ในการเขียนโปรแกรมทฤษฎีภาษาหรือไม่? มีอะไรที่จะเป็นประโยชน์ในการออกแบบภาษาและการใช้งานคอมไพเลอร์หรือไม่?

2
การอ้างอิงถึงภาษาการเขียนโปรแกรมโดยยึดตามตรรกะแบบมีเงื่อนไข
logics มีเงื่อนไขนี้ logics ซึ่งขยายความหมายตรรกะแบบดั้งเดิมกับผู้ประกอบกิริยาที่สอดคล้องกับความคิดอื่น ๆ ของสภาพ (เช่นสาเหตุเงื่อนไขอ่าน " ทำให้เกิด 'B' หรือ probabilistic ปรับอากาศ " " ซึ่งอ่าน "กำหนด")A□→ BA◻→BA\; \square\!\!\!\!\to BAAAA | BA|BA|BAAABBB โดยทั่วไปแล้ว logics เหล่านี้จะได้รับการศึกษาในรูปแบบตามหลักทฤษฏี แต่ฉันสงสัยเกี่ยวกับแอพพลิเคชั่นของพวกเขาในการออกแบบภาษาการเขียนโปรแกรม (ตัวอย่างเช่น ฉันขอขอบคุณที่อ้างอิงถึงทฤษฎีการพิสูจน์ของพวกเขา (เช่นแคลคูลัสตามลำดับ / การหักตามธรรมชาติ) หรือภาษาโปรแกรมที่มีประเภทตามตัวดำเนินการประเภทนี้ ขอบคุณ! แก้ไข: สารานุกรมปรัชญาสแตนฟอร์ดมีการแนะนำที่ดีเกี่ยวกับเรื่องนี้

1
ความหมายของEscardóสำหรับ PCF + หมดเวลาเป็นนามธรรมอย่างสมบูรณ์หรือไม่
ในเอกสารการประชุมเชิงปฏิบัติการปี 1999 ของเขา"A Metric Model of PCF" , MartínEscardóแสดงให้เห็นว่ามันเป็นไปได้ที่จะให้การตีความที่ง่ายของ PCF ในหมวดหมู่ของช่องว่าง ultrametric สมบูรณ์และแผนที่ nonexpansive เขาแสดงแบบจำลองนี้ว่าเพียงพอและสามารถจำลองแบบการเพิ่มการหมดเวลาใช้งานได้ (เช่นผู้ดำเนินการที่จะเรียกใช้อาร์กิวเมนต์สำหรับขั้นตอนจำนวน จำกัด และให้คำตอบหรือส่งสัญญาณข้อผิดพลาดหากไม่สามารถยุติภายใน การ จำกัด เวลา) จากนั้นเขาก็แนะนำว่าจะเป็นเรื่องธรรมดาที่จะตรวจสอบว่าแบบจำลองเมตริกเป็นนามธรรมอย่างสมบูรณ์เกี่ยวกับการหมดเวลา PCF + มีใครตรวจสอบเรื่องนี้และถ้าเป็นเช่นนั้นคำตอบคืออะไร? การหมดเวลา PCF + ตระหนักถึงฟังก์ชั่นเดียวกับเครื่องทัวริงรวมถึงประเภทที่สูงขึ้นหรือไม่ (นอกจากคุณจะใส่สำเนียงลงในข้อความได้อย่างไรฉันได้ลดสำเนียงจากชื่อและนามสกุลของเขาแก้ไข: ชื่อคงที่ฉันออกจากวงเล็บนี้เพื่อให้ความคิดเห็นในโพสต์ยังคงดำเนินต่อไป ความรู้สึก.)

3
ภาษาใดที่มีทฤษฎีของการเทียบเท่าเชิงสังเกตการณ์อยู่แล้ว?
สำหรับการพิสูจน์ความถูกต้องฉันกำลังมองหาแนวคิดที่ใช้งานได้ของความเท่าเทียมโปรแกรมสำหรับระบบพิมพ์บริสุทธิ์ (PTS) ของ Barendregt; หายไปนั้นสำหรับระบบประเภทที่เฉพาะเจาะจงเพียงพอ เป้าหมายของฉันคือใช้ความคิดไม่ใช่เพื่อตรวจสอบเพื่อประโยชน์ของตัวเอง≅≅\cong ความคิดนี้ควรจะเป็น " extensional " - โดยเฉพาะอย่างยิ่งเพื่อพิสูจน์ว่ามันควรจะเพียงพอที่จะพิสูจน์ว่าสำหรับค่าทั้งหมดของประเภทที่เหมาะสมt 1เสื้อ1≅เสื้อ2t1≅t2t_1 \cong t_2vเสื้อ1v ≅เสื้อ2โวลต์t1v≅t2โวลต์t_1\; v \cong t_2\; vโวลต์โวลต์v ความเท่าเทียมกันทาง Denotational ความเท่าเทียมกันทาง Denotational สามารถตอบสนองความต้องการทั้งหมดได้อย่างง่ายดาย แต่ความหมายเชิง Denotational สำหรับ PTS ตามอำเภอใจนั้นค่อนข้างท้าทาย - มันดูเหมือนยากสำหรับระบบ F บริบท / การเทียบเท่าเชิงสังเกตการณ์ ทางเลือกที่ชัดเจนคือรูปแบบต่าง ๆ ของการเทียบเคียงบริบท (สองเงื่อนไขเทียบเท่าหากไม่มีบริบทพื้นดินสามารถแยกแยะพวกเขาได้) แต่คำจำกัดความนั้นไม่สามารถใช้งานได้ทันที บทแทรกที่หลากหลายนั้นไม่สำคัญมากที่จะพิสูจน์ พวกเขาได้รับการพิสูจน์แล้วสำหรับ PTS หรือไม่? อีกทางหนึ่งทฤษฎีจะเป็น "ส่วนขยายที่ชัดเจน" หรือมีเหตุผลที่เชื่อว่าทฤษฎีจะแตกต่างกันอย่างมีนัยสำคัญหรือไม่? แก้ไข: ฉันไม่ได้พูดสิ่งที่ยากข้างต้น …

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