খাঁটি / নির্ভরশীল টাইপ সিস্টেমের সংক্ষিপ্ত তবে সম্পূর্ণ ব্যাখ্যা কী?


32

যদি কিছু সহজ হয় তবে কয়েকটি শব্দ দিয়ে এটি সম্পূর্ণরূপে ব্যাখ্যাযোগ্য হওয়া উচিত। এটি calc-ক্যালকুলাসের জন্য করা যেতে পারে:

Λ-ক্যালকুলাস একটি সিনট্যাক্টিকাল ব্যাকরণ (মূলত, একটি কাঠামো) এর সাথে ক হ্রাস করার নিয়ম (যার অর্থ একটি সন্ধান / প্রতিস্থাপন পদ্ধতি বারবার নির্দিষ্ট প্যাটার্নের প্রতিটি ঘটতে প্রয়োগ করা হয় যতক্ষণ না এই ধরণের কোনও প্যাটার্ন উপস্থিত থাকে)।

ব্যাকরণ:

Term = (Term Term) | (λ Var . Term) | Var

হ্রাস বিধি:

((λ var body) term) -> SUBS(body,var,term)
    where `SUBS` replaces all occurrences of `var`
    by `term` in `body`, avoiding name capture.

উদাহরণ:

(λ a . a)                             -> (λ a a)
((λ a . (λ b . (b a))) (λ x . x))     -> (λ b . (b (λ x x)))
((λ a . (a a)) (λ x . x))             -> (λ x . x)
((λ a . (λ b . ((b a) a))) (λ x . x)) -> (λ b . ((b (λ x . x)) (λ x . x)))
((λ x . (x x)) (λ x . (x x)))         -> never halts

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

খাঁটি / নির্ভরশীল ধরণের সিস্টেমগুলির একটি সংক্ষিপ্ত, সম্পূর্ণ ব্যাখ্যা দেওয়া কি একই ধরণের আমি উপরে λ-ক্যালকুলাসটি উপস্থাপন করেছি?


4
খাঁটি টাইপ সিস্টেমগুলির নিয়মগুলি খুব সংক্ষিপ্ত। সিম্পলি ইজি হ'ল নির্ভর ধরণের প্রয়োগগুলি সম্পর্কে ।

2
সুতরাং এটি আক্রমণাত্মক অর্থে "প্রতিকূল" নয়, তবে আপনি কী ভাবেন যে আমি নিজের দ্বারা উত্তরটি খুঁজে পেতে যথেষ্ট প্রচেষ্টা না করার জন্য অনেক দাবি করছি? যদি এটি হয় তবে আমি সম্মত হই যে এই প্রশ্নটি অনেক বেশি দাবি করতে পারে তাই এটি কেবল খারাপ। তবে এর পিছনে প্রচুর প্রচেষ্টাও রয়েছে, আপনি কি মনে করেন আমার চেষ্টাতে সম্পাদনা করা উচিত?
মাইয়াভিক্টর

3
আমি আমার সহপাঠীদের পক্ষেও অসন্তুষ্ট হয়েছি যারা "একটি নির্ভরশীল টাইপড ল্যাম্বদা ক্যালকুলাসের একটি টিউটোরিয়াল বাস্তবায়ন" এর পাঠ্য লিখেছিলেন, যা "সিম্পলি ইজি" কে একটি কার্য শিরোনাম হিসাবে প্রতিস্থাপন করেছে। আমি কোডটির কার্নেলটি লিখেছি, যা হাস্কেলের <100 লাইনে টাইপেকিকার।

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

1
@ পিগ ওয়ার্কার এবং কোডটি আমার এটির প্রিয় অংশ, ঠিক কারণ এটি (ইংরেজি ব্যাখ্যাের সাথে সম্পর্কিত) অনেক ছোট, তবুও সম্পূর্ণ, পুরোটির ব্যাখ্যা, যেমনটি আমি এখানে জিজ্ঞাসা করেছি। আমি যে কোডটি ডাউনলোড করতে পারি তার একটি অনুলিপি পেয়েছ?
মাইয়াভিক্টর

উত্তর:


