ল্যাম্বদা ক্যালকুলাস জেনারেটর


10

এই প্রশ্নটি আর কোথায় জিজ্ঞাসা করতে হবে জানি না, আমি আশা করি এটি ভাল জায়গা।

লাম্বদা ক্যালকুলাস জেনারেটর তৈরি করা সম্ভব কিনা তা জানার জন্য আমি কেবল কৌতূহলী; মূলত, একটি লুপ যা অসীম সময় দেয়, প্রতিটি সম্ভাব্য ল্যাম্বদা ক্যালকুলাস ফাংশন উত্পাদন করে। (যেমন স্ট্রিং আকারে)।

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

অবশ্যই, আমি ল্যাম্বদা ক্যালকুলাস সম্পর্কে প্রায় কিছুই জানি না তাই এটি সত্যিই সম্ভব কিনা আমার কোনও ধারণা নেই।

তাই কি? যদি তা হয়, তবে আমি কি এটি কল্পনা করেছি, বা প্রযুক্তিগতভাবে এটি সম্ভব, তবে এটি এতটা কঠিন যে এটি কার্যকরভাবে অসম্ভব?

পুনশ্চ. আমি বিটা-হ্রাস ফাংশনগুলির বিষয়ে কথা বলছি না, আমি কেবল প্রতিটি ল্যাম্বদা ক্যালকুলাস ফাংশনের প্রতিটি বৈধ স্বরলিপি সম্পর্কে কথা বলছি।

উত্তর:


19

অবশ্যই, এটি একটি স্ট্যান্ডার্ড এনকোডিং অনুশীলন।

প্রথমত, যেকোন দ্বিখণ্ডিত গণনীয় ফাংশন যাকে একটি জোড় যুক্ত ফাংশন বলে। একটি মান পছন্দp:N2N

p(n,m)=(n+m)(n+m+1)2+n

এটি প্রমাণ করতে পারে যে এটি হ'ল একটি বাইজেকশন, সুতরাং যে কোনও প্রাকৃতিক দেওয়া হলে আমরা এন , এম যেমন পি ( এন , এম ) = কে গণনা করতে পারি ।kn,mp(n,m)=k

ল্যাম্বডা শর্তাদি গণনা করতে, ভেরিয়েবলের নামের জন্য কোনও গণনা ঠিক করুন: x0,x1,x2,

এর পরে, প্রতিটি প্রাকৃতিক সংখ্যার জন্য , মুদ্রণ একটি মিটার একটি ( আমি ) , যাও recursively সংজ্ঞায়িত নিম্নরূপ:ilambda(i)

  • যদি সমান হয় তবে j = i / 2 এবং চলক x জে ফিরে আসিij=i/2xj
  • যদি বিজোড় যাক = ( আমি - 1 ) / 2ij=(i1)/2
    • যদি হয়, চলুন কে = জে / এবং এন , এম যেমন যে পি ( এন , এম ) = কে ; গণনা N = l a m b d a ( n ) , M = l a m b d a ( m ) ; রিটার্ন আবেদন ( এন এম )jk=j/2n,mp(n,m)=kN=lambda(n),M=lambda(m)(NM)
    • যদি বিজোড় হয়, চলুন কে = ( জে - 1 ) / 2 এবং এন , মি যেমন পি ( এন , মি ) = কে ; গণনা এম = এম বি ডি ( এম ) ; প্রত্যাবর্তন বিমূর্তি ( λ x nM )jk=(j1)/2n,mp(n,m)=kM=lambda(m)(λxn. M)

এই প্রোগ্রামটিকে সব ল্যামডা পদ সেট জড়িত অনুসরণ "বীজগাণিতিক" bijection দ্বারা সমর্থন করা হয় :Λ

ΛN+(Λ2+N×Λ)

যা "ল্যাম্বডা পদগুলি, সিন্ট্যাক্টিকভাবে, 1) ভেরিয়েবলগুলির বিচ্ছিন্ন ইউনিয়ন (প্রাকৃতিক হিসাবে উপস্থাপিত), 2) অ্যাপ্লিকেশনগুলি (দুটি ল্যাম্বডা পদ দ্বারা তৈরি করা হয়), এবং 3) বিমূর্ততা (একটি জোড় পরিবর্তনশীল / প্রাকৃতিক + ল্যাম্বডা শব্দ) হিসাবে পড়া হয় ) "।

N2NpN+NN

এই পদ্ধতিটি সাধারণ, এবং প্রসঙ্গ-মুক্ত ব্যাকরণের মাধ্যমে উত্পন্ন প্রায় কোনও ভাষার ক্ষেত্রে কাজ করবে, যা উপরেরটির সাথে একই রকম আইসোমরফিজম সরবরাহ করবে।


