انجمن انفورماتیک ایران انجمن انفورماتیک ایران انجمن انفورماتیک ایران
گزارش کامپیوتر شماره 234, ویژه مرداد و شهریور ماه 96 منتشر شد. شنبه  ٢٧/٠٨/١٣٩٦ ساعت ١٥:٢٠
 

محاسبات كوانتومی: از نظریه تا زبان های برنامه سازی
مصطفی برمشوری
کارشناس ارشد علوم کامپیوتر، دانشگاه تهران
پست الکترونیکی: mostafa.barmshory@p-simorgh.com
 محمد هادی منصوری
دانشجوی کارشناسی ارشد علوم کامپیوتر، دانشگاه تهران
پست الکترونیکی: h.mansouri@p-simorgh.com


 

چكیده
امروزه رایانه ها بر اساس فناوری های متفاوتی ایجاد شده و به بازار عرضه می شوند. پردازشگرهای این رایانه ها بر اساس هر فناوری که باشد از نظر محاسباتی با یکدیگر تفاوت چندانی ندارند و در عمل همگی ماشین تورینگ با نوار متناهی را به نحوی پیاده‌سازی می کنند. واضح است که مبانی مورد استفاده در زبان های برنامه‌سازی برای این ماشین ها با یکدیگر تفاوت چندانی ندارد و تفاوت‌های موجود تنها در مجموعه دستورالعمل هایی است که به کار می برند. اما محاسبات و مکانیک کوانتومی گونه ای جدید از پردازشگرها را معرفی کرده است که نه تنها در فناوری بلکه در مبانی نیز با پردازشگرهای کلاسیک متفاوتند. بدیهی است که این پردازشگر جدید نیاز به زبان‌های برنامه‌سازی جدیدی دارد. در این مقاله زبان های برنامه‌سازی کوانتومی و معماری مورد حمایت آن‌ها بررسی شده و یک دسته‌بندی مناسب برای این زبان ها ارائه شده است.

