"বাস্তব" কম্পিউটার প্রোগ্রামগুলির গণনার কঠোরতা


10

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

তবে, বাস্তব-বিশ্ব প্রোগ্রামে অপারেটিং সিস্টেমগুলি কী পছন্দ করে তা কতটা প্রযোজ্য তা আমি নিশ্চিত নই। এই ধরণের প্রোগ্রামগুলির কি ট্যুরিং সম্পূর্ণতার পূর্ণ শক্তি প্রয়োজন? গণনার সহজ মডেলগুলি (যেমন পিআর) রয়েছে যাতে এই অ্যাপ্লিকেশনগুলি লেখা যেতে পারে? যদি তা হয়, তবে এটি কতটা পরিমাণে প্রোগ্রামের সঠিকতার সিদ্ধান্ত গ্রহণের অনুমতি দেয়?


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

মৃদুভাবে সম্পর্কিত প্রশ্ন
আর্টেম কাজনাটচিভ

উত্তর:


14

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

এটি বলেছিল, গণনার মডেলের উপর নিষ্পাপ নিষেধাজ্ঞাগুলি প্রোগ্রাম প্রোগ্রাম বিশ্লেষণের কার্যকারিতা উন্নত করতে আসলে আপনাকে খুব বেশি সহায়তা করে না। কারণটি হ'ল আপনি এমন প্রোগ্রামগুলি পেতে পারেন যা লুপগুলি ঘুরিয়ে দিয়ে "প্রায় একই জিনিস" করে

while P do 
   C

একটি বড় পুনরাবৃত্তি ধ্রুবক সঙ্গে for- লুপ মধ্যে:

for i = 0 to BIGNUM do 
  if P then 
    C
  else
    break

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

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


"এই প্রোগ্রামটি এমনকি আদিম পুনরাবৃত্তি নয়" বলতে কী বোঝায়?
রায়ান উইলিয়ামস

@ রায়ানউইলিয়ামস সম্ভবত ঠিক এটি লিখতে পারে যে এটি এমন একটি সিস্টেমে লেখা যেতে পারে যা আদিম পুনরাবৃত্তির ক্রিয়াকলাপগুলির সম্পূর্ণ অ্যারের চেয়ে কম অনুমতি দেয়, উদাহরণস্বরূপ এমন প্রোগ্রামগুলির জন্য যেগুলি লুপগুলিতে স্পষ্ট (সংকলনের) সীমা প্রয়োজন need
કોડি

আপনি শাখাগুলি প্রোগ্রাম (যেমন, তবে-অন্যথায় এবং অনুক্রমিক রচনা সহ) রেখে আপনাকে লুপগুলি দূরে ম্যাক্রো-প্রসারিত করতে পারেন।
নীল কৃষ্ণস্বামী

সম্ভবত "এই প্রোগ্রামটির এমনকি আদিম পুনরাবৃত্তির পুরো শক্তি প্রয়োজন হয় না" এর মতো কিছু বলা আরও পরিষ্কার হবে।
সর্বোচ্চ

@ ম্যাক্স: পরামর্শ গৃহীত হয়েছে!
নীল কৃষ্ণস্বামী

5

যেহেতু আপনি অপারেটিং সিস্টেমের মতো বাস্তব বিশ্বের প্রোগ্রামগুলির প্রোগ্রামের সঠিকতা সম্পর্কে জিজ্ঞাসা করেছেন, তাই আপনি SEL4 প্রকল্পে ( জার্নাল , পিডিএফ , সম্মেলন ) আগ্রহী হতে পারেন ।

নাইক্টা টিম হাস্কেলের একটি বিমূর্ত স্পেসিফিকেশন অনুসারে তৃতীয় প্রজন্মের 8700০০ লাইনের সি এবং 600০০ লাইনের এসেমব্লারের একটি তৃতীয় প্রজন্মের মাইক্রোকার্নেল নিয়েছিল। তারা একটি প্রথাগত, মেশিন-পরীক্ষিত প্রমাণ সরবরাহ করেছিল (ইসাবেল / এইচএল তে) যে প্রয়োগটি কঠোরভাবে নির্দিষ্টকরণ অনুসরণ করে। সুতরাং প্রমাণ করে যে তাদের প্রোগ্রামটি বাগ-মুক্ত।

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


