คำถามติดแท็ก type-theory

ระบบที่เป็นทางการเพื่อระบุคุณสมบัติของวัตถุ

2
นิยามแบบเรียกซ้ำมากกว่าชนิดอุปนัยที่มีส่วนประกอบซ้อนอยู่
พิจารณาประเภทอุปนัยที่มีเกิดขึ้นซ้ำในบางตำแหน่งที่ซ้อนกัน แต่เป็นบวกอย่างเคร่งครัด ตัวอย่างเช่นต้นไม้ที่มีการ จำกัด การแยกด้วยโหนดโดยใช้โครงสร้างข้อมูลรายการทั่วไปเพื่อจัดเก็บเด็ก ๆ Inductive LTree : Set := Node : list LTree -> LTree. วิธีที่ไร้เดียงสาของการกำหนดฟังก์ชั่นแบบเรียกซ้ำผ่านต้นไม้เหล่านี้โดยการเรียกซ้ำกว่าต้นไม้และรายการต้นไม้ไม่ทำงาน นี่คือตัวอย่างของsizeฟังก์ชันที่คำนวณจำนวนโหนด Fixpoint size (t : LTree) : nat := match t with Node l => 1 + (size_l l) end with size_l (l : list LTree) : nat := match l with …

2
มีประเภทที่ไม่สำคัญซึ่งเท่ากับอนุพันธ์ของตัวเอง?
บทความที่เรียกว่าThe Derivative of a Regular Type คือประเภทของ One-Hole Contextsแสดงให้เห็นว่า "ซิป" ของประเภท - บริบทของรูเดียว - เป็นไปตามกฎความแตกต่างในพีชคณิตประเภท เรามี: ∂xx∂x0∂x1∂x(S+T)∂x(S×T)↦1↦0↦0↦∂xS+∂xT↦∂xS×T+S×∂xT∂xx↦1∂x0↦0∂x1↦0∂x(S+T)↦∂xS+∂xT∂x(S×T)↦∂xS×T+S×∂xT\begin{align} \partial_x x &\mapsto 1 \\ \partial_x 0 &\mapsto 0 \\ \partial_x 1 &\mapsto 0 \\ \partial_x (S + T) &\mapsto \partial_x S + \partial_x T \\ \partial_x (S\times T) &\mapsto \partial_xS \times T …

2
ประเภทสากลเป็นประเภทย่อยหรือกรณีพิเศษของประเภทที่มีอยู่หรือไม่
ฉันต้องการที่จะรู้ว่าประเภทเชิงปริมาณแบบ :เป็นประเภทย่อยหรือ กรณีพิเศษของประเภทมีมีลายเซ็นเดียวกัน: T_e = \ มีอยู่ X: \ left \ {a \ in X, f: X → \ {T, F \} \ right \}T a = ∀ X : { a ∈ X , f : X → { T , F } } T e T e = …

4
ทำไมฟังก์ชั่นที่มี polymorphic type `forall t: Type, t-> t` ต้องเป็นฟังก์ชันเฉพาะตัว?
ฉันใหม่กับทฤษฎีภาษาโปรแกรม ฉันกำลังดูการบรรยายออนไลน์ที่อาจารย์อ้างว่าฟังก์ชั่นที่มีประเภท polymorphic นั้นforall t: Type, t->tเป็นตัวตน แต่ไม่ได้อธิบายว่าทำไม บางคนสามารถอธิบายให้ฉันทำไม อาจพิสูจน์ข้อเรียกร้องจากหลักการแรก

