সি আসলে টুরিং-সম্পূর্ণ?


39

আমি কাউকে বোঝানোর চেষ্টা করছিলাম যে সি টিউরিং-সম্পূর্ণ, এবং বুঝতে পেরেছিলাম যে আমি আসলে জানি না এটি আসলে প্রযুক্তিগতভাবে টুরিং-সম্পূর্ণ কিনা। (সি যেমন বিমূর্ত শব্দার্থবিজ্ঞানের মতো, প্রকৃত বাস্তবায়নের মতো নয়))

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

সুতরাং: C99 টিউরিং-সম্পূর্ণ?


3
সি এর "বিমূর্ত শব্দার্থক" কী কী? তারা কোথাও সংজ্ঞায়িত করা হয়?
যুবাল ফিল্মাস

4
@ ইউভালফিল্মাস - উদাহরণস্বরূপ এখানে দেখুন , যেমন সি এর বিপরীতে যেমন স্ট্যান্ডার্ডে সংজ্ঞায়িত করা হয়েছে যেমন " জিসিসি এটি এটি করে এটি"।
TLW

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

2
সি (ট্যুরিং মেশিনের মতো) এর গণনাগুলির জন্য অভ্যন্তরীণ কম্পিউটার মেমোরি ব্যবহার করার মধ্যেই সীমাবদ্ধ নয়, সুতরাং সি
পুনর্নিষ্টার

@ রিনিয়ারপোস্ট - এটি একটি টেলি টাইপটি নিরাপদ বলার মতো। এটি বলছে যে "সি + একটি বাহ্যিক টিএম-সমতুল্য" টিউরিং-সম্পূর্ণ, এটি সি টিউরিং-সম্পূর্ণ নয়।
TLW

উত্তর:


34

আমি নিশ্চিত নই তবে আমি মনে করি উত্তরটি হ'ল বরং, সূক্ষ্ম কারণে। আমি কয়েক বছর আগে তাত্ত্বিক কম্পিউটার বিজ্ঞানের বিষয়ে জিজ্ঞাসা করেছি এবং এমন উত্তর পাই যা আমি এখানে উপস্থাপন করব তার থেকে বেশি যায়।

বেশিরভাগ প্রোগ্রামিং ভাষায়, আপনি একটি টিউরিং মেশিন দ্বারা অনুকরণ করতে পারেন:

  • সীমাবদ্ধ অটোমেটনকে এমন একটি প্রোগ্রামের সাথে অনুকরণ করে যা সীমাবদ্ধ পরিমাণে মেমরি ব্যবহার করে;
  • সংস্থার লিঙ্কযুক্ত তালিকার এক জোড়া দিয়ে টেপকে সিমুলেট করা, বর্তমান অবস্থানের আগে এবং পরে টেপের সামগ্রীর প্রতিনিধিত্ব করে। পয়েন্টারটি সরানো মানে তালিকার একটির শিরোনামকে অন্য তালিকায় স্থানান্তরিত করা।

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

এটি সি তে কাজ করে না কারণ একটি লিঙ্কযুক্ত তালিকা থাকা চিরকালের জন্য বাড়তে পারে এমনটি অসম্ভব: নোডের সংখ্যার সর্বদা কিছুটা সীমা থাকে।

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

সি প্রদত্ত প্রয়োগে, একটি বাইটের সম্ভাব্য মান রয়েছে। সমস্ত ডেটা বাইটের অ্যারে হিসাবে উপস্থাপন করতে পারে: একটি ধরণের সম্ভাব্য মানগুলির (টি) সর্বাধিক 2 CHAR_BIT × আকার থাকে । এই সংখ্যাটি সি এর বিভিন্ন বাস্তবায়নে পরিবর্তিত হয়, তবে সি প্রদত্ত প্রয়োগের জন্য এটি একটি ধ্রুবক।2CHAR_BITt2CHAR_BIT×sizeof(t)

বিশেষত, পয়েন্টারগুলি কেবলমাত্র শূন্য *) মান নিতে পারে। এর অর্থ এখানে সীমাবদ্ধ সর্বোচ্চ সংখ্যক ঠিকানাযোগ্য বস্তু রয়েছে।2CHAR_BIT×sizeof(void*)

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

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

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

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

আনবাউন্ডেড পুনরাবৃত্তির গভীরতা এবং কোনও ফাংশন কেবল তার প্রত্যক্ষ কলার ( registerযুক্তি) থেকে ডেটা পেতে পারে এবং তার প্রত্যক্ষ কলার (ফাংশন রিটার্ন মান) -এর তথ্য ফিরিয়ে আনতে পারে এমন বিধিনিষেধের সাথে আপনি ডিটারমিনিস্টিক পুশডাউন অটোমেটার শক্তি পাবেন ।

