টিউরিংয়ের “হেলটিং সমস্যা” সমাধান করার জন্য অ্যালগরিদম


23

"অ্যালান টুরিং 1936 সালে প্রমাণ করেছিলেন যে সমস্ত সম্ভাব্য প্রোগ্রাম-ইনপুট জোড়গুলির জন্য থামানো সমস্যা সমাধানের জন্য একটি সাধারণ অ্যালগরিদম উপস্থিত থাকতে পারে না"

কিছু সম্ভাব্য প্রোগ্রাম ইনপুট জোড়ার জন্য থামার সমস্যাটি সমাধান করার জন্য আমি একটি সাধারণ অ্যালগরিদম খুঁজে পেতে পারি ?

আমি কি কোনও প্রোগ্রামিং ভাষা (বা ভাষাগুলি) খুঁজে পাব, যেখানে আমি এই ভাষার প্রতিটি ধরণের প্রোগ্রামের জন্য, এটি সিদ্ধান্ত নিতে পারে যে প্রোগ্রামটি শেষ হয়ে যায় বা চিরতরে চলে?


অনুরূপ প্রশ্ন: স্ট্যাকওভারফ্লো.com

3
সিএসিএম -র মে মাসে একটি আকর্ষণীয় নিবন্ধ ছিল:
প্রুভিং

3
"কিছু সম্ভাব্য প্রোগ্রাম ইনপুট জোড়ার জন্য একটি সাধারণ অ্যালগরিদম [...]" - এটি স্ব-বিরোধী হওয়ার কাছাকাছি। আমার ধারণা আপনি নিজেকে সমস্ত প্রোগ্রামের অসীম সাবক্লাসে সীমাবদ্ধ রাখতে চান?
রাফেল

উত্তর:


25

কিছু সম্ভাব্য প্রোগ্রাম ইনপুট জোড়ার জন্য থামার সমস্যাটি সমাধান করতে আমি একটি সাধারণ অ্যালগরিদম খুঁজে পেতে পারি?

হ্যাঁ অবশ্যই. উদাহরণস্বরূপ আপনি এমন একটি প্রোগ্রাম লিখতে পারেন যা "হ্যাঁ, এটি সমাপ্ত করে" এমন কোনও প্রোগ্রামের জন্য দেয় যা লুপ বা পুনরাবৃত্তি না থাকে এবং "না, এটি শেষ করে না" এমন কোনও প্রোগ্রামের জন্য যে কোনও while(true)লুপ থাকে যা অবশ্যই পৌঁছে যাবে এবং এতে থাকবে না একটি ব্রেক স্টেটমেন্ট এবং অন্য কিছুর জন্য "ডুনো"।

আমি কি কোনও প্রোগ্রামিং ভাষা (বা ভাষাগুলি) খুঁজে পাব, যেখানে আমি এই ভাষার প্রতিটি ধরণের প্রোগ্রামের জন্য, এটি সিদ্ধান্ত নিতে পারে যে প্রোগ্রামটি শেষ হয়ে যায় বা চিরতরে চলে?

যদি সেই ভাষাটি টুরিং-সম্পূর্ণ হয়, না।

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


1
আদিম-পুনরাবৃত্তির ফাংশনগুলির শ্রেণি একটি সুপরিচিত "প্রোগ্রামিং ল্যাঙ্গুয়েজ" যার জন্য থামার সমস্যাটি তুচ্ছ বিচারযোগ্য।
রাফেল

বেশ কয়েকটি " মোট ফাংশনাল প্রোগ্রামিং " ভাষা রয়েছে যেখানে সমস্ত প্রোগ্রাম সম্ভবত শেষ করে দিচ্ছে।
অ্যান্ডারসন সবুজ

3

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

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

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

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

কথাটি: প্রোগ্রামাররা স্বেচ্ছাচারিতামূলক প্রোগ্রাম লেখেন না, তাই থামানো উপপাদ্যের থিসিসটি সন্তুষ্ট নয় এবং উপসংহারটি প্রয়োগ হয় না।


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

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

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

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

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

3

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