مقدمه
رایانه های امروزی همگی بر اساس ماشین محاسباتی تورینگ طراحی و با استفاده از ترانزیستورها و قطعات الکترونیکی دیگر پیاده سازی شده اند. در فناوری‌های اخیر، سعی در کاهش اندازهترانزیستورهای استفاده شده در پردازشگرهای جدید به عمل آمده‌، اما این کاهش اندازه تا کجا می تواند ادامه یابد؟ اگر ترانزیستورها خیلی کوچک شوند، آنگاه تأثیرات عجیب دنیای کوانتومی، کارآیی آن‌ها را تحت تأثیر قرار خواهد داد. حتی اگر الگوریتم های موفق کوانتومی هم موجود نباشد، فناوری مورد استفاده محدود است و به ناچار باید به سوی مکانیک کوانتومی، به عنوان بستری برای پیاده سازی پردازشگرها رفت. تأثیر مکانیک کوانتومی بر روی محاسبات و اطلاعات بیش از آن چیزی است که بتوان تصور کرد. کاربرد مکانیک کوانتومی در محاسبات و اطلاعات منجر به پیدایش دو شاخه جدید به نام محاسبات و اطلاعات کوانتومی شده است.
اطلاعات کوانتومی شاخه ای از علم است که در آن به بررسی روش های انتقال اطلاعات، با استفاده از اصول مکانیک کوانتومی پرداخته می شود. مهمترین اصل مکانیک کوانتومی که باعث ایجاد توانایی های جدید در اطلاعات کوانتومی شده است، درهم تافتگی است. درهم تافتگی حالتی است که در آن نمی توان حالات ذرات یک سیستم را مستقل از هم تصور کرد. روش هایی مثل كدگذاری فوق چگال و دورفرستی كوانتومی بر همین اساس شکل گرفته اند. ابرحالت ها نیز در مکانیک کوانتومی امکانات جدیدی را در توزیع کلید کوانتومی به وجود آورده اند که تاکنون راهی برای درهم شکستن آن یافت نشده است [1].
نظریهمحاسبات کوانتومی نیز شاخه ای از علم است که در آن به بررسی الگوریتم های کوانتومی و سخت افزارهای کوانتومی مورد نیاز برای پیاده سازی عملی آن ها پرداخته می شود. پیچیدگی های محاسباتی بر اساس مدل های متفاوتی مطرح می شوند، اما مهمترین اصل مورد استفاده در این الگوریتم ها دست یافتن به کارآیی بهتر نسبت به معادل های کلاسیک است. نشان داده شده است که الگوریتم ها و سیستم هایی که از دو اصل مکانیک کوانتومی درهم تافتگی و ابرحالت ها استفاده نکنند الگوریتم هایی معمولی به حساب می آیند [2]. بنابراین می توان حدس زد که محاسبات کوانتومی تنها بر اساس استفاده از همین دو اصل، نسبت به محاسبات کلاسیک کارآمدتر است. الگوریتم های تجزیه به عوامل اول [3]، تعیین توابع متوازن و ثابت [4]، جستجوی گروور [5] و تبدیل فوریه [3] تنها بخشی از الگوریتم های موفقی هستند که بسیار کارآمدتر از روش های کلاسیک مطرح شده می‌باشند.
چارلز بنت فیزیکدان شرکت آی‌بی‌ام در سال 1973 نشان داد که می توان محاسبات را به صورت برگشت‌پذیر انجام داد [6]. این دستاورد را نمی توان سرآغاز پردازش های کوانتومی دانست اما از آن جهت که تحول سیستم ها در مکانیک کوانتومی به صورت تبدیل های برگشت پذیر است در حالی که پردازش های کلاسیک بر اساس تبدیلات غیربرگشت پذیرند، می‌توان این کار را به عنوان پیش نیازی برای پردازش کوانتومی دانست.
آغاز رسمی محاسبات و اطلاعات کوانتومی با کار پل بنیوف در سال 1980 بود [7]. یکی از اصول به کار رفته در مکانیک کوانتومی تحول سیستم ها بر اساس تبدیل‌های یکانی است. بنیوف در کار خود نشان داد که تبدیلات یکانی معادل با همان دروازه های منطقی مورد استفاده در محاسبات است و بنابراین می توان محاسبات را با استفاده از این تبدیل ها انجام داد.
در سال 1985، چند سال بعد از مقاله بنیوف، دیوید دویچ یک قدم بسیار مهم در زمینه محاسبات کوانتومی برداشت [8]. وی در مقاله خود نشان داد که چگونه می‌توان درهم تافتگی کوانتومی را برای رسیدن به محاسبات سریعتر مورد استفاده قرار داد. دویچ بر همین اساس روش معروف خود را در تعیین توابع ثابت و متوازن معرفی کرد و نشان داد که محاسبات کوانتومی بسیار کارآمدتر از محاسبات کلاسیک است. در روش دویچ، تعیین توابع ثابت و متوازن تنها با یک بار مقداردهی تابع انجام می شود، در حالی که در محاسبات کلاسیک راهی جز مقداردهی به ازای تمام حالت های ورودی ممکن کشف نشده است. با کار دویچ بود که برتری محاسبات کوانتومی نسبت به محاسبات کلاسیک اثبات شد. پس از آن، دویچ به همراه جوزا این روش را توسعه دادند و توانستند با همین سرعت این خصوصیت را برای توابع با برد بیشتر هم به کار ببرند [4].
در سال 1982 ریچارد فاینمن ایدهرایانهکوانتومی را مطرح کرد [9]. رایانه ای که از اثرات مکانیک کوانتومی بهره برداری کند. تا مدتی این ایده فقط از نظر تئوری جالب بود، تا این که پیتر شور در سال 1994 الگوریتمی کوانتومی، برای تجزیه عددها به عوامل اول اختراع کرد [3]. روش شور قادر است در زمانی از مرتبه چند جمله ای، یک عدد را به عوامل اول تجزیه کند. در رایانه های کلاسیک اعتقاد بر این است که تجزیه به عوامل اول کاری سخت است و تجزیهاعداد بزرگ روی یک رایانه کلاسیک - حتی یک ابر رایانه - می تواند چندین سال یا حتی چندین قرن طول بکشد، در حالی که روی یک رایانهکوانتومی، می تواند در چند دقیقه انجام شود. این موضوع زمانی اهمیت بیشتری می یابد که بدانیم بسیاری از الگوریتم های رمزنگاری امروزی از جمله RSA ، كه از پرکاربردترین الگوریتم های رمز کلاسیک است، بر اساس سختی محاسبهعوامل اول کار می کند. در صورت ساخت رایانهکوانتومی، این گونه رمزنگاری ها در مدت زمانی کوتاه شکسته خواهند شد. چند سال بعد از شور، گزارش هایی دال بر پیاده سازی الگوریتم شور توسط گروه های متفاوت اعلام شد. برای مثال می توان به کار شرکت آی‌بی‌ام اشاره کرد. آی‌بی‌ام با استفاده از یک محاسبه گر کوانتومیNMR ، توانست عددهای چهار بیتی را به عوامل اول تجزیه کند. پژوهشگران شرکت آی‌بی‌ام توانستند عدد ۱۵ را به عوامل اول آن یعنی ۳ و ۵ تجزیه کنند. شاید خنده دار باشد اما در دنیای علم این اتفاق تحولی بسیار بزرگ است [10].
کمی بعد از شور یکی دیگر از الگوریتم های موفق کوانتومی طراحی شد. گروور الگوریتم جستجویی را معرفی کرد که می توانست از میان داده های نامرتب در زمانی از مرتبه  داده مورد نظر را پیدا کند [5]. در برخی از موارد این سرعت بسیار جالب توجه است اما در برخی دیگر نه. سریع ترین الگوریتم جستجوی کلاسیک روش جستجوی دودویی است [11]، که از میان داده های مرتب با  می تواند داده مورد نظر را بیابد. مشخص است که در این حالت روش کوانتومی ناکارآمد است. اما زمانی که داده ها نامرتب است روش کوانتومی کارایی خوبی دارد. شور بعد ها نشان داد که در پایگاه های داده بزرگ، که امکان پرسش در مورد چند داده ممکن است، می توان تنها با یک پرسش مکان داده مورد نظر را تعیین کرد [12]. این کار در نوع خود بسیار کارآمدتر از روش های کلاسیک است.
با کشف الگوریتم شور توجه بسیاری از پژوهشگران در سراسر دنیا به ایده رایانه های کوانتومی جلب شد و در حال حاضر در بسیاری از مراکز تحقیقاتی و با صرف هزینه های زیاد این موضوع در حال پیگیری است. اما قدرت یک رایانهکوانتومی در چیست؟ در رایانه های کوانتومی بیت به معنای کلاسیک وجود ندارد. در این رایانه ها از کیوبیت استفاده می شود. یک بیت کلاسیک تنها می تواند در یکی از 2 حالت ممکن - صفر یا یک - باشد و به طور کلی n بیت کلاسیک می تواند در یکی از  حالت ممکن باشد، در حالی که یک کیوبیت می تواند صفر، یک، هم صفر-هم یک و نه صفر-نه یک (به عبارتی صفر، یک، هر دو، هیچکدام) باشد. در واقع می توان گفت قدرت محاسباتی رایانه های کوانتومی در موازی سازی کوانتومی فوق العادهآن ها است. شکی نیست که دیگر نمی توان امید چندانی به تغییرات اساسی در محاسبات کلاسیک داشت اما با این حال هنوز هم تعدادی زیادی از مسائل باقی مانده است که برای علوم مختلف بسیار اساسی است. گرچه روش های جدید محاسبات، امیدهای جدیدی را به وجود آورده اند اما هنوز هم توانایی ساخت ماشین های محاسبه گری که بتوانند با این روش های جدید بهینه تر از سیستم های رقمی کنونی محاسبات را انجام دهند در پردهابهام است.
مدل محاسباتی مدار های کوانتومی نمی تواند یک مدل محاسباتی برای یک پردازشگر کوانتومی جهانی باشد. پردازشگر کوانتومی جهانی، پردازشگری کوانتومی است که می تواند هر پردازش کوانتومی را پیاده سازی کند. ایجاد یک الگوی مناسب برای بیان الگوریتم های کوانتومی بسیار ضروری است. روش های پردازش و همچنین الگوریتم ها عموما بر اساس مدل های محاسباتی خاص توسعه پیدا می کنند. بیان الگوریتم ها بر اساس مدل های محاسباتی، توانایی پیاده سازی سخت افزاری را راحت تر می کند. از این‌رو پیش از ایجاد روش هایی برای بیان الگوریتم های کوانتومی لازم است که یک مدل محاسباتی مناسب تعیین شود.
در ادامه پس از بررسی مبانی مکانیک و محاسبات کوانتومی، معماری QRAM تشریح شده و پس از آن زبان های برنامه سازی کوانتومی که بر اساس این معماری شکل گرفته اند، معرفی و دسته بندی خواهند شد.