আমি আর যেতে উপায় খুঁজে পাচ্ছি না।

(অবশ্যই আপনি ফাইলটি ইনপুট / আউটপুট ফাংশনগুলির মাধ্যমে টেপ সামগ্রীটি বাহ্যিকভাবে সঞ্চয় করতে পারেন But তবে আপনি সি সি টুরিং-সম্পূর্ণ কিনা তা জিজ্ঞাসা করবেন না, তবে সি প্লাস কোনও অসীম স্টোরেজ সিস্টেমটি টুরিং-সম্পূর্ণ কিনা) যা উত্তরটি বিরক্তিকর "হ্যাঁ" You আপনি স্টোরেজটিকে টিউরিং ওরাকল হিসাবে পরিচিত করতে পারেন - কল করুন  fopen("oracle", "r+"), fwriteএটিতে প্রাথমিক টেপের সামগ্রী এবং freadচূড়ান্ত টেপের সামগ্রীর পিছনে)


ঠিকানার ঠিকানা কেন সীমাবদ্ধ হবে তা অবিলম্বে পরিষ্কার নয়। আপনার লিঙ্ক করা প্রশ্নের উত্তরে আমি কিছু চিন্তাভাবনা লিখেছিলাম: cstheory.stackexchange.com/a/37036/43393
আলেক্সি বি।

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

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

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

6

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

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

এখানে একটি ডেমো যথেচ্ছ ট্রানজিশন নিয়ম সহ 2-স্ট্যাক পুশডাউন অটোমেটন প্রয়োগ করছে:

#include <stdarg.h>
typedef struct { va_list va; } wrapped_stack; // Struct wrapper needed if va_list is an array type.
#define NUM_SYMBOLS /* ... */
#define NUM_STATES /* ... */
typedef enum { NOP, POP1, POP2, PUSH1, PUSH2 } operation_type;
typedef struct { int next_state; operation_type optype; int opsymbol; } transition;
transition transition_table[NUM_STATES][NUM_SYMBOLS][NUM_SYMBOLS] = { /* ... */ };

void step(int state, va_list stack1, va_list stack2);
void push1(va_list stack2, int next_state, ...) {
    va_list stack1;
    va_start(stack1, next_state);
    step(next_state, stack1, stack2);
}
void push2(va_list stack1, int next_state, ...) {
    va_list stack2;
    va_start(stack2, next_state);
    step(next_state, stack1, stack2);
}
void step(int state, va_list stack1, va_list stack2) {
    va_list stack1_copy, stack2_copy;
    va_copy(stack1_copy, stack1); va_copy(stack2_copy, stack2);
    int symbol1 = va_arg(stack1_copy, int), symbol2 = va_arg(stack2_copy, int);
    transition tr = transition_table[state][symbol1][symbol2];
    wrapped_stack ws;
    switch(tr.optype) {
        case NOP: step(tr.next_state, stack1, stack2);
        // Note: attempting to pop the stack's bottom value results in undefined behavior.
        case POP1: ws = va_arg(stack1_copy, wrapped_stack); step(tr.next_state, ws.va, stack2);
        case POP2: ws = va_arg(stack2_copy, wrapped_stack); step(tr.next_state, stack1, ws.va);
        case PUSH1: va_copy(ws.va, stack1); push1(stack2, tr.next_state, tr.opsymbol, ws);
        case PUSH2: va_copy(ws.va, stack2); push2(stack1, tr.next_state, tr.opsymbol, ws);
    }
}
void start_helper1(va_list stack1, int dummy, ...) {
    va_list stack2;
    va_start(stack2, dummy);
    step(0, stack1, stack2);
}
void start_helper0(int dummy, ...) {
    va_list stack1;
    va_start(stack1, dummy);
    start_helper1(stack1, 0, 0);
}
// Begin execution in state 0 with each stack initialized to {0}
void start() {
    start_helper0(0, 0);
}

দ্রষ্টব্য: যদি va_listকোনও অ্যারে টাইপ হয় তবে কার্যত ফাংশনগুলিতে প্রকৃতপক্ষে লুকানো পয়েন্টার পরামিতি রয়েছে। সুতরাং সম্ভবত সমস্ত va_listযুক্তির ধরণগুলিতে পরিবর্তন করা ভাল wrapped_stack


