ทำไมลำไส้ใหญ่ถึงแสดงว่าค่าเป็นของประเภท?


19

Pierce (2002) แนะนำความสัมพันธ์การพิมพ์ในหน้า 92 ด้วยการเขียน:

ความสัมพันธ์การพิมพ์สำหรับนิพจน์ทางคณิตศาสตร์ที่เขียน "t: T" ถูกกำหนดโดยชุดของกฎการอนุมานที่กำหนดประเภทให้กับคำศัพท์

และเชิงอรรถระบุว่าสัญลักษณ์มักใช้แทน:. คำถามของฉันคือเหตุผลที่นักทฤษฎีประเภทต้องการใช้: มากกว่า ? ถ้า typeเป็นชุดของค่าดังนั้นจึงเหมาะสมอย่างยิ่งที่จะเขียนไม่ต้องมีสัญลักษณ์ใหม่TtT

มันคล้ายกับที่นักเขียน cs บางคนชอบถึงแม้จะคิดว่ามันเป็นการละเมิดสัญกรณ์และควรเขียน ?3n2=O(n2)3n2O(n2)


7
สมาชิกกริยา สามารถเป็นได้ทั้งจริงหรือเท็จขณะที่พิมพ์ประกาศเป็น interepreted โดยทั่วไปว่าเป็นคำสั่งที่เป็นข้อเท็จจริงที่มีการประกาศที่จะเป็นจริงหรือเป็นของจริงที่จะได้รับโดยหมดจดหมายถึงประโยค เปรียบเทียบสิ่งนี้กับการเป็นจำนวนเฉพาะซึ่งไม่มีวิธีการทางไวยากรณ์ของการเป็นสมาชิกที่เพียงพอ xX x:X
Musa Al-hassy

4
@ MusaAl-hassy: นั่นคือการบิดเบือนความจริงของสิ่งที่เกิดขึ้น มันไม่ได้ถูกประกาศว่าเป็นความจริงเพราะนั่นหมายความว่าฉันสามารถ "ประกาศ" ว่า " false: int" ตัวอย่างเช่น ไม่ว่าในกรณีใดก็ตามการตัดสินต้องได้มาจาก "วิธีการทางวากยสัมพันธ์อย่างแท้จริง" เช่นในกรณีของทฤษฎีประเภทภายในของหมวดหมู่ที่มีครอบครัว
Andrej Bauer


2
เพื่อเพิ่มความคิดเห็น @ MusaAl-hassy ของในประเภททฤษฎี computatioalของบ็อบตำรวจจวร์ตอัลเลน, บ๊อบฮาร์เปอร์, et al.,ใช้เป็นประจำสำหรับการตัดสินการพิมพ์เพราะมันเป็นมากขึ้นคล้ายกับคำกริยาสมาชิก (ดูนี้พูดคุยสไลด์ 25 ตัวอย่างเช่น)
xrq

3
แน่นอนก็เป็นการใช้สัญลักษณ์ที่ผิดและควรเขียนหรือไม่ (นักคณิตศาสตร์อาจต้องการ .)λ n .3 n 2O ( λ n . n 2 ) n 3 n 2O ( n n 2 )3n2O(n2)λn.3n2O(λn.n2)n3n2O(nn2)
Oscar Cunningham

คำตอบ:


12

เพราะสิ่งที่อยู่ทางขวาของโคลอนไม่จำเป็นต้องเป็นเซตและสิ่งที่อยู่ทางซ้ายของโคลอนไม่จำเป็นต้องเป็นสมาชิกของเซตนั้น

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

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

บางทีวิธีที่ความแตกต่างระหว่างประเภทและเซตนั้นชัดเจนที่สุดคือกฎพื้นฐานที่สุดของเซตกล่าวคือชุดที่สองมีค่าเท่ากันหากมีองค์ประกอบเดียวกันโดยทั่วไปจะไม่ใช้กับประเภท ดูคำตอบของ Andrej Bauer ที่นี่และคำตอบของเขาสำหรับคำถามที่เกี่ยวข้องสำหรับตัวอย่าง หัวข้อที่สองนั้นมีคำตอบอื่นที่ควรอ่าน

ในแคลคูลัสที่พิมพ์ให้บอกว่าประเภทเป็นเซตจริง ๆ แล้วให้ความหมายกับประเภท การให้แคลคูลัสความหมายประเภททฤษฎีไม่ได้เป็นเรื่องเล็กน้อย ตัวอย่างเช่นสมมติว่าคุณกำหนดภาษาด้วยฟังก์ชัน ชุดฟังก์ชั่นประเภทใด ฟังก์ชั่นทั้งหมดถูกกำหนดโดยกราฟขณะที่เราสอนในทฤษฎีเซต 101 แต่ฟังก์ชั่นบางส่วนนั้นเป็นอย่างไร คุณต้องการให้ฟังก์ชั่นที่ไม่สิ้นสุดทั้งหมดมีความหมายเหมือนกันหรือไม่? คุณไม่สามารถตีความประเภทเป็นชุดสำหรับแคลคูลัสที่อนุญาตให้ฟังก์ชันแบบเรียกซ้ำจนกว่าคุณจะตอบคำถามนั้น การให้โปรแกรมภาษาหรือแคลคูลัสเป็นความหมายเชิง Denotationalเป็นปัญหาที่ยากในต้นปี 1970 เอกสารน้ำเชื้อที่นี่มีต่อความหมายทางคณิตศาสตร์สำหรับภาษาคอมพิวเตอร์ (1971)โดยดาน่าสกอตต์และคริสโต Strachey Haskell Wikibookมีการนำเสนอที่ดีของหัวข้อ

