স্থির-পয়েন্ট সংযোজক (ওয়াই কম্বিনেটর) এর পরিষ্কার, স্বজ্ঞাত ডেরাইভেশন?


28

(অব্যক্ত) ল্যাম্বদা ক্যালকুলাস ( ল্যাম্বদা) এ ফিক্সড পয়েন্ট কম্বিনেটর FIX (ওরফে ওয়াই কম্বিনেটর) হিসাবে সংজ্ঞায়িত করা হয়েছে:λ

FIXλf.(λx.f (λy.x x y)) (λx.f (λy.x x y))

আমি এর উদ্দেশ্য বুঝতে পেরেছি এবং আমি এর প্রয়োগের প্রয়োগটি পুরোপুরি সূক্ষ্মভাবে সনাক্ত করতে পারি; আমি কীভাবে প্রথম নীতিগুলি থেকে FIX প্রাপ্ত করব তা বুঝতে চাই

আমি যখন এটিকে নিজেরাই অর্জন করার চেষ্টা করি তখন এখানে আমি যতদূর পেলাম:

  1. FIX একটি ফাংশন: FIX λ
  2. ফিক্স অন্য ফাংশন, লাগে f , এটা recursive করা: ফিক্স λf.
  3. ফাংশনের প্রথম আর্গুমেন্ট f ফাংশন, যেখানে একটি recursive আবেদন দেয়ার উদ্দেশ্যে করা হচ্ছে ব্যবহৃত "নাম" হয়। সুতরাং, এর প্রথম আর্গুমেন্টের সমস্ত উপস্থিতি fএকটি ফাংশন দ্বারা প্রতিস্থাপন করা উচিত, এবং এই ফাংশনটি এর বাকী আর্গুমেন্টগুলি আশা করা উচিত f(আসুন ধরে নেওয়া যাক f একটি আর্গুমেন্ট নেয়): FIX λf.f (λy.y)

এখানেই আমি আমার যুক্তিতে "পদক্ষেপ নিতে" জানি না। ছোট উপবৃত্তগুলি নির্দেশ করে যেখানে আমার ফিক্সটি কিছু অনুপস্থিত রয়েছে (যদিও আমি কেবল এটি "আসল" ফিক্সের সাথে তুলনা করে জানতে পেরেছি)।

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


1
এই পোস্টটি সহায়ক হতে পারে। সাধারণভাবে, আমি মনে করি যে সংযোজকটির কেবল কয়েকটি পুনরাবৃত্তি গণনা করা এবং এটি কেন কাজ করে তা নির্ধারণে সহায়ক।
Xodarap

2
বিভিন্ন বিভিন্ন নির্দিষ্ট পয়েন্ট সংযোজক রয়েছে। সম্ভবত লোকেরা সংযুক্তকারীদের সাথে খেলেছে যতক্ষণ না তারা তাদের হোঁচট খায়।
যুবাল ফিল্ম

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

ড্যানিয়েল পি। ফ্রেডম্যান (বা "দ্য লিটল স্কিমার") দ্বারা "দ্য লিটল লিস্পার" এর 9 ম অধ্যায়টি পড়ুন।
18199

2
ওপি ইঙ্গিত দেয় যে তারা ইতিমধ্যে এটি পড়েছে।
রাফেল

উত্তর:


29

আমি এটি কোথাও পড়িনি, তবে আমি বিশ্বাস করি যে উদ্ভব হতে পারে:Y

আসুন একটি পুনরাবৃত্তি ফাংশন , সম্ভবত একটি ফ্যাক্টরিয়াল বা এর মতো অন্য কিছু। অনানুষ্ঠানিকভাবে, আমরা সিউডো-ল্যাম্বদা শব্দ হিসাবে সংজ্ঞায়িত করি যেখানে এর নিজস্ব সংজ্ঞায় ঘটে:fff

f=ff

প্রথমত, আমরা বুঝতে পারি যে পুনরাবৃত্তি কলটি প্যারামিটার হিসাবে প্রমাণিত হতে পারে:

f=(λr.(rr))Mf

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

f=(λr.(rr))M(λr.(rr))M

তবে এটি সম্পূর্ণ সঠিক নয়। এর আগে, ভিতরে পরিবর্তে । কিন্তু এখন আমরা পরিবর্তে পাস । আমাদের যে কোনও জায়গায় আমরা ব্যবহার করি সেগুলি আমাদের কোনওভাবে ঠিক করতে হবে যাতে তারা থেকে পুনর্গঠন করে । প্রকৃতপক্ষে, এটি মোটেও কঠিন নয়: এখন আমরা জানি যে , যে কোনও জায়গায় আমরা ব্যবহার করি আমরা কেবল এটি দ্বারা প্রতিস্থাপন করি ।frMMrfMf=MMr(rr)

f=(λr.((rr)(rr)))M(λr.((rr)(rr)))M