محاسبات كوانتومی
کارهای ارزنده شانون منجر به پیدایش علم اطلاعات شد در حالی که دوازده سال پیش از آن نیز علم با کارهای ارزنده تورینگ معرفی شده بود. علم رایانش و اطلاعات به عنوان پدیده‌هایی بسیار نو، منجر به پیدایش تحول‌های بزرگی در تمام زمینه‌های علمی و اقتصادی شدند. اما با نگاهی سطحی به این دو دستاورد مهم علمی، یعنی علم رایانش و اطلاعات، می توان به سادگی وابستگی هر دوی آن‌ها را به علم فیزیک نشان داد. دستاوردهای اطلاعات و رایانش به ناچار باید در یک بستر فیزیکی پیاده‌سازی شوند، از همین رو دور از تصور نیست که تغییرهای بنیادی در علم فیزیک منجر به پیدایش تغییر اساسی در علم های رایانش و اطلاعات شود.
در ۱۹۲۴ لوئیز دوبروی دوگانگی موجی- ذره ای را مطرح کرد؛ ذرات می‌توانند خاصیت‌های موجی از خود به نمایش بگذارند و برعکس. با معرفی روش دوبروی و پس از آن در ۱۹۲۵ با توسعه‌ مکانیک ماتریسی توسط ورنر هایزنبرگ، ماکس بورن و پاسکال یوردان و اختراع مکانیک موجی و یک معادله‌ غیر نسبیتی- به عنوان حالت عمومی نظریه ‌دوبروی- توسط اروین شرودینگر، مکانیک کوانتومی متولد شد. شرودینگر بعداً نشان داد این دو روش معادل هستند. پیشرفت در این حوزه همچنان ادامه داشت. هایزنبرگ اصل عدم قطعیت را در 1927 فرمول‌بندی کرد. در ابتدای 1927، پل دیراک اقدام به یکی کردن مکانیک کوانتومی با نسبیت خاص کرد و معادله‌ دیراک برای الکترون، مطرح شد. معادله‌ دیراک توصیفی نسبیتی از تابع موج یک الکترون ارائه می‌دهد که شرودینگر در به دست آوردن آن ناموفق بود. روش دیراک در نمادگذاری مکانیک کوانتومی بسیار موفق بود تا جایی که امروزه در تمام منابع مکانیک کوانتومی از این روش استفاده می‌شود. در همان دوره جان فون نویمن، پایه‌ ریاضی قدرتمندی را برای مکانیک کوانتومی، با عنوان نظریه‌ عملگرهای خطی روی فضاهای هیلبرت فرمول بندی کرد.
انیشتین به همراه دو تن از همکارانش، بوریس پودولسکی و ناتان روزن، در 1935 مقاله‌‌ای معروف- که به مقاله EPR مشهور است - را با عنوان "آیا توصیف مکانیک کوانتومی از واقعیت فیزیکی کامل است؟" ارائه کردند [13]. آن ها در این مقاله به اثبات كامل نبودن نظریه مكانیك كوانتومی پرداخته بودند.
بیشتر فیزیکدانان دلایل مقاله EPR را دلایل قانع کننده‌ای نمی دانستند. تقریباً یک سال بعد نیلز بوهر در مقاله‌ای با همان عنوان مقاله‌ EPR ، به آن پاسخ داد [14] که این پاسخ بیشتر بحثی فلسفی بود. بعدها در سال ۱۹۵۱ دیوید بوهم [15] و [16]، تناقض EPR را به صورتی دیگر بیان کرد.
محتوای مقاله‌ EPR و پاسخ بوهر بیشتر به عنوان بحث بین دیدگاه‌های فلسفی متفاوت بود. اما در سال ۱۹۶۵ جان استوارت بل برای اولین بار بحث‌های کیفی EPR را به صورت کمی بیان کرد و این مساله را فرمول بندی کرد [17] و [18].
بل با توجه به فرضیات EPR (یعنی موضعیت و واقعیت مستقل از مشاهده)، روابطی به دست آورد - معروف به نامساوی بل - که در شرایطی خاص، این روابط با پیش‌بینی های مکانیک کوانتومی اختلاف داشت و در نتیجه با آزمایش می‌توان بین این دو نظریه قضاوت کرد. اصول آزمایش بل اگرچه ساده به نظر می‌رسید، اما در عمل، انجام آزمایش بسیار پیچیده است. با این حال آزمایش‌های بسیاری انجام شده که با نتایج مکانیک کوانتومی سازگارند و با نتایج ناشی از فرضیات EPR ناسازگار. این نشان می‌دهد که حداقل یکی از فرض های در نظر گرفته شده در نامساوی بل، درست نیست.

2-1 مبانی مکانیک کوانتومی
مکانیک کوانتومی بر چهار اصل بنا شده است. اصول مکانیک کوانتومی در واقع ارتباطی بین دنیای فیزیکی و فرمول بندی ریاضی مکانیک کوانتومی است. این اصول بعد از یک فرآیند طولانی آزمون و خطا به وجود آمد. به طور خلاصه این اصول عبارتند از [19]:
اصل فضای حالت؛ به هر سیستم فیزیکی یک فضای برداری مختلط با ضرب داخلی (یعنی همان فضای هیلبرت) مربوط می‌شود که به آن فضای حالت می گویند.
اصل تحول؛ تحول یک سیستم کوانتومی، با یک انتقال یکانی توصیف می شود. از آنجا که هر تبدیل یکانی، یک تبدیل معکوس‌پذیر است تمام تحول های کوانتومی برگشت‌پذیر خواهد بود.
اصل اندازه گیری؛ اندازه گیری‌های کوانتومی با یک گردایه از عملگرهای اندازه گیری توصیف می شوند که روی فضای حالت سیستم عمل می کنند. نتایج به دست آمده از اندازه گیری تصادفی است و بسته به نتیجه به دست آمده از اندازه‌گیری حالت سیستم نیز تغییر خواهد کرد.
اصل فضای حالت سیستم های مركب؛ فضای حالت یک سیستم فیزیکی مرکب، ضرب تنسور فضاهای حالت سیستم های فیزیکی تشکیل‌دهندهآن است.
تفسیرهای زیادی برای مکانیک کوانتومی وجود دارد که تلاش دارند تصویر روشنی از مفاهیم مکانیک کوانتومی را ارائه دهند. یکی از بحث برانگیزترین موضوعات مکانیک کوانتومی، اصل سوم یعنی اصل اندازه گیری است. در مکانیک کوانتومی ویژگی مستقل از مشاهده وجود ندارد، بلکه ویژگی های فیزیکی به عنوان نتایجی از اندازه گیری های انجام شده روی سیستم به دست می آیند. بسیاری از فیزیکدانان با این دید مخالف بودند. مشهورترین آن‌ها انیشتین است. انیشتین همیشه با مبانی نظری مکانیک کوانتومی مشکل داشت. جملات معروف او مثل "خدا تاس بازی نمی کند"، و بحث هایش با بوهر و سایر نظریه پردازان مکانیک کوانتومی، اختلاف نظری او را به خوبی نشان می دهد.
امروزه مکانیک کوانتومی، به عنوان چهار چوب ریاضیاتی پایه ای در بسیاری از زمینه های فیزیک و شیمی به کار می‌رود، از جمله: فیزیک حالت جامد، فیزیک اتمی، فیزیک مولکولی، فیزیک محاسباتی، شیمی محاسباتی، شیمی کوانتومی، شیمی هسته‌ای و فیزیک هسته ای. علاوه بر این ها، فناوری نه چندان دیرپای رایانه نیز از این تحول در دنیای فیزیک بی‌تأثیر نبوده تا جایی که مکانیک کوانتومی به علوم رایانه نیز راه یافته است.