2
ทฤษฎีประเภทสัญชาตญาณ "น้อยที่สุด"?
ฉันประหลาดใจที่ผู้คนเพิ่มประเภทใหม่ ๆ ในทฤษฎีประเภท แต่ไม่มีใครพูดถึงทฤษฎีขั้นต่ำสุด (หรือฉันไม่สามารถหามันได้) ฉันคิดว่านักคณิตศาสตร์ชอบสิ่งที่น้อยที่สุดใช่ไหม? ถ้าฉันเข้าใจอย่างถูกต้องในทฤษฎีประเภทที่มีการคาดคะเนProp, λ-abstraction และΠ-types เพียงพอ โดยการพูดอย่างพอเพียงฉันหมายความว่ามันสามารถใช้เป็นตรรกะปรีชาญาณ ประเภทอื่น ๆ สามารถกำหนดได้ดังต่อไปนี้: ⊥=defΠα:Prop.α¬A=defA→⊥A∧B=defΠC:Prop.(A→B→C)→CA∨B=defΠC:Prop.(A→C)→(B→C)→C∃x:S(P(x))=defΠα:Prop.(Πx:S.Px→α)→α⊥=defΠα:Prop.α¬A=defA→⊥A∧B=defΠC:Prop.(A→B→C)→CA∨B=defΠC:Proพี.(A→ค)→(B→ค)→ค∃x:S(P(x))=dอีฉΠα:PRโอพี.(Πx:S.Px→α)→α \bot \stackrel{def}{=} \Pi \alpha: Prop. \alpha \\ \neg A \stackrel{def}{=} A \to \bot \\ A \land B \stackrel{def}{=} \Pi C: Prop. (A \to B \to C) \to C \\ A \lor B \stackrel{def}{=} \Pi C: …

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

4
มีใครสร้างระบบจริงที่เขียนโปรแกรมคอมพิวเตอร์จากสเปค?
มีใครเคยเขียนระบบ (ซอฟต์แวร์หรือคำอธิบายโดยละเอียดบนกระดาษพร้อมตัวอย่างง่ายๆ) ที่สร้างโปรแกรมคอมพิวเตอร์หรือไม่? ฉันป้อนและสร้างโปรแกรมที่แสดงรายการหมายเลขเฉพาะน้อยกว่า 10 ถูกกำหนดเป็น อาจารย์บอกว่าพวกเขาทำได้ แต่ไม่มีใครให้ตัวอย่างที่สมบูรณ์จริง ๆPr i m e ( x ) ∧ x &lt; 10PRผมม.อี(x)∧x&lt;10Prime(x) \wedge x<10Pr i m e ( x )PRผมม.อี(x)Prime(x)1 &lt; x ∧ ∄ส. t . 1 &lt; A ∧ A &lt; x ∧ x = A × B , พร้อม A, B …

2
ผู้ประสานงาน Y ขัดแย้งกับจดหมายโต้ตอบ Curry-Howard หรือไม่?
อ Y Combinator มีชนิดโดย Curry-Howard Correspondence เพราะประเภทเป็นที่อยู่อาศัยมันจะต้องสอดคล้องกับทฤษฎีบทที่แท้จริง อย่างไรก็ตามเป็นจริงเสมอดังนั้นมันจึงดูเหมือนว่าชนิดของ combinator Y นั้นสอดคล้องกับทฤษฎีบทซึ่งไม่จริงเสมอไป สิ่งนี้จะเป็นอย่างไร( → ) → →( a → a ) → a(a→a)→a(a \rightarrow a) \rightarrow a( a → a ) → a(a→a)→a(a \rightarrow a) \rightarrow aa → aa→aa \rightarrow aaaa

1
การอนุมานประเภทด้วยประเภทผลิตภัณฑ์
ฉันกำลังทำงานกับคอมไพเลอร์สำหรับภาษาที่ต่อกันและต้องการเพิ่มการสนับสนุนการอนุมานประเภท ฉันเข้าใจ Hindley - Milner แต่ฉันได้เรียนรู้ทฤษฎีประเภทเมื่อฉันไปดังนั้นฉันไม่แน่ใจว่าจะปรับตัวอย่างไร ระบบต่อไปนี้เป็นระบบเสียงที่ดี คำคือตัวอักษรองค์ประกอบของคำพูดคำพูดของคำหรือดั้งเดิม E : : = x||อีอี||[ e ]||...e::=x|ee|[e]|… e ::= x \:\big|\: e\:e \:\big|\: [e] \:\big|\: \dots เงื่อนไขทั้งหมดแสดงถึงฟังก์ชั่น สำหรับสองฟังก์ชั่นและ ,นั่นคือ juxtaposition แสดงถึงการจัดองค์ประกอบย้อนกลับ ตัวอักษรหมายถึงฟังก์ชั่น niladice 2อี1e1e_1อี2e2e_2อี1อี2= e2∘ e1e1e2=e2∘e1e_1\:e_2 = e_2 \circ e_1 คำอื่น ๆ นอกเหนือจากการแต่งมีกฎประเภทพื้นฐาน: x : ι[Lit]แกมมา⊢อีเมล์: σแกมมา⊢ [ E ] : ∀ …