এই সমাধানটি ভাল, তবে আমাদের ভিতরে পরিবর্তন করতে হয়েছিল । এটি খুব সুবিধাজনক নয়। আমরা পরিবর্তন করেও আরো এইরূপ সূচারূভাবে এটা করতে পারেন অন্য প্রবর্তনের দ্বারা পাঠায় যে যুক্তি নিজেই প্রয়োগ: প্রকাশ করার মাধ্যমে হিসেবে আমরা পেতেMMλMMλx.M(xx)

f=(λx.(λr.(rr))M(xx))(λx.(λr.(rr))M(xx))

এই ভাবে, যখন প্রতিস্থাপিত হয় , প্রতিস্থাপিত হয় , যা সংজ্ঞা দ্বারা হয় সমান । এটি আমাদেরকে -এর একটি পুনরাবৃত্ত সংজ্ঞা দেয় যা একটি বৈধ ল্যাম্বডা শব্দ হিসাবে প্রকাশিত হয়!MxMMrff

পরিবর্তনকে এখন সহজ। আমরা পরিবর্তে একটি নির্বিচার ল্যাম্বডা শব্দটি গ্রহণ করতে পারি এবং এটিতে এই পদ্ধতিটি সম্পাদন করতে পারি। সুতরাং আমরা ফ্যাক্টর এবং সংজ্ঞা দিতে পারিYMM

Y=λm.(λx.m(xx))(λx.m(xx))

প্রকৃতপক্ষে, হ্রাস করে যা আমরা এটি সংজ্ঞায়িত করেছি।YMf


নোট: আমি উদ্ভূত থাকেন যেমন সাহিত্যে সংজ্ঞায়িত করা হয়। Combinator আপনি বর্ণনা করেছেন একটি বৈকল্পিক হয় জন্য কল-বাই-মান ভাষা, কখনও কখনও নামেও । দেখুন এই Wikipedia নিবন্ধটিYYZ


1
আপনার দুর্দান্ত প্রতিক্রিয়াটি আমাকে অনুপস্থিত-বলে মনে হচ্ছে-সুস্পষ্ট অন্তর্নিহিততাটি হ'ল একটি পুনরাবৃত্ত ফাংশনটি একটি যুক্তি হিসাবে নিজেকে প্রয়োজন, তাই আমরা একটি অনুমান দিয়ে শুরু করি যে ফাংশনটি কিছু জন্য । তারপর, হিসাবে আমরা গঠন করা , আমরা যে বিবৃতি ব্যবহার যে মধ্যে অভ্যন্তরীণভাবে নিজেই কিছু প্রয়োগের হিসাবে সংজ্ঞায়িত করা হয় , যেমন, প্রয়োগ থেকে আপনার উত্তর, যা সংজ্ঞা দ্বারা হয় সমান । আকর্ষনীয়! f=X(X)XXfXxxf
ব্লুবম্বার

11

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

এটি জিজ্ঞাসার মতো যে কীভাবে লোকেরা সমাধান হিসাবে পান ? তারা না! সমীকরণটির কোনও অনন্য সমাধান নেই।(x,y)=(0,0)x=y


আপনি যে বিষয়টি জানতে চান সেটি হ'ল প্রথম স্থির-পয়েন্টের উপপাদ্যটি কীভাবে আবিষ্কার হয়েছিল। আমাকে বলতে দাও যে আমি প্রথমবার যখন দেখলাম তখন তারা কীভাবে স্থির-পয়েন্ট / পুনরাবৃত্তি উপপাদ্য নিয়ে এসেছিল তা নিয়ে আমি ভাবছিলাম। এতো বুদ্ধিমান মনে হচ্ছে। বিশেষত গণনাযোগ্যতা তত্ত্ব আকারে। যুওয়াল যা বলেন তার বিপরীতে এটি কিছু নয় যে তারা কিছু খুঁজে না পাওয়া পর্যন্ত মানুষ চারপাশে খেলেছে। আমি যা পেয়েছি তা এখানে:

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


আপনি যে অপারেটরটিকে জিজ্ঞাসা করতে পারেন তা কীভাবে অর্জন করবেন? আমি এটি কিভাবে মনে রাখছি তা এখানে। স্থির-পয়েন্ট উপপাদ্য স্ব-রেফারেন্স অপসারণ সম্পর্কে about

মিথ্যাবাদী প্যারাডক্সটি সবাই জানেন:

আমি লইর

বা আরও ভাষাগত আকারে:

এই বাক্যটি মিথ্যা।

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

যদি আপনি দুবার নীচের উক্তিটি লিখেন, দ্বিতীয় বারের উদ্ধৃতিতে, ফলস্বরূপ বাক্যটি মিথ্যা: "আপনি যদি নিম্নোক্ত উক্তিটি দু'বার লিখে থাকেন, তবে দ্বিতীয় বারের অভ্যন্তরে ফলাফলটি মিথ্যা:"

