مسیرها
/
Lean
Lean
/
تمرین‌ها
/
معکوس‌سازی فهرست
معکوس‌سازی فهرست

معکوس‌سازی فهرست

آسان

دستورالعمل‌ها

وظیفه‌ی شما این است که برابری میان یک تابع سفارشی برای معکوس‌کردن فهرست و List.reverse توکار را اثبات کنید.

با توجه به ماهیت این تمرین، به‌جای تکیه بر تست‌های سنتی زمان اجرا، اثبات با یک قضیه‌ی check بررسی می‌شود. اگر این قضیه از نظر نوع درست باشد، می‌توانید در نظر بگیرید که تست قبول شده است.

اگر به‌صورت محلی یا در زمین بازی آنلاین Lean کار کنید، از طریق Lean InfoView بازخورد فوری می‌گیرید که آیا قضیه‌ای موفق می‌شود یا شکست می‌خورد و چرا شکست می‌خورد. این ابزاری بسیار ارزشمند است که می‌تواند همه‌ی مقادیر محلی به‌کاررفته در اثبات شما و همچنین هدف فعلی‌تان را نشان دهد.

Caution

تاکتیک sorry باعث می‌شود هر اثباتی درست به نظر برسد. به همین دلیل، ممکن است به نظر برسد که قضیه‌ی check پیش از نوشته شدن هر اثباتی، خودبه‌خود از نظر نوع درست است. وقتی sorry را از اثبات‌تان حذف کنید، Lean InfoView بازخورد درست را نشان می‌دهد.

اثبات قضیه در Lean

اثبات قضیه بخش جدایی‌ناپذیری از Lean است. این کار به برنامه‌نویسان امکان می‌دهد ویژگی‌هایی درباره‌ی برنامه‌هایشان را اثبات کنند، درباره‌ی رفتار آن‌ها استدلال کنند و محدودیت‌ها و مشخصات را در سطح نوع رمزگذاری کنند.

این فصل مقدمه‌ی خوبی برای اثبات قضیه در Lean ارائه می‌دهد. برای مطالعه‌ی عمیق‌تر، این کتاب به عنوان یک منبع رسمی در وب‌سایت Lean فهرست شده است.

Lean تاکتیک‌های بسیاری ارائه می‌دهد که می‌توانند اثبات‌ها یا بخش‌هایی از آن‌ها را خودکار کنند. شاید بخواهید نگاهی به مرجع زبان بیندازید.

Advanced

می‌توانیم از «خصیصه»ی کامپایلر csimp روی قضیه‌ای استفاده کنیم که برابری میان دو تعریف را اثبات می‌کند. این خصیصه به کامپایلر می‌گوید که از تعریف دوم به جای تعریف اول استفاده کند:

@[csimp]
theorem custom_reverse_eq_spec_reverse : @Extra.custom_reverse = @List.reverse := by
    ... -- proof here

-- now any occurrence of `Extra.custom_reverse` may now compile to `List.reverse`.

این کار به‌ویژه در موقعیت‌هایی مفید است که یک پیاده‌سازی کارآمدتر است اما وضوح کمتری دارد. می‌توانیم یک مشخصات ساده بنویسیم و کاری کنیم که کد کامپایل‌شده به جای آن از پیاده‌سازی کارآمدتر استفاده کند. بسیاری از توابع List و Array از این الگو استفاده می‌کنند.

ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Lean Exercism

آماده‌اید معکوس‌سازی فهرست را شروع کنید؟

در Exercism ثبت‌نام کنید تا Lean را همراه با 100 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.