ทฤษฎีประเภทขึ้นอยู่กับและฟังก์ชั่นประเภท 'โดยพลการ'
คำตอบแรกของฉันสำหรับคำถามนี้อยู่ในระดับสูงในแนวคิดและรายละเอียดต่ำและสะท้อนให้เห็นถึงคำถามย่อย 'เกิดอะไรขึ้น?'; คำตอบนี้จะเหมือนกัน แต่มุ่งเน้นไปที่คำถามย่อย 'เราจะได้ฟังก์ชั่นประเภทใดก็ได้หรือไม่'
หนึ่งที่จะขยายการดำเนินงานเกี่ยวกับพีชคณิตของจำนวนเงินและสินค้าจะถูกเรียกว่า 'ผู้ประกอบการขนาดใหญ่ซึ่งเป็นตัวแทนของผลรวมและผลิตภัณฑ์ของลำดับ (หรือมากกว่าปกติรวมกับสินค้าของฟังก์ชั่นมากกว่าโดเมน) มักจะเขียนΣ
และΠ
ตามลำดับ ดูสัญลักษณ์ซิกมามา
ดังนั้นผลรวม
a₀ + a₁X + a₂X² + ...
อาจจะเขียน
Σ[i ∈ ℕ]aᵢXⁱ
ซึ่งa
เป็นลำดับของจำนวนจริงตัวอย่างเช่น ผลิตภัณฑ์ที่จะเป็นตัวแทนในทำนองเดียวกันกับแทนΠ
Σ
เมื่อคุณมองจากระยะไกลชนิดของการแสดงออกลักษณะนี้เป็นจำนวนมากเช่น 'พล' ฟังก์ชั่นในX
; เรามีข้อ จำกัด สำหรับซีรีย์ที่แสดงออกได้และฟังก์ชั่นการวิเคราะห์ที่เกี่ยวข้อง นี่คือผู้สมัครเพื่อเป็นตัวแทนในทฤษฎีประเภทหรือไม่? อย่างแน่นอน!
คลาสของทฤษฎีประเภทที่มีการแสดงออกในทันทีของนิพจน์เหล่านี้คือคลาสของทฤษฎีประเภท 'ที่ขึ้นอยู่กับ': ทฤษฎีที่มีชนิดที่พึ่งพา โดยธรรมชาติเรามีคำที่ขึ้นอยู่กับข้อกำหนดและในภาษาเช่น Haskell ด้วยฟังก์ชั่นประเภทและปริมาณประเภทคำและประเภทขึ้นอยู่กับประเภท ในการตั้งค่าขึ้นอยู่กับเรายังมีประเภทขึ้นอยู่กับเงื่อนไข Haskell ไม่ใช่ภาษาที่พิมพ์ได้อย่างพึ่งพาแม้ว่าคุณสมบัติหลายอย่างของชนิดที่ขึ้นต่อกันสามารถจำลองได้โดยการทรมานภาษาเล็กน้อยโดยทรมานภาษาบิต
Curry-Howard และประเภทตาม
คำว่า 'Curry-Howard isomorphism' เริ่มต้นชีวิตในฐานะการสังเกตว่าข้อตกลงและกฎการตัดสินประเภทของแลมบ์ดาเพียงพิมพ์ตรงกับการหักธรรมชาติ (ตามสูตรโดย Gentzen) นำไปใช้กับตรรกะเชิงอนุมานเชิงประจักษ์ประเภทที่เกิดขึ้นของข้อเสนอ และข้อตกลงที่ใช้แทนหลักฐานแม้ทั้งสองจะคิดค้น / ค้นพบอย่างอิสระ ตั้งแต่นั้นมาก็เป็นแหล่งที่มาของแรงบันดาลใจสำหรับนักทฤษฎีประเภท หนึ่งในสิ่งที่ชัดเจนที่สุดที่ต้องพิจารณาคือว่าและวิธีการโต้ตอบจดหมายสำหรับตรรกะเชิงประพจน์นี้สามารถขยายไปยังคำกริยาหรือคำสั่งที่สูงขึ้น ทฤษฎีประเภทขึ้นอยู่กับเริ่มแรกเกิดขึ้นจากถนนสายการสำรวจนี้
สำหรับการแนะนำให้แกง-โฮเวิร์ดมอร์ฟสำหรับเพียงแค่พิมพ์แคลคูลัสแลมบ์ดาดูที่นี่ ตัวอย่างเช่นถ้าเราต้องการที่จะพิสูจน์ว่าA ∧ B
เราจะต้องพิสูจน์A
และพิสูจน์B
; หลักฐานรวมเป็นเพียงคู่ของการพิสูจน์: หนึ่งสำหรับแต่ละ conjunct
ในการหักตามธรรมชาติ:
Γ ⊢ A Γ ⊢ B
Γ ⊢ A ∧ B
และในแคลคูลัสแลมบ์ดาที่พิมพ์ง่าย:
Γ ⊢ a : A Γ ⊢ b : B
Γ ⊢ (a, b) : A × B
การติดต่อที่คล้ายกันมีอยู่สำหรับ∨
และประเภทผลรวม→
และประเภทฟังก์ชั่นและกฎการกำจัดต่างๆ
ข้อเสนอที่ไม่สามารถพิสูจน์ได้ (เป็นเท็จ intuitionistically) สอดคล้องกับประเภทที่ไม่มีใครอยู่
ด้วยการเปรียบเทียบประเภทเป็นข้อเสนอเชิงตรรกะในใจเราสามารถเริ่มพิจารณาวิธีจำลองภาคในโลกประเภท มีหลายวิธีที่สิ่งนี้ได้รับการทำเป็นกรงเล็บ (ดูบทนำนี้เพื่อทฤษฎีประเภท Intuitionistic ของมาร์ติน - Löfสำหรับมาตรฐานที่ใช้กันอย่างแพร่หลาย) แต่วิธีการที่เป็นนามธรรมมักจะสังเกตว่าคำกริยาเป็นเหมือนข้อเสนอที่มีตัวแปรระยะฟรีหรือ ฟังก์ชั่นการใช้ข้อตกลงกับข้อเสนอ หากเราอนุญาตให้มีการแสดงออกประเภทที่มีเงื่อนไขแล้วการรักษาในรูปแบบแคลคูลัสแลมบ์ดานำเสนอตัวเองทันทีเป็นไปได้!
พิจารณาเพียงหลักฐานอันสร้างสรรค์สิ่งที่ถือว่าเป็นหลักฐานของ∀x ∈ X.P(x)
? เราสามารถคิดว่ามันเป็นฟังก์ชั่นการพิสูจน์โดยใช้เงื่อนไข ( x
) เพื่อพิสูจน์ข้อเสนอที่เกี่ยวข้องของพวกเขา ( P(x)
) เพื่อให้สมาชิก (พิสูจน์) ประเภท (เรื่อง) ∀x : X.P(x)
เป็น 'ฟังก์ชั่นขึ้นอยู่กับ' ซึ่งแต่ละx
ในให้ระยะเวลาของประเภทX
P(x)
เกี่ยวกับ∃x ∈ X.P(x)
อะไร เราจำเป็นต้องมีสมาชิกของใด ๆX
, ร่วมกับหลักฐานของx
P(x)
เพื่อให้สมาชิก (พิสูจน์) ประเภท (เรื่อง) ∃x : X.P(x)
เป็น 'คู่ขึ้นอยู่กับ': คำที่โดดเด่นx
ในการร่วมกับระยะเวลาของการพิมพ์X
P(x)
โน้ต: ฉันจะใช้
∀x ∈ X...
สำหรับข้อความจริงเกี่ยวกับสมาชิกของกลุ่มX
และ
∀x : X...
X
สำหรับประเภทการแสดงออกที่สอดคล้องกับปริมาณสากลมากกว่าประเภท ∃
ในทำนองเดียวกันสำหรับ
ข้อพิจารณาร่วมกัน: ผลิตภัณฑ์และผลรวม
เช่นเดียวกับการติดต่อกับ Curry-Howard ประเภทที่มีข้อเสนอเรามีการติดต่อเชิง Combinatorial ประเภทพีชคณิตพร้อมตัวเลขและฟังก์ชั่นซึ่งเป็นประเด็นหลักของคำถามนี้ มีความสุขที่สามารถขยายไปยังประเภทตามที่ระบุไว้ข้างต้น!
ฉันจะใช้เครื่องหมายโมดูลัส
|A|
เพื่อเป็นตัวแทน 'ขนาด' ของประเภทA
เพื่อให้การโต้ตอบที่ชัดเจนที่ระบุไว้ในคำถามระหว่างประเภทและตัวเลข โปรดทราบว่านี่เป็นแนวคิดนอกทฤษฎี ฉันไม่อ้างว่าจำเป็นต้องมีผู้ให้บริการดังกล่าวในภาษา
ให้เรานับสมาชิกประเภทที่เป็นไปได้ (ลดลงอย่างเต็มที่ตามบัญญัติ)
∀x : X.P(x)
ซึ่งเป็นประเภทของการทำงานขึ้นอยู่กับการใช้ข้อตกลงx
ประเภทเงื่อนไขของประเภทX
P(x)
แต่ละฟังก์ชั่นดังกล่าวจะต้องมีเอาต์พุตสำหรับทุกเทอมของX
และเอาต์พุตนี้จะต้องเป็นประเภทเฉพาะ x
ในแต่ละX
ครั้งจะมี|P(x)|
'ตัวเลือก' ของเอาต์พุต
มุกคือ
|∀x : X.P(x)| = Π[x : X]|P(x)|
ซึ่งแน่นอนไม่ได้ทำให้รู้สึกอย่างมากถ้าX
เป็นIO ()
แต่ใช้ได้กับประเภทพีชคณิต
ในทำนองเดียวกันคำชนิด
∃x : X.P(x)
เป็นประเภทของคู่ที่(x, p)
มีp : P(x)
ให้x
ในสิ่งใดก็ตามX
เราสามารถสร้างคู่ที่เหมาะสมกับสมาชิกคนใดก็ได้P(x)
โดยให้|P(x)|
'ตัวเลือก'
ดังนั้น
|∃x : X.P(x)| = Σ[x : X]|P(x)|
กับ caveats เดียวกัน
สิ่งนี้แสดงให้เห็นถึงสัญกรณ์ทั่วไปสำหรับประเภทอ้างอิงในทฤษฎีโดยใช้สัญลักษณ์Π
และΣ
และแน่นอนว่าทฤษฎีจำนวนมากทำให้ความแตกต่างระหว่าง 'สำหรับทุก' และ 'ผลิตภัณฑ์' และระหว่าง 'มี' และ 'ผลรวม' เนื่องจากการโต้ตอบที่กล่าวถึงข้างต้น
เราใกล้เข้ามาแล้ว!
เวกเตอร์: ตัวแทน tuples ขึ้นอยู่กับ
ตอนนี้เราสามารถเข้ารหัสนิพจน์ตัวเลขได้ไหม
Σ[n ∈ ℕ]Xⁿ
เป็นประเภทการแสดงออก?
ไม่มาก ในขณะที่เราสามารถพิจารณาความหมายของการแสดงออกเช่นXⁿ
ใน Haskell อย่างไม่เป็นทางการซึ่งX
เป็นประเภทและn
จำนวนธรรมชาติมันเป็นการละเมิดของสัญกรณ์; นี่คือนิพจน์ประเภทที่มีตัวเลข: ไม่ใช่นิพจน์ที่ถูกต้องชัดเจน
ในทางกลับกันเมื่อมีประเภทที่อ้างอิงในรูปภาพประเภทที่มีตัวเลขจะเป็นจุดที่แม่นยำ ในความเป็นจริงสิ่งอันดับขึ้นหรือ 'เวกเตอร์' เป็นตัวอย่างที่มากมักอ้างของวิธีการขึ้นอยู่กับชนิดสามารถให้ความปลอดภัยประเภทระดับปฏิบัติสำหรับการดำเนินงานเช่นการเข้าถึงรายการ เวกเตอร์เป็นเพียงรายการพร้อมกับข้อมูลประเภทระดับเกี่ยวกับความยาวของมัน: Xⁿ
สิ่งที่เรามีความหลังสำหรับการแสดงออกประเภทเช่น
ในช่วงเวลาของคำตอบนี้ให้
Vec X n
เป็นประเภทของความยาวn
เวกเตอร์ของX
ค่าประเภท
เทคนิคn
ที่นี่คือแทนที่จะเป็นจำนวนธรรมชาติจริงๆ การแสดงในระบบของจำนวนธรรมชาติ เราสามารถเป็นตัวแทนของจำนวนธรรมชาติ ( Nat
) ในสไตล์อาโน่เป็นทั้งศูนย์ ( 0
) หรือทายาท ( S
) ของจำนวนธรรมชาติอื่นและสำหรับn ∈ ℕ
ผมเขียน˻n˼
หมายถึงคำในซึ่งหมายถึงNat
n
ยกตัวอย่างเช่นเป็น˻3˼
S (S (S 0))
ถ้าอย่างนั้นเราก็มี
|Vec X ˻n˼| = |X|ⁿ
n ∈ ℕ
สำหรับการใด ๆ
ประเภท Nat: การส่งเสริมข้อตกลงกับประเภท
ตอนนี้เราสามารถเข้ารหัสการแสดงออกเช่น
Σ[n ∈ ℕ]Xⁿ
เป็นประเภท นิพจน์นี้โดยเฉพาะจะก่อให้เกิดประเภทที่แน่นอน isomorphic กับประเภทของรายการX
ตามที่ระบุไว้ในคำถาม (ไม่เพียงแค่นั้น แต่จากมุมมองเชิงทฤษฎีหมวดหมู่ฟังก์ชั่นประเภท - ซึ่งเป็น functor - การX
ไปที่ประเภทข้างต้นเป็นธรรมชาติ isomorphicไปยังรายการ functor.)
หนึ่งชิ้นสุดท้ายของปริศนาสำหรับฟังก์ชั่น 'arbitrary' คือวิธีการเข้ารหัสสำหรับ
f : ℕ → ℕ
การแสดงออกที่ชอบ
Σ[n ∈ ℕ]f(n)Xⁿ
เพื่อให้เราสามารถใช้สัมประสิทธิ์โดยพลการกับอนุกรมกำลัง
เราเข้าใจการโต้ตอบของตัวเลขเชิงพีชคณิตด้วยตัวเลขทำให้เราสามารถแมปประเภทจากตัวเลขและฟังก์ชันพิมพ์ไปยังฟังก์ชันตัวเลขได้ เราสามารถไปทางอื่น! - รับตัวเลขตามธรรมชาติมีประเภทพีชคณิตที่ชัดเจนที่แน่นอนกับสมาชิกหลายคำว่าไม่ว่าเราจะมีประเภทขึ้นอยู่กับ เราสามารถพิสูจน์ได้อย่างง่ายดายนอกทฤษฎีประเภทโดยอุปนัย สิ่งที่เราต้องการคือวิธีการแมปจากจำนวนธรรมชาติกับประเภทภายในระบบ
สำนึกที่น่าพอใจก็คือเมื่อเรามีประเภทที่ต้องพึ่งพาการพิสูจน์โดยการเหนี่ยวนำและการก่อสร้างโดยการเรียกซ้ำกลายเป็นเหมือนกันอย่างใกล้ชิด - แน่นอนพวกเขาเป็นสิ่งเดียวกันในหลายทฤษฎี เนื่องจากเราสามารถพิสูจน์ได้โดยอุปนัยประเภทที่มีอยู่ซึ่งตอบสนองความต้องการของเราเราจะไม่สามารถสร้างมันได้หรือ
มีหลายวิธีในการแสดงประเภทในระดับคำ ฉันจะใช้สัญกรณ์ Haskellish ในจินตนาการที่นี่กับ*
เอกภพประเภทต่างๆ 1
ในทำนองเดียวกันก็มีอย่างน้อยหลายวิธีในการสังเกต ' ℕ
-elimination' เนื่องจากมีทฤษฎีแบบพึ่งพา ฉันจะใช้สัญลักษณ์การจับคู่รูปแบบ Haskellish
เราต้องการการแมปα
จากNat
ถึง*
กับคุณสมบัติ
∀n ∈ ℕ.|α ˻n˼| = n.
pseudodefinition ต่อไปนี้เพียงพอ
data Zero -- empty type
data Successor a = Z | Suc a -- Successor ≅ Maybe
α : Nat -> *
α 0 = Zero
α (S n) = Successor (α n)
ดังนั้นเราจะเห็นว่าการกระทำของα
กระจกสะท้อนพฤติกรรมของผู้สืบทอดS
ทำให้มันเป็นแบบโฮโมมอร์ฟิซึม Successor
เป็นฟังก์ชั่นประเภทที่ 'เพิ่มหนึ่ง' กับจำนวนสมาชิกของประเภท; นั่นคือ|Successor a| = 1 + |a|
สำหรับa
ขนาดที่กำหนด
ตัวอย่างเช่นα ˻4˼
(ซึ่งก็คือα (S (S (S (S 0))))
) คือ
Successor (Successor (Successor (Successor Zero)))
และข้อกำหนดของประเภทนี้คือ
Z
Suc Z
Suc (Suc Z)
Suc (Suc (Suc Z))
ให้องค์ประกอบสี่อย่างกับเรา: |α ˻4˼| = 4
.
n ∈ ℕ
เราก็มีเช่นเดียวกัน
|α ˻n˼| = n
ตามความจำเป็น.
- ทฤษฎีจำนวนมากต้องการให้สมาชิก
*
เป็นเพียงตัวแทนของประเภทและการดำเนินการที่มีให้เป็นการทำแผนที่ที่ชัดเจนจากแง่ของประเภท*
เพื่อประเภทที่เกี่ยวข้องของพวกเขา ทฤษฎีอื่น ๆ อนุญาตให้ใช้ตัวอักษรเป็นหน่วยงานระดับคำ
ฟังก์ชั่น 'Arbitrary'?
ตอนนี้เรามีเครื่องมือในการแสดงซีรีย์พาวเวอร์ทั่วไปแบบเต็ม!
ซีรี่ย์
Σ[n ∈ ℕ]f(n)Xⁿ
กลายเป็นประเภท
∃n : Nat.α (˻f˼ n) × (Vec X n)
ที่เป็นตัวแทนที่เหมาะสมบางอย่างที่อยู่ในภาษาของฟังก์ชั่น˻f˼ : Nat → Nat
f
เราสามารถดูได้ดังนี้
|∃n : Nat.α (˻f˼ n) × (Vec X n)|
= Σ[n : Nat]|α (˻f˼ n) × (Vec X n)| (property of ∃ types)
= Σ[n ∈ ℕ]|α (˻f˼ ˻n˼) × (Vec X ˻n˼)| (switching Nat for ℕ)
= Σ[n ∈ ℕ]|α ˻f(n)˼ × (Vec X ˻n˼)| (applying ˻f˼ to ˻n˼)
= Σ[n ∈ ℕ]|α ˻f(n)˼||Vec X ˻n˼| (splitting product)
= Σ[n ∈ ℕ]f(n)|X|ⁿ (properties of α and Vec)
นี่เป็น 'ความชอบ' หรือเปล่า? เราถูก จำกัด ไม่เพียง แต่กับค่าสัมประสิทธิ์จำนวนเต็มโดยวิธีนี้ แต่ไปยังจำนวนธรรมชาติ นอกเหนือจากนั้นf
สามารถเป็นอะไรก็ได้ด้วยภาษาทัวริงที่สมบูรณ์กับประเภทที่ขึ้นต่อกันเราสามารถแสดงฟังก์ชันการวิเคราะห์ใด ๆ ที่มีค่าสัมประสิทธิ์จำนวนธรรมชาติ
ฉันไม่ได้ตรวจสอบการโต้ตอบของสิ่งนี้ด้วยเช่นกรณีที่ให้ไว้ในคำถามList X ≅ 1/(1 - X)
หรือความรู้สึกที่เป็นไปได้เช่น 'ประเภท' เชิงลบและไม่ใช่จำนวนเต็มอาจมีในบริบทนี้
หวังว่าคำตอบนี้ไปทางเพื่อสำรวจว่าเราสามารถไปกับฟังก์ชันประเภทโดยพลการ