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

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

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

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

3
แนะนำทฤษฎีประเภทมาร์ติน - โลฟ
อะไรจะเป็นการแนะนำที่ดีที่สุดสำหรับแนวคิดของมาร์ติน - ลอฟเกี่ยวกับทฤษฎีการพิมพ์? ฉันได้ดูการบรรยายจากโรงเรียนภาคฤดูร้อนของ Oregon PL แต่ฉันก็ยังงงกับคำถามต่อไปนี้: ประเภทคืออะไร ฉันรู้ว่าเซตคืออะไรเนื่องจากคุณสามารถกำหนดมันด้วยสัจพจน์ของ ZF ปกติและพวกมันมีโมเดลคอนกรีตที่ใช้งานง่ายมาก แค่นึกถึงตะกร้าที่เต็มไปด้วยสิ่งของ อย่างไรก็ตามฉันยังไม่เห็นคำจำกัดความที่เหมาะสมของประเภทและฉันสงสัยว่ามีแหล่งที่มาที่จะกลั่นความคิดนี้เพื่อหลอกตา

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

4
อะไรคือความแตกต่างทางความหมายระหว่างเซตและประเภท?
แก้ไข: ตอนนี้ฉันถามคำถามที่คล้ายกันเกี่ยวกับความแตกต่างระหว่างหมวดหมู่และชุด เวลาที่ฉันอ่านเกี่ยวกับประเภททฤษฎี (ซึ่งเป็นที่ยอมรับค่อนข้างเป็นทางการ) ทุกฉันไม่สามารถจริงๆเข้าใจว่ามันแตกต่างจากการตั้งทฤษฎีเป็นรูปธรรม ฉันเข้าใจว่ามีความแตกต่างทางแนวคิดระหว่างการพูดว่า "x เป็นของชุด X" และ "x เป็นประเภท X" เนื่องจากสัญชาตญาณชุดเป็นเพียงชุดของวัตถุในขณะที่ประเภทมีคุณสมบัติ "บางอย่าง" อย่างไรก็ตามชุดมักจะถูกกำหนดตามคุณสมบัติเช่นกันและถ้าเป็นเช่นนั้นฉันมีปัญหาในการทำความเข้าใจว่าความแตกต่างนี้สำคัญอย่างไร ดังนั้นในที่สุดคอนกรีตทางเป็นไปได้ว่าสิ่งที่มันไม่ได้บ่งบอก เกี่ยวกับxxxจะบอกว่ามันเป็นประเภทTTTเมื่อเทียบกับบอกว่ามันเป็นองค์ประกอบในชุด ?SSS (คุณสามารถเลือกประเภทและชุดที่ทำให้การเปรียบเทียบชัดเจนที่สุด)
33 type-theory  sets 

