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

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

5
มีกรณีการใช้งานสำหรับประเภทด้านล่างเป็นประเภทพารามิเตอร์ฟังก์ชั่น?
หากฟังก์ชันมีชนิดส่งคืนเป็น⊥ ( ชนิดด้านล่าง ) นั่นหมายความว่าจะไม่ส่งคืน มันสามารถยกตัวอย่างเช่นออกหรือโยนทั้งสถานการณ์ธรรมดา สันนิษฐานว่าถ้าฟังก์ชั่นมีพารามิเตอร์ประเภท⊥มันจะไม่สามารถเรียก (ปลอดภัย) มีเหตุผลใดบ้างในการนิยามฟังก์ชั่นดังกล่าว?

4
ตัวดำเนินการประตูหมุนชั้นนำหมายถึงอะไร
ฉันรู้ว่าผู้เขียนที่แตกต่างกันใช้สัญกรณ์ที่แตกต่างกันเพื่อเป็นตัวแทนความหมายของการเขียนโปรแกรมภาษา เป็นเรื่องของความเป็นจริงผู้ชายสตีลที่อยู่ในปัญหานี้ในวิดีโอที่น่าสนใจ ฉันต้องการที่จะรู้ว่าใครรู้ว่าผู้ประกอบการประตูหมุนชั้นนำมีความหมายที่รู้จักกันดี ตัวอย่างเช่นฉันไม่เข้าใจตัวดำเนินการชั้นนำที่จุดเริ่มต้นของตัวส่วนต่อไปนี้:⊢⊢\vdash x:T1⊢t2:T2⊢λx:T1.t2 : T1→T2x:T1⊢t2:T2⊢λx:T1.t2 : T1→T2\frac{x:T_1 \vdash t_2:T_2}{\vdash \lambda x:T_1 . t_2 ~:~ T_1 \to T_2} มีคนช่วยฉันเข้าใจไหม ขอบคุณ

1
ทำไมเราไม่ค้นคว้าเพิ่มเติมเกี่ยวกับการรับประกันเวลารวบรวม?
ฉันรักทุกสิ่งที่รวบรวมเวลาและฉันชอบความคิดที่ว่าเมื่อคุณรวบรวมโปรแกรมการรับประกันจำนวนมากเกี่ยวกับการดำเนินการของมัน โดยทั่วไปการพูดระบบประเภทคงที่ (Haskell, C ++, ... ) ดูเหมือนจะให้การรับประกันเวลาคอมไพล์ที่แข็งแกร่งกว่าระบบประเภทแบบไดนามิกใด ๆ จากสิ่งที่ฉันเข้าใจ Ada ดำเนินการตรวจสอบเวลาให้ดียิ่งขึ้นไปอีกและสามารถตรวจจับช่วงของข้อผิดพลาดที่มากกว่าก่อนดำเนินการ มันยังถือว่าปลอดภัยพอสมควร ณ เวลาใดเวลาหนึ่งมันถูกเลือกสำหรับฟิลด์ที่ละเอียดอ่อน (เมื่อข้อผิดพลาดในการเขียนโปรแกรมอาจทำให้เสียชีวิต) ตอนนี้ฉันสงสัยว่า: ถ้าการค้ำประกันแบบคงที่ที่ดีกว่านำไปสู่รหัสที่มีเอกสารและปลอดภัยกว่าแล้วทำไมเราไม่ค้นคว้าเพิ่มเติมในทิศทางนั้น ตัวอย่างของสิ่งที่ดูเหมือนว่าจะหายไปจะเป็นภาษาที่แทนที่จะกำหนดintประเภททั่วไปที่มีช่วงที่กำหนดโดยจำนวนบิตของสถาปัตยกรรมพื้นฐานหนึ่งอาจมีช่วง (ในตัวอย่างต่อไปนี้Int [a..b]อธิบายถึงชนิดจำนวนเต็มระหว่าง รวม a และ b): a : Int [1..24] b : Int [1..12] a + b : Int [2..36] a - b : Int [-11..23] b - a : Int …