7

দাবি পরিত্যাগী

আপনার অনুরোধ অনুসারে এটি খুব অনানুষ্ঠানিক।

ব্যাকরণ

নির্ভরশীলভাবে টাইপ করা ভাষায় আমাদের টাইপ স্তরের পাশাপাশি মান স্তরেও একটি বাইন্ডার থাকে:

Term = * | (∀ (Var : Term). Term) | (Term Term) | (λ Var. Term) | Var

ভাল-টাইপড শব্দটি সংযুক্ত প্রকারযুক্ত একটি শব্দ, আমরা লিখব t ∈ σবা করব

σ
t

যে শব্দটি tটাইপ আছে তা নির্দেশ করতে σ

টাইপিং বিধি

সরলতার জন্য আমরা λ v. t ∈ ∀ (v : σ). τউভয় ক্ষেত্রে এটি প্রয়োজন λএবং একই পরিবর্তনশীল ( vএই ক্ষেত্রে) বাঁধাই ।

নিয়মাবলী:

t ∈ σ is well-formed if σ ∈ * and t is in normal form (0)

*            ∈ *                                                 (1)
∀ (v : σ). τ ∈ *             -: σ ∈ *, τ ∈ *                     (2)
λ v. t       ∈ ∀ (v : σ). τ  -: t ∈ τ                            (3)
f x          ∈ SUBS(τ, v, x) -: f ∈ ∀ (v : σ). τ, x ∈ σ          (4)
v            ∈ σ             -: v was introduced by ∀ (v : σ). τ (5)

সুতরাং, *"সমস্ত ধরণের ধরণ" (1), প্রকারগুলি (2) থেকে প্রকারভেদ করে, ল্যাম্বডা বিমূর্তিতে পাই-প্রকার (3) থাকে এবং যদি vএটি দ্বারা প্রবর্তিত হয় ∀ (v : σ). τ, তবে vটাইপ σ(5) রয়েছে।

"স্বাভাবিক আকারে" এর অর্থ হ'ল আমরা হ্রাস বিধিটি ব্যবহার করে যথাসম্ভব হ্রাস করতে পারি:

"দি" হ্রাস বিধি

(λ v. b ∈ ∀ (v : σ). τ) (t ∈ σ) ~> SUBS(b, v, t) ∈ SUBS(τ, v, t)
    where `SUBS` replaces all occurrences of `v`
    by `t` in `τ` and `b`, avoiding name capture.

বা দ্বিমাত্রিক সিনট্যাক্সে যেখানে

σ
t

অর্থ t ∈ σ:

(∀ (v : σ). τ) σ    SUBS(τ, v, t)
                 ~>
(λ  v     . b) t    SUBS(b, v, t)

কোনও শব্দটিতে যখন লম্বা অ্যাবস্ট্রাকশন প্রয়োগ করা সম্ভব তখনই এই শব্দটির সাথে সম্পর্কিত ফোরাল কোয়ানটিফায়ারের ক্ষেত্রে ভেরিয়েবলের মতো একই রকম থাকে। তারপরে আমরা লাম্বদা বিমূর্ততা এবং ফোরাল কোয়ান্টিফায়ার উভয়কে হ'ল আগের মতো খাঁটি ল্যাম্বদা ক্যালকুলাসের মতো। মান স্তরের অংশ বিয়োগের পরে, আমরা (4) টাইপিং বিধি পাই।

একটি উদাহরণ

এখানে ফাংশন অ্যাপ্লিকেশন অপারেটর:

∀ (A : *) (B : A -> *) (f : ∀ (y : A). B y) (x : A). B x
λ  A       B            f                    x     . f x

(আমরা সংক্ষিপ্ত ∀ (x : σ). τকরার σ -> τযদি τউল্লেখ না x)

fযে B yকোনও yপ্রকারের জন্য প্রদান করে A। আমরা প্রয়োগ fকরি x, যা সঠিক ধরণেরA , এবং বিকল্প yজন্য xমধ্যে পরে ., এইভাবে f x ∈ SUBS(B y, y, x)~> f x ∈ B x

