সর্বজনীন প্রকারগুলি কি অস্তিত্বের ধরণের একটি উপ-প্রকার, বা বিশেষ ক্ষেত্রে?


20

আমি জানতে চাই যে সর্বজনীন- প্রকার : a একটি উপ-প্রকার, বা বিশেষ ক্ষেত্রে, একই স্বাক্ষর সহ অস্তিত্বযুক্ত-পরিমাণযুক্ত :Ta

Ta=X:{aX,f:X{T,F}}
Te
Te=X:{aX,f:X{T,F}}

আমি "হ্যাঁ" বলব: যদি কিছু "সমস্ত এক্স" এর জন্য সত্য হয় ( ), তবে এটি অবশ্যই "কিছু এক্স এর জন্য" ( ) থাকা উচিত। অর্থাৎ সঙ্গে একটি বিবৃতি ' ' হল কেবল সঙ্গে একই বিবৃতির একটি সীমিত সংস্করণ ' ':XX

X,P(X)?X,P(X).

আমি কি কোথাও ভুল করছি?

পটভূমি: আমি কেন এটি জিজ্ঞাসা করছি?

"বিমূর্ত [তথ্য] প্রকারের অস্তিত্বের ধরণ আছে" কীভাবে তা বোঝার জন্য আমি অস্তিত্বের ধরণের অধ্যয়ন করছি । আমি একা তত্ত্ব থেকে এই ধারণার ভাল উপলব্ধি করতে পারি না; আমারও দৃ concrete় উদাহরণ দরকার।

দুর্ভাগ্যক্রমে, ভাল কোড উদাহরণগুলি খুঁজে পাওয়া শক্ত কারণ বেশিরভাগ প্রোগ্রামিং ভাষার অস্তিত্বের ধরণের জন্য কেবল সীমিত সমর্থন রয়েছে। (উদাহরণস্বরূপ, হাস্কেলforall বা জাভার ?ওয়াইল্ডকার্ডস )) অন্যদিকে, সর্বজনীন-পরিমাণযুক্ত প্রকারগুলি "জেনেরিকস" এর মাধ্যমে অনেক সাম্প্রতিক ভাষা দ্বারা সমর্থিত।

সবচেয়ে খারাপ, জেনারিকগুলি খুব সহজেই অস্তিত্বের ধরণের সাথে মিশে যায় বলে মনে করে , সর্বজনীন ধরণের থেকে অস্তিত্বের কথা বলা আরও শক্ত করে তোলে। আমি আগ্রহী যে কেন এই মিক্স-আপটি এত সহজে ঘটে। এই প্রশ্নের একটি উত্তর এটি ব্যাখ্যা করতে পারে: সার্বজনীন প্রকারগুলি যদি অস্তিত্ববাদী প্রকারের কেবল একটি বিশেষ ক্ষেত্রে হয় তবে অবাক হওয়ার কিছু নেই যে জেনেরিক প্রকারগুলি, যেমন জাভা এর কোনওভাবেই List<T>ব্যাখ্যা করা যেতে পারে।


1
এমনকি সর্বজনীন এবং অস্তিত্বের মধ্যে পার্থক্য কি?

গাণিতিকভাবে বলতে গেলে, আপনি ঠিক বলেছেন: forall x. P(x)তা হলে exists x. P(x)। প্রকারগুলি পরীক্ষা করার সময় টাইপ সিস্টেমগুলি এটিকে বিবেচনা করে কিনা ... আমার কোনও ধারণা নেই। একটি আকর্ষণীয় প্রশ্নের জন্য +1।

1
@ ডিডানান: যদি পি (এক্স) কোনও এক্সের জন্য না ধরে থাকে তবে অবশ্যই এক্সপি (এক্স) হোল্ড করে না। কি আপনি সম্ভবত বোঝানো যখন কোনো হয় এক্স হলো, ∀x∈XP (x) এর পরোক্ষভাবে না ∃x∈XP (x) এর যদি এক্স = ∅

1
... এবং দ্রষ্টব্য, সেগুলি যদি স্বীকৃত বিন্যাস ব্যতীত আবার লিখিত হয় তবে এগুলি পৃথক দেখায় : ∀xx∈X⇒P (x) বনাম ∃xx∈X এবং পি (x) এবং ∃xx∈X⇒P (x) জাভাস্ক্রিপ্টে গার্বেজ কোনো সন্তুষ্ট করা হবে এক্স থেকে নয় এক্স

