সম্ভবত সঠিক প্রোগ্রাম সম্পর্কে আমরা কী জানি?


37

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

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

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

একটি পূর্ণ-বর্ধিত প্রোগ্রামিং ভাষা প্রয়োগকারী কোনও শংসাপত্র সংকলক আছে, বা এটি খুব কঠোর / তাত্ত্বিকভাবে অসম্ভব?

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

আমি যেমন একটি জটিলতা বর্গ অধ্যয়নরত সুবিধার দেখতে পারেন: উদাহরণস্বরূপ, জন্য ProvableR স্থগিত সমস্যা নির্ধার্য আছে (আমি এমনকি অনুমান ProvableRE সুস্পষ্ট ভাবে সংজ্ঞায়িত হবে ভাষার বৃহত্তম শ্রেণি যার জন্য এটি নির্ধারণযোগ্য)। তদতিরিক্ত, আমি সন্দেহ করি যে আমরা কোনও ব্যবহারিকভাবে কার্যকর প্রোগ্রামগুলি বাতিল করব: আপনি যখন কোনও প্রোগ্রামের সমাপ্তি প্রমাণ করতে না পারেন তখন কে ব্যবহার করবে?

সুতরাং আমার দ্বিতীয় প্রশ্নটি হ'ল:

জটিলতার ক্লাসগুলি সম্পর্কে আমরা কী জানি যেগুলির নির্দিষ্ট ভাষা থাকতে পারে যার জন্য তাদের ভাষা রয়েছে?


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

3
আমার মনে হয় আপনার এগুলি আলাদা করা উচিত। এগুলি বিভিন্ন উত্তর সহ বিভিন্ন প্রশ্ন।
মার্ক রিটব্ল্যাট

4
প্রথম প্রশ্নে, একটি প্রভাবশালী পত্রিকা হ'ল "সামাজিক প্রক্রিয়া এবং তাত্ত্বিকতা এবং প্রোগ্রামগুলির প্রমাণ", portal.acm.org/citation.cfm?id=359106
কলিন ম্যাককুইলান

1
প্রোগ্রাম যাচাই অনস্বীকার্য। সুতরাং একটি সমস্যা হ'ল একটি ভাল সমাধান গঠন করে বলে। দেখুন cstheory.stackexchange.com/questions/4016/…
রাদু GRIGore

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

উত্তর:


28

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

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

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

সম্পাদনা: ডাই লে শেষ পয়েন্টটির কিছুটা ব্যাখ্যা চেয়েছিলেন।

এটি বেশিরভাগই একটি বাস্তববাদী দাবী, এই ভিত্তিতে যে আপনি যদি বুঝতে পারেন যে কোনও প্রোগ্রাম কেন কাজ করে, তবে এর সম্ভাবনা কম। (আমি যে দীর্ঘতম আক্রমণাত্মক ব্যবহার করেছি তারা কয়েকটি পৃষ্ঠাগুলি দীর্ঘ, এবং তারা কি পর্যালোচনাগুলিকে গ্র্যাম্বল করে তোলে! বোধগম্য, তাই, যেহেতু আক্রমণকারীই প্রোগ্রামটি সমস্ত বিবরণটি ছিনিয়ে নিয়ে কাজ করে যা লোকেরা এটি বুঝতে সহায়তা করে))

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

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


1
আপনি কি দয়া করে এই বিন্দুটি বিস্তারিতভাবে বর্ণনা করতে পারেন "আমরা কেবলমাত্র ম্যানেজমেন্ট টার্মিনেশন প্রুফ সহ প্রোগ্রামগুলি লিখতে চলেছি" আরও কিছুটা?
দাই লে

আপনার আপডেট করা উত্তরের জন্য ধন্যবাদ! আপনার উত্তর সত্যিই আমার দৃষ্টিকোণ খুলবে। আসলে আমি নিজেও "বিপরীত গণিত" নিয়ে কিছুটা কাজ করি, তবে আপনি যে সংযোগটি উল্লেখ করেছেন তা আমি বুঝতে পারি নি। আবার ধন্যবাদ!
দাই লে

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

22

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

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

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

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


AC0AC0জটিলতা শ্রেণীর জন্য অসম্পূর্ণ, অতএব এতে জটিলতা শ্রেণীর সমস্ত সমস্যা রয়েছে এবং এই প্রোগ্রামগুলির সামগ্রিকতা প্রমাণ করতে পারে। প্রুফ জটিলতা এবং জটিলতার তত্ত্বের মধ্যকার সম্পর্কটি প্রুফ জটিলতায় অধ্যয়ন করা হয়, যদি আপনি আগ্রহী হন তবে এসএ কুক এবং পি এনগুইনের সাম্প্রতিক বই " প্রুফ কমপ্লেক্সটির লজিকাল ফাউন্ডেশনস " দেখুন see ( ২০০৮ সালের একটি খসড়া উপলভ্য।) সুতরাং মূল উত্তরটি হ'ল বহু শ্রেণীর জন্য "প্রোভিয়েবল সি = সি"।

