আমি কীভাবে হিন্দি-মিলনার বিধি বুঝতে পারি?
হিন্ডি-মিলনার হ'ল নিয়মিত ক্যালকুলাস আকারে (প্রাকৃতিক ছাড় নয়) আকারে এমন একটি বিধি রয়েছে যা প্রমাণ করে যে আমরা কোনও প্রকারের (সর্বাধিক সাধারণ) ধরণের ধরণের বিবরণ ছাড়াই প্রোগ্রামটি নির্মাণ থেকে কাটাতে পারি।
প্রতীক এবং স্বরলিপি
প্রথমে, প্রতীকগুলি ব্যাখ্যা করতে এবং অপারেটরের অগ্রাধিকার নিয়ে আলোচনা করব
- 𝑥 একটি আইডেন্টিফায়ার (অনাড়ম্বরভাবে, একটি পরিবর্তনশীল নাম) হয়।
- : মানে হ'ল এক প্রকার (অনানুষ্ঠানিকভাবে, একটি উদাহরণ বা "হয়-এ")।
- 𝜎 (সিগমা) একটি অভিব্যক্তি যা হয় পরিবর্তনশীল বা ফাংশন।
- এইভাবে 𝑥: " 𝑥 is-a 𝜎 " পড়া হয়
- এর অর্থ "একটি উপাদান"
- G (গামা) একটি পরিবেশ।
- ⊦ (কথন চিহ্ন) মানে দাবি (অথবা প্রমাণ কিন্তু বিষয়গতভাবে "দাবি" ভাল লেখা।)
- ⊦ Γ 𝑥 : σ এইভাবে পড়া হয় "Γ যে 𝑥 দাবি হল,-একটি σ "
- 𝑒 ধরনের প্রকৃত উদাহরণস্বরূপ (উপাদান) হল σ ।
- 𝜏 (তাউ) একটি প্রকার: হয় মৌলিক, পরিবর্তনশীল ( 𝛼 ), ক্রিয়ামূলক 𝜏 → 𝜏 ' , বা পণ্য 𝜏 × 𝜏' (পণ্য এখানে ব্যবহৃত হয় না)
- 𝜏 → 𝜏 ' একটি কার্যকরী ধরণের যেখানে 𝜏 এবং 𝜏' সম্ভাব্য বিভিন্ন ধরণের।
𝑒.𝑒 এর অর্থ 𝜆 ( ল্যাম্বদা ) একটি বেনামে ফাংশন যা একটি আর্গুমেন্ট গ্রহণ করে, 𝑥 , এবং একটি এক্সপ্রেশন প্রদান করে, 𝑒 ।
যাক 𝑥 = 𝑒₀ ইন expression এর অর্থ হল অভিব্যক্তি, 𝑒₁ , বিকল্প 𝑒₀ যেখানেই 𝑥 উপস্থিত।
⊑ এর অর্থ পূর্ববর্তী উপাদানটি পরবর্তী উপাদানগুলির একটি উপপ্রকার (অনানুষ্ঠানিক - উপক্লাস )।
- α একটি টাইপ পরিবর্তনশীল।
- ∀ 𝛼.𝜎 হ'ল একটি প্রকার, ∀ (সকলের জন্য) আর্গুমেন্ট ভেরিয়েবল, 𝛼 , প্রত্যাবর্তন 𝜎 এক্সপ্রেশন
- ∉ ফ্রি (𝚪) এর অর্থ বাহ্যিক প্রসঙ্গে সংজ্ঞায়িত type এর মুক্ত প্রকারের ভেরিয়েবলগুলির একটি উপাদান নয়। (বাউন্ডের ভেরিয়েবলগুলি পরিবর্তনযোগ্য)
লাইনের ওপরের সমস্ত কিছুই ভিত্তি, নীচের সমস্ত কিছুই উপসংহার ( পার্ট মার্টিন-লুফ )
উদাহরণ, উদাহরণস্বরূপ
আমি বিধিগুলি থেকে আরও জটিল উদাহরণ নিয়েছি এবং অপ্রয়োজনীয় প্রথম বন্ধনী প্রবেশ করিয়েছি যা অগ্রাধিকার দেখায়:
- 𝑥: 𝜎 ∈ 𝚪 লেখা যেতে পারে (𝑥: 𝜎) written 𝚪 𝚪
⊦ Γ 𝑥 : σ Γ লেখা যেতে পারে ⊦ ( 𝑥 : σ )
Γ ⊦ দিন 𝑥 = 𝑒₀ মধ্যে 𝑒₁ : τ
equivalently Γ হয় ⊦ (( দিন ( 𝑥 = 𝑒₀ ) মধ্যে 𝑒₁ ): τ )
⊦ ⊦ 𝜆𝑥.𝑒 : 𝜏 → 𝜏 ' সমানভাবে 𝚪 ⊦ (( 𝜆𝑥.𝑒 ): ( 𝜏 → 𝜏' ))
তারপরে, দৃ statements় বিবৃতি এবং অন্যান্য পূর্বশর্তগুলি পৃথককারী বৃহত্তর স্থানগুলি পূর্ববর্তী শর্তগুলির একটি সেটকে নির্দেশ করে এবং শেষ পর্যন্ত অনুভূমিক রেখা পৃথকীকরণটিকে উপসংহার থেকে পৃথক করে অগ্রগতির ক্রমটির সমাপ্তি ঘটায়।
নিয়ম
এখানে নীচের নিয়মগুলির ইংরাজী ব্যাখ্যা রয়েছে এবং এরপরে একটি শিথিল পুনঃস্থাপন এবং ব্যাখ্যা রয়েছে।
পরিবর্তনশীল
প্রদত্ত এক প্রকারের 𝜎 (সিগমা), 𝚪 (গামা) এর একটি উপাদান,
উপসংহার 𝚪 দাবী 𝑥 একটি 𝜎 𝜎
অন্য উপায়ে রাখুন, 𝚪 এ, আমরা জানি 𝑥 টাইপ 𝜎 কারণ type টাইপ 𝜎 ইন 𝚪 𝚪 𝚪
এটি মূলত একটি টাউটোলজি। একটি সনাক্তকারী নাম একটি পরিবর্তনশীল বা একটি ফাংশন।
ফাংশন অ্যাপ্লিকেশন
প্রদত্ত 𝚪 অ্যাসেটস 𝑒₀ একটি কার্যকরী ধরণের এবং 𝚪 দাবীগুলি a একটি 𝜏
উপসংহার function ফাংশন প্রয়োগ করে 𝑒₀ থেকে 𝚪 একধরনের ser '
নিয়মটি পুনঃস্থাপন করতে, আমরা জানি যে ফাংশন অ্যাপ্লিকেশনটি 𝜏 'টাইপ করে কারণ ফাংশনে type → 𝜏' টাইপ থাকে এবং টাইপ of এর একটি আর্গুমেন্ট পায় 𝜏
এর অর্থ হ'ল যদি আমরা জানি যে কোনও ফাংশন কোনও প্রকার ফেরত দেয়, এবং আমরা এটি একটি যুক্তিতে প্রয়োগ করি, ফলাফলটি আমাদের জানায় যে প্রকারটি এটি প্রত্যাবর্তিত হয় তার উদাহরণ হতে পারে।
ফাংশন বিমূর্তি
প্রদত্ত 𝚪 এবং type প্রকারের ser সংস্থানগুলি type একটি প্রকার, 𝑥 '
উপসংহার an একটি বেনামি ফাংশন, 𝑥 𝑥 রিটার্নিং এক্সপ্রেশন,। Type → 𝜏' টাইপের 𝚪
আবার, যখন আমরা কোনও ফাংশন দেখি যা that গ্রহণ করে এবং একটি এক্সপ্রেশন ফিরিয়ে দেয় 𝑒, আমরা জানি এটি টাইপ 𝜏 → 𝜏 'কারণ কারণ 𝑥 (a 𝜏) দৃts়ভাবে জানিয়ে দেয় যে a একটি 𝜏'। '।
আমরা যদি জানি যে 𝑥 টাইপ 𝜏 এবং তাই এইভাবে একটি এক্সপ্রেশন type টাইপ 𝜏 'হয় তবে 𝑥 রিটার্নিং এক্সপ্রেশন। এর একটি ফাংশন type → 𝜏' টাইপ হয়।
চলক ঘোষণা দিন
প্রকারের 𝚪 asserts 𝑒₀, প্রকারের 𝜎, এবং 𝚪 এবং 𝑥, প্রকারের 𝜎, asserts lude প্রকারের 𝜏
উপসংহার 𝚪 asserts let
𝑥 = 𝑒₀ in
type টাইপের 𝜏
আলগাভাবে, 𝑥 ইন 𝑒₁ (এ 𝜏) এর সাথে আবদ্ধ because কারণ 𝑒₀ একটি and, এবং 𝑥 একটি 𝜎 যা দাবি করে 𝜏 একটি 𝑒₁ 𝜏 𝜏
এর অর্থ যদি আমাদের যদি একটি এক্সপ্রেশন থাকে - যা একটি 𝜎 (একটি ভেরিয়েবল বা একটি ক্রিয়াকলাপ) এবং কিছু নাম, also, এছাড়াও একটি 𝜎, এবং টাইপ 𝑒₁ এর একটি এক্সপ্রেশন থাকে তবে আমরা যেখানেই এটি ভিতরে উপস্থিত হয় সেখানে 𝑒₀ এর জন্য প্রতিস্থাপন করতে পারি এর।
ইনস্ট্যান্স
Type 'এবং 𝜎' প্রকারের ser সংস্থাগুলি দেওয়া 𝜎 '
উপসংহার 𝚪 সমাপ্তি 𝚪 টাইপের 𝑒
একটি অভিব্যক্তি, parent মূল প্রকারের 𝜎 কারণ এক্সপ্রেশন 𝑒 সাব টাইপ 𝜎 ', এবং 𝜎 parent' এর মূল ধরনের type '।
উদাহরণস্বরূপ যদি এমন কোনও ধরণের হয় যা অন্য ধরণের একটি উপপ্রকার, তবে এটি সেই সুপার-টাইপের উদাহরণ - আরও সাধারণ ধরণের।
সাধারণীকরণ
প্রদত্ত 𝚪 অ্যাসের্টস a একটি 𝜎 এবং the of এর মুক্ত ভেরিয়েবলের উপাদান নয়,
উপসংহার 𝚪 দাবী 𝑒, সমস্ত যুক্তি প্রকাশের জন্য টাইপ করুন a প্রকাশ 𝛼 প্রকাশ
সুতরাং সাধারণভাবে, সমস্ত আর্গুমেন্ট ভেরিয়েবল (returning) ফিরতে 𝜎 এর জন্য 𝑒 টাইপ করা হয় because কারণ আমরা জানি যে 𝑒 একটি 𝜎 এবং 𝛼 কোনও মুক্ত পরিবর্তনশীল নয়।
এর অর্থ আমরা ইতিমধ্যে ধারণযোগ্য স্কোপটিতে আবদ্ধ নন (আঞ্চলিক নয় এমন ভেরিয়েবল) এর জন্য সকল প্রকারের আর্গুমেন্ট গ্রহণ করার জন্য একটি প্রোগ্রামকে সাধারণকরণ করতে পারি। এই সীমাবদ্ধ ভেরিয়েবলগুলি পরিবর্তনযোগ্য।
সবগুলোকে একত্রে রাখ
নির্দিষ্ট অনুমান দেওয়া (যেমন কোনও মুক্ত / অপরিজ্ঞাত ভেরিয়েবল, একটি পরিচিত পরিবেশ,) আমরা এর প্রকারগুলি জানি:
- আমাদের প্রোগ্রামের পারমাণবিক উপাদান (পরিবর্তনশীল),
- ফাংশন (ফাংশন অ্যাপ্লিকেশন) দ্বারা ফেরত মানগুলি,
- ফাংশনাল কনস্ট্রাক্টস (ফাংশন অ্যাবস্ট্রাকশন),
- বাঁধাই করা যাক (পরিবর্তনশীল ঘোষণার দিন),
- পিতামাতার ধরণের দৃষ্টান্ত (ইনস্ট্যান্টেশন), এবং
- সমস্ত অভিব্যক্তি (সাধারণীকরণ)।
উপসংহার
এই বিধিগুলি সম্মিলিতভাবে ধরণের টিকা রচনার প্রয়োজন ছাড়াই আমাদেরকে দৃ program়ভাবে জানানো প্রোগ্রামের সর্বাধিক সাধারণ প্রমানের অনুমতি দেয়।