এটি কাজ করতে পারে। একটি সম্ভাব্য উদ্বেগ হ'ল এটি একটি সীমাহীন সংখ্যক স্বয়ংক্রিয় va_listভেরিয়েবল বরাদ্দ করার উপর নির্ভর করে stack। এই ভেরিয়েবলগুলির অবশ্যই একটি ঠিকানা থাকতে হবে &stackএবং আমাদের কেবল এগুলির একটি সীমাবদ্ধ সংখ্যা থাকতে পারে। এই প্রয়োজনীয়তা প্রতিটি স্থানীয় ভেরিয়েবল ঘোষণা করে সংঘবদ্ধ হতে পারে register, সম্ভবত?
চি

@ এআইইউআই একটি ভেরিয়েবলের ঠিকানা প্রয়োজন নেই যদি না কেউ ঠিকানা নেওয়ার চেষ্টা না করে। এছাড়াও, উপবৃত্তের পূর্ববর্তী যুক্তিটি অবিলম্বে ঘোষণা করা অবৈধ register
ফেয়ারসুম

একই যুক্তি অনুসারে, intকেউ বাউন্ড ব্যবহার না করে বা আবদ্ধ হওয়া দরকার না sizeof(int)?
চি

@chi মোটেও না স্ট্যান্ডার্ডটি বিমূর্ত শব্দার্থবিদ্যার অংশ হিসাবে সংজ্ঞায়িত করে যে একটিতে intকিছু সীমাবদ্ধ সীমানা INT_MINএবং INT_MAX। এবং যদি একটি intআবদ্ধের মানগুলি সেই আবদ্ধগুলিতে প্রবাহিত হয়, অপরিজ্ঞাত আচরণ ঘটে। অন্যদিকে, স্ট্যান্ডার্ডটি ইচ্ছাকৃতভাবে কোনও নির্দিষ্ট ঠিকানায় সমস্ত বস্তু শারীরিকভাবে মেমরিতে উপস্থিত হওয়ার প্রয়োজন হয় না, কারণ এটি নিবন্ধের মধ্যে অবজেক্টটি সংরক্ষণ করা, অবজেক্টের কেবলমাত্র অংশ সংরক্ষণ করা, স্ট্যান্ডার্ডের চেয়ে আলাদাভাবে উপস্থাপনের মতো অনুকূলকরণের অনুমতি দেয় লেআউট, বা এটির প্রয়োজন না হলে এটি পুরোপুরি বাদ দেওয়া।
ফেয়ারসাম

4

মানহীন পাটিগণিত, সম্ভবত?

সুতরাং, দেখে মনে হচ্ছে যে বিষয়টি সীমাবদ্ধ আকারের sizeof(t)। তবে আমি মনে করি আমি প্রায় একটি কাজ জানি।

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

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

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


বাস্তবায়ন কেমন হবে?
পুনরায় পোস্টার

@ রিনিয়ারপোস্ট আমি অনুমান করছি এটি পিএর কয়েকটি গণনাযোগ্য নন-স্ট্যান্ডার্ড মডেল ব্যবহার করে ডেটা উপস্থাপন করবে। এটা একটা ব্যবহার আঙ্কিক অপারেশন গনা হবে পিএ ডিগ্রী । আমি মনে করি যে এ জাতীয় কোনও মডেলকে একটি বৈধ সি বাস্তবায়ন সরবরাহ করা উচিত।
পাইরুলেজ

দুঃখিত, এটি কাজ করে না। sizeof(t)এটি নিজেই টাইপের মান size_t, সুতরাং এটি 0 এবং এর মধ্যে প্রাকৃতিক পূর্ণসংখ্যা SIZE_MAX
গিলস

@ গিলিস এসআইজেডএমএএমএক্স ততকালীন একটি মানহীন প্রাকৃতিক হবে।
পাইরুলেজ

এটি একটি আকর্ষণীয় পদ্ধতির। নোটস স্ট্যান্ডার্ড হওয়ার জন্য আপনার যেমন উদাহরণস্বরূপ intptr_t / uintptr_t / ptrdiff_t / intmax_t / uintmax_t এরও প্রয়োজন হবে তা নোট করুন। সি ++ এ এটি অগ্রগতির গ্যারান্টিগুলির অনেকগুলি চলবে ... সি সম্পর্কে নিশ্চিত নয়
টিএলডাব্লু

0