আসুন এখন ফাংশন অ্যাপ্লিকেশন অপারেটরটিকে সংক্ষেপ করে appএটিকে নিজে প্রয়োগ করুন:

∀ (A : *) (B : A -> *). ?
λ  A       B          . app ? ? (app A B)

আমাদের ?যে শর্তাদি সরবরাহ করতে হবে তা আমি রাখি। প্রথমে আমরা স্পষ্টভাবে পরিচয় করি এবং তাত্ক্ষণিকভাবে Aএবং B:

∀ (f : ∀ (y : A). B y) (x : A). B x
app A B

এখন আমাদের যা আছে তা একত্রিত করতে হবে

∀ (f : ∀ (y : A). B y) (x : A). B x

যা হিসাবে একই

(∀ (y : A). B y) -> ∀ (x : A). B x

এবং কি app ? ?গ্রহণ করে

∀ (x : A'). B' x

এর ফলে

A' ~ ∀ (y : A). B y
B' ~ λ _. ∀ (x : A). B x -- B' ignores its argument

(আরও দেখুন ভবিষ্যদ্বাণী কী? )

আমাদের প্রকাশ (কিছু নাম পরিবর্তনের পরে) হয়ে যায়

∀ (A : *) (B : A -> *). ?
λ  A       B          . app (∀ (x : A). B x) (λ _. ∀ (x : A). B x) (app A B)

কোন সাল থেকে A, Bএবং f(যেখানে f ∈ ∀ (y : A). B y)

∀ (y : A). B y
app A B f

আমরা তাত্ক্ষণিকভাবে Aএবং Bপেতে ( fউপযুক্ত টাইপ সহ যে কোনও জন্য ) পেতে পারি

∀ (y : ∀ (x : A). B x). ∀ (x : A). B x
app (∀ (x : A). B x) (λ _. ∀ (x : A). B x) f

এবং স্বাক্ষরের প্রকারটি সমান (∀ (x : A). B x) -> ∀ (x : A). B x

পুরো এক্সপ্রেশন হয়

∀ (A : *) (B : A -> *). (∀ (x : A). B x) -> ∀ (x : A). B x
λ  A       B          . app (∀ (x : A). B x) (λ _. ∀ (x : A). B x) (app A B)

অর্থাত

∀ (A : *) (B : A -> *) (f : ∀ (x : A). B x) (x : A). B x
λ  A       B            f                    x     .
    app (∀ (x : A). B x) (λ _. ∀ (x : A). B x) (app A B) f x

যা মান স্তরে সমস্ত হ্রাস পরে একই appফিরে দেয় ।

তাই যখন এটি বিশুদ্ধ ল্যামডা ক্যালকুলাস পেতে মাত্র কয়েকটি ধাপে প্রয়োজন appথেকেapp app , টাইপযুক্ত সেটিংয়ে (এবং বিশেষত নির্ভরশীল টাইপযুক্ত) আমাদের একীকরণের বিষয়েও যত্ন নেওয়া দরকার এবং কিছু অসামান্য সুবিধার সাথেও জিনিসগুলি আরও জটিল হয়ে উঠেছে (* ∈ * ) ) ।

টাইপ চেকিং

  • যদি tহয় *তাহলেt ∈ * (1)
  • যদি tহয় ∀ (x : σ) τ, σ ∈? *, τ ∈? *(প্রায় নোট দেখতে ∈?নীচে) তারপরt ∈ * দ্বারা (2)
  • যদি tহয় f x, f ∈ ∀ (v : σ) τকিছু জন্য σএবং τ, x ∈? σতারপরt ∈ SUBS(τ, v, x) দ্বারা (4)
  • যদি tএকটি পরিবর্তনশীল v, vপ্রবর্তন করেন ∀ (v : σ). τতারপর t ∈ σদ্বারা (5)

