เพราะสิ่งที่อยู่ทางขวาของโคลอนไม่จำเป็นต้องเป็นเซตและสิ่งที่อยู่ทางซ้ายของโคลอนไม่จำเป็นต้องเป็นสมาชิกของเซตนั้น
ทฤษฎีประเภทเริ่มต้นขึ้นในช่วงต้นศตวรรษที่ 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 มาจากภาษาพื้นเมือง การใช้คำและไม่ใช่จากทฤษฎีประเภท