লিভার টেবিলের গণনা এবং একটি অ্যালগরিদম যা জেডএফসিতে শেষ করতে জানা যায় না


12

লেভার টেবিল প্রোগ্রাম যা গণিতের মান সর্বজনবিদিত সিস্টেমের মধ্যে বিনষ্ট দেখানো করা হয় নি উদাহরণ প্রদান ZFC বিনষ্ট যখন কেউ খুব বড় অঙ্কবাচক উপপাদ্য ব্যবহার অনুমান কিন্তু পারে।

ভূমিকা

শাস্ত্রীয় লেভার টেবিল সেট অন্তর্নিহিত অনন্য সসীম algebras হয় এবং একটি অপারেশন মাফিক পরিচয় এবং যেখানে জন্য এবং যেখানে ।An{1,...,2n}*x * (y * z)=(x * y) * (x * z)x*1=x+1x<2n2n*1=1

ক্লাসিকাল লেভার টেবিলগুলি সম্পর্কে আরও তথ্য প্যাট্রিক দেহর্নয়ের ব্রাইডস এবং স্ব-বিতরণকৃত বইটিতে পাওয়া যাবে।

চ্যালেঞ্জ

সংক্ষিপ্ততম কোডটি কী (বাইটে) যা 1*32ক্লাসিকাল লেভার টেবিলগুলিতে গণনা করে এবং যখন এটির সাথে খুঁজে পায় ঠিক তখনই শেষ nহয় ? অন্য কথায়, প্রোগ্রামটি যদি শেষ হয় তবে কেবল এটির সাথে যদি খুঁজে পাওয়া যায় তবে অন্যথায় এটি চিরতরে চলে।1*32<2nn1*32<2n

প্রেরণা

একটি র্যাঙ্ক-মধ্যে-সারির অঙ্কবাচক (এছাড়াও একটি i3-অঙ্কবাচক বলা হয়) একটি অত্যন্ত বড় অনন্ত মাত্রা এবং যদি এক একটি র্যাঙ্ক-মধ্যে-সারির অঙ্কবাচক অস্তিত্ব অনুমান, তারপর এক চেয়ে যদি এক না আরো উপপাদ্য প্রমাণ করতে সক্ষম হয় র‌্যাঙ্ক-ইন-র‌্যাঙ্ক কার্ডিনালের অস্তিত্ব অনুমান করুন। যদি কোনও র‌্যাঙ্ক-ইন-র‌্যাঙ্ক কার্ডিনাল উপস্থিত থাকে তবে কিছু ধ্রুপদী লাভার টেবিল রয়েছে যেখানে । তবে জেডএফসিতে এর কোনও প্রমাণ নেই । তদ্ব্যতীত, এটি পরিচিত যে এর চেয়ে কম বড় যেখানে (একারম্যান ফাংশনটি একটি দ্রুত বর্ধনশীল কার্যকারিতা হওয়ায় এটি অত্যন্ত সংখ্যক সংখ্যা )। অতএব, এই জাতীয় কোনও প্রোগ্রাম অত্যন্ত দীর্ঘ সময়ের জন্য স্থায়ী হবে।An1*32<2n1*32<2nn1*32<2nAck(9,Ack(8,Ack(8,254)))Ack

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

ক্লাসিকাল লেভার টেবিলগুলি কীভাবে গণনা করা হয়

লেভার টেবিল কম্পিউটিং যখন এটি সাধারণত সত্য বীজগণিত ব্যবহার করতে সুবিধাজনক , আমরা সবার জন্য এ ।An2n * x=xxAn

নিম্নলিখিত কোডটি ক্লাসিকাল লেভার সারণির গণনা করে An

# টেবিল (ঢ x, y) নিয়ে আসে তখন এক্স * Y এন
টেবিল: = ফাংশন (ঢ x, y)
যদি x = 2; n তবে y ফেরান;
এলিফ y = 1 তারপরে এক্স + 1 প্রদান করুন;
অন্যটি ফেরত সারণী (এন, টেবিল (এন, এক্স, ওয়াই -1), এক্স + 1); ফাই; শেষ;

উদাহরণস্বরূপ, ইনপুটটি table(4,1,2)ফিরে আসবে 12