3
ภาษาการวิจัยใดที่มีระบบการพิมพ์ที่ดีกว่า Haskell และทำไม
ที่นี่ฉันอ่านแล้ว: Haskell ไม่มีระบบการพิมพ์ขั้นสูงสุด (ไม่ปิดแม้แต่ถ้าคุณนับภาษาการวิจัย) แต่จากภาษาทั้งหมดที่ใช้ในการผลิตจริง Haskell น่าจะอยู่ด้านบน ดังนั้นฉันถามสองสิ่ง: ภาษาวิจัยใดที่มีระบบพิมพ์ที่ทรงพลังกว่า Haskell พวกเขาปรับปรุงอะไร ฉันเป็นโปรแกรมเมอร์ดังนั้นฉันไม่รู้วัตถุทางคณิตศาสตร์มากมายที่ใช้ในทฤษฎีชนิดโปรดอธิบายอย่างนุ่มนวลหากคุณสามารถ

1
ทำไมอัลกอริทึม Hindley-Milner จะไม่ให้ผลเช่น t1 -> t2
ฉันกำลังอ่านเกี่ยวกับอัลกอริทึมการพิมพ์ของ Hindley-Milnerในขณะที่เขียนการนำไปใช้และดูว่าตราบใดที่ตัวแปรทุกตัวถูกผูกไว้คุณจะได้รับประเภทอะตอมมิกหรือประเภทที่อาร์กิวเมนต์จะกำหนดประเภทสุดท้ายเช่นt1 -&gt; t1หรือ(t1 -&gt; t2) -&gt; (t1 -&gt; t2)ที่ไหนt1และt2เป็นตัวแปรประเภท ฉันไม่สามารถคิดวิธีที่คุณจะได้รับสิ่งที่ชอบt1 -&gt; t2หรือง่ายๆt1ซึ่งฉันเข้าใจว่าหมายความว่าอัลกอริทึมเสียเนื่องจากไม่มีวิธีกำหนดประเภทของนิพจน์ที่แท้จริง คุณจะรู้ได้อย่างไรว่าคุณจะไม่ได้รับประเภทเช่นคนที่ "เสีย" เหล่านี้ตราบใดที่ตัวแปรทุกตัวถูกผูกไว้ ฉันรู้ว่าประเภทอัตราผลตอบแทนขั้นตอนวิธีการที่มีตัวแปร t1 -&gt; t2แต่เหล่านี้ได้รับการแก้ไขเสมอเมื่อคุณผ่านการขัดแย้งกับการทำงานซึ่งจะไม่เป็นกรณีในการทำงานกับชนิด นี่คือเหตุผลที่ฉันต้องการทราบว่าเรารู้ได้อย่างไรว่าอัลกอริทึมจะไม่ให้ผลเช่นนั้น (ดูเหมือนว่าคุณจะได้รับประเภท "เสีย" ใน MLแต่ฉันถามเกี่ยวกับแคลคูลัสแลมบ์ดา)

1
อนุพันธ์ของกราฟเกี่ยวข้องกับรายการคำนามหรือไม่?
ผลงานบางส่วนของ Conor McBride, Diff , Dissect , เชื่อมโยงอนุพันธ์ของชนิดข้อมูลกับ "ชนิดของบริบทหนึ่งหลุม" ของพวกเขา นั่นคือถ้าคุณหาอนุพันธ์ของประเภทที่คุณเหลือด้วยชนิดข้อมูลซึ่งจะแสดงให้คุณเห็นว่าชนิดข้อมูลดูจากด้านใน ณ จุดใดก็ตาม ตัวอย่างเช่นถ้าคุณมีรายการ (ใน Haskell) data List a = [] | a : List a สิ่งนี้สอดคล้องกับ data List a = 1 + a * List a และด้วยเวทมนตร์ทางคณิตศาสตร์เล็กน้อยอนุพันธ์คือ data ListDeriv a = List a * List a ซึ่งตีความว่าหมายความว่า ณ จุดใดในรายการจะมีรายการทางด้านซ้ายและรายการทางด้านขวา …