2-2 حافظه کوانتومی
یک بیت کوانتومی یا کیوبیت، معادل با حالت کوانتومی یک سیستم فیزیکی است که از دو حالت پایه تشکیل شده است. در حالت کلاسیک می توان آن را معادل با یک سیستم فیزیکی فرض کرد که از دو حالت متفاوت مانند  تشکیل شده است. در محاسبات کوانتومی نمادگذاری دیراک مورد استفاده قرار می گیرد از این رو حالت های پایه سیستم کوانتومی مورد نظر به صورت  نمایش داده می شود.
هر یک از حالت های پایه معادل با یک حالت کلاسیک درستی و نادرستی است که می تواند با استفاده از خصوصیت های فیزیک کوانتومی مانند اسپین هسته و یا حالت فوتون نمایش داده شود. در اینجا جزئیات فیزیکی یک کیوبیت مد نظر نیست اما بر اساس مبانی کوانتومی یک سیستم کوانتومی نه تنها می تواند در حالت های پایه ای خود باشد بلکه می تواند در یك ترکیب خطی از حالت های پایه نیز قرار داشته باشد. بر این اساس حالت کلی یک کیوبیت به صورت  نمایش داده می شود که در آن داریم:
(1)                                                                                                                                                             
البته می توان حالت هر کیوبیت را در حالت کلی با استفاده از بردار نیز نمایش داد. حالت یک کیوبیت با استفاده از نمایش برداری به صورت زیر خواهد بود:
(2)                                                                                                                                                     
به بیان دیگر حالت یک کیوبیت معادل با بردارهای به طول یک از فضای برداری هیلبرت است. حالت های پایه  یک حالت خاص از تمام پایه های یکا متعامد در فضای هیلبرت یک کیوبیت است که به آن ها پایه های محاسباتی گفته می‌شود. علاوه بر پایه های محاسباتی پایه های پرکاربرد دیگری نیز در محاسبات کوانتومی وجود دارد که برای نمونه می توان به پایه های قطری اشاره کرد که کاربرد فراوانی در اطلاعات کوانتومی و توزیع کلید کوانتومی دارد. در حالت کلی تمام پایه ها را می توان بر اساس یکدیگر بیان کرد.
در یک سیستم چند کیوبیتی، حالت کلی به صورت یک بردار در فضای تانسوری کیوبیت ها در نظر گفته می شود که معادل با همان ضرب کارتزین در فضاهای معمولی است. فرض کنید که  و  فضاهای برداری با پایه های  و  باشند در این صورت فضای تانسوری  یک فضای برداری با پایه های  در نظر گرفته می شود. از این رو می توان گفت که یک سیستم  کیوبیتی معادل با یک فضای برداری با بعد  است که در آن  پایه های فضا را تشکیل می دهد. برای سادگی حالت های  را به صورت  نمایش می دهیم.
هر  کیوبیت را می توان معادل با یک ثبات کوانتومی در نظر گرفت که قادر است حالت یک سیستم کوانتومی با  حالت کوانتومی پایه را نمایش دهد. از این ثبات کوانتومی می توان در محاسبات کوانتومی استفاده کرد. حالت یک ثبات کوانتومی با  کیوبیت به صورت زیر نمایش داده می شود:
(3)                                                                                                                    
که در آن  نمایش دهدهی معادل با حالت پایه ای هر یک از کیوبیت های موجود در ثبات کوانتومی است.

2-3 عملگرهای کوانتومی
تحول یک سیستم ایزوله کوانتومی را می توان با استفاده از یک تبدیل یکانی به صورت کامل نمایش داد. اگر حالت کوانتومی با استفاده از بردارهای ستونی نمایش داده شود، آنگاه یک عملگر یکانی را می توان با استفاده از یک ماتریس  نمایش داد که بر روی میدان اعداد مختلط تعریف می شود. این تبدیل یکانی در رابطه زیر صدق می کند.
(4)                                                                                                                                                                         
که در آن  مزدوج ترانهاده ماتریس  است. از اینرو می توان تحول سیستم را معادل با اعمال عملگر    بر روی حالت کوانتومی تعریف کرد که با استفاده از ضرب ماتریسی به صورت زیر قابل بیان است:
(5)                                                                                                                                                   
یک عملگر کوانتومی را نیز می توان با استفاده از تاثیر آن بر روی پایه های محاسباتی و یا هر پایه دیگر توصیف کرد. برای نمونه عملگر کوانتومی هادامارد به صورت زیر بر اساس تاثیر آن به روی پایه های کوانتومی تعریف می شود:
(6)                                                                                                                                                               
نمایش ماتریسی این عملگر به صورت زیر است:
(7)                                                                                                                                                        
برای سادگی، تحول ها و عملگرهای کوانتومی را با استفاده از یک حرف نمایش می دهیم و در رابطه از نوشتن نمایش ماتریسی آن خودداری می کنیم. برای نمونه عملگر هادامارد و تاثیر آن به روی حالت کوانتومی به صورت زیر نمایش داده می شود:
(8)                                                                                                                                                                     
معادل با فضای تانسوری برای کیوبیت ها، فضای تانسوری عملگرها نیز قابل تعریف است. فضای تانسوری عملگرها، فضای عملگری جدیدی را ایجاد خواهد کرد که روی تعداد کیوبیت بیشتری تاثیر می گذارد. برای نمونه عملگر کوانتومی هادامارد برای دو کیوبیت به صورت زیر تعریف می شود:
(9)                                                                                                                                                             
که تاثیر این عملگر به روی یک سیستم دو کیوبیتی به صورت زیر خواهد بود:
(10)                                                                                                                                                               
البته حالت کیوبیت ها می تواند به صورت یک ترکیب خطی (یا به صورت یک ابر حالت) از پایه های فضای برداری هیلبرت باشد، در این وضعیت، تاثیر عملگرهای یکانی روی یک حالت کلی کوانتومی به صورت زیر تعریف می شود:
(11)                                                                                                                                           
برای نمونه علمگر یکانی هادامارد به صورت زیر روی پایه های قطری عمل می کند.
(12)                                                                                                                                         
یکی از قابلیت های مهم مکانیک و محاسبات کوانتومی، اندازه گیری کوانتومی است که به عنوان یکی از اصول مکانیک کوانتومی مطرح است. اگر یک کیوبیت در حالت کوانتومی  باشد، نتیجه اندازه گیری آن با احتمال  مقدار صفر خواهد بود و حالت کوانتومی بعد از اندازه گیری به حالت  نشانده خواهد شد. به همین ترتیب نیز با احتمال  مقدار یک خواهد بود و حالت کوانتومی سیستم به حالت  نشانده خواهد شد.
هر اندازه گیری بر اساس یک پایه تعریف می شود. برای نمونه در تعریف بالا از اندازه گیری پایه های محاسباتی به عنوان پایه اندازه گیری استفاده شده است. با استفاده از تبدیل های یکانی و اندازه گیری در پایه استاندارد می توان اندازه گیری های دیگر را پیاده سازی کرد. این روش از نظر پیاده سازی سیستم های فیزیکی از اهمیت برخوردار است.