3
อะไรคือคำอธิบายสั้น ๆ แต่สมบูรณ์ของระบบประเภท pure / dependent
หากบางสิ่งนั้นเรียบง่ายก็ควรอธิบายให้สมบูรณ์ด้วยคำสองสามคำ สิ่งนี้สามารถทำได้สำหรับ calcul-แคลคูลัส: calcul-แคลคูลัสเป็นไวยากรณ์ไวยากรณ์ (โดยทั่วไปโครงสร้าง) ที่มีกฎการลด (ซึ่งหมายถึงขั้นตอนการค้นหา / แทนที่จะถูกนำไปใช้ซ้ำกับทุกรูปแบบที่เกิดขึ้นเฉพาะจนกว่าจะไม่มีรูปแบบดังกล่าว) ไวยากรณ์: Term = (Term Term) | (λ Var . Term) | Var กฎการลด: ((λ var body) term) -> SUBS(body,var,term) where `SUBS` replaces all occurrences of `var` by `term` in `body`, avoiding name capture. ตัวอย่าง: (λ a . a) -> (λ a …


2
ภาษาการเขียนโปรแกรมและรากฐานของคณิตศาสตร์มีความสัมพันธ์กันอย่างไร
โดยพื้นฐานฉันรู้พื้นฐานสามประการเกี่ยวกับคณิตศาสตร์ ทฤษฎีเซต ทฤษฎีประเภท ทฤษฎีหมวดหมู่ ดังนั้นการเขียนโปรแกรมภาษาและรากฐานของคณิตศาสตร์ในทางใดบ้าง? แก้ไข คำถามเดิมคือ "ภาษาการเขียนโปรแกรมตามรากฐานของคณิตศาสตร์" กับ paragarph เพิ่มของ และการประยุกต์ใช้ทฤษฎี 1. ทฤษฎีประเภทในCoq 2. ตั้งทฤษฎีในSETL 3. ทฤษฎีหมวดหมู่ในHaskell ตามคำแนะนำนี้ถูกเปลี่ยนเป็น "ภาษาการเขียนโปรแกรมและพื้นฐานทางคณิตศาสตร์เกี่ยวข้องอย่างไร" เนื่องจากนี่เป็นหนึ่งในคำถามเหล่านั้นที่ฉันไม่รู้เกี่ยวกับสิ่งที่ฉันถาม แต่ต้องการเรียนรู้บางอย่างฉันจึงแก้ไขคำถามเพื่อให้มีค่ามากขึ้นสำหรับการเรียนรู้และอื่น ๆ แต่ยังทิ้งรายละเอียดไว้เพื่อไม่ให้คำตอบปัจจุบันโดย Andrej Bauer ดูเหมือนปิดหัวข้อ ขอบคุณสำหรับความคิดเห็นทั้งหมดและคำตอบจนถึงตอนนี้ฉันกำลังเรียนรู้จากพวกเขา

2
การหาคำศัพท์แลมบ์ดาที่มีประเภทยูเนี่ยน
หนังสือเรียนจำนวนมากครอบคลุมประเภทของจุดตัดในแลมบ์ดา - แคลคูลัส กฎการพิมพ์สำหรับการแยกสามารถกำหนดได้ดังต่อไปนี้ (ด้านบนของแลมบ์ดาแคลคูลัสที่พิมพ์ด้วยการพิมพ์ย่อย): Γ⊢M:T1Γ⊢M:T2Γ⊢M:T1∧T2(∧I)Γ⊢M:⊤(⊤I)Γ⊢M:T1Γ⊢M:T2Γ⊢M:T1∧T2(∧I)Γ⊢M:⊤(⊤I) \dfrac{\Gamma \vdash M : T_1 \quad \Gamma \vdash M : T_2} {\Gamma \vdash M : T_1 \wedge T_2} (\wedge I) \qquad\qquad \dfrac{} {\Gamma \vdash M : \top} (\top I) ประเภทแยกมีคุณสมบัติที่น่าสนใจเกี่ยวกับการทำให้เป็นมาตรฐาน: คำแลมบ์ดาสามารถพิมพ์ได้โดยไม่ต้องใช้⊤I⊤I\top Iกฎถ้ามันเป็นมาตรฐานอย่างยิ่ง คำแลมบ์ดายอมรับประเภทที่ไม่มี⊤⊤\top iff ซึ่งมีรูปแบบปกติ ถ้าหากแทนที่จะเพิ่มทางแยกเราจะเพิ่มสหภาพ Γ⊢M:T1Γ⊢M:T1∨T2(∨I1)Γ⊢M:T2Γ⊢M:T1∨T2(∨I2)Γ⊢M:T1Γ⊢M:T1∨T2(∨I1)Γ⊢M:T2Γ⊢M:T1∨T2(∨I2) \dfrac{\Gamma \vdash M : T_1} {\Gamma \vdash …

2
เหตุใด C ประเภทโมฆะจึงไม่คล้ายกับประเภทที่ว่าง / ด้านล่าง
Wikipedia ตลอดจนแหล่งข้อมูลอื่น ๆ ที่ฉันได้พบรายการvoidประเภทC เป็นหน่วยประเภทซึ่งตรงข้ามกับประเภทที่ว่างเปล่า ฉันพบว่ามันสับสนเพราะฉันคิดว่าvoidเหมาะกับนิยามของประเภทที่ว่าง / ล่าง ไม่มีค่านิยมใด ๆ อยู่voidเท่าที่ฉันจะบอกได้ ฟังก์ชั่นที่มีประเภทคืนค่าเป็นโมฆะระบุว่าฟังก์ชั่นจะไม่ส่งคืนสิ่งใดดังนั้นจึงสามารถทำงานได้เพียงผลข้างเคียงเท่านั้น ตัวชี้ชนิดvoid*เป็นชนิดย่อยของชนิดตัวชี้อื่นทั้งหมด นอกจากนี้การแปลงไปยังและจากvoid*ใน C นั้นเป็นนัย ผมไม่แน่ใจว่าถ้าจุดสุดท้ายมีบุญใด ๆ ที่เป็นข้อโต้แย้งสำหรับvoidการเป็นประเภทที่ว่างเปล่าเป็นมากหรือน้อยเป็นกรณีพิเศษที่มีความสัมพันธ์ไม่มากที่จะvoid*void ในทางกลับกันvoidตัวมันเองไม่ใช่ประเภทย่อยของประเภทอื่นทั้งหมดซึ่งเท่าที่ฉันสามารถบอกได้ว่าเป็นข้อกำหนดสำหรับประเภทที่จะเป็นประเภทด้านล่าง
28 type-theory  c  logic  modal-logic  coq  equality  coinduction  artificial-intelligence  computer-architecture  compilers  asymptotics  formal-languages  asymptotics  landau-notation  asymptotics  turing-machines  optimization  decision-problem  rice-theorem  algorithms  arithmetic  floating-point  automata  finite-automata  data-structures  search-trees  balanced-search-trees  complexity-theory  asymptotics  amortized-analysis  complexity-theory  graphs  np-complete  reductions  np-hard  algorithms  string-metrics  computability  artificial-intelligence  halting-problem  turing-machines  computation-models  graph-theory  terminology  complexity-theory  decision-problem  polynomial-time  algorithms  algorithm-analysis  optimization  runtime-analysis  loops  turing-machines  computation-models  recurrence-relation  master-theorem  complexity-theory  asymptotics  parallel-computing  landau-notation  terminology  optimization  decision-problem  complexity-theory  polynomial-time  counting  coding-theory  permutations  encoding-scheme  error-correcting-codes  machine-learning  natural-language-processing  algorithms  graphs  social-networks  network-analysis  relational-algebra  constraint-satisfaction  polymorphisms  algorithms  graphs  trees 

1
มีแคลคูลัส SKI ที่พิมพ์หรือไม่
ส่วนมากของเรารู้ว่าการติดต่อระหว่างcombinatory ตรรกศาสตร์และแลมบ์ดาแคลคูลัส แต่ฉันไม่เคยเห็น (บางทีฉันไม่ได้ดูลึกพอ) เทียบเท่ากับ "combinators ที่พิมพ์" ซึ่งสอดคล้องกับแคลคูลัสแลมบ์ดาที่พิมพ์ได้ง่าย สิ่งนั้นมีอยู่จริงหรือไม่? เราจะหาข้อมูลเกี่ยวกับมันได้จากที่ไหน?

4
ความแตกต่างระหว่างประเภทและชนิดคืออะไร
ฉันเรียนรู้การเขียนโปรแกรม langauge Haskell และฉันพยายามที่จะตัดหัวของฉันรอบสิ่งที่แตกต่างระหว่างที่typeและkindเป็น a kind is a type of typeตามที่ผมเข้าใจมัน ยกตัวอย่างเช่นและa ford is a type of cara car is a kind of vehicle นี่เป็นวิธีที่ดีที่จะคิดเกี่ยวกับสิ่งนี้หรือไม่? เพราะวิธีการที่สมองของฉันเป็นสายในปัจจุบันเป็นford is a **type** of carแต่ยังขณะที่ในเวลาเดียวกันcar is a **type** of vehicle นั่นcar is a **kind** of vehicleคือข้อกำหนดtypeและkindสามารถใช้แทนกันได้ ใครช่วยแสงนี้บ้าง

3
การจัดประเภทของระบบพิมพ์ (แข็งแรง / อ่อน, ไดนามิก / คงที่)
กล่าวโดยย่อ: ระบบการจำแนกประเภทเป็นอย่างไรในบริบททางวิชาการ โดยเฉพาะอย่างยิ่งฉันสามารถหาแหล่งที่มีชื่อเสียงที่สร้างความแตกต่างระหว่างระบบประเภทที่แตกต่างกันได้อย่างไร ในความรู้สึกความยากลำบากของคำถามนี้ไม่ใช่ว่าฉันไม่สามารถหาคำตอบได้ แต่ฉันสามารถค้นหาได้มากเกินไปและไม่มีใครโดดเด่นเท่าที่ควร พื้นหลังฉันพยายามปรับปรุงบทความใน Haskell wiki เกี่ยวกับการพิมพ์ซึ่งในปัจจุบันอ้างว่ามีความแตกต่างดังต่อไปนี้: ไม่มีการพิมพ์: ภาษาไม่มีความคิดประเภทหรือจากมุมมองที่พิมพ์: มีประเภทเดียวในภาษา ภาษาแอสเซมบลีมีชนิด 'รูปแบบบิต' เท่านั้น Rexx และ Tk มีเฉพาะชนิด 'ข้อความ' แกน MatLab มีเฉพาะ 'เมทริกซ์ที่ซับซ้อนที่มีมูลค่า' ประเภท การพิมพ์ที่อ่อนแอ: มีประเภทที่แตกต่างเพียงไม่กี่ประเภทและอาจเป็นคำพ้องความหมายสำหรับหลายประเภท เช่น C ใช้ตัวเลขจำนวนเต็มสำหรับ booleans, จำนวนเต็ม, ตัวอักษร, ชุดบิตและการแจกแจง การพิมพ์ที่แข็งแกร่ง: ชุดเม็ดเล็กแบบละเอียดเช่นในภาษา Ada, ภาษา Wirthian (Pascal, Modula-2), Eiffel ทั้งหมดนี้ขัดกับการรับรู้ส่วนบุคคลของฉันซึ่งเป็นไปตาม: การพิมพ์ที่อ่อนแอ: ออบเจ็กต์มีประเภท แต่จะถูกแปลงเป็นประเภทอื่นโดยปริยายเมื่อบริบทต้องการ ยกตัวอย่างเช่น Perl, PHP และ …

1
อะไรคือระบบพิมพ์ที่แข็งแกร่งที่รู้จักกันดีที่สุดซึ่งอนุมานได้?
เป็นที่ทราบกันดีว่าการอนุมานของ Hindley-Milner (การพิมพ์ -calculus พร้อม polymorphism) นั้นมีการอนุมานประเภทที่สามารถตัดสินใจได้: คุณสามารถสร้างชนิดหลักการสำหรับโปรแกรมใด ๆ โดยไม่มีคำอธิบายประกอบใด ๆλλ\lambda การเพิ่มประเภทของสไตล์ Haskell ดูเหมือนจะรักษาความสามารถในการถอดรหัสได้ แต่การเพิ่มเติมเพิ่มเติมทำให้การอนุมานโดยไม่มีการเพิ่มความคิดเห็นไม่สามารถอธิบายได้ (ตระกูลตระกูล, GADTs, ชนิดพึ่งพา, ประเภท Rank, N, Systemเป็นต้น)ωω\omega ฉันสงสัยว่า: อะไรคือระบบพิมพ์ที่แข็งแกร่งที่สุดที่มีการอนุมานได้อย่างสมบูรณ์? มันจะอยู่ที่ไหนสักแห่งระหว่าง Hindley-Milner (decidable อย่างสมบูรณ์) และ dependent-types (undecidable สมบูรณ์) มีแง่มุมของ DT ที่สามารถเพิ่มซึ่งรักษาความสามารถในการตัดสินใจอนุมานได้หรือไม่? มีงานวิจัยใดที่ทำเพื่อดูว่าสามารถผลักดันสิ่งนี้ได้ไกลแค่ไหน? ฉันรู้ว่าไม่มีระบบที่แข็งแกร่งที่สุดเพียงระบบเดียวที่มีความเป็นไปได้ที่จะเกิดการเปลี่ยนแปลงเล็ก ๆ น้อย ๆ ที่ไม่สิ้นสุดและเพิ่มขึ้นซึ่งสามารถเพิ่มเข้าไปในการอนุมาน HM แต่มีแนวโน้มว่าผู้สมัครที่ใช้งานได้ไม่กี่คนของระบบที่ถูกค้นพบ แก้ไข: เนื่องจากไม่มีระบบที่ "แข็งแกร่งที่สุด" ฉันจะยอมรับคำตอบที่แสดงถึงระบบที่น่าทึ่งซึ่งขยาย Hindley Milner ด้วยการอนุมานที่แน่นอน …

2
การเทียบเท่าเบต้าคืออะไร
คำถามนี้ถูกย้ายจาก Theoretical Computer Science Exchange Exchange เนื่องจากสามารถตอบได้ใน Computer Science Stack Exchange อพยพ 7 ปีที่ผ่านมา ในสคริปต์ที่ฉันกำลังอ่านเกี่ยวกับแคลคูลัสแลมบ์ดามีการนิยามเบต้าเทียบเท่าดังนี้: -equivalenceเป็นความสมดุลที่เล็กที่สุดที่มี\≡ บีตา→การบีตาββ\beta≡β≡β\equiv_\beta→β→β\rightarrow_\beta ฉันไม่รู้ว่ามันหมายถึงอะไร ใครสามารถอธิบายมันในแง่ง่ายกว่า? อาจจะด้วยตัวอย่าง? ฉันต้องการมันสำหรับบทแทรกตามทฤษฎีบทโบสถ์ - รัสเซอร์พูด หาก M N แล้วมี L กับ M L และ N \ twoheadrightarrow_ \ เบต้าลิตร≡β≡β\equiv_\beta↠β↠β\twoheadrightarrow_\beta↠β↠β\twoheadrightarrow_\beta

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