আমি বারেন্ড্রেগের ল্যাম্বদা কিউবে খাঁটি ধরণের সিস্টেমগুলির সাথে বিশেষত সবচেয়ে শক্তিশালী কন্সট্রাকশনসের ক্যালকুলাস নিয়ে পরীক্ষা করছি। এই সিস্টেমে বিভিন্ন ধরণের *এবং রয়েছে BOX। কেবল রেকর্ডের জন্য, নীচে আমি Morteসরঞ্জামটির কংক্রিট সিনট্যাক্সটি ব্যবহার করছি https://github.com/Gabriel439/Haskell-Morte- লাইব্রেরি যা ক্লাসিকাল ল্যাম্বদা ক্যালকুলাসের নিকটবর্তী।
আমি দেখতে পাচ্ছি যে আমরা কিছু প্রকারের চার্চের মতো এনকোডিং (যেমন বীজম-বেরারডাস্কি আইসোমর্ফিিজম বীজগণিত সম্পর্কিত ডেটাগুলির জন্য) দ্বারা প্রেরণামূলক প্রকারগুলি অনুকরণ করতে পারি। একটি সাধারণ উদাহরণের জন্য আমি Bool = ∀(t : *) -> t -> t -> tনির্মাণকারীর সাথে টাইপ ব্যবহার করি True = λ(t : *) -> λ(x : t) -> λ(y : t) -> xএবং False = λ(t : *) -> λ(x : t) -> λ(y : t) -> y।
আমি দেখতে পেলাম যে পদ-স্তরের ফাংশনগুলির Bool -> Tধরণটি Product T Tক্লাসিকাল Product = λ(A : *) -> λ(B : *) -> ∀(t : *) -> (A -> B -> t) -> tমডুলো প্যারামিট্রিকটির সাথে জোড় ধরণের জোড় সংখ্যার সাথে ফাংশনটির মাধ্যমে if : Bool -> λ(t : *) -> t -> t -> tপ্রকৃতপক্ষে পরিচয় is
নীচের সমস্ত প্রশ্ন নির্ভরশীল প্রকারের উপস্থাপনা সম্পর্কে হবে Bool -> *।
আমি বিভক্ত করতে পারেন
D : Bool -> *জোড়া মধ্যেD TrueএবংD False।Dআবার তৈরি করার জন্য কি প্রথাগত উপায় আছে ? আমি টাইপ স্তরেBool -> T = Product T Tফাংশনটির অ্যানালগ দ্বারা আইসোমসফিজমকে পুনরুত্পাদন করতে চাইifতবে আমি এই ফাংশনটিকে মূল হিসাবে সহজ লিখতে পারি নাifকারণ আমরা প্রকারের মতো আর্গুমেন্টগুলিতে পাস করতে পারি না।আমি প্রশ্ন (1) সমাধানের জন্য দুটি কনডাক্টরের সাথে একধরণের ইন্ডাকটিভ টাইপ ব্যবহার করি। উচ্চ স্তরের বর্ণনা (আগদা-শৈলী) নিম্নলিখিত ধরণের (টাইপ-স্তরের পরিবর্তে ব্যবহৃত
if)data BoolDep (T : *) (F : *) : Bool -> * where DepTrue : T -> BoolDep T F True DepFalse : F -> BoolDep T F Falseপিটিএস / কোসিতে নিম্নলিখিত এনকোডিং সহ:
λ(T : *) -> λ(F : *) -> λ(bool : Bool ) -> ∀(P : Bool -> *) -> ∀(DepTrue : T -> P True ) -> ∀(DepFalse : F -> P False ) -> P boolআমার এনকোডিং কি উপরে?
আমি
BoolDepএই কোডটির জন্য কনস্ট্রাক্টরগুলি লিখে রাখতে পারিDepTrue : ∀(T : *) -> ∀(F : *) -> T -> BoolDep T F True:λ(T : *) -> λ(F : *) -> λ(arg : T ) -> λ(P : Bool -> *) -> λ(DepTrue : T -> P True ) -> λ(DepFalse : F -> P False ) -> DepTrue arg
তবে আমি বিপরীত ফাংশন (বা বিপরীত দিকের কোনও ফাংশন) লিখতে পারি না। এটা কি সম্ভব? বা BoolDepআইসোমরফিজম তৈরি করার জন্য আমার অন্য উপস্থাপনা ব্যবহার করা উচিত BoolDep T F True = T?