আইএমও, একটি শক্তিশালী সীমাবদ্ধতা হ'ল ঠিকানাযোগ্য স্থান (পয়েন্টার আকারের মাধ্যমে) সীমাবদ্ধ এবং এটি অপরিবর্তনযোগ্য।

কেউ সমর্থন করতে পারেন যে মেমরিটি "ডিস্কে অদলবদল করা যেতে পারে" তবে কোনও সময়ে ঠিকানার তথ্য নিজেই ঠিকানার আকারের চেয়ে বেশি হয়ে যাবে।


এটি কি গৃহীত উত্তরের মূল বিষয় নয়? আমি মনে করি না এটি এই 2016 সালের প্রশ্নের উত্তরে নতুন কিছু যুক্ত করেছে।
চি

@ চি: না, গৃহীত উত্তরে বাহ্যিক স্মৃতিতে অদলবদলের কথা উল্লেখ করা হয়নি, এটি বিশ্বাসযোগ্য হতে পারে।
ইয়ভেস দাউস্ট

-1

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

"পাইথন টুরিং সম্পূর্ণ না হওয়ায় আপনি অসীম আকারে কোনও তালিকা তৈরি করতে পারবেন না" বলে এটি ততটাই জাল।

[সম্পাদনা করুন: কীভাবে সম্পাদনা করবেন স্পষ্ট করে দেওয়ার জন্য মিঃ হুইটলজকে ধন্যবাদ জানাই]]


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

5
যে কোনও সময়, প্রকারের মান size_tসীমাবদ্ধ। সমস্যাটি হ'ল আপনি size_tসম্পূর্ণ গণনা জুড়ে বৈধতার জন্য একটি বাউন্ড স্থাপন করতে পারবেন না : কোনও বাউন্ডের জন্য, কোনও প্রোগ্রাম এটি উপচে পড়তে পারে। কিন্তু সি ভাষাতে বলা আছে যে এর জন্য একটি সীমাবদ্ধ রয়েছে size_t: প্রদত্ত বাস্তবায়নের ক্ষেত্রে, এটি কেবল sizeof(size_t)বাইট পর্যন্ত বৃদ্ধি পেতে পারে । এছাড়াও, সুন্দর হতে হবে । যে লোকেরা আপনাকে সমালোচনা করে "তাদের নিজেরাই ভাবতে পারে না" তা বলা অভদ্র is
গিলস 'খারাপ হয়ে যাওয়া বন্ধ করুন'

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

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

1
এটি অন্য একটি সঠিক উত্তর যা এই সম্প্রদায়ের বেশিরভাগ ব্যক্তিদের অক্ষমতার কারণে খুব কমই দৃশ্যমান। এদিকে, গৃহীত উত্তরটি মিথ্যা এবং এর মন্তব্য বিভাগটি মডারেটরদের দ্বারা সমালোচনামূলক মন্তব্য মুছে ফেলা হচ্ছে। বাই বাই, cs.stackexchange।
xamid

-1

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

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

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

আমি মনে করি যে প্রধান আপত্তিটি ব্যবহারকারীর জড়িত থাকার বিষয়ে হতে পারে তবে এটি কোনও প্রয়োগে অনিবার্য বলে মনে হয়, কারণ মনে হয় সীমাহীন স্মৃতি বাস্তবায়নের অন্য কোনও উপায় নেই।


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

@chi আমি দেখতে পাচ্ছি না কীভাবে ডিএফএ যুক্তি অনুসরণ করে। ডিএফএর পুরো বিষয়টি হ'ল এটিতে কেবল স্টোরেজ পড়ার অ্যাক্সেস রয়েছে। যদি আপনি এটিকে "টেপের উপরে মাথা চালানোর" অনুমতি দেন তবে এটি কি ঠিক একটি টুরিং মেশিন নয়?
ডেভিড রিচারবি

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

1
@chi এটি ঠিক আছে কারণ সিতে ফাইল I / O রুটিন অন্তর্ভুক্ত রয়েছে। ডিএফএ না।
ডেভিড রিচার্বি

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

-2

size_tঅসীম বড় হতে বেছে নিন

আপনি size_tঅসীম বড় হতে বেছে নিতে পারেন । স্বাভাবিকভাবেই, এ জাতীয় বাস্তবায়ন উপলব্ধি করা অসম্ভব। কিন্তু এতে অবাক হওয়ার কিছু নেই, আমরা যে পৃথিবীতে বাস করি তার সীমাবদ্ধ প্রকৃতি দেওয়া।

প্রাকটিক্যাল প্রভাব