বাহ, ধন্যবাদ, আপনি কি এটি সিউডো কোডটি উপস্থাপন করতে পারবেন? আমার সিসি ডিগ্রি না থাকায় আমি অবশ্যই এটি আরও ভালভাবে বুঝতে পারি।
লেজিট স্ট্যাক

3
lambda(n)if n%2==0 ...n,mp(n,m)=kn,mn,mk

1
প্রকৃতপক্ষে, উইকিপিডিয়া অনুসারে, এই নির্দিষ্ট জুড়ি ফাংশনের মাধ্যমে পাওয়া যাবেa=12(8k+11),b=12a(a+1),n=bk,m=an

12

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


5
মূলত, এ জাতীয় সমস্ত সমস্যা টাইপ করা বানরকে অনুরোধ করার মাধ্যমে সমাধান করা হয় ...
xuq01

5
অথবা আপনি সরাসরি ল্যাম্বদা ক্যালকুলাস পদগুলি গণনা করতে পারেন। প্রতিটি আউটপুট সঠিকভাবে ফর্ম্যাট হওয়া শব্দ হিসাবে এলোমেলো স্ট্রিংয়ের চেয়ে অনেক দ্রুত। এটি শেক্সপিয়ার প্লে জেনারেটরের সাথে টাইপিং বানরগুলির প্রতিস্থাপনের মতো হবে।
ড্যান ডি

11

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

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

সেই কাগজটিতে কংক্রিট হাস্কেল কোডও রয়েছে তাদের প্রজন্মের অ্যালগোরিদম প্রয়োগ করে। এটি অবশ্যই কার্যকরভাবে সম্ভব।

আমি জুলিয়ায় তাদের পদ্ধতির একটি প্রয়োগ লিখেছি ।


7

অবশ্যই। লাম্বদা শর্তাদির সংজ্ঞা অনুসারে আমরা এগুলি সরাসরি উত্পন্ন করতে পারি।

হাস্কেল-এ, আমরা প্রথমে ডেটা টাইপ সংজ্ঞায়িত করি,

data LC a  =  Var  a                -- Constructor <type> <type> ...
           |  App (LC a) (LC a)     --
           |  Lam  a     (LC a)     --  ... alternatives ...

instance Show a => Show (LC a)      -- `LC a` is in Show if `a` is in Show, and
  where
    show (Var i)    =  [c | c <- show i, c /= '\'']
    show (App m n)  =  "("  ++ show m       ++ " " ++ show n ++ ")"
    show (Lam v b)  =  "(^" ++ show (Var v) ++ "." ++ show b ++ ")"

এবং তারপরে একটি মেলা (ইর) ব্যবহার করে join,

lambda :: [a] -> [LC a]
lambda vars  =  terms 
  where
  terms  =  fjoin [ map Var vars ,
                    fjoin [ [App t s | t <- terms] | s <- terms ] ,
                    fjoin [ [Lam v s | v <- vars ] | s <- terms ] ]

  fjoin :: [[a]] -> [a]
  fjoin xs  =  go [] xs             -- fairer join
      where 
      go [] []  =  []
      go a  b   =  reverse (concatMap (take 1) a) ++ go 
                       (take 1 b ++ [t | (_:t) <- a]) (drop 1 b)

উদাহরণস্বরূপ, আমরা কেবল তাদের গণনা করি

> take 20 $ lambda "xyz"
[x,y,(x x),z,(y x),(^x.x),(x y),(^y.x),((x x) x),(^x.y),(y y),(^z.x),(x (x x)),
 (^y.y),(z x),(^x.(x x)),((x x) y),(^z.y),(y (x x)),(^y.(x x))]

> take 5 $ drop 960 $ lambda "xyz"
[(((x x) y) (z x)),(^y.(^x.((x x) (x x)))),((^x.(x x)) (^x.(x x))),(^x.((^z.x) 
 y)),((z x) ((x x) y))]

Ω=(λx.xx)(λx.xx)

fjoinসমতূল্য একসংখ্যা ওমেগা এর diagonal


0

আমি অনলাইনে এমন একটি সরঞ্জাম পেয়েছি যা নিয়মিত প্রকাশ থেকে নমুনা স্ট্রিং তৈরি করতে পারে: https://www.browserling.com/tools/text-from-regex । আপনি এরকম কিছু ইনপুট করে প্রচুর নমুনা ল্যাম্বডা পদ তৈরি করতে পারেন:

(\( (lambda \w\. )* \w+ \))* 

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


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