PAϵ0TPA2FIΣ1

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


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


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

1
Π20PAHA

1
আন্দ্রেজ বাউরের তার ব্লগে একটি নতুন আকর্ষণীয় পোস্ট রয়েছে যাতে তিনি কোডে গোডেলের ডায়ালেক্টিকা ব্যাখ্যাটি প্রমাণ করেছেন ।
কাভেহ

18

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

সম্পাদনা: "কিছুটা হলেও" জোর যোগ করতে চেয়েছিলেন। এটি কোনও সমস্যার সমাধান থেকে দূরে, তবে ককের সাফল্য আশা দেয় যে এটি কোনও পাইপের স্বপ্ন নয়।


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

12

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

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

এই সতর্কতাগুলি মাথায় রেখে, আমি আপনাকে সুপারিশ # প্রোগ্রামের যাচাইকারীর দিকে নজর দেওয়ার পরামর্শ দিই ।


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

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

4

সাধারণ ক্ষেত্রে, একটি অ্যালগরিদম তৈরি করা অসম্ভব যা একটি অ্যালগরিদম কোনও নির্দিষ্টকরণের সমান কিনা তা নিশ্চিত করে। এটি একটি অনানুষ্ঠানিক প্রমাণ:

প্রায় সমস্ত প্রোগ্রামিং ভাষা টিউরিং-সম্পূর্ণ। অতএব, টিএম দ্বারা সিদ্ধান্ত নেওয়া যে কোনও ভাষাও এই ভাষায় লিখিত একটি প্রোগ্রামের মাধ্যমে সিদ্ধান্ত নেওয়া যেতে পারে।

Equivalence/TM

Equivalence/TMNonemptiness/TMEmptiness/TMEmptiness/TMEquivalence/TMEquivalence/TMএছাড়াও অগ্রহণযোগ্য। অতএব আপনি দুটি মেশিন সমতুল্য না কি না তা আপনি একটি অ্যালগরিদম ব্যবহার করতে পারেন তবে সেগুলি সমতুল্য কিনা তা আপনি নিশ্চিত হতে পারবেন না বা আপনি আপনার অ্যালগরিদমকে যথেষ্ট সময় দেননি।

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

আপনার বাকি প্রশ্নগুলির জন্য:

দ্রষ্টব্য: এই অংশটি স্পষ্ট করার জন্য সম্পাদনা করা হয়েছে। দেখা যাচ্ছে যে আমি যে ভুলটি এড়াতে চাইছিলাম তা করেছি, দুঃখিত।

TrueRTrueRR

ProvableR=TrueRProvableRTrueRTrueRProvableRAϵTrueRAAAϵProvableR

অনানুষ্ঠানিকভাবে, এর সংক্ষিপ্ত বিবরণ দেওয়া যেতে পারে: আপনি জানেন না যে কোনও ভাষা এটি প্রমাণিত না হওয়া পর্যন্ত সিদ্ধান্ত নেওয়া যায় না। সুতরাং যদি কোনও আনুষ্ঠানিক সিস্টেমে আপনার জ্ঞান থাকে যে কোনও ভাষা নির্ধারণযোগ্য, এই জ্ঞানটি তার পক্ষে প্রমাণ হিসাবেও কাজ করতে পারে। অতএব, আপনি একই সাথে জ্ঞান রাখতে পারবেন না যে কোনও ভাষা উভয়ই সিদ্ধান্ত গ্রহণযোগ্য এবং এটি প্রমাণিতও হতে পারে না, এই দুটি বিবৃতি পারস্পরিক একচেটিয়া are

RProvableRProvableRRR

@ কাভাহ এটিকে সর্বোপরি সংক্ষিপ্তসার জানিয়েছে: প্রযোজ্যর অর্থ সর্বদা কোনও না কোনও সিস্টেম / তত্ত্বের ক্ষেত্রে প্রমাণযোগ্য এবং সাধারণভাবে সত্যের সাথে এক হয়ে যায় না।

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


1
RProvableRΣ30Σ10

1
প্রযোজ্য মানে সর্বদা কোনও না কোনও সিস্টেম / তত্ত্বে প্রমাণযোগ্য এবং সাধারণভাবে সত্যের সাথে একত্রে আসে না।
কাভেহ

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

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