তবে এ জাতীয় বাস্তবায়ন উপলব্ধি করা সম্ভব হলেও ব্যবহারিক সমস্যা ছিল be নিম্নলিখিত সি স্টেটমেন্ট বিবেচনা করুন:

printf("%zu\n",SIZE_MAX);

SIZE_MAXSIZE_MAXO(2size_t)size_tSIZE_MAXprintf

ভাগ্যক্রমে, আমাদের তাত্ত্বিক উদ্দেশ্যে, স্পেসিফিকেশনটিতে আমি কোনও প্রয়োজনীয়তা খুঁজে পাইনি যে গ্যারান্টি printfসমস্ত ইনপুটগুলির জন্য বন্ধ হয়ে যাবে। সুতরাং, আমি যতদূর জানি, আমরা এখানে সি স্পেসিফিকেশন লঙ্ঘন করি না।

গণনা সম্পূর্ণরূপে

এটি এখনও প্রমাণিত হয় যে আমাদের তাত্ত্বিক বাস্তবায়ন টিউরিং সম্পূর্ণ । আমরা "যে কোনও একক-টেপযুক্ত টুরিং মেশিন" প্রয়োগ করে এটি প্রদর্শন করতে পারি।

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

  • রাষ্ট্রের সংখ্যা, প্রতীক সংখ্যা এবং রাষ্ট্রের রূপান্তর সারণি যে কোনও প্রদত্ত মেশিনের জন্য স্থির রয়েছে। সুতরাং আমরা সংখ্যার হিসাবে রাজ্য এবং প্রতীক এবং 2-মাত্রিক অ্যারে হিসাবে রাষ্ট্রের রূপান্তর টেবিলকে উপস্থাপন করতে পারি।
  • টেপটি একটি লিঙ্কযুক্ত তালিকা হিসাবে উপস্থাপন করা যেতে পারে। আমরা হয় একক ডাবল-লিঙ্কযুক্ত তালিকা, বা দুটি একক-লিঙ্কযুক্ত তালিকা (বর্তমান অবস্থান থেকে প্রতিটি দিকের জন্য একটি) ব্যবহার করতে পারি।

এখন আসুন দেখুন এই জাতীয় বাস্তবায়ন উপলব্ধি করার জন্য কী প্রয়োজন:

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

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


6
printf("%zu\n",SIZE_MAX);এই ধরনের বাস্তবায়নে কী ছাপবে?
রুসলান

1
@ রাস্লান, যেমন টুরিং মেশিন বাস্তবায়ন অসম্ভব ঠিক তেমনই বাস্তবায়নও অসম্ভব। তবে যদি এরূপ বাস্তবায়ন সম্ভব হয়, আমি ধারণা করি এটি অসীম সংখ্যার দশমিক উপস্থাপনা মুদ্রণ করবে - সম্ভবত, দশমিক সংখ্যাগুলির একটি অসীম প্রবাহ।
নাথন ডেভিস

2
@ নাথানডাভিস একটি টুরিং মেশিন বাস্তবায়ন করা সম্ভব কৌশলটি হ'ল আপনার কোনও অসীম টেপ তৈরি করার দরকার নেই - আপনি কেবল টেপটির ব্যবহৃত অংশটি প্রয়োজন অনুসারে ক্রমবর্ধমানভাবে তৈরি করেন।
গিলস 'খারাপ হয়ে যাওয়া বন্ধ করুন'

2
@ গিলস: এই সীমাবদ্ধ মহাবিশ্বে যেখানে আমরা বাস করছি, একটি ট্যুরিং মেশিন বাস্তবায়ন করা অসম্ভব।
gnasher729

1
@ নাথানডাভিস তবে আপনি যদি তা করেন তবে আপনি sizeof(size_t)(বা CHAR_BITS) পরিবর্তন করেছেন । আপনি নতুন রাষ্ট্র থেকে আরম্ভ করতে পারবেন না, আপনাকে আবার শুরু করতে হবে, তবে প্রোগ্রামটির সম্পাদন এখন সেই ধ্রুবকগুলির চেয়ে আলাদা হতে পারে
গিলস'স-অশুভ হওয়া বন্ধ করুন '

-2

এখানে মূল যুক্তিটি ছিল যে সাইজ_টি এর আকার সীমাবদ্ধ, যদিও অসীম আকারে বড় হতে পারে।

এটির জন্য একটি পরিকল্পনা রয়েছে, যদিও আমি নিশ্চিত নই যে এটি আইএসও সি এর সাথে মিলে যায় কিনা I