3
ความสัมพันธ์ระหว่างทฤษฎีประเภทรัสเซลล์และระบบประเภท
ฉันเพิ่งรู้ว่ามีความสัมพันธ์บางอย่างระหว่างทฤษฎีประเภทรัสเซลล์และระบบประเภทที่พบเช่นใน Haskell อันที่จริงสัญกรณ์บางประเภทใน Haskell ดูเหมือนว่ามีสารตั้งต้นในทฤษฎีประเภท แต่ IMHO แรงบันดาลใจของรัสเซลในปี 1908 คือการหลีกเลี่ยงความขัดแย้งของรัสเซลและฉันไม่แน่ใจว่ามันเกี่ยวข้องกับระบบการพิมพ์ในวิทยาการคอมพิวเตอร์อย่างไร ความขัดแย้งของรัสเซลอยู่ในรูปแบบใดรูปแบบหนึ่งหรือบางสิ่งที่เราจะต้องกังวลเช่นถ้าเราไม่มีระบบที่ดีในภาษาที่กำหนด

2
การลดผลิตภัณฑ์ใน HoTT ไปยังการเข้ารหัสของโบสถ์ / สกอตต์
ดังนั้นฉันกำลังจะไปถึงแม้ว่าหนังสือ HoTT กับบางคน ฉันอ้างว่าประเภทอุปนัยส่วนใหญ่ที่เราเห็นจะสามารถลดลงเป็นประเภทที่มีเพียงประเภทของฟังก์ชันและจักรวาลที่ขึ้นอยู่กับชนิดของ recuror เป็นแรงบันดาลใจสำหรับประเภทที่เทียบเท่า ฉันเริ่มวาดภาพว่าฉันคิดว่าสิ่งนี้จะได้ผลอย่างไรและหลังจากสะดุดฉันก็มาถึงสิ่งที่ฉันคิดว่าเป็นคำตอบ ( ⋅ , ⋅ ) ≡ λ : λ ข: B λ C : U λ กรัม: → B → C g ( a ) ( b ) ฉันn d⋅×⋅≡∏A,B,C:U(A→B→C)→C⋅×⋅≡∏A,B,C:U(A→B→C)→C\cdot \times \cdot \equiv \prod_{A, B, C : \mathcal{U}} (A \to B \to C) …

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

1
คืออะไรในแคลคูลัสของการก่อสร้างหรือไม่
ฉันกำลังมองหาที่แคลคูลัสของการก่อสร้างและสถานที่ในแลมบ์ดา Cube ถ้าผมเข้าใจอย่างถูกต้องแกนของลูกบาศก์แต่ละคนสามารถจะคิดว่าเป็นการเพิ่มการดำเนินการอื่นที่เกี่ยวข้องกับประเภทที่จะแคลคูลัสเพียงแค่พิมพ์, \แกนแรกจะเพิ่มตัวดำเนินการชนิดต่อคำ, ตัวดำเนินการชนิดต่อชนิดที่สองและตัวพิมพ์ที่สามที่ขึ้นอยู่กับหรือตัวดำเนินการแบบระยะต่อชนิด CoC มีทั้งหมดสามอย่างλ→λ→\lambda_\to อย่างไรก็ตาม CoC แนะนำคำว่าและระบุว่าตามกฎการอนุมานแต่ไม่ได้ใช้ ฉันเข้าใจว่ามันมีไว้สำหรับข้อเสนอที่บาร์นี้ แต่ข้อเสนอเชิงตรรกะไม่ได้กำหนดไว้ในแง่ของมันPropPropPropProp:TypeProp:TypeProp : Type คุณช่วยอธิบายให้ฉันฟังได้ว่าสำหรับอะไรที่ไหน / เมื่อไหร่และอธิบายในแง่ของแกนของลูกบาศก์ (ถ้าเป็นไปได้ที่จะทำเช่นนั้น)PropPropProp