2
R

3

নিম্নলিখিত ক্লাসিক মনোগ্রাফ অধ্যয়ন আপনার ঠিক দ্বিতীয় প্রশ্ন:

হার্টম্যানিস, জে। সম্ভাব্য গণনা এবং প্রবণতাযুক্ত জটিলতার বৈশিষ্ট্য , ফলিত গণিতে সিবিএমএস-এনএসএফ আঞ্চলিক সম্মেলন সিরিজ, ৩০. শিল্প ও ফলিত গণিতের জন্য সোসাইটি (এসআইএএম), ফিলাডেলফিয়া, পা।, 1978।

{L(Mi)|Ti(n)T(n) is provable in F}MiTi(n)Min

T(n)nlog(n)g(n)1FTIME[T(n)]TIME[T(n)g(n)]

উপপাদ্য 6.5 আছে: গণনীয় monotonically বৃদ্ধি সময় বাউন্ড অস্তিত্ব , যার জন্য - ।T(n)FTIME[T(n)]TIME[T(n)]

উপপাদ্য .1.১৪: যে কোনও গণনীয় , ।T(n)nlog(n)TIME[T(n)]={L(Mi)|F proves(j)[L(Mj)=L(Mi)Tj(n)T(n)]}

স্থানের জন্য, তবে পরিস্থিতি আরও ভালভাবে নিয়ন্ত্রণ করা হয়:

উপপাদ্য 6.9: (1) যদি স্থান-গঠনমূলক হয় তবে - ।s(n)nSPACE[s(n)]=FSPACE[s(n)]

(2) যদি - ( ) তাহলে আছে একটি স্থান-অঙ্কনযোগ্য যেমন যে ।এস পি একটি সি [ এস ( এন ) ] এস ( এন ) এন গুলি ( এন ) এস পি একটি সি [ এস ( এন ) ] = এস পি একটি সি E [ s ( n ) ]SPACE[S(n)]=FSPACE[S(n)]S(n)ns(n)SPACE[S(n)]=SPACE[s(n)]


1

প্রশ্নটি সঠিকভাবে উত্থাপন করতে হবে। উদাহরণস্বরূপ, কেউ কখনই এটি জানতে চায় না যে কোনও প্রকৃত প্রোগ্রাম প্রদত্ত অসীম মেমরি এবং এটি অ্যাক্সেসের কিছু উপায় (সম্ভবত কোনও সংখ্যার সাহায্যে বেস ঠিকানা সরিয়ে নেওয়ার জন্য একটি অপারেশন) সম্পূর্ণ করবে কিনা। টিউরিংয়ের উপপাদ্যটি কোনও দৃ concrete় অর্থে প্রোগ্রামের যথার্থতার সাথে অপ্রাসঙ্গিক এবং যারা প্রোগ্রাম এটিকে যাচাইয়ের পথে বাধা হিসাবে উল্লেখ করেছেন তারা দুটি দুটি ভিন্ন বিষয়কে বিভ্রান্ত করছেন। যখন ইঞ্জিনিয়ার / প্রোগ্রামাররা প্রোগ্রামের নির্ভুলতার কথা বলেন তারা সীমাবদ্ধ বৈশিষ্ট্যগুলি সম্পর্কে জানতে চান। এটি গণিতবিদদের পক্ষেও বেশ সত্য যাঁরা কোনও কিছুর প্রবণতাযোগ্য কিনা তা নিয়ে আগ্রহী। গোডেলের চিঠিটি http://vyodaiken.com/2009/08/28/godels-lost-letter/ এটিকে কিছু বিশদে ব্যাখ্যা করেছে।

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

প্রকৃত কম্পিউটারে চালিত কোনও প্রোগ্রামের প্রচুর রাষ্ট্রের সেটটি পরীক্ষা করা এবং খারাপ অবস্থাগুলি সনাক্ত করা ভালভাবেই অকার্যকর হতে পারে, এটি কেন করা যায় না তার কোনও তাত্ত্বিক কারণ নেই। প্রকৃতপক্ষে, এই ক্ষেত্রে অনেক অগ্রগতি হয়েছে - উদাহরণস্বরূপ দেখুন http://www.cs.cornell.edu/gomes/papers/SATSolvers-KR-book-draft-07.pdf (নীল ইমারম্যানকে ধন্যবাদ আমাকে এই সম্পর্কে বলছে)

একটি ভিন্ন এবং আরও জটিল সমস্যা হ'ল নির্দিষ্ট করে দেওয়া হচ্ছে যে কোনওটি সঠিক হতে যাতে প্রোগ্রামের জন্য কী চান।

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