3- QRAM
نخستین گام در ایجاد زبان های برنامه سازی کوانتومی، زبان شبه کدی بود که توسط نیل در سال1996 معرفی شد [20 و 21]. هدف اصلی نیل، ایجاد یک زبان برنامه سازی حقیقی کوانتومی نبود بلکه تلاش داشت زبان شبه کدی را برای بیان دقیق الگوریتم های کوانتومی معرفی کند و امیدوار بود که این زبان شبه کد بتواند الگویی برای زبان های برنامه سازی آینده باشد. هر زبان شبه کدی که بر اساس اصول حقیقی موجود در سیستم ها ایجاد شود، به راحتی قابل پیاده سازی است. از این‌رو نیل، در مقاله اش یک معماری خاص برای سیستم های پردازش کوانتومی در نظر گرفت و بر اساس آن زبان شبه کد کوانتومی خود را معرفی کرد. نیل معماری خود را QRAM نامید. مدل QRAM توسعه یافت تا جایی که امروزه مبنایی برای بسیاری از زبان های برنامه سازی کوانتومی قرار گرفته است.
به صورت مجازی، QRAM همان پردازشگر کلاسیک است با این تفاوت که دسته ای از ثبات های کوانتومی دارد و می تواند روی آن ها عمل های کوانتومی را اجرا کند. منظور از عملگرهای کوانتومی عمل های بارگذاری، اندازه گیری و دسته ای کامل از عمل های تحول کوانتومی است. ساده ترین راه، به صورت مجازی، برای تعریف یک ثبات کوانتومی این است که به روی یک ثبات خاص عملگرهای کوانتومی را تعریف کنیم و همچنین ثبات بتواند حالت های کوانتومی را در خود نگه دارد. داده های کوانتومی موجود در یک ثبات کوانتومی بدون اعمال فرآیند اندازه گیری، قابل دستیابی نیست. در حقیقت ثبات کوانتومی به صورت یک جعبه سیاه است که تا فرآیند اندازه گیری انجام نشود از داده های موجود در آن نمی توان اطلاعی به دست آورد.
قبل از این که به بررسی پیاده سازی یک سیستم پردازشگر کلاسیک که دارای یک یا چند ثبات کوانتومی است بپردازیم اجازه دهید که سیستم های موجود برای پردازش کوانتومی که در آزمایشگاه ها پیاده سازی می شوند را به صورت کوتاه بررسی کنیم. در تمام مدل هایی که تا کنون پیاده سازی شده است فرآیند اجرای الگوریتم های کوانتومی به این قرار است که: ابتدا الگوریتم‌های کوانتومی با استفاده از پردازشگرهای کلاسیک به دسته ای از تابش ها (الکترومغناطیسی، لیزر و ...) تبدیل می شود، سپس بر اساس واسطه های تعیین شده به یک سیستم کوانتومی (مانند مولکول در NMR و یا یون های در دام افتاده) تابیده می شود. بر اثر تابش ها، سیستم کوانتومی نه تنها به حالت اولیه مورد نظر ما بارگذاری می شود بلکه بر اساس الگوریتم تعیین شده به گونه ای تحول می یابد که معادل با اجرای الگوریتم کوانتومی مورد نظر است. در نهایت سیستم های کلاسیک با استفاده از حسگرها و دیگر سیستم های اندازه‌گیری (مانند سیم پیچ های موجود در NMR ) داده های تولید شده توسط سیستم کوانتومی را گردآوری می کنند و بعد از اعمال عمل های پردازشی، نتیجه مورد نظر را به دست می آورند. در عمل ساختار مدل محاسباتی QRAM  نیز بر اساس همین فرآیند شکل گرفته است.
معماری مدل محاسباتی QRAM پردازشگر های کلاسیک و کوانتومی را به صورت مدل فرمانده- فرمانبر با هم آمیخته کرده است. در این معماری پردازشگر های کلاسیک نقش فرمانده را ایفا می کنند و با ارسال درخواست به سخت افزارهای کوانتومی و دریافت نتیجه، از پردازشگر های کوانتومی به صورت یک فرمانبر در پردازش ها استفاده می کنند. با استفاده از زبان های برنامه‌سازی کوانتومی، که به آن ها اشاره کردیم، برنامه هایی ایجاد می شود که شامل دو بخش کوانتومی و کلاسیک هستند. پردازشگر کلاسیک، در فرآیند اجرای برنامه، با رسیدن به دستورات کوانتومی آن ها را برای اجرا به سخت افزارهای کوانتومی ارسال می کند و بعد از دریافت نتیجه به پردازش خود ادامه می دهد. در تصویر شماره 1 معماری به کار رفته در QRAMنشان داده شده است.
با دریافت دستورات کوانتومی، پردازشگر کوانتومی دستورها را اجرا کرده و در انتها عمل اندازه گیری را انجام می دهد و نتایج به دست آمده را برای پردازشگر کلاسیک ارسال می کند. دریافت دستورها و ارسال نتایج می تواند به صورت خط لوله و مدام انجام شود. می‌توان سیستم های پردازشگر کوانتومی را نیز به صورت اشتراکی با چندین پردازشگر کلاسیک به کار برد.
qram-arch.png
تصویر 1: پردازشگرهای کلاسیک به عنوان مدیر کل منابع عمل می کنند. پردازشگرهای کلاسیک با دریافت برنامه های کلاسیک- کوانتومی آن‌ها را تفکیک می کنند. برنامه های کوانتومی به پردازشگر کوانتومی ارسال می شود درحالی که برنامه های کلاسیک بر روی پردازشگر كلاسیک اجرا می شود.
 
در QRAM ، میان ثبات های کوانتومی و کلاسیک تفاوت گذاشته می شود. ثبات های کوانتومی توانایی اجرای عمل های کوانتومی را دارند. می توان یک ثبات کوانتومی را به صورت چندین ثبات کوانتومی کوچک‌تر فرض کرد و با استفاده از آن ها الگوریتم‌های کوانتومی مورد نظر را هم‌زمان، بر روی چندین ثبات کوانتومی فرضی پیاده سازی کرد. از سویی می توان با استفاده از روندهای نرم افزاری با استفاده از یک ثبات کوانتومی امکان برنامه نویسی برای چندین ثبات کوانتومی مستقل را فراهم کرد، معادل با آنچه که در زبان های برنامه سازی کلاسیک روی می دهد [22].
چرا مدل پردازشی QRAM یک مدل پردازشی مناسب است؟ نلسن و چانگ نشان داده اند پردازش هایی که در آن ها از احتمالی بودن کوانتومی استفاده نشود با معادل های کلاسیک تفاوتی ندارند [2] و می توانند به صورت کلاسیکی انجام شوند. استفاده از پردازشگرهای کلاسیک از دو جهت مفید است: کم‌هزینه تر است و طراحی پردازشگر کوانتومی ساده تر می شود. البته بیان یک مدل محاسباتی به صورتی که کنترل با یک پردازش کلاسیک انجام می شود به این معنی نیست که پیاده سازی کامل آن با استفاده از پردازشگرهای کوانتومی ممکن نیست. حتی زمانی که پیاده سازی یک پردازشگر کوانتومی به صورت کامل، از نظر پیچیدگی و هزینه ممکن باشد باز هم می توان در برنامه سازی، آن قسمت هایی را که می تواند به صورت کلاسیک انجام شود به صورت برنامه های کلاسیک بیان کرد. بنابراین تصور یک پردازشگر کوانتومی به صورت QRAM می تواند مفید باشد.