এই সমস্ত অনুমানের নিয়ম, তবে আমরা ল্যাম্বডাসের জন্য একই কাজ করতে পারি না (নির্ভরযোগ্য ধরণের ক্ষেত্রে টাইপ অনুক্রমটি অনস্বীকার্য)। সুতরাং ল্যাম্বডাসের জন্য আমরা পরীক্ষা করে নিই (t ∈? σ পরিবর্তে ) :

  • যদি tহয় λ v. bএবং বিরুদ্ধে পরীক্ষা করা হয় ∀ (v : σ) τ, b ∈? τতাহলেt ∈ ∀ (v : σ) τ
  • যদি tঅন্য কিছু হয় এবং এর বিরুদ্ধে পরীক্ষা করা হয় σতবে tউপরের ফাংশনটি ব্যবহারের ধরণটি নির্ধারণ করুন এবং এটি কিনা তা পরীক্ষা করুনσ

সমতা ধরনের জন্য চেক, স্বাভাবিক ফর্ম হতে তাদের প্রয়োজন যাই হোন না কেন সিদ্ধান্ত নিতে tহয়েছে টাইপ σআমরা প্রথমে চেক করে σটাইপ হয়েছে *। যদি তা হয়, তবে σএটি স্বাভাবিককরণযোগ্য (মডুলো জিরাার্ডের প্যারাডক্স) এবং এটি স্বাভাবিক σহয়ে যায় (সুতরাং (0)) এর দ্বারা সু-গঠিত হয়।SUBS(0) সংরক্ষণের জন্য এক্সপ্রেশনকেও স্বাভাবিক করে তোলে।