ধরুন আপনার কাছে অসীম স্মৃতিযুক্ত একটি মেশিন রয়েছে। সুতরাং আপনি পয়েন্টার আকারের জন্য আবদ্ধ হয় না। আপনার এখনও আপনার আকার_t টাইপ আছে। আপনি যদি মাপের (আকার_টি) কী তা আমাকে জিজ্ঞাসা করেন তবে উত্তরটি কেবল আকারের (আকার_টি) হবে। যদি আপনি জিজ্ঞাসা করেন এটি যদি 100 এর চেয়ে বেশি হয় তবে উত্তরটি হ্যাঁ। আপনি যদি মাপের (আকার_টি) / 2 কী জিজ্ঞাসা করেন তবে আপনি অনুমান করতে পারেন উত্তরটি এখনও মাপের (আকার_টি)। আপনি যদি এটি মুদ্রণ করতে চান তবে আমরা কিছু আউটপুট নিয়ে একমত হতে পারি। এই দুটির পার্থক্য NaN ইত্যাদি হতে পারে।

সংক্ষিপ্তসারটি হ'ল আকার_t এর শর্তটি শিথিল করা সীমাবদ্ধ আকার থাকা ইতিমধ্যে বিদ্যমান কোনও প্রোগ্রাম ভাঙবে না।

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


1
"এই দুটির পার্থক্য NaN হতে পারে"। না এটা হতে পারে না। সি-তে পূর্ণসংখ্যার ধরণের
NAN বলে কিছুই নেই

মান অনুযায়ী, sizeofএকটি ফিরে আসতে হবে size_t। সুতরাং আপনাকে কিছু নির্দিষ্ট মান নির্বাচন করতে হবে।
ড্র্যাকোনিস

-4

হ্যাঁ তাই হয়।

1. উদ্ধৃত উত্তর

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

[...] তার যুক্তিটি নিম্নরূপ: ধরুন যে কোনও একটি নির্দিষ্ট প্রদত্ত টার্মিনেশন প্রোগ্রাম লিখেছেন যা কার্যকর করার সময়, কিছু স্বেচ্ছাসেবী পরিমাণে স্টোরেজ প্রয়োজন হতে পারে। সেই প্রোগ্রামটি পরিবর্তন না করেই কম্পিউটারের একটি হার্ডওয়ার এবং এর সি সংকলক যে এই গণনাটি সামঞ্জস্য করার জন্য পর্যাপ্ত স্টোরেজ সরবরাহ করে তা বাস্তবায়নের জন্য একটি পোস্টেরিয়েরি সম্ভব। এর জন্য চরের প্রস্থ (CHAR_BITS এর মাধ্যমে) এবং / অথবা পয়েন্টারগুলি (আকার_t এর মাধ্যমে) প্রশস্তকরণের প্রয়োজন হতে পারে তবে প্রোগ্রামটি সংশোধন করার প্রয়োজন হবে না। কারণ এটি সম্ভব, সি বাস্তবায়ন কর্মসূচিগুলির জন্য টুরিং-সম্পূর্ণ T

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

আমার চিন্তাভাবনার ট্রেনটিতে কেন আমাকে বিভ্রান্ত করার কারণ এটি যে আমি "দরকারী" অবসানহীন কর্মসূচির বিস্তৃত শ্রেণি বিবেচনা করছি [...]

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

2. আমার আসল উত্তর

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

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

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

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

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


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

3
আপনার যদি স্থির পরিমাণের পরিমাণ থাকে তবে আপনি যে পরিমাণ আপনার চেয়ে বেশি সংস্থান প্রয়োজন তা অনুকরণ করতে পারবেন না। কেবলমাত্র চূড়ান্তভাবে এমন অনেকগুলি কনফিগারেশন রয়েছে যা আপনার মেমোরি সম্ভবত থাকতে পারে, যার অর্থ কেবলমাত্র আপনি চূড়ান্তভাবে করতে পারেন এমন অনেকগুলি জিনিস রয়েছে।
ডেভিড রিচার্বি

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

2
@ এক্সমিড যদি আপনার এই সাইটের সংযোজন নীতি সম্পর্কিত উদ্বেগ থাকে তবে এটি কম্পিউটার বিজ্ঞান মেটাতে নিয়ে যান । ততক্ষণে, দয়া করে ভাল থাকুন । অন্যের সাথে মৌখিক নির্যাতন সহ্য করা হবে না। (আমি যে মন্তব্যগুলি হাতে বিষয়ের সাথে সম্পর্কিত নয় সরিয়েছি।)
রাফায়েল

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