4- زبان های برنامه سازی کوانتومی
تلاش های متفاوتی در ایجاد پردازشگرهای کوانتومی با استفاده از اصول مکانیک کوانتومی تا سال 1985 انجام شد، اما هیچ کدام به یک مدل محاسباتی برای پردازش کوانتومی دست نیافتند. دویچ در سال 1985 مدل جدیدی از ماشین تورینگ را ارائه کرد که حافظه آن می توانست ابرحالت های کوانتومی را در خود نگه دارد و نوک ماشین قادر به اعمال عملگرهای یکانی بر روی خانه های حافظه بود [8]. با این وجود می توان گفت که اولین پیشنهاد برای ایجاد یک زبان برنامه سازی کوانتومی توسط نیل در سال 1996 معرفی شد [20]. نیل یک شبه کد برای بیان الگوریتم های کوانتومی روی یک ماشین کوانتومی با حافظه‌ای با دستیابی تصادفی به نام QRAM ، بیان کرد. مدل محاسباتی QRAM ، که در گفتارهای بعد به آن خواهیم پرداخت، توسط نیل به صورت دقیق بیان نشده بود. با این حال در مدل QRAM ، ماشین دارای ثبات های کوانتومی است و قادر به اجرای عمل بارگذاری، عملگرهای یکانی کوانتومی، و اندازه گیری کوانتومی روی آن ثبات ها است. نیل خود نیز بیان کرده بود که شبه کدش به اندازه کافی قابلیت استفاده به عنوان یک زبان برنامه سازی کوانتومی را ندارد، با این وجود کار وی یک قدم بسیار مهم در ایجاد روشی نوین، برای بیان الگوریتم ها و استفاده از اصول پایه ای مکانیک کوانتومی در پردازش ها بود.
یکی از فعال ترین زبان هایی که پیاپی توسعه یافته است، QCL نام دارد که می توان از آن به عنوان یکی از جدیدترین زبان‌های برنامه سازی کوانتومی یاد کرد. این زبان برنامه سازی کوانتومی توسط اومر معرفی شده است. اومر در پایان نامه دکتریش اصولی را معرفی کرد که پایه ای برای طراحی زبان های برنامه سازی کوانتومی ساختار یافته است [23 و 24]، مانند زبان های برنامه سازی ساخت‌یافته کلاسیک چون C و Pascal . ایجاد زبان برنامه سازی کوانتومی QCL به صورت ساخت یافته امکان تعریف عملگرهای کوانتومی جدید را فراهم می کند. در زبان برنامه سازی کوانتومی QCL داده های پایه ای کلاسیک همانند داده‌های تعریف شده در زبان های برنامه سازی کلاسیک، مثل C ، ایجاد شده است. علاوه بر آن یک نوع داده ای جدید به نام qureg وجود دارد که معادل با یک کیوبیت کوانتومی است. برای ایجاد یک ثبات کوانتومی از همین نوع داده به صورت آرایه استفاده می شود. عملگر های کوانتومی H, T, S و CNOT به صورت از پیش تعریف شده در این زبان برنامه سازی وجود دارد (این عملگرها یک دسته عملگر کامل در پردازش های کوانتومی را تشكیل می دهند).
جاناتان گراتیج و تورستن آلتنكریج زبان برنامه سازی کوانتومی را ارائه دادند که QML نامیده می شود [25]. این زبان یک زبان برنامه سازی رویه‌ای است. در بیان ساختار و درستی این زبان برنامه سازی، از نظریه رسته‌ها استفاده شده است. فرض کنید که بتوان یک زبان برنامه سازی را با استفاده از یک رسته نمایش داد یا به عبارت دیگر یک رسته معادل با یک زبان برنامه‌سازی کوانتومی ارائه کرد. برای اثبات کامل بودن زبان برنامه سازی کوانتومی مورد نظر کافی است نشان دهیم که رسته زبان برنامه‌سازی مورد نظر، هم ریخت با رسته پردازش کوانتومی است. این دقیقا روشی است که در QML استفاده شده است. بر اساس زبان QML یک رسته به نام FQC وجود دارد که می توان نشان داد هم ریخت با رسته پردازش کوانتومی است. جاناتان و تورستن در این کار به این نتیجه رسیده اند که اساس زبان های برنامه سازی کنترل زمان ناهمدوسی است.
هاینک زبان برنامه سازی امری معرفی کرد [26] و آن را LanQ نامید. این زبان برنامه سازی ادغامی میان برنامه سازی کلاسیک و برنامه سازی کوانتومی است. مدل به کار رفته در این زبان برنامه سازی مشابه ساختار پردازش کوانتومی QRAM است. به بیان دیگر پردازش کلاسیک تنها به صورت یک کنترل عمل می کند و داده ها به صورت کوانتومی معرفی می شوند. زبان های برنامه سازی کوانتومی مانند  QCL ، qGCL و غیره، بر مبنای ارتباطات کوانتومی طراحی نشده اند، لذا در بیان پروتکل های چند جانبه کوانتومی مانند BB84 [1] و یا پروتكل معرفی شده در [27] کاربرد ندارند. از سویی مدیریت پردازش ها امری اساسی در پردازش های موازی است که در زبان های نام برده به این موضوع نیز پرداخته نشده است. البته زبان‌های برنامه سازی جبری مانند λ-calculi می توانند به روش های معادل، پردازش های موازی و ارتباط کوانتومی را بیان کنند ولی به یاد داشته باشید که این بیان برای استفاده برنامه‌نویسان مناسب نیست. در زبان برنامه سازی LanQ دستوراتی مانند fork ، که در مدیریت پردازش‌ها مورد استفاده است [28]، پیش بینی شده است. علاوه بر این امکاناتی جهت ذخیره کانال کوانتومی و ارسال و دریافت داده ها ایجاد شده است که روی هم امکان پیاده سازی ارتباطات کوانتومی چندگانه و مدیریت پردازش ها و ارتباطات بین‌پردازشی را در این زبان برنامه سازی کوانتومی فراهم کرده است. هاینک بیان کرده است که امکان ترجمه برنامه‌هایی که به زبان QML بیان می شوند به برنامه هایی که کاملا بر اساس پردازش های کوانتومی باشد وجود دارد، اما به چگونگی آن نپرداخته است.
فنمینگ سونگ و ژیافو خو زبان برنامه سازی کوانتومی را بر اساس زبان برنامه سازی کلاسیک جاوا ارائه داده اند که NDQJavaنامیده می شود [29]. یکی از اصول مهم توسعه نرم افزارهای کلاسیک، گویا بودن برنامه های ایجاد شده است، با این وجود زبان های برنامه سازی کوانتومی مانند QML بسیار پیچیده است، تا جایی که در اولین برخورد نمی توان از ساختار و دستورات آن چیزی فهمید. خوانایی برنامه های ایجاد شده آنقدر مهم است که به سبب آن تاکنون بسیاری از زبان های برنامه سازی منسوخ شده‌اند. زبان برنامه سازی جاوا [30] یک زبان برنامه سازی کلاسیک بسیار پرطرفدار در میان برنامه نویسان است و تنها تفاوت زبان برنامه‌سازی NDQJavaبا این زبان، قابلیت برنامه نویسی بر اساس اصول مکانیک کوانتومی است. پیاده‌سازی زبان برنامه سازی کوانتومی بر اساس زبان برنامه‌سازی جاوا امکان برنامه نویسی پیمانه ای را، علاوه بر امکان برنامه سازی رویه‌ای مانند QCL ، فراهم کرده است. یکی از نکات بسیار جالب توجه در این زبان برنامه سازی ساختار شی ءگرای آن است. فنمینگ علاوه بر زبان برنامه‌سازی NDQJava زبان برنامه سازی کوانتومی NDOFP را ارائه کرده اند که بر اساس زبان برنامه نویسی FP  است.

