নির্ভরশীল ধরণের তত্ত্ব এবং 'স্বেচ্ছাচারী' টাইপ ফাংশন
এই প্রশ্নের আমার প্রথম উত্তরটি ধারণাগুলিতে উচ্চ ছিল এবং বিশদটি কম ছিল এবং অনুচ্ছেদে প্রতিফলিত হয়েছিল, 'কী হচ্ছে?'; এই উত্তরটি একই হবে তবে সাবকশনটিতে ফোকাস থাকবে, 'আমরা কি নির্বিচারে টাইপ ফাংশন পেতে পারি?'
সমষ্টি এবং পণ্য বীজগাণিতিক অপারেশনের এক এক্সটেনশন তথাকথিত 'বড় অপারেটরদের', যা সমষ্টি এবং একটি ক্রম (অথবা আরো সাধারণভাবে, একটি ডোমেন উপর সমষ্টি এবং একটি ফাংশন পণ্য) গুণফল প্রতিনিধিত্বকারী সাধারণত লিখিত হয় Σ
এবং Π
যথাক্রমে। সিগমা নোটেশন দেখুন ।
সুতরাং যোগফল
a₀ + a₁X + a₂X² + ...
লেখা হতে পারে
Σ[i ∈ ℕ]aᵢXⁱ
a
উদাহরণস্বরূপ, যেখানে বাস্তব সংখ্যাগুলির কিছু ক্রম রয়েছে। পণ্যটির Π
পরিবর্তে একইভাবে উপস্থাপন করা হবে Σ
।
আপনি যখন দূর থেকে দেখেন, এই ধরণের অভিব্যক্তিটি অনেকটা 'স্বেচ্ছাসেবী' ফাংশনের মতো লাগে X
; আমরা অবশ্যই বহিঃপ্রকাশযোগ্য সিরিজ এবং তাদের সম্পর্কিত বিশ্লেষণমূলক ফাংশনগুলিতে সীমাবদ্ধ। এটি কি কোনও টাইপ তত্ত্বের উপস্থাপনের প্রার্থী? স্পষ্টভাবে!
এই ধরনের অভিব্যক্তির তাত্ক্ষণিক উপস্থাপনা রয়েছে এমন ধরণের তত্ত্বের শ্রেণি হ'ল 'নির্ভরশীল' প্রকারের তত্ত্বগুলির শ্রেণি: নির্ভরশীল ধরণের তত্ত্বগুলি। স্বভাবতই আমাদের শর্তাবলীর উপর নির্ভরশীল শর্তাদি রয়েছে, এবং টাইপ ফাংশন এবং প্রকারের পরিমাণ নির্ধারণের সাথে হাস্কেলের মতো ভাষায়, পদগুলির উপর নির্ভর করে শর্তাবলী এবং প্রকারগুলি। একটি নির্ভরশীল সেটিংয়ে, শর্তের উপর নির্ভর করে আমাদের অতিরিক্ত ধরণের রয়েছে। হাস্কেল নির্ভর করে টাইপ করা ভাষা নয়, যদিও নির্ভরশীল ধরণের অনেক বৈশিষ্ট্য ভাষাটিকে কিছুটা নির্যাতন করে সিমুলেট করা যায় ।
কারি-হাওয়ার্ড এবং নির্ভরশীল প্রকারগুলি
'কারি-হাওয়ার্ড isomorphism' একটি পর্যবেক্ষণ হিসাবে জীবন শুরু করেছিল যে কেবল-টাইপযুক্ত ল্যাম্বডা ক্যালকুলাসের শর্তাবলী এবং প্রকারের বিচারের নিয়ম প্রাকৃতিক ছাড়ের সাথে সামঞ্জস্য করে (জেন্টজেন দ্বারা প্রণীত) অন্তর্দৃষ্টি সংক্রান্ত প্রস্তাবনামূলক যুক্তির সাথে প্রয়োগ হয়েছিল, প্রকারগুলির স্থান গ্রহণের প্রকারের সাথে with , এবং শর্তাদি প্রমাণের স্থান গ্রহণ করে, দুটি স্বতন্ত্রভাবে উদ্ভাবিত / আবিষ্কার করা সত্ত্বেও। সেই থেকে এটি ধরণের তাত্ত্বিকদের জন্য অনুপ্রেরণার এক বিশাল উত্স। বিবেচনার জন্য সবচেয়ে সুস্পষ্ট বিষয়গুলির মধ্যে একটি হ'ল প্রস্তাবটি যুক্তিযুক্ততার জন্য এই চিঠিপত্রটি ভবিষ্যদ্বাণীপূর্ণ বা উচ্চতর অর্ডার লজিকগুলিতে বাড়ানো যেতে পারে কিনা। নির্ভরশীল প্রকারের তত্ত্বগুলি প্রাথমিকভাবে অনুসন্ধানের এই অ্যাভিনিউ থেকে উত্পন্ন হয়েছিল।
সহজভাবে টাইপযুক্ত ল্যাম্বডা ক্যালকুলাসের জন্য কারি-হাওয়ার্ড আইসোমরফিজমের পরিচিতির জন্য, এখানে দেখুন । উদাহরণ হিসাবে, যদি আমরা প্রমাণ A ∧ B
করতে চাই তবে আমাদের অবশ্যই প্রমাণিত A
এবং প্রমাণ করতে হবে B
; একটি সম্মিলিত প্রমাণ কেবল প্রমাণের একজোড়া: প্রতিটি সংযুক্তির জন্য একটি।
প্রাকৃতিক ছাড়
Γ ⊢ A Γ ⊢ B
Γ ⊢ A ∧ B
এবং সহজভাবে টাইপ করা ল্যাম্বদা ক্যালকুলাসে:
Γ ⊢ a : A Γ ⊢ b : B
Γ ⊢ (a, b) : A × B
অনুরূপ চিঠিপত্রের জন্য ∨
এবং যোগফল, →
এবং ফাংশনের ধরণের এবং বিভিন্ন বিলোপ বিধি বিধানের উপস্থিতি রয়েছে।
একটি অপ্রয়োজনীয় (স্বজ্ঞাত মিথ্যা) প্রস্তাবটি একটি জনবহুল ধরণের সাথে মিলে যায়।
যৌক্তিক প্রস্তাবগুলি মাথায় রেখে বিভিন্ন ধরণের উপমা রেখে আমরা টাইপ-ওয়ার্ল্ডে কীভাবে ভবিষ্যদ্বাণী করা যায় তা বিবেচনা করতে শুরু করতে পারি। অনেকগুলি উপায়ে এটি আনুষ্ঠানিকভাবে প্রকাশিত হয়েছে ( ব্যাপকভাবে ব্যবহৃত মানের জন্য মার্টিন-লুফের অন্তর্নিজ্ঞাত প্রকারের তত্ত্বটির এই ভূমিকাটি দেখুন ) তবে বিমূর্ত পদ্ধতির সাধারণত দেখা যায় যে একটি শিকারী ফ্রি টার্ম ভেরিয়েবলগুলির প্রস্তাবের মতো, বা, বিকল্পভাবে, প্রস্তাবের শর্তাবলী গ্রহণ একটি ফাংশন। যদি আমরা টাইপ এক্সপ্রেশনগুলিকে শর্তাবলী ধারণ করতে দেয় তবে ল্যাম্বদা ক্যালকুলাস স্টাইলে চিকিত্সা অবিলম্বে নিজেকে একটি সম্ভাবনা হিসাবে উপস্থাপন করে!
শুধুমাত্র গঠনমূলক প্রমাণ বিবেচনা করে, এর প্রমাণ কী গঠন করে ∀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
। অনুরূপ জন্য ∃
।
সম্মিলিত বিবেচনা: পণ্য এবং অঙ্কগুলি
পাশাপাশি প্রস্তাবগুলির সাথে কারি-হাওয়ার্ডের চিঠিপত্রের সংখ্যার সাথে আমাদের বীজগণিত প্রকারের সংযুক্তিযুক্ত চিঠিপত্র এবং ফাংশন রয়েছে, যা এই প্রশ্নের মূল বিষয়। সুখের বিষয়, এটি উপরে বর্ণিত নির্ভরশীল ধরণেরগুলিতে বাড়ানো যেতে পারে!
আমি মডুলাস স্বরলিপি ব্যবহার করব
|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)|
একই সতর্কতা সঙ্গে।
এই উভয়প্রান্তে সারিবদ্ধ চিহ্ন ব্যবহার তত্ত্ব নির্ভরশীল ধরনের জন্য সাধারণ স্বরলিপি Π
এবং Σ
, এবং প্রকৃতপক্ষে অনেক তত্ত্ব উল্লিখিত সংগতি কারণে, 'আছে' এবং 'সমষ্টি' এবং 'পণ্য' 'সবার জন্য' এবং মধ্যবর্তী পার্থক্য অস্পষ্ট।
আমরা কাছে আসছি!
ভেক্টর: নির্ভরশীল tuples প্রতিনিধিত্ব
আমরা কি এখন সংখ্যাসূচক এক্সপ্রেশনগুলির মতো এনকোড করতে পারি?
Σ[n ∈ ℕ]Xⁿ
টাইপ এক্সপ্রেশন হিসাবে?
বেশ না। যদিও আমরা অনানুষ্ঠানিকভাবে Xⁿ
হাস্কেলের মতো অভিব্যক্তির অর্থ বিবেচনা করতে পারি , যেখানে 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 ∈ ℕ
।
নাট প্রকার: প্রকারভেদ ℕ শর্তাবলী
এখন আমরা মত এক্সপ্রেশন এনকোড করতে পারেন
Σ[n ∈ ℕ]Xⁿ
প্রকার হিসাবে। এই নির্দিষ্ট অভিব্যক্তিটি এমন একটি প্রকারের জন্ম দেবে যা অবশ্যই X
প্রশ্নের তালিকা অনুসারে তালিকার ধরণের আইসমোর্ফিক । (শুধু তাই নয়, কিন্তু একটি দেখুন বিভাগ-তত্ত্বীয় বিন্দু থেকে, টাইপ ফাংশন - যা functor হয় - গ্রহণ X
উপরে টাইপ হয় স্বাভাবিকভাবেই isomorphic তালিকা functor করতে।)
'নির্বিচারে' ফাংশনগুলির জন্য ধাঁধার একটি চূড়ান্ত টুকরো হ'ল কীভাবে এনকোড করা যায় for
f : ℕ → ℕ
মতামত
Σ[n ∈ ℕ]f(n)Xⁿ
যাতে আমরা একটি পাওয়ার সিরিজে যথেচ্ছ সহগ প্রয়োগ করতে পারি।
আমরা ইতিমধ্যে সংখ্যার সাথে বীজগণিতের প্রকারের চিঠিপত্রগুলি বুঝতে পেরেছি, যা বিভিন্ন প্রকার থেকে সংখ্যায় মানচিত্র তৈরি করতে এবং সংখ্যাসূচক ফাংশনে ফাংশন টাইপ করে। আমরাও অন্য পথে যেতে পারি! - একটি প্রাকৃতিক সংখ্যা নিলে, অবশ্যই আমাদের অনেক নির্ভরশীল ধরণের সদস্য থাকুক বা না থাকুক এমন অনেক মেয়াদী সদস্যের সাথে অবশ্যই একটি নির্দিষ্ট বীজগণিত টাইপ রয়েছে। আমরা প্রকারের দ্বারা প্রকারের তত্ত্বের বাইরে এটি সহজেই প্রমাণ করতে পারি । আমাদের যা প্রয়োজন তা হ'ল সিস্টেমের অভ্যন্তরে প্রাকৃতিক সংখ্যা থেকে শুরু করে বিভিন্ন ধরণের মানচিত্র তৈরি করা ।
একটি আনন্দদায়ক উপলব্ধি হ'ল, একবার আমাদের নির্ভরশীল প্রকারগুলি হয়ে গেলে, সংক্রমণের দ্বারা প্রবর্তন দ্বারা প্রমাণগুলি এবং নির্মাণগুলি ঘনিষ্ঠভাবে অনুরূপ হয়ে যায় - প্রকৃতপক্ষে অনেক তত্ত্বগুলিতে এগুলি একই জিনিস। যেহেতু আমরা প্রযোজনার মাধ্যমে প্রমাণ করতে পারি যে প্রকারগুলি বিদ্যমান রয়েছে যা আমাদের চাহিদা পূরণ করে, তাই আমরা কি সেগুলি তৈরি করতে সক্ষম হই না?
শব্দ স্তরে বিভিন্ন উপস্থাপনের বিভিন্ন উপায় রয়েছে। আমি এখানে *
মহাবিশ্বের ধরণের জন্য একটি কল্পিত হাস্কেলিশ স্বরলিপি ব্যবহার করব যা সাধারণত নিজেই নির্ভরশীল সেটিংয়ের মধ্যে টাইপ হিসাবে বিবেচিত হয়। 1
তেমনি, ℕ
নির্ভরযোগ্য ধরণের তত্ত্ব রয়েছে বলে ' ইলিমিনেশন' নোট করার জন্য কমপক্ষে অনেকগুলি উপায় রয়েছে। আমি একটি হাস্কেলিশ প্যাটার্ন-ম্যাচিং স্বরলিপি ব্যবহার করব।
আমরা একটি ম্যাপিং প্রয়োজন, α
থেকে Nat
থেকে *
, সম্পত্তি সঙ্গে
∀n ∈ ℕ.|α ˻n˼| = n.
নিম্নলিখিত সিউডোডফিনিশন যথেষ্ট ices
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 ∈ ℕ
, আমাদের আছে have
|α ˻n˼| = n
প্রয়োজনীয়.
- অনেক তত্ত্বের প্রয়োজন হয় যে সদস্যগণ
*
কেবল প্রকারের প্রতিনিধি এবং তাদের ক্রিয়াকলাপের সাথে *
সম্পর্কিত সম্পর্কিত ধরণের একটি স্পষ্ট ম্যাপিং হিসাবে একটি ক্রিয়াকলাপ সরবরাহ করা হয় । অন্যান্য তত্ত্বগুলি আক্ষরিক প্রকারগুলিকে নিজেরাই টার্ম-লেভেল সত্তা হিসাবে থাকতে দেয়।
'নির্বিচারে' কাজ?
এক ধরণের হিসাবে সম্পূর্ণ সাধারণ পাওয়ার সিরিজটি প্রকাশ করার জন্য এখন আমাদের সরঞ্জাম রয়েছে!
ধারাবাহিক
Σ[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)
এই প্রসঙ্গে এই জাতীয় নেতিবাচক এবং অ-পূর্ণসংখ্যক 'প্রকারের' কী কী সমস্যা হতে পারে সে প্রশ্নে সরবরাহ করা কেস ।
আশা করি এই উত্তরটি স্বেচ্ছাসেবী ধরণের ফাংশনগুলির সাথে আমরা কতদূর যেতে পারি তা অন্বেষণ করার কিছু উপায় চলে।