1
การแยกประเภทการปรับแต่ง
ที่ทำงานฉันได้รับมอบหมายให้อนุมานข้อมูลบางประเภทเกี่ยวกับภาษาแบบไดนามิก ฉันเขียนลำดับของข้อความไปยังletนิพจน์ที่ซ้อนกันเช่น: return x; Z => x var x; Z => let x = undefined in Z x = y; Z => let x = y in Z if x then T else F; Z => if x then { T; Z } else { F; Z } เนื่องจากฉันเริ่มต้นจากข้อมูลประเภททั่วไปและพยายามอนุมานประเภทที่เฉพาะเจาะจงมากขึ้นตัวเลือกที่เป็นธรรมชาติคือประเภทการปรับแต่ง ตัวอย่างเช่นตัวดำเนินการตามเงื่อนไขส่งคืนการรวมของประเภทของสาขาที่เป็นจริงและเท็จ …
11 programming-languages  logic  type-theory  type-inference  machine-learning  data-mining  clustering  order-theory  reference-request  information-theory  entropy  algorithms  algorithm-analysis  space-complexity  lower-bounds  formal-languages  computability  formal-grammars  context-free  parsing  complexity-theory  time-complexity  terminology  turing-machines  nondeterminism  programming-languages  semantics  operational-semantics  complexity-theory  time-complexity  complexity-theory  reference-request  turing-machines  machine-models  simulation  graphs  probability-theory  data-structures  terminology  distributed-systems  hash-tables  history  terminology  programming-languages  meta-programming  terminology  formal-grammars  compilers  algorithms  search-algorithms  formal-languages  regular-languages  complexity-theory  satisfiability  sat-solvers  factoring  algorithms  randomized-algorithms  streaming-algorithm  in-place  algorithms  numerical-analysis  regular-languages  automata  finite-automata  regular-expressions  algorithms  data-structures  efficiency  coding-theory  algorithms  graph-theory  reference-request  education  books  formal-languages  context-free  proof-techniques  algorithms  graph-theory  greedy-algorithms  matroids  complexity-theory  graph-theory  np-complete  intuition  complexity-theory  np-complete  traveling-salesman  algorithms  graphs  probabilistic-algorithms  weighted-graphs  data-structures  time-complexity  priority-queues  computability  turing-machines  automata  pushdown-automata  algorithms  graphs  binary-trees  algorithms  algorithm-analysis  spanning-trees  terminology  asymptotics  landau-notation  algorithms  graph-theory  network-flow  terminology  computability  undecidability  rice-theorem  algorithms  data-structures  computational-geometry 