4-1 دسته بندی زبان های برنامه سازی
زبان های برنامه سازی کوانتومی که در بالا به آن ها اشاره شد تنها بخشی از تمام زبان های برنامه سازی کوانتومی هستند که در دهه اخیر توسعه داده شده اند. بررسی های متفاوتی روی زبان های برنامه سازی کوانتومی انجام شده است [31][22]، که می‌تواند در بررسی درست زبان های برنامه سازی کوانتومی مفید باشد. زبان های برنامه سازی کوانتومی را می توان بر اساس دیدگاه های متفاوتی مورد تحلیل و بررسی قرار داد. مهمترین دیدگاه هایی که در این زمینه وجود دارد به صورت فهرست‌وار عبارتند از:
    • ساختاری
    • معنایی
    • ترجمه
دیدگاه ساختاری، به بررسی ساختار برنامه سازی و بیان الگوریتم های کوانتومی با استفاده از زبان های برنامه سازی کوانتومی می پردازد. برای نمونه بیان شد که زبان برنامه سازی کوانتومی QCL یک زبان ساخت‌یافته است و برنامه ها می توانند به صورت روال های کوانتومی معرفی شوند. دیدگاه معنایی به بررسی درستی و صحت زبان های برنامه سازی کوانتومی می پردازد و روش‌هایی را برای این کار فراهم می کند. برای نمونه استفاده از نظریة رسته‌ها در بررسی درستی زبان برنامه سازی QML می تواند یک نمونه از بررسی معنایی زبان های برنامه سازی کوانتومی باشد. واضح است با پیچیده شدن ساختار زبان های برنامه سازی کوانتومی بررسی معنایی آن ها پیچیده و دشوار می شود. از این رو برخی زبان های برنامه سازی کوانتومی به گونه ای طراحی شده اند که از نظر معنایی بتوان به سادگی آن‌ها را مورد بررسی قرار داد و به همین سبب ساختار های غیرگویا را به وجود آورده اند و در مقابل زبان های برنامه سازی کوانتومی بسیار گویا به وجود آمده است که از نظر معنایی بررسی نشده اند ! . در دیدگاه ترجمه به بررسی روش های ترجمه زبان های برنامه سازی کوانتومی پرداخته می شود و تعیین می شود که دشواری ترجمه زبان های سطح بالای کوانتومی به زبان های سطح پایین و ماشین کوانتومی چیست .
از نظر ساختاری زبان های برنامه سازی کوانتومی به دسته های متفاوتی چون زبان های ابتدایی، زبان های ساخت‌یافته، زبان های شیءگرا (Object Oriented ) و غیره تقسیم می شوند. برای نمونه زبان برنامه سازی QCL یک زبان برنامه سازی ساخت‌یافته و NDQJava یک زبان برنامه سازی شیءگرا است.
ساختارهای معنایی زبان های برنامه سازی به روش های متفاوتی مورد بررسی قرار می گیرد. همان گونه که در مورد زبان برنامه‌سازی  QML بیان شد، ساختار معنایی این زبان با استفاده از یک رسته به نام FQC بیان شده و نشان داده شده که این رسته هم ریخت با رسته پردازش کوانتومی است. به عبارتی در زبان QML با استفاده از نظریه رسته‌ها، ساختار معنایی مورد بررسی قرار گرفته است. زبان هایی که ساختار معنایی آن ها به درستی مورد بررسی قرار گرفته اند عموما دارای ساختار های جبری هستند، که برای استفاده برنامه سازان مناسب نیست. از سویی زبان هایی که ساختار مناسبی دارند از نظر معنایی به درستی بررسی نشده اند !
مهمترین چالشی که در زبان های برنامه سازی کوانتومی با آن روبرو هستیم، ترجمه زبان های برنامه سازی به زبان های سطح پایین و زبان های ماشین است. برای ترجمه زبان های سطح پایین و زبان هایی که ساختارهای ساده دارند فرآیند ترجمه بسیار ساده است. برای نمونه ترجمه زبان اسمبلی به زبان ماشین تنها به دو بار مرور برنامه در فرآیند ترجمه نیاز دارد و جز فضای داده ای مورد نیاز برای خروجی، فضای داده ای دیگری نیاز ندارد. این درحالی است که ترجمه زبان های برنامه سازی سطح بالا به زبان های سطح پایین و زبان ماشین بسیار دشوار است. در فرآیند ترجمه زبان های کلاسیک به زبان های سطح پایین و زبان ماشین، بهینه سازی امری بسیار ضروری است. نیاز به فرآیند بهینه سازی در ترجمه برنامه های کوانتومی بسیار مهم تر و حیاتی‌تر است. در پردازنده های کوانتومی، علاوه بر عامل های محدود کننده ای که در پردازنده های کلاسیک هم موجود است، مانند زمان و حافظه، زمان نا همدوسی نیز یک عامل مهم محدود کننده است. زمانی که در پردازنده های کلاسیک حافظه پردازنده کم باشد با صرف زمان بیشتر می توان به نتیجه درست رسید، اما در مورد یك  پردازنده كوانتومی با توجه به زمان همدوسی نمی‌توان این گونه عمل کرد. اگر در یک برنامه کوانتومی زمان مورد نیاز برای اجرا، قبل از فرآیند اندازه گیری، بیشتر از مدت زمان نا همدوسی باشد نتایج به دست آمده از پردازش اعتبار ندارد.
تاکنون بررسی های مفصلی بر روی ساختار های داده ای پیچیده کوانتومی و ساختارهای پیچیده کنترل کوانتومی در زبان های برنامه سازی انجام نشده است و عموما از ساختارهای ساده داده ای و کنترلی استفاده کرده اند. تحقیق در این زمینه می تواند ابزارهای مناسبی را برای ایجاد برنامه های کوانتومی پیچیده تر و کارآتر، فراهم کند .
زمانی که ساختار زبان های برنامه سازی پیچیده می شود، مانند زبان های برنامه سازی ساخت‌یافته و شیءگرا، بررسی معنایی آن‌ها هم به نوبه خود کاری پیچیده خواهد بود. زبان هایی که به درستی از نظر معنایی مورد بررسی قرار گرفته اند ساختارهای جبری داشته اند، از این رو نمی توانند برای برنامه سازی مناسب باشند. ایجاد ابزارها و روش های مناسب جهت بررسی معنایی زبان های برنامه سازی امری ضروری است که باید دیر یا زود به آن پرداخته شود .
هنوز روش موثری برای ایجاد یک پردازنده موثر کوانتومی شناخته نشده است و حتی توانایی ایجاد یک پردازنده کوانتومی در پرده ابهام است. اما با این وجود فناوری های متفاوتی که در پیاده سازی پردازنده های کوانتومی مورد استفاده قرار گرفته‌اند، هرکدام دسته ای از دستورها را معرفی کرده اند که به راحتی می تواند با کارآیی مناسبی بر روی پردازنده کوانتومی ایجاد شده پیاده سازی شود. از سویی هرکدام دارای قابلیت های متفاوت و زمان های نا همدوسی متفاوتی نسبت به بقیه هستند، گرچه در حالت کلی می توان نشان داد که عموما از یک سری دستور های پایه که شباهت زیادی با هم دارند استفاده می کنند. ایجاد مترجم هایی که بتواند بر اساس ساختار فیزیکی خاص، برنامه های سطح بالا را ترجمه کند بسیار مفید است. یکی از نیازهای دیگر که به دنبال ایجاد مترجم بر اساس فناوری خاص به وجود می آید، ایجاد مترجم هایی است که بتواند یک برنامه را که به دستورات یک سیستم خاص ترجمه شده، به برنامه ای برای یک سیستم دیگر ترجمه کند. البته بررسی درستی ترجمه های انجام شده و بهینه بودن آن‌ها نیز پرسش هایی اساسی است که در آینده این فرآیندها مطرح خواهد شد.

