সংখ্যা তত্ত্বের একটি বাক্য (আমাদের উদ্দেশ্যে) নিম্নলিখিত চিহ্নগুলির ক্রম:
0
এবং'
(উত্তরসূরি) - উত্তরসূরি মানে+1
, তাই0'''' = 0 + 1 + 1 + 1 + 1 = 4
+
(সংযোজন) এবং*
(গুণ)=
(সমান)(
এবং)
(প্রথম বন্ধনী)- লজিকাল অপারেটর
nand
(a nand b
হয়not (a and b)
) forall
(সর্বজনীন কোয়ান্টিফায়ার)v0
,v1
,v2
, ইত্যাদি (ভেরিয়েবল)এখানে একটি বাক্য উদাহরণ:
forall v1 (forall v2 (forall v3 (not (v1*v1*v1 + v2*v2*v2 = v3*v3*v3))))
এখানে সংক্ষিপ্তকরণটি not x
রয়েছে x nand x
- আসল বাক্যটি ব্যবহার করবে (v1*v1*v1 + v2*v2*v2 = v3*v3*v3) nand (v1*v1*v1 + v2*v2*v2 = v3*v3*v3)
, কারণ x nand x = not (x and x) = not x
।
এই রাজ্যের তিন স্বাভাবিক সংখ্যার প্রতিটি সংযুক্তির জন্য v1
, v2
এবং v3
, তাই নয় ক্ষেত্রে দেখা যায় যে v1 এ 3 + + v2 3 = v3 এর 3 (যা ফের্মার শেষ উপপাদ্য কারণ সত্য হতে হবে, যে এটি পেতে হবে ব্যতীত 0 ^ 3 + 0 ^ 3 = 0 ^ 3 ) ।
দুর্ভাগ্যক্রমে, গডেলের দ্বারা প্রমাণিত হিসাবে, সংখ্যার তত্ত্বের কোনও বাক্য সত্য কিনা তা নির্ধারণ করা সম্ভব নয়।
এটা তোলে হয় যদি আমরা একটি নির্দিষ্ট সেট প্রাকৃতিক সংখ্যার সেট সীমিত সম্ভব, কিন্তু,।
সুতরাং, এই চ্যালেঞ্জটি কিছু ধনাত্মক পূর্ণসংখ্যার জন্য মডুলো গ্রহণের সময় সংখ্যা তত্ত্বের একটি বাক্য সত্য কিনা তা নির্ধারণ করা । উদাহরণস্বরূপ, বাক্যটিn
n
forall v0 (v0 * v0 * v0 = v0)
(বিবৃতি যে সমস্ত সংখ্যার জন্য x, x 3 = x)
সাধারণ গাণিতিকের ক্ষেত্রে সত্য নয় (উদাহরণস্বরূপ 2 3 = 8 ≠ 2) তবে মডুলো 3 নেওয়ার সময় এটি সত্য:
0 * 0 * 0 ≡ 0 (mod 3)
1 * 1 * 1 ≡ 1 (mod 3)
2 * 2 * 2 ≡ 8 ≡ 2 (mod 3)
ইনপুট এবং আউটপুট ফর্ম্যাট
ইনপুটটি n
কোনও "যুক্তিসঙ্গত" বিন্যাসে একটি বাক্য এবং ধনাত্মক পূর্ণসংখ্যা । forall v0 (v0 * v0 * v0 = v0)
সংখ্যার তত্ত্বের মডুলো 3 এ বাক্যটির জন্য যুক্তিসঙ্গত বিন্যাসগুলির কয়েকটি উদাহরণ এখানে রয়েছে :
("forall v0 (v0 * v0 * v0 = v0)", 3)
"3:forall v0 (((v0 * v0) * v0) = v0)"
"(forall v0)(((v0 * v0) * v0) = v0) mod 3"
[3, "forall", "v0", "(", "(", "(", "v0", "*", "v0", ")", "*", "v0", ")", "=", "v0", ")"]
(3, [8, 9, 5, 5, 5, 9, 3, 9, 6, 3, 9, 6, 4, 9, 6]) (the sentence above, but with each symbol replaced with a unique number)
"f v0 = * * v0 v0 v0 v0"
[3, ["forall", "v0", ["=", ["*", "v0", ["*", "v0", "v0"]], "v0"]]]
"3.v0((v0 * (v0 * v0)) = v0)"
ইনপুট স্টিডিন, একটি কমান্ড লাইন আর্গুমেন্ট, একটি ফাইল ইত্যাদি হতে পারে from
বাক্যটি সত্য বা না, এর জন্য প্রোগ্রামের কোনও দুটি স্বতন্ত্র ফলাফল থাকতে পারে, উদাহরণস্বরূপ এটি yes
যদি সত্য হয় এবং no
যদি তা না হয় তবে আউটপুট পেতে পারে ।
আপনার একটি ভেরিয়েবলকে forall
দুবারের বিষয় হিসাবে সমর্থন করার দরকার নেই , যেমন (forall v0 (v0 = 0)) nand (forall v0 (v0 = 0))
। আপনি ধরে নিতে পারেন যে আপনার ইনপুটটির বৈধ বাক্য গঠন রয়েছে।
পরীক্ষার মামলা
forall v0 (v0 * v0 * v0 = v0) mod 3
true
forall v0 (v0 * v0 * v0 = v0) mod 4
false (2 * 2 * 2 = 8 ≡ 0 mod 4)
forall v0 (v0 = 0) mod 1
true (all numbers are 0 modulo 1)
0 = 0 mod 8
true
0''' = 0 mod 3
true
0''' = 0 mod 4
false
forall v0 (v0' = v0') mod 1428374
true
forall v0 (v0 = 0) nand forall v1 (v1 = 0) mod 2
true (this is False nand False, which is true)
forall v0 ((v0 = 0 nand v0 = 0) nand ((forall v1 (v0 * v1 = 0' nand v0 * v1 = 0') nand forall v2 (v0 * v2 = 0' nand v0 * v2 = 0')) nand (forall v3 (v0 * v3 = 0' nand v0 * v3 = 0') nand forall v4 (v0 * v4 = 0' nand v0 * v4 = 0')))) mod 7
true
(equivalent to "forall v0 (v0 =/= 0 implies exists v1 (v0 * v1 = 0)), which states that every number has a multiplicative inverse modulo n, which is only true if n is 1 or prime)
forall v0 ((v0 = 0 nand v0 = 0) nand ((forall v1 (v0 * v1 = 0' nand v0 * v1 = 0') nand forall v2 (v0 * v2 = 0' nand v0 * v2 = 0')) nand (forall v3 (v0 * v3 = 0' nand v0 * v3 = 0') nand forall v4 (v0 * v4 = 0' nand v0 * v4 = 0')))) mod 4
false
এটি কোড-গল্ফ , তাই আপনার প্রোগ্রামটি যতটা সম্ভব সংক্ষিপ্ত করার চেষ্টা করুন!
var number
, অথবা এমনকি মাত্র 1 + number
(তাই 1
হবে v0
, 2
হবে v1
, ইত্যাদি)
'v number
পরিবর্তে কেউ কী ব্যবহার করতে পারে v number'
?
v number
?