কোনও স্ব-রেফারেন্স নেই, বাক্যটি কীভাবে তৈরি করা যায় এবং তারপরে এটি দিয়ে কীভাবে করা যায় সে সম্পর্কে আমাদের নির্দেশাবলী রয়েছে। এবং যে বাক্যটি তৈরি হয় তা নির্দেশের সমান। নোট করুন যে ল্যাম্বদা-ক্যালকুলাসে আমাদের উদ্ধৃতিগুলির দরকার নেই কারণ ডেটা এবং নির্দেশাবলীর মধ্যে কোনও পার্থক্য নেই।λ

এখন আমরা যদি এটি বিশ্লেষণ করি তবে আমাদের যেখানে হ'ল করতে এবং এটিতে কিছু করার জন্য নির্দেশনা ।MMMxxx

Mx=f(xx)

সুতরাং হ'ল এবং আমাদের আছেMλx.f(xx)

MM=(λx.f(xx))(λx.f(xx))

এটি একটি নির্দিষ্ট । আপনি যদি এটিকে অপারেটর করতে চান তবে আমরা কেবল যোগ করব এবং আমরা পেয়ে যাব :fλfY

Y=λf.(MM)=λf.((λx.f(xx))(λx.f(xx)))

সুতরাং আমি কেবল স্ব-রেফারেন্স ছাড়াই প্যারাডক্সটিকে মনে রাখি এবং এটি আমার সম্পর্কে কী তা বুঝতে সহায়তা করে ।Y


3

সুতরাং আপনি একটি নির্দিষ্ট পয়েন্ট সংযোজক সংজ্ঞায়িত করতে হবে

fix f = f (fix f)
      = f (f (fix f))
      = f (f (f ... ))

তবে সুস্পষ্ট পুনরাবৃত্তি ছাড়াই। আসুন সহজ অপরিবর্তনীয় কম্বিনেটর দিয়ে শুরু করা যাক

omega = (\x. x x) (\x. x x)
      = (\x. x x) (\x. x x)
      = ...

xপ্রথম ল্যামডা মধ্যে বারবার দ্বিতীয় ল্যামডা দ্বারা প্রতিস্থাপিত হয়। সাধারণ আলফা-রূপান্তর এই প্রক্রিয়াটিকে আরও পরিষ্কার করে তোলে:

omega =  (\x. x x) (\x. x x)
      =α (\x. x x) (\y. y y)
      =β (\y. y y) (\y. y y)
      =α (\y. y y) (\z. z z)
      =β (\z. z z) (\z. z z)

অর্থাৎ প্রথম ল্যাম্বডায় পরিবর্তনশীল সর্বদা অদৃশ্য হয়ে যায়। সুতরাং আমরা যদি fপ্রথম ল্যাম্বডায় একটি যোগ করি

(\x. f (x x)) (\y. y y)

fইচ্ছা বব আপ

f ((\y. y y) (\y. y y))

আমরা আমাদের omegaফিরে পেয়েছি । এটি এখন পরিষ্কার হওয়া উচিত, আমরা যদি fদ্বিতীয় ল্যাম্বডায় একটি যোগ করি , তবে fপ্রথমটি ল্যাম্বডায় প্রদর্শিত হবে এবং তারপরে এটি বন্ধ হয়ে যাবে:

Y f = (\x. x x)     (\x. f (x x))
      (\x. f (x x)) (\x. f (x x)) -- the classical definition of Y

থেকে

(\x. s t) z = s ((\x. t) z), if `x' doesn't occur free in `s'

আমরা এক্সপ্রেশন হিসাবে নতুন করে লিখতে পারি

f ((\x. x x) (\x. f (x x))

যা ঠিক

f (Y f)

এবং আমরা আমাদের সমীকরণ পেয়েছি Y f = f (Y f)। সুতরাং Yসমন্বয়কারী মূলত

  1. দ্বিগুণ f
  2. প্রথম fববড আপ করুন
  3. পুনরাবৃত্তি

2

আপনি কোনও সাধারণ রূপ ছাড়াই কোনও সমীকরণের ক্লাসিক উদাহরণটি দেখতে পেয়েছেন:

(λx.xx)(λx.xx)(λx.xx)(λx.xx)

সাধারণ পুনরাবৃত্তির জন্য অনুরূপ সমীকরণ প্রস্তাবিত:

(A)(λx.R(xx))(λx.R(xx)) R( (λx.R(xx))(λx.R(xx)) )R(R( (λx.R(xx))(λx.R(xx)) ))

(ক) ল্যাম্বদা ক্যালকুলাসে (আদিম পুনরাবৃত্তির বাইরে) সাধারণ পুনরাবৃত্ত সমীকরণ লেখার একটি উপায় is সুতরাং আপনি কীভাবে সমীকরণটি সমাধান করবেন ? প্লাগ জন্য উপরোক্ত সমীকরণ পেতে:Yf=f(Yf)fR

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