ดังที่ฉันได้เขียนไว้ด้านบนส่วนที่สองของคำตอบคือแม้ว่าคุณจะสามารถให้ความหมายของทฤษฎีเซตได้ แต่สิ่งที่อยู่ทางซ้ายของลำไส้ใหญ่นั้นไม่ใช่องค์ประกอบของเซตเสมอไป ค่ามีชนิด แต่เพื่อทำสิ่งอื่น ๆ เช่นการแสดงออกและตัวแปร ตัวอย่างเช่นการแสดงออกในภาษาการเขียนโปรแกรมที่พิมพ์มีประเภทแม้ว่ามันจะไม่ยุติ คุณอาจจะยินดีที่จะ conflate integerและแต่ไม่ได้เป็นองค์ประกอบของ{Z}ZZ(x := 0; while true; do x := x + 1; x)Z

ฉันไม่รู้ว่าเครื่องหมายโคลอนเกิดขึ้นเมื่อใด ตอนนี้มันเป็นมาตรฐานในความหมายและทั่วไปในภาษาการเขียนโปรแกรม แต่ทั้ง Russel และโบสถ์ก็ไม่ได้ใช้มัน Algol ไม่ได้ใช้มัน แต่ภาษาที่ได้รับแรงบันดาลใจจาก Algol อย่างมากPascalทำในปี 1971 ฉันสงสัยว่ามันไม่ใช่ครั้งแรกเนื่องจากเอกสารทางทฤษฎีมากมายตั้งแต่ต้นปี 1970 ใช้สัญกรณ์ แต่ฉันไม่รู้ ใช้ก่อนหน้านี้ ที่น่าสนใจนี่คือหลังจากแนวคิดประเภทจากการเขียนโปรแกรมและจากตรรกะได้รวมเป็นหนึ่ง - ตามที่ Simon Martini แสดงในหลายประเภทประเภทในการเขียนโปรแกรมภาษาสิ่งที่เรียกว่า "ประเภท" ในภาษาโปรแกรมจนถึงปี 1960 มาจากภาษาพื้นเมือง การใช้คำและไม่ใช่จากทฤษฎีประเภท


37

เหตุผลหลักที่ต้องการใช้เครื่องหมายโคลอนกับความสัมพันธ์ของสมาชิกt:TtTคือความสัมพันธ์ที่เป็นสมาชิกที่สามารถทำให้เข้าใจผิดเพราะประเภทไม่ได้ (แค่) คอลเลกชัน

ϵ:

ประเภทอธิบายการก่อสร้างบางประเภทเช่นวิธีสร้างวัตถุที่มีโครงสร้างบางอย่างวิธีใช้พวกเขาและสมการที่เกี่ยวกับพวกเขา

A×BA×BA×BA×BA×BX×Y

t:TtT

TT

  1. Σ(n:N).isprime(n)×iseven(n)×(n>2)
  2. Σ(n:N).isprime(n)×isodd(n)×(n<2)

ส่วนขยายของทั้งสองว่างเปล่า แต่ไม่ได้เป็นประเภทเดียวกัน

:at:Tt:UTUtTt

aA¬(aA)aAt:T


1
Andrej คำตอบที่ดี คุณรู้จักแหล่งกำเนิดทางประวัติศาสตร์ของสัญลักษณ์ลำไส้ใหญ่หรือไม่?
Andreas Rossberg

xααϵ

1
gG

2
f:STfSTf(ST)มีการใช้กันอย่างแพร่หลายมานานก่อนที่ทฤษฎีประเภทจะเป็นที่นิยม
user21820

1
f(ST)STf:ST

5

Björn,

อาจมีการอ้างอิงก่อนหน้านี้ แต่อย่างหนึ่งมีการใช้โคลอนในภาษาการเขียนโปรแกรมภาษา Pascal:

Google ตีแรกให้กับ Pascal


2
ไม่มีภาษาการเขียนโปรแกรมก่อนหน้านี้ที่ใช้:หรือไม่
Andrej Bauer

@ AndrejBauer แน่นอนฉันเขียนว่า "อาจมีการอ้างอิงก่อนหน้านี้ แต่ ... " เพื่อป้องกันความจริงที่เป็นไปได้
Bjørn Kjos-Hanssen

@AndrejBauer Algol ไม่ได้ ถูก:ใช้ในเอกสารทางทฤษฎีก่อนปี 1970 หรือไม่?
Gilles 'หยุดความชั่วร้าย' ใน

1
Fortran มีREAL :: xแต่ฉันไม่รู้ว่าสิ่งนี้มาก่อนปาสกาล
ไมเคิล

1
@Michael Fortran มาเร็วกว่า Pascal (1955 เทียบกับ ca. 1970) แต่ฉันคิดว่าไวยากรณ์เฉพาะนี้ถูกนำมาใช้เฉพาะใน Fortran 90 ดังนั้นจึงช้ากว่า Pascal ดูตัวอย่างได้ที่นี่fortranwiki.org/fortran/show/Modernizing+Old+Fortran
Federico Poloni
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.