তবে কম্পিউটার বিজ্ঞানের "প্রোগ্রাম" এর জন্য সঠিক শব্দটি উপস্থিত হয় না যা "কখনও কখনও" সফল হয়। "অ্যালগরিদম" শব্দটি সাধারণত প্রোগ্রামগুলির জন্য সংরক্ষিত থাকে যা সর্বদা থামে।

ধারণাটি সম্ভাব্য আলগোরিদিমগুলির থেকে পৃথক পৃথক বলে মনে হচ্ছে যেখানে সিএস তাত্ত্বিকরা জোর দিয়েছিলেন যে তাদের সাফল্যের বিষয়ে কিছু জানা বা গণ্য সম্ভাবনা রয়েছে।

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

সুতরাং এখানে উদ্দেশ্যে, তাদের quasialgorithms কল । নির্ধারণযোগ্য বনাম অনস্বীকার্য চেয়ে ধারণাটি ভিন্ন।

একজনএক্সবিওয়াইXওয়াইএক্সYBA

সিএসে এই "আধা অ্যালগরিদম শ্রেণিবিন্যাস" এ পর্যন্ত বেশিরভাগ অনানুষ্ঠানিকভাবে অধ্যয়ন করা হয়েছে বলে মনে হয়।

এটি ব্যস্ত বিভার গবেষণা [1] এবং পিসিপি সমস্যা [2] এ দেখায়। আসলে পিসিপি-তে একটি ডিএনএ ভিত্তিক কম্পিউটিং আক্রমণকে কোসিয়ালগরিদম হিসাবে দেখা যেতে পারে [[3] এবং এটি ইতিমধ্যে অন্যান্য অঞ্চলে দেখা গেছে যেমন উপপাদ্য প্রমাণ করছে [4]।

[1] ব্যস্ত বিভারের সমস্যায় নতুন সহস্রাব্দের আক্রমণ

[২] ঝাও দ্বারা পোস্ট চিঠিপত্রের সমস্যা মোকাবেলা (ভি 2?)

[3] কারি এট আল-এর দ্বারা সীমাবদ্ধ পোস্ট চিঠিপত্রের সমস্যা সমাধানের জন্য ডিএনএ ব্যবহার করে

[৪] কুক এট, কম দ্বারা প্রোগ্রাম সমাপ্তি প্রমাণ করছে ing এসিএম এর

(সুতরাং এটি আসলে একটি খুব গভীর প্রশ্ন যা ডিএনএস টিসিএস.এসইফো-তে থাকা প্রাপ্য ... সম্ভবত কেউ তাকে আবার এমনভাবে জিজ্ঞাসা করতে পারে যে এটি ফিট করে এবং স্থির থাকে)


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

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

"অ্যালগরিদম" এর অনানুষ্ঠানিক ব্যবহার রয়েছে। "আংশিক সমাপ্তি" ঠিক আছে তবে সম্ভাব্য ননস্টডি। যেমন বলা হয়েছে, এখনও মেয়াদী মেয়াদ বলে মনে হচ্ছে না। উইকিপিডিয়া একটি সংজ্ঞায়িত অ্যালগরিদম একটি হিসাবে কার্যকর পদ্ধতি অর্থাত নির্ধার্য নিম্নলিখিত বৈশিষ্ট্য (1) সঙ্গে সবসময় কিছু উত্তর বরং দিতে আগের চেয়ে কোন উত্তর দিতে; (২) সর্বদা সঠিক উত্তর দিন এবং কখনও ভুল উত্তর দেবেন না; (3) সর্বদা অসীম সংখ্যার চেয়ে সীমাবদ্ধ পদক্ষেপে সমাপ্ত হবে; (4) ক্লাসের সমস্ত সমস্যার জন্য কাজ করে।
vzn

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

এটি সত্য: Wikipediaতিহ্যবাহী অর্থ সম্ভবত "কার্যকর পদ্ধতি" যা উইকিপিডিয়া বলেছে (আপনি যে বাক্যটি উদ্ধৃত করেছেন তাতে কোনও দ্বন্দ্ব নেই; এটি কিছুটা অস্পষ্ট, যদিও) - লোকেরা ফাংশন / অ্যালগরিদমগুলি কল্পনা করেনি যা শেষ হয় নি (এর জন্য) কিছু ইনপুট)। আমি মনে করি এটি 1950 এর দশক থেকে স্থানান্তরিত হয়েছে; যেমনটি আমি বলেছি, আজ মানুষ স্পষ্টতই একটি আংশিক সমাপ্তির পদ্ধতিটিকে "অ্যালগরিদম" বলে।
রাফেল