منابع

[1]           C.H. Bennett and G. Brassard, “Quantum Cryptography: Public Key Distribution and Coin Tossing,” Computers, Systems, and Signal Processing, pp. 175-179, 1984. [2]           M. A. Nielsen and Isaac L. Chuang, “Programmable Quantum Gate Arrays,” Phys. Rev. Lett., vol. 79, pp. 321-324, 1997.
[3]           P. W. Shor, “Algorithms for quantum computation: discrete logarithms and factoring,” 35th Annual Symposium on Foundations of Computer Science, pp. 124-134, Santa Fe, NM , USA, 1994.
[4]           David Deutsch and Richard Jozsa, “Rapid Solution of Problems by Quantum Computation,” Proc. R. Soc. Lond. A, vol. 439, no. 190, pp. 553-558, 1992.
[5]           Lov K. Grover, “Quantum Mechanics Helps in Searching for a Needle in a Haystack,” Phys. Rev. Lett., vol. 79, pp. 325-328, 1997.
[6]           C. H. Bennett, “Logical reversibility of computation,” IBM Journal of Research and Development, vol. 17, pp. 525-532, 1973.
[7]           P. Benioff, “The computer as a physical system: A microscopic quantum mechanical Hamiltonian model of computers as represented by Turing machines,” Journal of Statistical Physics, vol. 22, pp. 563-591, 1980.
[8]           D. Deutsch, “Quantum theory, the Church-Turing principle and the universal quantum computer,” Proc. R. Soc. Land. A, vol. 400, pp. 97-117, 1985.
[9]           Feynman, “Simulating physics with computers,” International journal of theoretical physics, vol. 21, pp. 467-488, 1982.
[10]         Lieven M. K. Vandersypen, Matthias Steffen, Gregory Breyta, Costantino S. Yannoni, Mark H. Sherwood & Isaac L. Chuang, “Experimental realization of Shor's quantum factoring algorithm using nuclear magnetic resonance,” Nature, vol. 414, pp. 883-887, 2001.
[11]         D. E. Knuth, “Optimum binary search trees,” Acta Informatica, vol. 1, pp. 14-25, 1971.
[12]         Lov k. Grover, “Quantum Computers Can Search Arbitrarily Large Databases by a Single Query,” Phys. Rev. Lett., vol. 79, pp. 4709-4712, 1997.
[13]         A. Einstein, B. Podolsky, and N. Rosen, “Can Quantum Mechanical Description of Physical Reality be Considered Complete?,” Phys. Rev., vol. 47, pp. 777-780, 1935.
[14]         N. Bohr, “Can Quantum Mechanical Description of Physical Reality be Considered Complete?,” Phys. Rev., vol. 48, pp. 696-702, 1935.
[15]         D. Bohm, “A Suggested Interpretation of the Quantum Theory in Terms of Hidden Variables I,” Phys. Rev., vol. 85, pp. 166-179, 1952.
[16]         D. Bohm, “A Suggested Interpretation of the Quantum Theory in Terms of Hidden Variables II,” Phys. Rev., vol. 85, pp. 180-193, 1952.
[17]         J. S. Bell, “On the Einstein-Podolsky-Rosen paradox,” Physics, vol. 1, pp. 195-200, 1964.
[18]         J. S. Bell, “On the Problem of Hidden Variables in Quantum Mechanics,” Rev. Mod. Phys., vol. 38, pp. 447-452, 1966.
[19]         M. A. Nielsen and I. L.Chuang, Quantum Computation and Quantum Information, Cambridg, 2000.
[20]         E. Knill, “Conventions for Quantum Pseudocode,” citeseerx, 1996.
[21]         E. Knill, “Conventions for quantum pseudocode. 1996.
[22]         Marco Lanzagorta and Jeffrey Uhlmann, Quantum Computer Science, 1st ed. Cambridge University Press, 2009.
[23]         Bernhard Omer, “Structured Quantum Programming,”  Master's thesis, Institute for Theoretical Physics Vienna University of Technology, 2003.
[24]         Bernhard Omer, “Structured quantum programming,” Information Systems, 2005.
[25]         “A Functional Quantum Programming Language,” 20th Annual IEEE Symposium on Logic in Computer Science, Chicago, Illinois, 2005.
[26]         Hynek MLNAÍK, “Sematics of Quantum Programming Language LANQ,” International Journal of Quantum Information, vol.6, pp. 733-738, 2008.
[27]         Han-Cheng Shih, Kuo-Chang Lee, and Tzonelih Hwang, “New Efficient Three-Party Quantum Key Distribution Protocols,” IEEE, vol. 15, pp. 1602-1606, 2009.
[28]         A. S. Tanenbaum and A. S. Woodhull, Operating Systems Design and Implementation, 3rd ed. Pearson Prentice Hall, 2006.
[29]         Song, Fang-Min |Qian, Shi-Jun Dai, Jing-An Zhang, Yun-Jie Xu and Jia-Fu, “Processing system of quantum programming language NDQJava,” Ruan Jian Xue Bao, vol. 19, pp. 9-16, 2008.
[30]         Joshua Bloch, Effective Java, 2nd ed. Addison-Wesley, 2008.
[31]         Simon J. Gay, “Quantum programming languages: survey and bibliography,” Mathematical Structures in Computer Science, vol. 16, pp. 581-600, 2006.