প্রায় এক বছর পরে এটিতে ফিরে এসে আমি বুঝতে পেরেছিলাম যে আমি পোস্টের আগে কিছু সমালোচনামূলক গবেষণা মিস করেছি।
জট আমার কাছে যা চেয়েছিল তার বিলটি ফিট করে বলে মনে হচ্ছে, দুটি অপেক্ষাকৃত সাধারণ সমন্বয়কারী বি ও এক্স, যা একটি কমপ্যাক্ট গোয়েডেল নম্বর দ্বারা প্রতিনিধিত্ব করা যেতে পারে।
আমি পাইথনের সাহায্যে তার রেফারেন্স বাস্তবায়নকে সহজ করেছি:
def S(x): return lambda y: lambda z: x(z)(y(z))
def K(x): return lambda y: x
def X(x): return x(S)(K)
def B(x): return lambda y: lambda z: x(y(z))
def I(x): return x
def J(n): return (B if n & 1 else X)(J(n >> 1)) if n else I
জে (এন) প্রোগ্রামটি তার গোডেল নম্বর এন দ্বারা প্রতিনিধিত্ব করে চিহ্নিত করে বিল্ট আপ ফাংশনটি প্রদান করে।
বি (চার্চ এনকোডেড বহুবৃত্তের সমতুল্য) কার্যকরী অ্যাপ্লিকেশন (প্রথম বন্ধনী) এর কার্যকারিতা সরবরাহ করে এবং একক ভিত্তিতে আইওটা সংযুক্তকারী এক্স এর এস / কে অর্ধেকগুলি পৃথক করতে পারে।
এই ভাষার কয়েকটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা আমি (প্রায়) নির্লজ্জভাবে ভাষাটির উদ্ভাবক ক্রিস বারকারের ওয়েবসাইট থেকে চুরি করছি, প্রায় 2000।
জোট সিনট্যাক্সের নিয়মিত ভাষা তবে টুরিং-সম্পূর্ণ। আপনি জে (এন) এর বাস্তবায়ন থেকে দেখতে পাচ্ছেন যে কোনও হোস্ট ভাষা যদি লেজ-পুনরাবৃত্তি সমর্থন করে, তবে বিটস্ট্রিং প্রোগ্রামের ফর্ম্যাটটিকে পার্স করার জন্য কোনও স্ট্যাকের প্রয়োজন নেই।
ট্যুরিং-সম্পূর্ণতার প্রমাণটি ক্রিসের সাইট থেকেও এসেছে, এস এবং কে সংযুক্তকারীগুলি ব্যবহার করে ইতিমধ্যে পরিচিত টুরিং-সম্পূর্ণ সংযুক্ত যুক্তি প্রয়োগ করে:
K ==> 11100
S ==> 11111000
AB ==> 1[A][B], where A & B are arbitrary CL combinators built up from K & S
জোটের কোনও সিনট্যাক্স ত্রুটি নেই, প্রতিটি প্রোগ্রামের তার গোডেল নম্বর দেওয়া একটি বৈধ প্রোগ্রাম is এটি সম্ভবত আমার নিজের গবেষণার সবচেয়ে গুরুত্বপূর্ণ দিক, কারণ এটি কেবলমাত্র তুচ্ছতার পার্সিংকে সহজতর করে না, তাত্ত্বিকভাবে জোটকে যে কোনও টুরিং-সম্পূর্ণ এনকোডিংয়ের তুলনায় আরও বেশি পার্সিমোনিয়াস করা উচিত যা ত্রুটিযুক্ত প্রোগ্রামগুলি ছাড়তে হবে।
আমি জটটিতে কোনও ফাংশনের কোলমোগোরভ জটিলতা খুঁজে পাওয়ার আধা-সিদ্ধান্ত গ্রহণযোগ্য সমস্যাটিকে জোর করে 'সমাধান' করার জন্য কয়েকটি সরঞ্জাম লিখেছি। এটি কোনও ফাংশনের ম্যাপিংয়ের কয়েকটি খুব বৈশিষ্ট্যযুক্ত প্রশিক্ষণের উদাহরণ নির্দিষ্ট করার জন্য প্রোগ্রামারের উপর নির্ভর করে কাজ করে, তারপরে সমস্ত প্রশিক্ষণের উদাহরণ মিলে না যাওয়া পর্যন্ত সমস্ত জট প্রোগ্রামগুলি গণনা করে এবং শেষ পর্যন্ত মূল ভার্জোজ প্রয়োগের সাথে একটি ফাংশনটির সমতার প্রমাণ প্রমাণ করে।
এটি বর্তমানে আমার সীমিত সংস্থানগুলি সহ কেবলমাত্র 40 ডলার বিট পর্যন্ত কাজ করে। আমি আরও বৃহত্তর প্রোগ্রামগুলি শিখতে একটি স্যাট সলভারের সাথে পুনরায় লেখার চেষ্টা করছি। আপনি যদি জানেন কীভাবে বুলিয়ান সূত্র হিসাবে সীমাবদ্ধ নেস্টেড ক্লোজারগুলি আনারল করতে হয় তবে দয়া করে আমার নতুন প্রশ্নটি সম্পর্কে সহায়তা করুন ।
জন ট্রম্পের বাইনারি ল্যাম্বদা ক্যালকুলাসের সাথে আকর্ষণীয় কিছু তুলনা করার জন্য, যা এটি সংক্ষিপ্ততার জন্য পরিচিত, তবে সম্ভাব্য বাক্য গঠন ত্রুটির সমস্যা রয়েছে does নিম্নলিখিত প্রোগ্রামগুলি আমার লার্নিং প্রোগ্রামটি কয়েক সেকেন্ডের মধ্যে তৈরি করেছিল।
Function Jot Binary Lambda Calculus |J| |B|
--------|----------|--------------------------|---|---
SUCC J(18400) "000000011100101111011010" 15 24
CHURCH_0 J(154) "000010" 8 6
CHURCH_1 J(0) "00000111010" 1 11
CHURCH_2 J(588826) "0000011100111010" 20 16
IS_ZERO J(5) "00010110000000100000110" 3 23
MUL J(280) "0000000111100111010" 9 19
EXP J(18108) "00000110110" 15 11
S J(8) "00000001011110100111010" 4 23
K J(4) "0000110" 3 7
AND J(16) "0000010111010000010" 5 19
OR J(9050) "00000101110000011010" 14 20
আমার নিজের পরীক্ষাগুলি থেকে, জোটটি ছোট প্রোগ্রামগুলির দিকে পরিচালিত করে এমন হাইপোথিসিটি ধীরে ধীরে নিশ্চিত হয়ে যাচ্ছে কারণ আমার প্রোগ্রামটি সহজ ফাংশনগুলি শেখে, সেগুলি রচনা করে, তারপরে উন্নত সিলিং থেকে বৃহত্তর ফাংশনগুলি শিখছে।