2

যতক্ষণ প্রশ্নে প্রোগ্রামিং ভাষা যথেষ্ট জটিল (ততক্ষণে যদি এটি টুরিং সম্পূর্ণ হয়), তবে ভাষাতে সর্বদা প্রোগ্রাম থাকে যা কোনও প্রোগ্রামের সমাপ্তি প্রমাণিত করতে পারে না।

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

সম্পাদনা: মন্তব্যের আলোকে, আমাকে আরও স্পষ্ট করে বলুন: আপনি যে ভাষা অনুবাদ করতে পারেন যার জন্য আপনি থামানো সমস্যার সমাধান করতে পারেন তা অবশ্যই টুরিং-অসম্পূর্ণ হতে হবে। এটি মৌলিক উপাদানগুলির উপযুক্ত সেট (যেমন "ভেরিয়েবল, শর্তসাপেক্ষ এবং জাম্প", বা @ সেপ্প 2 কে যেমন একটি জেনেরিক "যখন" -লুপ) বলে উপযুক্ত কোনও ভাষা অন্তর্ভুক্ত করে rules

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


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

@ sepp2k: আচ্ছা, হ্যাঁ পিয়ানো পাটিগণিতও বেশ দরকারী এবং টিউরিং সম্পূর্ণ নয়। আমি মনে করি একটি সরল বিবৃতি। ওপি যদি সমস্যার সাথে যথেষ্ট পরিচিত হয় তবে তিনি আশাবাদী প্রযুক্তিগত বিশদটি পূরণ করতে সক্ষম হবেন।

3
"পর্যাপ্ত জটিল" এবং টুরিং-সম্পূর্ণ হওয়ার মধ্যে একটি বিশাল ব্যবধান রয়েছে। কোক প্রকৃতপক্ষে জটিল, এবং এটি ব্যবহারিক কার্যের একটি বিস্তৃত জন্য উপযুক্ত is

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

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

2

কিছু আনুষ্ঠানিক তত্ত্ব বিবেচনা করুন টি। প্রমাণগুলির সাথে সংযুক্ত টিএমএস বিবেচনা করুনটিযে তারা থামবে / থামবে না। তারপরে আমরা সিদ্ধান্ত নিতে পারি যে প্রদত্ত টিএম-প্রমাণ জুটিটি প্রমাণ যাচাই করে থামছে কিনা। (Sepp2k এর উত্তরে প্রদত্ত উদাহরণগুলি বিশেষ ক্ষেত্রে) cases

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

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


1

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

tl; dr: হ্যাঁ, তবে আপনি এটি বেশিরভাগ দরকারী প্রোগ্রামের জন্য দরকারী হতে পারবেন না।


^ হ্যাঁ, প্রযুক্তিগতভাবে যদি কোডটি কোড-পাথে না থাকে বা অন্য থ্রেড থাকে তবে এটি এখনও শেষ হতে পারে তবে আমি এখানে একটি সাধারণ বক্তব্য করছি।


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

আমি কক ব্যবহার করেছি, তবে বেশিরভাগ বাণিজ্যিক সফ্টওয়্যার জাভা / সি ++ / রুবি / সি # তে লিখিত থাকায় আমার দাবি সত্য যে কারণে আমার দাবি সত্য। 90% লোক লেখার জন্য আগ্রহী এই জাতীয় প্রোগ্রামগুলির কোনও উপকার হবে না। মূলত, আপনি যদি কক / আগদা ইত্যাদি না জানেন তবে আপনি এটির জন্য টার্গেট মার্কেট নন।

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

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

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