কি কাজ
আপনি যদি গাছের উপরে ফিক্সপয়েন্টের সংজ্ঞাটির ভিতরে তালিকাগুলিতে ফিক্সপয়েন্টের সংজ্ঞাটি বাসা করেন তবে ফলাফলটি ভাল টাইপ করা হয়। এটি একটি সাধারণ নীতি যখন আপনি একটি प्रेरক ধরণের পুনরাবৃত্তি নেস্ট করে থাকেন, অর্থাত্ যখন পুনরাবৃত্তি যেমন কোনও নির্মাণকারীর মধ্য দিয়ে যায় list
।
Fixpoint size (t : LTree) : nat :=
let size_l := (fix size_l (l : list LTree) : nat :=
match l with
| nil => 0
| h::r => size h + size_l r
end) in
match t with Node l =>
1 + size_l l
end.
অথবা আপনি যদি আরও নিখুঁতভাবে লিখতে পছন্দ করেন:
Fixpoint size (t : LTree) : nat :=
match t with Node l =>
1 + (fix size_l (l : list LTree) : nat :=
match l with
| nil => 0
| h::r => size h + size_l r
end) l
end.
(আমি প্রথম থেকে কে শুনেছি তা আমার কোনও ধারণা নেই; এটি অবশ্যই অনেকবার স্বাধীনভাবে আবিষ্কার হয়েছিল))
একটি সাধারণ পুনরাবৃত্তি ভবিষ্যদ্বাণী
আরও সাধারণভাবে, আপনি LTree
ম্যানুয়ালি "যথাযথ" আনয়ন নীতিটি সংজ্ঞায়িত করতে পারেন । স্বয়ংক্রিয়ভাবে উত্পন্ন উত্সাহ নীতি LTree_rect
তালিকায় অনুমানটি বাদ দেয় কারণ আবেশন নীতি জেনারেটর কেবল ইনডাকটিভ টাইপের অ-নেস্টেড কঠোরভাবে ইতিবাচক ঘটনাগুলি বোঝে।
LTree_rect =
fun (P : LTree -> Type) (f : forall l : list LTree, P (Node l)) (l : LTree) =>
match l as l0 return (P l0) with
| Node x => f x
end
: forall P : LTree -> Type,
(forall l : list LTree, P (Node l)) -> forall l : LTree, P l
আসুন তালিকাতে আবেশ অনুমান যুক্ত করুন। পুনরাবৃত্তির কলটিতে এটি সম্পাদন করার জন্য, আমরা তালিকাটি অন্তর্ভুক্তির নীতিটি কল করি এবং এটিকে তালিকার অভ্যন্তরে ছোট গাছের উপর বৃক্ষ আনয়ন নীতিটি পাস করি।
Fixpoint LTree_rect_nest (P : LTree -> Type) (Q : list LTree -> Type)
(f : forall l, Q l -> P (Node l))
(g : Q nil) (h : forall t l, P t -> Q l -> Q (cons t l))
(t : LTree) :=
match t as t0 return (P t0) with
| Node l => f l (list_rect Q g (fun u r => h u r (LTree_rect_nest P Q f g h u)) l)
end.
কেন
পুনরাবৃত্ত ক্রিয়াকলাপ গ্রহণের জন্য সঠিক নিয়মে কেন এই উত্তর। এই নিয়মগুলি পারফরম্যান্স সূক্ষ্ম, কারণ জটিল কেসগুলি (যেমন এটি যেমন ডেটাটাইপে নেস্টেড পুনরাবৃত্তি সহ) এবং আনসোসনেসনের মধ্যে একটি সূক্ষ্ম ভারসাম্য রয়েছে। Coq সহায়িকা প্রবর্তন ভাষা (প্রস্তাবনামূলক বাক্য এর ক্যালকুলাস, যা Coq প্রমাণ ভাষা), বেশিরভাগ আনুষ্ঠানিকভাবে সুনির্দিষ্ট সংজ্ঞা সঙ্গে, কিন্তু আপনি আনয়ন এবং coinduction আপনার যা দরকার গবেষণা কাগজপত্র যাব সংক্রান্ত সঠিক নিয়ম চান, এই বিষয়টিতে এডুয়ার্ডো গিমেনেজের [1]।
কোক ম্যানুয়াল দিয়ে শুরু করে, Fix
নিয়মের স্বরলিপি হিসাবে , আমাদের এর ফিক্সপয়েন্ট সংজ্ঞা রয়েছেF i x fআমি{ চ1: এ1: = টি1;চ2: এ2: = টি2}
Γ1Γ2= ( এক্স : এল টি আর ই ই )= ( l : l i s tএল টি আর ই ই )একজন1একজন2= n a টি= n a টিটি1টি2= সি এ এস ই ( এক্স , এল টি আর ই ই , λ y)। ছ1( চ)2Y) )= সি এ এস ই ( এল , এল আই এস টি)এল টি আর ই ই ,λএইচদ । ছ2( চ)1জ ) ( চ )2r ) )
চঞটিআমিচআমি
- i = 1j = 2
l
t
size
- i=2j=1
h
l
size_l
- i=2j=2
r
l
size_l
কোক ইন্টারপ্রেটারের h
চেয়ে কাঠামোগতভাবে ছোট না হওয়ার কারণটি l
আমার কাছে পরিষ্কার নয়। কোক-ক্লাবের তালিকার [১] [২] আলোচনা থেকে আমি যতদূর বুঝতে পেরেছি, এটি দোভাষীর ক্ষেত্রে একটি বিধিনিষেধ, যা নীতিগতভাবে উঠানো যেতে পারে, তবে খুব সতর্কতার সাথে কোনও অসঙ্গতি না এড়াতে।
তথ্যসূত্র
কোকোরিকো, অবিচ্ছিন্ন কোক উইকি: মিউচুয়াল আনয়ন
কোক-ক্লাবের মেইলিং তালিকা:
কক উন্নয়ন দল। কক প্রুফ সহকারী: রেফারেন্স ম্যানুয়াল । সংস্করণ 8.3 (2010)। [ ওয়েব ] সিএইচ। ঘ ।
এডুয়ার্ডো গিমেনেজ রিকার্সিভ স্কিম সঙ্গে পাহারায় সংজ্ঞা Codifying । ইন Types'94: প্রমাণের প্রোগ্রামের জন্য প্রকারভেদ , LNCS 996. স্প্রিঙ্গের-ভার্ল্যাগ, 1994 ডোই: 10.1007 / 3-540-60579-7_3 [ স্প্রিঙ্গের ]
এডুয়ার্ডো গিমেনেজ টাইপ থিওরিতে স্ট্রাকচারাল রিকার্সিভ সংজ্ঞা । ইন ICALP'98: 25th অটোমাটা, ভাষা এবং প্রোগ্রামিং এর উপর আন্তর্জাতিক colloquium প্রসিডিংস। স্প্রিঞ্জার-ভার্লাগ, 1998 [[ পিডিএফ ]