2
ฉันสามารถมี "ประเภท coproduct ที่พึ่งพา"
ฉันกำลังอ่านหนังสือ HoTTและฉันมีคำถาม (อาจไร้เดียงสามาก) เกี่ยวกับเนื้อหาในบทที่หนึ่ง แนะนำบทประเภทฟังก์ชั่น แล้วเอามันโดยการทำBขึ้นอยู่กับx : B : → U ,f:A→Bf:A→B f:A\to B BBBx:Ax:Ax:A และที่เรียกว่าประเภทฟังก์ชั่นขึ้นอยู่กับB:A→U,g:∏x:AB(x)B:A→U,g:∏x:AB(x)B:A\to\mathcal{U},\qquad g:\prod_{x:A}B(x) ย้ายบทที่แล้วแนะนำประเภทของผลิตภัณฑ์ แล้วเอามันโดยการทำBขึ้นอยู่กับx : B : → U ,f:A×Bf:A×B f:A\times BBBBx:Ax:Ax:A และที่เรียกว่าประเภทคู่ขึ้นB:A→U,g:∑x:AB(x)B:A→U,g:∑x:AB(x)B:A\to\mathcal{U},\qquad g:\sum_{x:A}B(x) ฉันเห็นรูปแบบที่นี่แน่นอน บทต่อไปจะแนะนำประเภท coproduct และ ... combobreaker ... ไม่มีการพูดถึงรุ่นที่ขึ้นต่อกันของประเภทนี้f:A+Bf:A+B f:A+B มีข้อ จำกัด พื้นฐานบางประการหรือไม่เกี่ยวข้องกับหัวข้อของหนังสือเล่มนี้หรือไม่? ในกรณีใด ๆ บางคนสามารถช่วยฉันด้วยสัญชาตญาณว่าทำไมฟังก์ชั่นและประเภทผลิตภัณฑ์? อะไรที่ทำให้ทั้งสองมีความพิเศษเพื่อที่พวกเขาจะได้รับการวางนัยให้เป็นประเภทที่ขึ้นต่อกันแล้วใช้ในการสร้างทุกอย่างขึ้นมา?

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

2
เราได้อะไรจากการมี“ ประเภทพึ่งพา”
ฉันคิดว่าฉันเข้าใจการพิมพ์ที่ถูกต้อง (DT) อย่างถูกต้อง แต่คำตอบสำหรับคำถามนี้: /cstheory/30651/why-was-there-a-need-for-martin-l%C3%% ทฤษฎีเกี่ยวกับการสร้างประเภทสัญชาตญาณ B6fทำให้ฉันคิดอย่างอื่น หลังจากอ่าน DT และพยายามเข้าใจว่าพวกเขาคืออะไรฉันพยายามสงสัยว่าเราจะได้อะไรจากความคิดของ DT นี้ ดูเหมือนว่าพวกเขาจะมีความยืดหยุ่นและมีประสิทธิภาพมากกว่าแลมบ์ดาแคลคูลัส (STLC) ที่พิมพ์ได้ง่าย ๆ ถึงแม้ว่าฉันจะไม่เข้าใจ "วิธี / เหตุผล" ก็ตาม เราสามารถทำอะไรกับ DT ที่ไม่สามารถทำได้ด้วย STLC ดูเหมือนว่าการเพิ่ม DTs ทำให้ทฤษฎีมีความซับซ้อนมากขึ้น แต่ประโยชน์คืออะไร จากคำตอบของคำถามด้านบน: ประเภทที่ขึ้นอยู่กับถูกเสนอโดยเดอ Bruijn และโฮเวิร์ดที่ต้องการที่จะขยายการติดต่อกันของแกงกะหรี่ - Howard จากแคลคูลัสเชิงประพจน์เพื่อตรรกะแรก ดูเหมือนว่าจะสมเหตุสมผลในบางระดับ แต่ฉันก็ยังไม่สามารถเข้าใจภาพรวมของ "อย่างไร / ทำไม" บางทีตัวอย่างที่แสดงให้เห็นอย่างชัดเจนว่าส่วนขยายของจดหมายโต้ตอบ CH กับตรรกะ FO นี้อาจช่วยให้ถึงจุดที่บ้านในการทำความเข้าใจเรื่องใหญ่กับ DTs คืออะไร? ฉันไม่แน่ใจว่าฉันเข้าใจสิ่งนี้ด้วยหรือไม่

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