1
การอนุมานแบบอิงข้อ จำกัด พร้อมข้อมูลพีชคณิต
ฉันกำลังทำงานกับภาษาที่ใช้แสดงออกของลำดับวงศ์ตระกูล ML ดังนั้นจึงจำเป็นต้องมีการอนุมานแบบตามธรรมชาติ> :) ตอนนี้ฉันกำลังพยายามที่จะขยายการแก้ปัญหาตามข้อ จำกัด ไปสู่ปัญหาประเภทอนุมานตามการใช้งานง่าย ๆ ใน EOPL (Friedman และ Wand) แต่พวกเขามีประเภทข้อมูลพีชคณิตขั้นตอนที่สวยงาม สิ่งที่ฉันมีจนถึงตอนนี้ทำงานได้อย่างราบรื่น; ถ้าการแสดงออกeคือa + b, e : Int, และa : Int b : Intถ้าeเป็นการแข่งขัน match n with | 0 -> 1 | n' -> n' * fac(n - 1)`, ฉันถูกต้องสามารถอนุมานได้ว่าt(e) = t(the whole match expression), t(n) = …

1
อุปนัยเหนี่ยวนำคืออะไร?
อะไรคือสิ่งที่เหนี่ยวนำเหนี่ยวนำ ? ทรัพยากรที่ฉันพบคือ: หนังสือ HoTTในตอนท้ายของบทที่ 5.7 บทความของ nLab กระดาษที่เรียกว่าคำจำกัดความอุปนัย - อุปนัย โพสต์บล็อกนี้ยังกล่าวถึงประเภทอุปนัย - อุปนัย การอ้างอิงสองรายการแรกสั้นเกินไปสำหรับฉันและการอ้างอิงสองรายการหลังเกินไปทางเทคนิค มีใครอธิบายได้บ้างในเทอมของคนธรรมดา? มันจะดีกว่าถ้ามีรหัส Agda

2
ปริมาณสากล / การดำรงอยู่?
ฉันกำลังดิ้นรนเพื่อทำความเข้าใจกับวัตถุประสงค์ของการวัดปริมาณประเภทที่เป็นสากลและมีอยู่จริง ฉันเล่นรอบกับการเขียนภาษาของเล่นบนพื้นฐานของแคลคูลัสของการก่อสร้าง ฉันได้อ่านเกี่ยวกับMorteและHenkเพื่อช่วยให้ฉันเข้าใจมากขึ้น ฉันไม่เข้าใจว่าทำไม CoC มีทั้งแลมบ์ดาและโดยสังเขป ( ∀ x : . B )( λ x : . B )(λx:A.B)(\lambda x:A . B) ( ∀ x : . B )(∀x:A.B)(\forall x:A . B) สำหรับฉันแล้วแลมบ์ดาบอกให้รู้ว่าระบบย่อยที่ส่งผ่านด้วยตนเอง ในคำอื่น ๆ ที่ต่อไปนี้ ( ∀ x : ∗ . λ a : x . a )(∀x:∗.λa:x.a)(\forall x …

2
จักรวาลในทฤษฎีชนิดพึ่งพา
ฉันกำลังอ่านเกี่ยวกับทฤษฎีประเภทพึ่งพาในหนังสือออนไลน์ทฤษฎีประเภทโฮโมโทรป ในส่วนที่ 1.3 ของทฤษฎีประเภทบทจะแนะนำแนวคิดของลำดับชั้นของจักรวาล :โดยที่U0:U1:U2:⋯U0:U1:U2:⋯\mathcal{U}_0 : \mathcal{U}_1 : \mathcal{U}_2 : \cdots ทุกจักรวาลเป็นองค์ประกอบของจักรวาลถัดไป1} ยิ่งกว่านั้นเราคิดว่าเอกภพของเราสะสมนั่นคือองค์ประกอบทั้งหมดของจักรวาลเป็นองค์ประกอบของจักรวาลU ฉัน+ 1ฉันทีเอช (ฉัน+1 ) ทีเอชUiUi\mathcal{U}_iUi+1Ui+1\mathcal{U}_{i+1}ithithi^{\mathrm{th}}(i+1)th(i+1)th(i+1)^{\mathrm{th}} แต่เมื่อฉันดูกฎการก่อตัวของประเภทต่าง ๆ ในภาคผนวก A ในแวบแรกถ้าจักรวาลปรากฏขึ้นเหนือแถบเป็นหลักฐานจักรวาลเดียวกันจะปรากฏขึ้นด้านล่าง ตัวอย่างเช่นกฎการสร้างประเภท coproduct: Γ⊢A:UiΓ⊢B:UiΓ⊢A+B:Ui(+-FORM)Γ⊢A:UiΓ⊢B:UiΓ⊢A+B:Ui(+-FORM)\dfrac{\Gamma \vdash A : \mathcal{U}_i \quad \Gamma \vdash B : \mathcal{U}i}{\Gamma \vdash A + B : \mathcal{U}_i}(+\mbox{-}FORM) ดังนั้นคำถามของฉันคือทำไมลำดับชั้นจึงจำเป็น? ภายใต้สถานการณ์ใดบ้างที่คุณต้องกระโดดจากเอกภพไปยังลำดับที่สูงกว่า มันเป็นเรื่องที่ไม่ชัดเจนกับผมว่าได้รับการรวมกันของใด ๆคุณสามารถจบลงด้วยประเภทที่เป็นไม่ได้ใน\ในรายละเอียดเพิ่มเติม: กฎการก่อตัวในส่วนของภาคผนวก A.2.4, A.2.5, A.2.6, …

1
ตัวอย่างที่กระชับของต้นทุนชี้แจงของการอนุมานประเภท ML
ฉันทราบว่าค่าใช้จ่ายของการอนุมานประเภทในภาษาที่ใช้งานได้เช่น OCaml อาจสูงมาก การอ้างสิทธิ์คือมีลำดับของนิพจน์เช่นนั้นสำหรับแต่ละนิพจน์ความยาวของประเภทที่สอดคล้องกันนั้นจะเป็นเลขชี้กำลังบนความยาวของนิพจน์ ฉันกำหนดลำดับด้านล่าง คำถามของฉันคือ: คุณรู้จักลำดับที่มีนิพจน์ที่กระชับกว่าซึ่งประสบความสำเร็จในประเภทเดียวกันหรือไม่? # fun a -> a;; - : 'a -> 'a = <fun> # fun b a -> b a;; - : ('a -> 'b) -> 'a -> 'b = <fun> # fun c b a -> c b (b a);; - : (('a …

2
วิธีการรับตัวกำจัดที่พิมพ์ได้อย่างพึ่งพา?
ในการโปรแกรมแบบพิมพ์อย่างพึ่งพามีสองวิธีหลักในการย่อยสลายข้อมูลและดำเนินการเรียกซ้ำ: การจับคู่รูปแบบขึ้นอยู่กับ : คำจำกัดความของฟังก์ชั่นจะได้รับเป็นคำสั่งหลาย ๆ การรวมทำให้แน่ใจว่าทุกกรณีที่ถูกละเว้นนั้นเป็นไปไม่ได้และตัวแก้ไขภายนอกช่วยให้มั่นใจว่าการเรียกซ้ำนั้นได้รับการพิสูจน์แล้ว กำจัด : ประเภทข้อมูลอุปนัยแต่ละมีค่าคงที่เกี่ยวข้องE Dซึ่งทำหน้าที่เป็นหลักการเหนี่ยวนำและเป็นฟังก์ชันเวียนที่สลายตัวค่าประเภทD สิ่งเหล่านี้มีความละเอียดมากกว่า แต่มีความได้เปรียบในการรวม (ทุกกรณีถูกปกคลุมด้วยE D ) และยกเลิกโดยการก่อสร้างDDDEDEDE_DDDDEDEDE_D ผมเคยเห็นกำจัดสำหรับประเภทข้อมูลทั่วไปเช่นที่กำจัดเป็นพื้นอุปนัยทางคณิตศาสตร์หรือL ฉันs Tที่กำจัดเป็นพื้นพับยังไม่มีข้อความทียังไม่มีข้อความaเสื้อNatL ฉันs TLผมsเสื้อList ฉันได้อ่านเอกสารหลายฉบับเกี่ยวกับการจับคู่รูปแบบขึ้นอยู่กับและหลายคนอ้างถึงทฤษฎีประเภทที่สามารถกำหนดประเภทข้อมูลและทฤษฎีกำจัด ยกตัวอย่างเช่นการขจัดรูปแบบการจับคู่ขึ้นอยู่กับอธิบายวิธี UTT จะขึ้นอยู่กับเครื่องกำจัดและวิธีการจับคู่รูปแบบสามารถแปลงไปกำจัดในการปรากฏตัวของความจริงKความเข้าใจของฉันคือว่าเมื่อมีการกำหนดประเภทข้อมูลทฤษฎีให้ตัวกำจัดKKK สิ่งที่ฉันไม่พบ (หรืออย่างน้อยไม่รู้จักถ้าฉันเห็นมัน) เป็นคำอธิบายที่ดีว่าใครจะได้รับผู้กำจัดทั้งประเภทและความหมายของพวกเขา ใครบางคนสามารถชี้ให้ฉันอ้างอิงถึงวิธีการที่จะได้รับตัวกำจัดจากคำจำกัดความของประเภทข้อมูลหรือไม่?

1
เหตุใดประเภทการเรียกซ้ำจึงเป็นสิ่งจำเป็นสำหรับการพิสูจน์ในระบบชนิดที่ขึ้นต่อกัน
ฉันค่อนข้างใหม่ในการพิมพ์ทฤษฎีและการเขียนโปรแกรมขึ้นอยู่กับ ฉันกำลังศึกษาแคลคูลัสของการก่อสร้าง (CoC) และระบบบริสุทธิ์อื่น ๆ ฉันสนใจเป็นพิเศษที่จะใช้มันเพื่อเป็นสื่อกลางในการเก็บรักษาหลักฐานสำหรับการแปล ผมเข้าใจว่า(ร่วม) ประเภท recursive เป็นแทนได้ , คอมพิวเตอร์โดยใช้เป็นชนิดคอนสตรัคเท่านั้น ฉันได้อ่านแล้วว่าพวกเขาไม่สามารถใช้ในการสร้างหลักฐานโดยการเหนี่ยวนำ (ยกโทษให้ฉันฉันไม่สามารถหาที่ตอนนี้!) เช่นว่าฉันไม่สามารถพิสูจน์ได้ว่า0 ≠ 1ใน CoC ธรรมดา (แม้ว่าแน็ตสามารถพิมพ์ได้เช่นΠ ( N : ∗ ) . Π ( S : N → N ) . Π ( Z : N ) . N )ΠΠ\Pi0 ≠ 10≠10\neq 1ชัยนาทชัยนาท\texttt{Nat}Π ( N : …

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