1
দুর্দান্ত প্রশ্ন। হাস্কেলের ক্ষেত্রে এটি অবশ্যই সত্য যে প্রকারের (ফোরাল বি। বি b> বি) একটি মান একটি ফাংশনে স্থানান্তরিত হতে পারে যা (ফোরাল বি। বি) গ্রহণ করে তবে এর বিপরীতে নয়, যার পরিবর্তে আপনি প্রত্যাশাযোগ্য বিকল্পটি আশা করতে চান একটি subtyping সম্পর্ক। তবে অবশ্যই আপনি যখন প্রকারের বিষয়ে কথা বলছেন তখন আপনি যে ধরণের সিস্টেমটি দেখছেন তার উল্লেখ করা উচিত, বিশেষত যদি আপনার শব্দার্থবিজ্ঞানের জন্য আপনার মনে একটি প্রথাগত বীজগণিত থাকে ...

উত্তর:


10

প্রথমত, গাণিতিক দৃষ্টিকোণ থেকে, x : T , P ( x ) বোঝায় না । সংক্ষিপ্তকরণ টি টি খালি না হলে এবং কেবল থাকে । তবে প্রোগ্রামিং ভাষাগুলিতে খালি ধরণের (যদিও এটি ঘটে) মোকাবেলা করা অস্বাভাবিক বিষয়।x:T,P(x)x:T,P(x)T

এখনও গাণিতিক দৃষ্টিকোণ থেকে, এমনকি যখন , দুটি এক নয়। আপনি ধরনের একটি সেট শব্দার্থবিদ্যা কর তবেই টি একটি একটি সুপারসেটও হয় টি নয়, একই ধরনের। (আসলে এটি সুপারস্টার নয়; এটি সুপারসেটের নিকটবর্তী সমীকরণের কাছাকাছি।)(x:T,P(x))(x:T,P(x))TaTe

আসুন প্রোগ্রামিং ভাষা তত্ত্বের আরও কাছাকাছি আসুন এবং দেখুন যে এই ধরণেরগুলি আসলে কী বোঝায়। একটি সার্বজনীন টাইপ: যদি আপনি একটি মূল্য আছে একটি করে টাইপ, আপনি গঠন করা যেতে পারে একটি ( এম ) কোন এম : এক্স । বিশেষত, আপনার যদি এম 1 এবং এম 2 উভয় প্রকারের এক্স থাকে তবে আপনি ( এম) তৈরি করতে পারেনTa=X.{a:X,f:Xbool}AA(M)M:XM1M2X এবং( এম 2 ) । সংক্ষেপে (এবং সম্ভবত ভাষার উপর নির্ভর করে কার্যকরভাবে) টি একটি ধরণের পদ থেকে পদে কাজ করে। যেমন সর্বজনীন টাইপপ্যারামিট্রাইজেশনটাইপ প্রদান করে: সমস্ত ধরণের জন্য এক মান মূল্য কাজ করে। বহুবর্ষেরকেন্দ্রবিন্দুতে সর্বজনীন প্রকারগুলি রয়েছে।A(M1)A(M2)Ta