কোডটি table(n,x,y)বরং অদক্ষ এবং এটি কেবলমাত্র যুক্তিসঙ্গত পরিমাণে লাভার টেবিলে গণনা করতে পারে । ভাগ্যক্রমে, উপরে বর্ণিত ক্লাসিকাল লেভার টেবিলগুলি গণনা করার জন্য আরও দ্রুত অ্যালগরিদম রয়েছে।A4


2
পিপিসিজিতে আপনাকে স্বাগতম! দুর্দান্ত পোস্ট!
NoOneIsHere

1
উইকিপিডিয়া অনুসারে, অ্যাক (9, অ্যাক (8, আক (8,254%)) এন এর উপর একটি নিম্ন সীমানা যার জন্য সময়কাল 16 ছাড়িয়ে গেছে that এর জন্য, আমরা 1 * 32 এর চেয়ে 1 * 16 পরীক্ষা করতে পারি। আমি সেই অনুযায়ী আমার প্রোগ্রামটি সংশোধন করব।
জন ট্রম্প 10'16

1
আমি এটি করার জন্য একটি ট্যুরিং মেশিন লিখতে শুরু করেছি এবং আমি মনে করি যে আমি দু'দিক থেকে দুটো ত্রুটি খুঁজে পেয়েছি। ডুগার্টি প্রমাণ করেননি যে Ack(9,Ack(8,Ack(8,254)))প্রথম সারণির জন্য 32 সেকেন্ডের সময়কালের জন্য নিম্ন সীমাবদ্ধতা রয়েছে , যেখানে কোথায় 1*16 < 2^n?
পিটার টেলর

1
যদি অ্যাকারম্যানের জন্য আপনার কাছে 20-রাষ্ট্রের 2-প্রতীকী মেশিন থাকে তবে দয়া করে আমাকে একটি লিঙ্ক দিন, কারণ আমি সম্ভবত এটি থেকে কিছু ধারণা চুরি করতে পারি। গণনা করার জন্য আমার কাছে 44 টি রাজ্য রয়েছে table(n,x,y)এবং আমি মনে করি কনস্ট্যান্টগুলি এবং বাইরের লুপটি সেট করতে 25 থেকে 30 টি রাজ্যের মধ্যে সময় লাগবে। Esolangs.org- এ আমি যে সরাসরি টিএম উপস্থাপনাটি পাই তা হ'ল esolangs.org/wiki/ScriptTur এবং এটি আসলে তেমন গোল্ফ নয়।
পিটার টেলর

1
ceddarmonk.org/papers/laver.pdf আমি যতটা আশা করি এই সপ্তাহে শেষ হব, কারণ আমি ভ্রমণ করব।
পিটার টেলর

উত্তর:


4

বাইনারি ল্যাম্বদা ক্যালকুলাস, 215 বিট (27 বাইট)

\io. let
  zero = \f\x. x;
  one = \x. x;
  two = \f\x. f (f x);
  sixteen = (\x. x x x) two;
  pred = \n\f\x. n (\g\h. h (g f)) (\h. x) (\x. x);
  laver = \mx.
    let laver = \b\a. a (\_. mx (b (laver (pred a))) zero) b
    in laver;
  sweet = sixteen;
  dblp1 = \n\f\x. n f (n f (f x)); -- map n to 2*n+1
  go2 = \mx. laver mx sweet mx (\_. mx) (go2 (dblp1 mx));
in go2 one

সংকলন ( https://github.com/tromp/AIT এ সফ্টওয়্যার ব্যবহার করে )

000101000110100000010101010100011010000000010110000101111110011110010111
110111100000010101111100000011001110111100011000100000101100100010110101
00000011100111010100011001011101100000010111101100101111011001110100010

এই সমাধানটি বেশিরভাগ https://github.com/int-e এর কারণে


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

আপনার পোস্টে 234 বিটের দৈর্ঘ্যের সঠিক কোডটি সম্ভবত আপনার অন্তর্ভুক্ত করা উচিত।
ক্যালকুলেটরলাইন

2
এনকোডিং উইকিপিডিয়ায় পাওয়া যাবে । এই দোভাষীর একটি লিঙ্কও রয়েছে (পরীক্ষিত নয়)। এগুলি পরীক্ষা করা উচিত, এবং বাইনারি এনকোডিংটি পোস্টে থাকা উচিত।
পূর্কাকুডারী

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

5
@AlexA। এটি প্রয়োজনীয় নয় ... সংকলক বা দোভাষী দ্বারা বোঝা যায় এমন কোডের যে কোনও রূপই ঠিক আছে।
ফেয়ারসাম

4

সিজেএম ( 36 32 বাইট)

1{2*31TW$,(+a{0X$j@(@jj}2j)W$=}g

অনুশীলনে, এই ত্রুটিগুলি খুব দ্রুত আউট হয়ে যায় কারণ এটি কল স্ট্যাককে উপচে ফেলেছে, তবে একটি তাত্ত্বিক সীমাহীন মেশিনে এটি সঠিক, এবং আমি বুঝতে পারি যে এই প্রশ্নের অনুমিতি হতে হবে।

কোডটি table(n,x,y)বরং অকার্যকর এবং এটি কেবলমাত্র যুক্তিসঙ্গত সময়ে ল্যাভার টেবিল এ 4 এ গণনা করতে পারে ।

প্রকৃতপক্ষে সঠিক নয় যদি আমরা গণনা করা মানগুলিকে পুনরায় সংবিধান এড়ানোর জন্য ক্যাশে করি। অর্থাৎ পদ্ধতির আমি গ্রহণ করেছি লাগে সেটা ব্যবহার করে j(memoisation) অপারেটর । এটি একটি 6 মিলি সেকেন্ডে পরীক্ষা করে এবং স্ট্যাক পরীক্ষার এ 7 প্রবাহিত করে - এবং আমি গল্ফিংয়ের স্বার্থে সত্যিকার অর্থে ডিপটিমাইজ করেছি table

ব্যবচ্ছেদ

যদি আমরা ধরে নিই যে nপরিবর্তে, প্রসঙ্গ থেকে বোঝা যায়

f(x,y) =
    x==2^n ? y :
    y==1 ? x+1 :
    f(f(x,y-1),x+1)

আমরা প্রথম বিশেষ কেসটি সরিয়ে দিতে পারি

f(x,y) =
    y==1 ? x+1 :
    f(f(x,y-1),x+1)

এবং এটি এখনও কাজ করে কারণ

f(2^n, 1) = 2^n + 1 = 1

এবং অন্য যে কোনও জন্য y,

f(2^n, y) = f(f(2^n, y-1), 1) = f(2^n, y-1) + 1

প্রবর্তন দ্বারা আমরা পেতে f(2^n, y) = y

সিজেএমের জন্য এটি পরামিতিগুলির ক্রমটিকে বিপরীত করতে আরও সুবিধাজনক বলে প্রমাণিত হয়েছে। এবং প্রতিটি মান হ্রাস 1 .. 2^nকরে আমি ব্যাপ্তিটি ব্যবহার করছি না 0 .. 2^n - 1তাই আমি প্রয়োগ করছি পুনরাবৃত্ত ফাংশন

g(y,x) =
    y==0 ? x+1
         : g(x+1, g(y-1, x))

1           e# Initial value of 2^n
{           e# do-while loop
  2*        e#   Double 2^n (i.e. increment n)
  31T       e#   table(n,1,32) is g(31,0) so push 31 0
  W$,(+a    e#   Set up a lookup table for g(0,x) = x+1 % 2^n
  {         e#   Memoisation function body: stack is 2^n ... y x
    0X$j    e#     Compute g(0,x) = x+1 % 2^n
            e#     Stack is 2^n ... y x (x+1%2^n)
    @(      e#     Bring y to top, decrement (guaranteed not to underflow)
            e#     Stack is 2^n ... x (x+1%2^n) (y-1%2^n)
    @jj     e#     Rotate and apply memoised function twice: g(x+1,g(y-1,x))
  }
  2j        e#   Memoise two-parameter function
            e#   Stack: 2^n g(31,0)
  )W$=      e#   Test whether g(31,0)+1 is 2^n
}g          e# Loop while true

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