আমি কৌতুহলী. আমি ওসিএএমএলে এই ডেটাটাইপটিতে কাজ করছি :
type 'a exptree =
| Epsilon
| Delta of 'a exptree * 'a exptree
| Omicron of 'a
| Iota of 'a exptree exptree
যা স্পষ্টত টাইপিত পুনরাবৃত্তীয় ক্রিয়াকলাপগুলি (একটি বৈশিষ্ট্য যা বেশ সম্প্রতি যুক্ত করা হয়েছে) ব্যবহার করে কারসাজি করা যায়। উদাহরণ:
let rec map : 'a 'b. ('a -> 'b) -> 'a exptree -> 'b exptree =
fun f ->
begin function
| Epsilon -> Epsilon
| Delta (t1, t2) -> Delta (map f t1, map f t2)
| Omicron t -> Omicron (f t)
| Iota tt -> Iota (map (map f) tt)
end
তবে আমি কখনই কোকে এটি সংজ্ঞায়িত করতে সক্ষম হইনি :
Inductive exptree a :=
| epsilon : exptree a
| delta : exptree a -> exptree a -> exptree a
| omicron : a -> exptree a
| iota : exptree (exptree a) -> exptree a
.
কোক হাহাকার করছে। এটি শেষ নির্মাতার পছন্দ করে না এবং এমন কিছু বলেছেন যা আমি সম্পূর্ণরূপে বুঝতে পারি না বা এর সাথে একমত হই না:
Error: Non strictly positive occurrence of "exptree" in "exptree (exptree a) -> exptree a".
আমি যা বুঝতে পারি তা হ'ল তাদের সংজ্ঞাটির অভ্যন্তরে অবহেলা ব্যবহার করে প্ররোচিতকারী প্রকারগুলি type 'a term = Constructor ('a term -> …)
প্রত্যাখ্যান করা হয়, কারণ তারা কুরুচিপূর্ণ অ-প্রতিষ্ঠিত প্রাণীর মতো (শিরোনামহীন) শর্তাবলীর দিকে নিয়ে যায়। তবে এই নির্দিষ্ট exptree
ডেটাটাইপটি যথেষ্ট নিরীহ বলে মনে হচ্ছে: এর ওসিএএমএল সংজ্ঞাটি দেখে এর যুক্তি 'a
কখনও নেতিবাচক অবস্থানে ব্যবহার করা হয় না।
দেখে মনে হয় কোক এখানে অত্যধিক সতর্ক। তাহলে কি এই বিশেষ ইনডাকটিভ ডেটাটাইপটিতে সত্যিই সমস্যা আছে? নাকি কোক এখানে আরও কিছুটা জায়েয হতে পারে ?
এছাড়াও, অন্যান্য প্রুফ সহকারীদের কী, তারা কি এ জাতীয় প্রস্তাবনামূলক সংজ্ঞা (প্রাকৃতিক উপায়ে) মোকাবেলা করতে সক্ষম?