একে দ্বি-নির্দেশমূলক টাইপ-চেকিং বলা হয়। এটির সাথে আমাদের প্রতিটি ল্যাম্বডাকে একটি প্রকারের সাথে টিকা দেওয়ার দরকার নেই: যদি f xটাইপটি fপরিচিত xহয় তবে আর্গুমেন্টের ধরণের বিরুদ্ধে পরীক্ষা করা হয়f সমানতার তুলনায় অনুমান করা এবং তুলনা করার পরিবর্তে প্রাপ্ত (এটিও কম দক্ষ)। তবে যদি fল্যাম্বদা হয় তবে এটির জন্য স্পষ্টত ধরণের টিকা প্রয়োজন (ব্যাকরণে এবং সমস্ত জায়গায় টীকা বাদ দেওয়া হয়, আপনি হয় যোগ করতে পারেন Ann Term Termবাλ' (σ : Term) (v : Var) )।

এছাড়াও, সরল, আরও সহজ! ব্লগ পোস্ট.


1
সেকেন্ডিং "সরল, সহজ"।

ফোরালে প্রথম হ্রাস বিধিটি অদ্ভুত দেখাচ্ছে। ল্যাম্বডাসের বিপরীতে, ফোরাসগুলি একটি ভাল-টাইপ পদ্ধতিতে প্রয়োগ করা উচিত নয় (ডান?)

@চি, আপনি কী বলছেন তা আমি বুঝতে পারি না। সম্ভবত আমার স্বরলিপিটি খারাপ: হ্রাস করার নিয়মটি says (λ v. b ∈ ∀ (v : σ). τ) (t ∈ σ)> বলে SUBS(b, v, t) ∈ SUBS(τ, v, t)
user3237465

1
আমি স্বরলিপিটি বিভ্রান্তিকর মনে করি। দেখে মনে হচ্ছে যেন আপনি দুটি নিয়ম ছিল: আজেবাজে কথা এক (∀ (v : σ). τ) t ~> ...অর্থপূর্ণ একটি অন্য (λ v. b) t ~> ...। আমি প্রথমটি সরিয়ে ফেলব এবং এটি নীচে একটি মন্তব্যে পরিণত করব।

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

24

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

ব্যাকরণ

মেয়াদ :: = (এলিম) | * | (বর্ণ: শব্দ) m মেয়াদ | λVar↦Term

এলিম :: = টার্ম: টার্ম | ভার | এলিম টার্ম

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

হ্রাস বিধি

(:y↦t: (x: S) → T) s ↝ t [s: S / y]: টি [গুলি: এস / এক্স]

(t: T) ↝ t

প্রতিস্থাপন অপারেশন টি [ই / এক্স] পরিবর্তনশীল এক্স এর প্রতিটি ঘটনাকে ইলিমিনেশন ই এর সাথে প্রতিস্থাপন করে, নাম ক্যাপচার এড়িয়ে চলে। একটি অ্যাপ্লিকেশন যে কমে যায় গঠন, একটি ল্যামডা শব্দটি তার টাইপ দ্বারা সটীক করা আবশ্যক একটি করতে বর্জন । প্রকারের টিকাটি ল্যাম্বডা-অ্যাবস্ট্রাকশনকে এক ধরণের "প্রতিক্রিয়াশীলতা" দেয়, যা অ্যাপ্লিকেশনটিকে এগিয়ে যেতে দেয়। একবার আমরা সেই পর্যায়ে পৌঁছেছি যেখানে আর কোনও অ্যাপ্লিকেশন হচ্ছে না এবং সক্রিয় টি: টি শব্দটিকে সিনট্যাক্স শিরোনামে আবার এম্বেড করা হয়, আমরা প্রকার টীকাটি ফেলে দিতে পারি।

আসুন কাঠামোগত বন্ধ করে by হ্রাসের সম্পর্কটি প্রসারিত করুন: বিধিগুলি শর্তাবলী এবং অপসারণের যে কোনও জায়গায় প্রযোজ্য যা আপনি বাম-হাতের সাথে মিলে এমন কোনও কিছু খুঁজে পেতে পারেন। রিফ্লেক্সিভ-ট্রান্সসিটিভ (0-বা আরও-ধাপ) বন্ধ হওয়ার জন্য Write * লিখুন ↝ ফলস্বরূপ হ্রাস সিস্টেমটি এই অর্থে মিশ্রিত:

যদি s ↝ * p এবং s ↝ * q হয় তবে কিছু r রয়েছে যা p exists * r এবং q ↝ * r রয়েছে।

অনুষঙ্গ

প্রসঙ্গ :: = | প্রসঙ্গ, ভার: শব্দ

প্রসঙ্গগুলি এমন ক্রম যা ক্রমগুলি ভেরিয়েবলগুলিকে নির্ধারণ করে, ডানে বর্ধমান হয়, যা আমরা "স্থানীয়" প্রান্ত হিসাবে বিবেচনা করি এবং সর্বাধিক আবদ্ধ ভেরিয়েবল সম্পর্কে আমাদের বলি। প্রসঙ্গে একটি গুরুত্বপূর্ণ সম্পত্তি হ'ল প্রসঙ্গে ইতিমধ্যে ব্যবহার করা হয়নি এমন একটি পরিবর্তনশীল চয়ন করা সর্বদা সম্ভব। আমরা আক্রমণকারীটি বজায় রাখি যে প্রসঙ্গে প্রেরণযোগ্য ভেরিয়েবলগুলি স্বতন্ত্র।

রায়

বিচার :: :: প্রসঙ্গ m টার্মটির মেয়াদ রয়েছে প্রসঙ্গ ⊢ এলিম হল টার্ম

এটাই বিচারের ব্যাকরণ, তবে সেগুলি কীভাবে পড়বেন? শুরু করার জন্য, ⊢ হ'ল ট্রেডিশনাল "টার্নস্টাইল" প্রতীক, যা অনুমান থেকে সিদ্ধান্তকে পৃথক করে: আপনি "বলছেন" হিসাবে এটি অনানুষ্ঠানিকভাবে পড়তে পারেন।

জি ⊢ টি টি আছে

এর অর্থ হল প্রদত্ত প্রসঙ্গে জি, টাইপ টি স্বীকার করেছেন টার্ম টি;

জি ⊢ ই এস

মানে প্রদত্ত প্রসঙ্গে জি, এলিমিনেশন ই দেওয়া হয় এস টাইপ এস elim

বিচারগুলির আকর্ষণীয় কাঠামো রয়েছে: শূন্য বা আরও ইনপুট , এক বা একাধিক বিষয় , শূন্য বা আরও আউটপুট

INPUTS                   SUBJECT        OUTPUTS
Context |- Term   has    Term
Context |-               Elim      is   Term

এটি হ'ল, আমাদের অবশ্যই পদগুলির প্রকারগুলি আগেই প্রস্তাব করতে হবে এবং কেবল সেগুলি পরীক্ষা করতে হবে, তবে আমরা নির্মূলের ধরণগুলি সংশ্লেষ করি ।

টাইপিং বিধি

আমি এগুলিকে একটি অস্পষ্ট প্রলোগ শৈলীতে উপস্থাপন করছি, জে লিখেছেন:: পি 1; ...; পিএন নির্দেশ দেয় যে রায় জে ধরেছে যদি পিএন এর মাধ্যমে প্রাঙ্গণ P1 ধরে থাকে। একটি ভিত্তি হবে অন্য রায়, বা হ্রাস সম্পর্কে দাবি a

শর্তাবলী

জি ⊢ টিতে টি আছে:: টি ↝ আর; জি ⊢ আর টি আছে

জি ⊢ * এর * রয়েছে

জি ⊢ * এর (x: S) → টি -: জি ⊢ * এর এস রয়েছে; জি, জেড: এস! - * টিতে রয়েছে [জেড / এক্স]

G ⊢ (x: S) → T এর λy↦t রয়েছে:: G, z: S ⊢ T [z / x] টি আছে [z / y]

জি ⊢ টি হ'ল (ই) -: জি ⊢ ই টি T

Eliminations

জি ⊢ ই হ'ল আর -: জি ⊢ ই হ'ল এস; এস ↝ আর

জি, এক্স: এস, জি '⊢ x হ'ল এস

G ⊢ fs হ'ল T [s: S / x] -: G ⊢ f is (x: S) → T; জি ⊢ এস এর এস

এবং এটাই!

দুটি নিয়মই নয় সিনট্যাক্স-নির্দেশিত: নিয়ম যেখানে বলা এবং নিয়ম যা বলে "আপনি একটি টাইপ কমে যায় পরে আপনি এটি একটি বর্জন থেকে সংশ্লেষিত থাকেন" "আগে আপনি একটি শব্দ পরীক্ষা করার জন্য এটি ব্যবহার আপনি একটি টাইপ কমে যায়"। একটি কার্যকর কৌশল হ'ল প্রকারকে হ্রাস করা যতক্ষণ না আপনি শীর্ষস্থানীয় নির্মাতাকে প্রকাশ করেন exposed

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

এই পদ্ধতিতে তবে, এই অর্থে প্রকার সংরক্ষণের সম্পত্তি রয়েছে।

যদি জি ⊢ টিতে টি এবং জি ↝ * ডি এবং টি ↝ * আর এবং টি ↝ আর থাকে, তবে ডি ⊢ আর আছে।

যদি G⊢E S এবং G ↝ * D এবং e ↝ f হয়, তবে সেখানে R এর উপস্থিতি রয়েছে যে S ↝ * R এবং D ⊢ f আর।

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

অবশ্যই, আমি এখানে কেবল কার্যকরী কোর উপস্থাপন করেছি, তবে এক্সটেনশানগুলি বেশ মডুলার হতে পারে। এখানে জোড়া আছে।

মেয়াদ :: = ... | (x: S) * টি | গুলি, টি

এলিম :: = ... | e.head | e.tail

(গুলি, টি: (এক্স: এস) * টি)। হেড ↝ এস: এস

(গুলি, টি: (x: এস) * টি)। টেল ↝ টি: টি [এস: এস / এক্স]

জি ⊢ * এর (x: S) * টি -: জি ⊢ * এর এস রয়েছে; জি, জেড: এস ⊢ * এর টি আছে [জেড / এক্স]

জি ⊢ (এক্স: এস) * টিতে রয়েছে এস, টি - জি ⊢ এস রয়েছে; জি ⊢ টি [এস: এস / এক্স] টি রয়েছে

জি ⊢ ই হেড হ'ল এস -: জি ⊢ ই হ'ল (x: S) * টি

জি ⊢ ই টেইলটি টি [ই.হেড / এক্স] -: জি ⊢ ই হ'ল (এক্স: এস) * টি


1
G, x:S, G' ⊢ x is S -: G' ⊬ x?
user3237465

1
@ ব্যবহারকারী3237465 না। ধন্যবাদ! সংশোধন করা হয়েছে। (আমি যখন এইচটিএমএল টার্নস্টাইলের সাথে এসকি আর্ট টার্নস্টাইলগুলি প্রতিস্থাপন করছিলাম (এভাবে তাদের আমার ফোনে অদৃশ্য করে

1
ওহ, আমি ভেবেছিলাম আপনি কেবল টাইপগুলি দেখিয়েছেন। নিয়মটি বলে যে প্রসঙ্গে প্রতিটি চলকটির জন্য, আমরা প্রসঙ্গটি নির্ধারিত টাইপটিকে সংশ্লেষ করি। প্রসঙ্গগুলি প্রবর্তন করার সময়, আমি বলেছিলাম "আমরা আক্রমণকারীটিকে বজায় রাখি যে প্রসঙ্গে প্রেরণযোগ্য ভেরিয়েবলগুলি পৃথক।" তাই ছায়া দেওয়া নিষিদ্ধ করা হয়। আপনি দেখতে পাবেন যে যতবার নিয়ম প্রসঙ্গে প্রসারিত হয়, তারা সর্বদা একটি নতুন "জেড" বেছে নেয় যা আমরা যে বাইন্ডারের অধীনে চলেছি তা তাত্ক্ষণিক করে তোলে। ছায়া গো অ্যানথেমা। আপনার যদি প্রসঙ্গ x: *, x: x থাকে তবে আরও বেশি স্থানীয় x এর ধরণটি আর ঠিক থাকে না কারণ এটি এক্সের আওতার বাইরে।

1
আমি কেবল আপনাকে এবং অন্যান্য উত্তরদাতাদের জানতে চেয়েছিলাম যে আমি কাজ থেকে প্রতিটি বিরতিতে এই থ্রেডে ফিরে আসছি। আমি সত্যিই এটি শিখতে চাই, এবং প্রথম আইএমের জন্য আমি পড়ে গেলাম যেমন আমি আসলে এটি বেশিরভাগই পাই। পরবর্তী পদক্ষেপটি কার্যকর করা হবে কয়েকটি প্রোগ্রাম এবং লেখার জন্য। আমি এমন এক যুগে বেঁচে থাকতে পেরে আনন্দিত যেখানে আমার মতো কারও কাছে এমন দুর্দান্ত বিষয়গুলির তথ্য বিশ্বজুড়ে পাওয়া যায়, এবং এই জ্ঞান ছড়িয়ে দেওয়ার জন্য তাদের জীবনের কিছুটা সময় উত্সর্গকারী আপনার মতো প্রতিভাদের জন্য এটিই আপনাকে ধন্যবাদ thanks বিনামূল্যে, ইন্টারনেটে। খারাপভাবে আমার প্রশ্নের বাক্য বানানোর জন্য আবার দুঃখিত, আপনাকে ধন্যবাদ!
মাইয়াভিক্টর

1
@ কোডি হ্যাঁ, কোনও প্রসার নেই। এটি কেন প্রয়োজনীয় নয় তা দেখার জন্য, নোট করুন যে দুটি গণনার বিধি আপনাকে শর্তাদি যাচাই করার আগে কৌশলগুলি সম্পূর্ণরূপে সাধারণকরণের অনুমতি দেয় এবং নির্মূলকরণ থেকে সংশ্লেষের সাথে সাথেই ধরণেরগুলি স্বাভাবিক করে তোলে। সুতরাং নিয়মে যেখানে প্রকারগুলি অবশ্যই মিলবে, সেগুলি ইতিমধ্যে স্বাভাবিক করা হয়েছে, সুতরাং "মূল" পরীক্ষা করা এবং সংশ্লেষযুক্ত ধরণের রূপান্তরযোগ্য হলে নাকের সমান। এদিকে, সেই স্থানে সাম্যতা পরীক্ষাগুলি সীমাবদ্ধ করা কেবল এই সত্যের কারণে ঠিক: টি টি যদি একটি প্রচলিত ধরণের রূপান্তরিত হয় তবে এটি ক্যানোনিকাল টাইপকে হ্রাস করে।
শূকরকর্মী

8

কারি-হাওয়ার্ডের চিঠিপত্রটি বলে যে যুক্তির ক্ষেত্রে টাইপ সিস্টেম এবং প্রুফ সিস্টেমগুলির মধ্যে একটি নিয়মতান্ত্রিক চিঠিপত্র রয়েছে । এটির জন্য একটি প্রোগ্রামার কেন্দ্রিক দৃষ্টিভঙ্গি নেওয়া, আপনি এটি এইভাবে পুনরায় সংযুক্ত করতে পারেন:

  • লজিকাল প্রুফ সিস্টেমগুলি প্রোগ্রামিং ভাষা are
  • এই ভাষাগুলি স্থিরভাবে টাইপ করা হয়।
  • এই জাতীয় ভাষায় টাইপ সিস্টেমের দায়িত্ব হ'ল এমন প্রোগ্রামগুলিকে নিষিদ্ধ করা যা আনউন্ডউন্ড প্রুফ তৈরি করে।

এই কোণ থেকে দেখা:

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

প্রাকৃতিক ছাড়ের উইকিপিডিয়া এন্ট্রি থেকে একটি চিত্র ব্যবহার করে প্রথম অর্ডার যুক্তির জন্য প্রাকৃতিক ছাড়ের নিয়ম এখানে রয়েছে । এগুলি সাধারণত ন্যূনতম নির্ভরশীল টাইপড ল্যাম্বদা ক্যালকুলাসের নিয়ম the

প্রথম অর্ডার প্রাকৃতিক ছাড়

মনে রাখবেন যে বিধিগুলির মধ্যে ল্যাম্বডা শর্তাদি রয়েছে। এগুলিকে এমন প্রোগ্রাম হিসাবে পড়া যেতে পারে যা তাদের ধরণের দ্বারা প্রদত্ত বাক্যগুলির প্রমাণ তৈরি করে (বা আরও সংক্ষেপে, আমরা কেবল বলি যে প্রোগ্রামগুলি প্রমাণ হিসাবে প্রমাণিত হয় )। আপনার দেওয়া অনুরূপ হ্রাস বিধিগুলি এই ল্যাম্বদা শর্তাদিতে প্রয়োগ করা যেতে পারে।


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

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

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

  1. একটি রেকর্ড টাইপ হিসাবে প্রোগ্রামটিতে রেকর্ডগুলির কাঠামো হার্ডকোড।
    • সুবিধা: কোডটি সহজ এবং সংকলকটি আমার কোডগুলিতে ত্রুটিগুলি ধরতে পারে
    • অসুবিধা: প্রোগ্রামটি এমন ফাইলগুলি পড়ার জন্য হার্ডকোডযুক্ত যা রেকর্ডের ধরণের সাথে একমত হয়।
  2. রানটাইমের সময় ডেটার স্কিমা পড়ুন, এটি ডেটা স্ট্রাকচার হিসাবে সাধারণভাবে উপস্থাপন করুন এবং রেকর্ডটি সাধারণভাবে প্রক্রিয়া করার জন্য এটি ব্যবহার করুন
    • সুবিধাগুলি: আমার প্রোগ্রামটি কেবল একটি ফাইল ধরণের হার্ডকোডযুক্ত নয়
    • অসুবিধাগুলি: সংকলকটি তত ত্রুটি ধরতে পারে না।

আপনি অভ্র জাভা টিউটোরিয়াল পৃষ্ঠাতে দেখতে পাচ্ছেন , তারা আপনাকে উভয় পদ্ধতির অনুসারে লাইব্রেরিটি কীভাবে ব্যবহার করবেন তা দেখায়।

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


1
ফ্যাশনের রানটাইমের সময় বিল্ডিংয়ের ধরণগুলি আপনি উল্লেখ করেছেন এমন সত্যিই দুর্দান্ত কিছু। বরং মিষ্টি! অন্তর্দৃষ্টিপূর্ণ উত্তরের জন্য ধন্যবাদ।
মাইয়াভিক্টর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.