নোট করুন যে শংসাপত্রিত কোডটি এখনও তার নির্দিষ্টকরণের ভুলের জন্য ঝুঁকির মধ্যে রয়েছে, তাই আপনি কেবল এটিই বলতে পারেন যে কোডটি নির্দিষ্টকরণের তুলনায় তুলনামূলকভাবে বাগ বিনামূল্যে।
এনপোনকোপ

@ এনপোনকোপ অবশ্যই স্পষ্ট, তবে আপনি যখন স্পেসিফিকেশন সম্পর্কে সন্দেহ করতে শুরু করেন তখন আপনি কুখ্যাত বাগ-বৈশিষ্ট্য লাইনটিকেও সত্যই অস্পষ্ট করতে শুরু করেন। কোনও কিছুকে 'বাগ' বলার জন্য আপনার মনে অবশ্যই কিছু অন্তর্নিহিত স্পেসিফিকেশন থাকতে হবে, এইরকম অন্তর্নিহিত স্পেসিফিকেশনের পিছনে অন্তর্নিহিত ধারণাটি গভীর গর্ত করা শুরু করে যতক্ষণ না আপনি গণিতের দর্শনের ভিত্তিতে প্রশ্নগুলি আঘাত করবেন (ব্রাউজার বনাম হিলবার্টের স্টাইলে) ।
আর্টেম কাজনাটচিভ

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

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

2

আপনার জিজ্ঞাসা করা প্রশ্নগুলি আসলে বেশ আলাদা quite

তবে, বাস্তব-বিশ্ব প্রোগ্রামে অপারেটিং সিস্টেমগুলি কী পছন্দ করে তা কতটা প্রযোজ্য তা আমি নিশ্চিত নই। এই ধরণের প্রোগ্রামগুলির কি ট্যুরিং সম্পূর্ণতার পূর্ণ শক্তি প্রয়োজন?

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

গণনার সহজ মডেলগুলি (যেমন পিআর) রয়েছে যাতে এই অ্যাপ্লিকেশনগুলি লেখা যেতে পারে? যদি তা হয়, তবে এটি কতটা পরিমাণে প্রোগ্রামের সঠিকতার সিদ্ধান্ত গ্রহণের অনুমতি দেয়?

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

বিশেষত, আপনি আপনার আসল প্রশ্নটি এখানে পরিবর্তন করতে পারেন

আমার সফ্টওয়্যারটির এমন কোনও বিমূর্ততা রয়েছে যা আমি নন-টিউরিং সম্পূর্ণ মডেলটিতে দক্ষতার সাথে বিশ্লেষণ করতে পারি?

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

এমন অ্যাপ্লিকেশন রয়েছে যেখানে লোকেরা তাদের হার্ডওয়্যার বা সফ্টওয়্যারগুলির পরিশীলিত বৈশিষ্ট্যগুলির বিষয়ে যত্নশীল। হার্ডওয়্যার সংস্থাগুলি তাদের চিপগুলি গাণিতিক অ্যালগরিদমগুলি সঠিকভাবে প্রয়োগ করতে চায়, স্বয়ংচালিত এবং এভায়োনিক সংস্থাগুলি প্রত্যয়যুক্তভাবে সঠিক সফ্টওয়্যার চায়। যদি এটি গুরুত্বপূর্ণ হয় তবে আপনি একজন (প্রশিক্ষিত) মানুষ ব্যবহার করা ভাল।


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

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

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

@ নীল: স্পষ্ট করে বলতে, আমি কেবল টুরিং সম্পূর্ণতার কথা বলছি। এই তত্ত্বগুলিতে কি কোনও টুরিং মেশিন অনুকরণ করা সম্ভব নয়?
বিজয় ডি

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