টাইপ সিস্টেমে বাছাইয়ের ক্রিয়াকলাপটি প্রমাণ করা হচ্ছে


9

আমি জানতে চাই যে প্রোগ্রামিং ভাষার একটি টাইপ সিস্টেম কতটা উপকারী হতে পারে। উদাহরণস্বরূপ, আমি জানি যে নির্ভরশীলভাবে টাইপ করা প্রোগ্রামিং ভাষায়, আমরা Vectorস্বাক্ষর প্রকারে ভেক্টরের মাপের একটি শ্রেণি তৈরি করতে পারি । এটি একটি ডি-ফ্যাক্টো উদাহরণের মতো। আমরা appendসেই স্বাক্ষরগুলি ব্যবহার করে একটি ফাংশনও লিখতে পারি যাতে সংকলক প্রমাণ করে যে ফলাফলের তালিকাটির আকারটি ইনপুট তালিকার যোগফল।

এনকোড করার কোনও উপায় আছে, উদাহরণস্বরূপ, বাছাই করা অ্যালগরিদমের ধরণের স্বাক্ষরে যাতে সংকলক ফলাফল তালিকার ইনপুট তালিকার ক্রম হিসাবে গ্যারান্টি দেয়? এটি কীভাবে সম্ভব, যদি সম্ভব হয়?

উত্তর:


13

হ্যাঁ, বাছাই করা রুটিনের জন্য একটি সুনির্দিষ্ট প্রকারের প্রকাশ করা সম্ভব যেমন এই ধরণের কোনও ফাংশন অবশ্যই ইনপুট তালিকাটিকে বাছাই করতে পারে।

আরও উন্নত এবং মার্জিত সমাধান থাকতে পারে, আমি একটি প্রাথমিক স্কেচ করব, কেবলমাত্র।

আমরা কক-জাতীয় স্বরলিপি ব্যবহার করব। আমরা একটি প্রিকিকেট সংজ্ঞা দিয়ে শুরু করি যা প্রয়োজনীয়তার জন্য অনুমতি f: nat -> natহিসাবে কাজ করে0..n1:

Definition permutation (n: nat) (f: nat -> nat): Prop :=
  (* once restricted, its codomain is 0..n-1 *)
  (forall m, m < n -> f m < n) /\
  (* it is injective, hence surjective *)
  (forall m1 m2, m1 < n -> m2 < n -> f m1 = f m2 -> m1 = m2) .

একটি সহজ লেমা সহজেই প্রমাণ করা যায়।

Lemma lem1: forall n f, permutation n f -> m < n -> f m < n.
... (* from the def *)

আমরা কি সংজ্ঞায়িত mদৈর্ঘ্যযুক্ত একটি তালিকার তম উপাদান n। এই ফাংশনটির একটি প্রমাণের প্রয়োজন hযা উল্লেখ করেm<n সত্যিই ধরে।

Definition nth {A} {n} (l: list A n) m (h : m < n): A :=
... (* recursion over n *)

অর্ডার দেওয়ার পরে A, আমরা প্রকাশ করতে পারি যে একটি তালিকা সাজানো হয়েছে:

Definition ordering (A: Type) :=
   { leq: A->A->bool |
     (* axioms for ordering *)
     (forall a, leq a a = true) /\
     (forall a b c, leq a b = true -> leq b c = true -> leq a c = true) /\
     (forall a b, leq a b = true -> leq b a = true -> a = b)
    } .

Definition sorted {A} {n} (o: ordering A) (l: list A n): Prop :=
...

অবশেষে এখানে বাছাই অ্যালগরিদমের ধরণ রয়েছে:

Definition mysort (A: Type) (o: ordering A) (n: nat) (l: list A n):
   {s: list A n | sorted o s /\
                  exists f (p: permutation n f),
                  forall (m: nat) (h: m < n), 
                     nth l m h = nth s (f m) (lem1 n f p h) } :=
... (* the sorting algorithm, and a certificate for its output *)

আউটপুট টাইপ যে ফলাফলের তালিকা sহয়n উপাদান দীর্ঘ, এটি বাছাই করা হয়, এবং এটির একটি অনুমানের ক্রম রয়েছে 0..n1যা lআউটপুট তালিকার মধ্যে ইনপুট তালিকার উপাদানগুলিকে মানচিত্র করে s। নোট করুন যে প্রমাণ করতে আমাদের উপরের লেমাকে অনুরোধ করতে হবেf(m)<n, যা দ্বারা প্রয়োজনীয় nth

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

সুদূর, সুদূর ভবিষ্যতে আমরা এখনও আশা করতে পারি যে স্বয়ংক্রিয় উপপাদ্য প্রবাদীরা এত স্মার্ট হয়ে উঠেছে যে "বেশিরভাগ" ব্যবহারিকভাবে ব্যবহৃত অ্যালগরিদমগুলি স্বয়ংক্রিয়ভাবে সঠিক প্রমাণিত হতে পারে। ধানের উপপাদ্যটি কেবলমাত্র বলে যে এটি সব ক্ষেত্রেই করা যায় না। আমরা যা আশা করতে পারি সেগুলি হ'ল একটি সঠিক, ব্যাপকভাবে প্রয়োগযোগ্য, তবে অন্তর্নিহিত অসম্পূর্ণ সিস্টেম।

চূড়ান্ত নোট হিসাবে, কখনও কখনও এটি ভুলে যায় যে সাধারণ টাইপ সিস্টেমগুলিও অসম্পূর্ণ ! যেমন জাভাতেও

int f(int x) {
   if (x+2 != 2+x)
      return "Houston, we have a problem!";
   return 42;
}

শব্দার্থগতভাবে নিরাপদ টাইপ করুন (এটি সর্বদা একটি পূর্ণসংখ্যা ফেরত দেয়), তবে প্রকারের পরীক্ষকটি অ্যাক্সেসযোগ্য রিটার্ন সম্পর্কে অভিযোগ করবেন।


7

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

মন্তব্যগুলিও আকর্ষণীয়: তাদের মধ্যে লিনিয়ার লজিকের গভীর এমবেডিংয়ের সাথে জড়িত বব অ্যাটির সমাধান উদাহরণ হিসাবে উল্লেখ করা হয়েছে।

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