অস্তিত্বের ধরণের পুরোপুরি একটি ভিন্ন জন্তু। টাইপ টি এর মান B দেওয়া , কেবলমাত্র একটি শব্দ N : X যেমন π 1 ( B ) = N , এবং এই শব্দটির জন্য π 2 ( B ) = { a : N , f :Te=X.{a:X,f:Xbool}BTeN:Xπ1(B)=N । অস্তিত্বের ধরণ N এর প্রকৃতিকে আড়াল করার একটি উপায় সরবরাহ করে; এটি বলছে, "একটি টাইপ আছে! তবে আমি আপনাকে কোনটা বলব না! "। যেমন, অস্তিত্বের ধরণ প্রকারবিমূর্ততা সরবরাহ করে: একটি নির্দিষ্ট লুকানো মান। অস্তিত্বের ধরণগুলিমডিউল সিস্টেমগুলিরকেন্দ্রস্থলে থাকে।π2(B)={a:N,f:Nbool}N

হাস্কেলের দ্বারা বিভ্রান্ত হবেন না forall: এর নাম থাকা সত্ত্বেও, এটি অস্তিত্বের পরিমাণের পরিমাণ ier

পটভূমির জন্য, আমি প্রকার এবং প্রোগ্রামিং ল্যাঙ্গুয়েজের জন্য দৃ strongly়ভাবে সুপারিশ করি (অধ্যায় 23 এবং 24 যথাক্রমে সর্বজনীন ধরণের এবং অস্তিত্বের ধরণের বিষয়ে আলোচনা করুন)। এটি গবেষণা নিবন্ধগুলি বোঝার জন্য দরকারী পটভূমি সরবরাহ করবে।


1
একটি অপ্রাপ্তবয়স্ক, বরং দেরিতে, দ্বিধায় ফেলা - হাস্কেল forallপ্রকৃত পরিমাণে বোঝার মূল প্রেক্ষাপটে এটি সর্বজনীন কোয়ান্টিফায়ার, এটি সুস্পষ্ট করে তোলে, যেমন শীর্ষ স্তরের সংজ্ঞাগুলির জন্য বহিরাগত থেকে "বহিরাগত থেকে" বহুবর্ণের ধরণগুলি দেখা যায়। এই জাতীয় সংজ্ঞাটির "অভ্যন্তরীণ" অংশে, যুক্তিগুলিতে হেরফের করার সময়, পলিমারফিক প্রকারগুলি কার্যকরভাবে অস্তিত্বহীন হয়; প্রতিটি ধরণের ভেরিয়েবল কোনও না কোনও প্রকারের সাথে আবদ্ধ, তবে আমরা জানি না যে প্রকারটি কী। আমার জ্ঞান অনুসারে, কোনও হাস্কেল বাস্তবায়ন সত্য (কাঁচা, শীর্ষ-স্তর) অস্তিত্বমূলক প্রকারকে সমর্থন করে না এবং এটি কী উদ্দেশ্যে এমনকি কী উদ্দেশ্যে কাজ করবে তা আমার কাছে পরিষ্কার নয়।
সিএ ম্যাকক্যান

1
জিএইচসি দ্বারা সমর্থিত অস্তিত্বমূলক প্রকারগুলি হ'ল (প্রত্যক্ষ বা পরোক্ষভাবে) সর্বজনীন কোয়ান্টিফায়ার যা "বাইরের" থেকে দেখা যায়, বিপরীত অবস্থানে দেখা যায়। এটি যৌক্তিক অবহেলার মতো প্রায় একই দ্বৈততা ব্যবহার করে, সুতরাং শীর্ষ স্তরে এ জাতীয় অস্তিত্বের ধরণের জন্য তারা অবশ্যই সিপিএস-এর মতো এনকোডিং ব্যবহার করে দ্বিগুণ বিপরীতমুখী হতে হবে (এটি সমতুল্য উদয় রেডি দেয়)। নোট করুন যে অনুরূপ কারণে অন্তর্দৃষ্টিমূলক উপস্থিত অনুরূপ অসুবিধার মধ্যে অস্তিত্ব কোয়ান্টিফায়ার।
সিএ ম্যাকক্যান

5

আপনার অনুভূতি যে এক্স এমবেডেবল হওয়া উচিতX.P(X) সাধারণত সঠিক। এটি কেবলমাত্র ব্যর্থ হয় যদি পুরো ধরণের সংগ্রহগুলি খালি থাকে, যা খুব কমই ঘটে।X.P(X)

তবে সুনির্দিষ্ট উদাহরণটি আপনি X ডলার দিয়েছেন ভাল নয়। এই ধরণের একটি মান প্রতিটি প্রকারের এক্স (জুটির প্রথম উপাদানটির জন্য)একটি উপাদান উত্পাদন করতে সক্ষম হওয়া উচিত। আপনি যদি সেট হিসাবে প্রকারের কথা ভাবছেন তবে এ জাতীয় জিনিস সম্ভব নয়। সুতরাং, এই ধরণের খালি। এটা প্রতি টাইপ অন্তর্ভুক্ত করা হবে বিশেষ করে অস্তিত্ববাদের টাইপএক্স X.(X×(XBool))X , তবে এটি খুব আকর্ষণীয় নয়। যাইহোক, তাত্ত্বিক অনুশীলন হিসাবে, এখানে একটি শব্দ যা এই জাতীয় জিনিস তৈরি করে:X.(X×(XBool))

 f (p: \forall X. (X * (X -> Bool))) = PACK X = Bool WITH p[Bool]

অস্তিত্বের ধরণের জন্য আপনি নিবন্ধটি উল্লেখ করেছেন কিছুটা তাত্ত্বিক। আরও টিউটোরিয়াল নিবন্ধটি হ'ল কার্ডেলি এবং ওয়েগনারের কাগজ: বোঝার ধরণ, ডেটা বিমূর্তি এবং পলিমারফিজম সম্পর্কিত । প্রোগ্রামিং ভাষার বেশিরভাগ উন্নত পাঠ্য বইয়ের অস্তিত্বের ধরণের বিষয়েও কিছু আলোচনা থাকবে। দেখার জন্য একটি ভাল বই হ'ল মিচেলের প্রোগ্রামিং ল্যাঙ্গুয়েজগুলির ফাউন্ডেশন

আপনি ঠিক বলেছেন যে বেশিরভাগ প্রোগ্রামিং ভাষার স্পষ্টভাবে অস্তিত্বমূলক প্রকার নেই। তবে অনেকের বিমূর্ত প্রকার রয়েছে (বা অন্য কোনও নামে যেমন "প্যাকেজ" বা "মডিউল")। সুতরাং, তারা অস্তিত্বের ধরণের মানগুলি প্রকাশ করতে সক্ষম হয় , যদিও তারা প্রথম শ্রেণির সত্তার মতো মানগুলি ব্যবহার করে না।

X.P(X)Y.(X.P(X)Y)Y

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.