کوایل (به انگلیسی: Quil) یک معماری مجموعه دستورهایکوانتومی است که در ابتدا یک مدل حافظه کوانتومی/کلاسیک مشترک را معرفی نمود. کوایل را رابرت اسمیت (Robert Smith)، مایکل کورتیس (Michael Curtis) و ویلیام زنگ (William Zeng) در مقاله «معماری مجموعه دستورهای کوانتومی عملی» (A Practical Quantum Instruction Set Architecture)[۱] معرفی کردند. بخش بسیار زیادی از الگوریتمهای کوانتومی (از جمله تلهپورت کوانتومی، تصحیح خطای کوانتومی، شبیهسازی،[۲] و الگوریتمهای بهینهسازی) نیاز به معماری حافظه مشترک دارند. کوایل برای استفاده در پردازندههای کوانتومی ابررسانا توسعه یافتهاست که این پردازندهها توسط Rigetti Computing از طریق API های برنامهنویسی کوانتومی Forest توسعه داده شدهاند.[۳][۴]pyQuil یک کتابخانه پایتون است که برای توسعه برنامههای کوایل با ساختارهای سطوح بالاتر معرفی شدهاست. البته بک اند کوایل توسط محیطهای برنامهنویسی دیگر که کوانتومی هستند نیز پشتیبانی و ساپورت میشود.[۵][۶]
در مقاله ای که ارائه شده توسط اسمیت، کورتیس و زنگ، کوایل مجموعه دستورهای یک ماشین انتزاعی کوانتومی (ْQuantum Abstract Machine)، شبیه به ماشین تورینگ را مشخص و بیان میکند، اما با وجود انتزاعی بودن، هنوز هم برای انجام کارهای کاربردی قابل استفاده تر است.[۱] وضعیت QAM را میتوان به صورت ۶ تاپلی نشان داد به طوری که:
حالت (کوانتومی)، تعداد ثابت اما دلخواه کیوبیت است. ( با استفاده از نمایه سازی 0-based ایندکس شدهاست).
یا حافظه کلاسیک، یک عدد است که در آن، بیتهای کلاسیک با استفاده از نمایه سازی مبتنی بر ۰ نمایه شدهاند.
یک لیست ثابت اما دلخواه از دروازه های (گیتهای) پارامتری است. (دروازههایی که به تعدادی پارامتر پیچیده مانند دروازه تغییر فاز بستگی دارند که برای تعریف کامل به پارامتر زاویه نیاز دارد)
دنباله ای است از دستورهای کوایل که باید اجرا شوند و برنامه را نمایش میدهد. طول و مقدار با نشان داده میشود.
یک عدد صحیح شمارنده برنامه است که به دستور بعدی که باید اجرا شود اشاره میکند. همیشه از ۰ شروع میشود (با اشاره به دستورالعمل صفرم،) و در پایان میرسد. = نشان دهنده اتمام برنامه است. (توجه داشته باشید که آخرین دستورالعمل دارای ایندکس است) شمارنده برنامه بعد از هر دستور افزایش مییابد، به جز دستورالعملهای جریان کنترل ویژه (پرشهای مشروط و بدون قید و شرط، و HALT ویژه که با تنظیم مساوی برنامه را متوقف میکند.
کوایل برای تعریف دروازههای پارامتری شده احتمالی به شکل ماتریسی (کوایل راهی برای تأیید واحد بودن ماتریسها، که شرط لازم برای امکان ساخت گیت تعریف شده است ارائه نمی دهد) و کاربرد آنها در کیوبیتها پشتیبانی دارد. این زبان همچنین از ویژگی های زیر پستیبانی میکند:
تعریف های شبیه به ماکرو از مدارهای کوانتومی احتمالاً پارامتری شده و گسترده شده آنها
اندازهگیری کیوبیت و ثبت نتیجه خروجی در حافظه کلاسیک
همگام سازی با رایانههای کلاسیک با ساختار WAIT که اجرای برنامه کوایل را تا زمانی که یک برنامه کلاسیک پایان یابد، متوقف میکند
Rigetti Computing یک ماشین مجازی کوانتومی را در بستر Common Lisp توسعه دادهاست که ماشین کوانتومی انتزاعی یاد شده را در یک کامپیوتر کلاسیک شبیهسازی میکند و قادر به تجزیه و اجرای برنامههای کوایل که از راه دور توسط HTTP اجرا میشوند میباشد.[۷]
↑Computing, Rigetti (28 May 2019). "pyQuil Documentation"(PDF). pyQuil Documentaion. Archived from the original(PDF) on 2 February 2019. Retrieved 6 June 2019.