كيف يتم تنظيم برامج Q#؟

مكتمل

تحتوي لغة البرمجة الكمومية Q# على بنية محددة جيدا. في هذه الوحدة، ستراجع المكونات الرئيسية لبرنامج Q#.

مساحة الاسم

يبدأ كل ملف Q# بمساحة اسم. إليك مثال:

namespace HelloQuantum {
    // Your code goes here.
}

namespace يتم استخدام الكلمة الأساسية لتعريف مساحة اسم. تستخدم مساحات الأسماء لتنظيم التعليمات البرمجية ل Q# في وحدات منطقية. يصبح استخدامها مهمًا عند استخدام مكتبات Q# في برامجك وعندما تكتب مكتباتك الخاصة.

المكتبات

تحتوي مكتبات Q# على وظائف وعمليات يمكنك استخدامها في البرامج الكمومية. عند استدعاء دالة أو عملية من مكتبة، يمكنك استخدام open التوجيه وتحديد مساحة اسم المكتبة. على سبيل المثال:

namespace HelloQuantum {

    open Microsoft.Quantum.Intrinsic;

    @EntryPoint()
    operation HelloQ() : Unit {
        Message("Hello quantum world!");
    }
}

في هذا المثال، open يخبر التوجيه المحول البرمجي Q# بالبحث عن Message العملية في Microsoft.Quantum.Intrinsic مساحة الاسم.

نقاط الدخول

EntryPoint يخبر المحول البرمجي Q# بمكان بدء تنفيذ البرنامج. يجب أن يكون لكل برنامج Q# نقطة إدخال واحدة على الأقل متبوعة بعملية.

تخصيص البتات الكمومية

في Q#، للحصول على qubit، يمكنك استخدام use الكلمة الأساسية . يبدأ كل qubit تقوم بتخصيصه use مع الكلمة الأساسية في حالة |0〉.

يمكنك تخصيص واحد أو عديد من البتات الكمومية في وقت واحد. فيما يلي مثال يخصص qubits واحد وخمسة:

use q1 = Qubit(); // Allocate one qubit
use q5 = Qubit[5]; // Allocate five qubits

العمليات الكمومية

تعتبر العمليات هي اللبنات الأساسية لبرنامج Q#. عملية Q# هي روتين فرعي كمومي. أي أنه روتين قابل للاستدعاء ويحتوي على عمليات كمومية تعدل حالة سجل البت الكمومي.

لتعريف عملية Q#، يمكنك تحديد اسم للعملية مع الإدخالات والإخراج المتعلقين. وفيما يلي مثال أساسي:

@EntryPoint()
operation SayHelloQ() : Unit {
    Message("Hello quantum world!");
}

هنا، SayHelloQ هو اسم العملية. لا تأخذ أي وسيطات كنوع Unitالإدخال والإرجاع، مما يعني أن العملية لا ترجع أي معلومات.

كما توفر مكتبات Q# عمليات يمكنك استخدامها في البرامج. إحدى العمليات التي ستستخدمها H لاحقا هي العملية. بالنظر إلى البت الكمومي على أساس Z، H تضع العملية البت الكمومي في تراكب زوجي . بمجرد التراكب، فإن البت الكمومي لديه فرصة 50٪ لقياسه على أنه صفر أو واحد.

الأنواع

يوفر Q# العديد من الأنواع المضمنة التي تعرفها بالفعل، بما في ذلك Intو BoolDoubleو و Stringبالإضافة إلى الأنواع الخاصة بالحوسبة الكمومية. يوفر Q# أيضًا أنواع تعريف النطاقات والصفائف والمجموعات. يمكنك حتى تعريف أنواع مخصصة لديك.

في هذه الوحدة النمطية Result ، ستعمل مع النوع . Result يمثل نتيجة قياس البت الكمومي ويمكن أن يكون له إحدى القيمتين المحتملتين: One وZero.

قياس البتات الكمومية

في Q#، يتم إجراء قياسات باولي عن طريق تطبيق Measure العملية، والتي تقوم بإجراء قياس مشترك لواحد أو أكثر من البتات الكمومية في قواعد بولي المحددة. تقوم Measure العملية بإرجاع Result نوع، أي إما One أو Zero.

إشعار

إذا كان الصفيف الأساس وصفيف qubit أطوال مختلفة، فستفشل Measure العملية.

لتنفيذ قياس على الأساس الحسابي {|0〉 ,|1〉} يمكنك أيضا استخدام M العملية التي تقوم بقياس كيوبت واحد على أساس باولي Z. لذلك فإن M العملية تعادل تطبيق Measure([PauliZ], [qubit]).

مثال بسيط هو البرنامج التالي، الذي يخصص كيوبت واحد في حالة |0، ثم يطبق عملية H Hadamard عليه ويقيس النتيجة في PauliZ الأساس.

@EntryPoint()
operation MeasureOneQubit() : Result {
    // Allocate a qubit, by default it is in zero state      
    use q = Qubit();  
    // We apply a Hadamard operation H to the state
    // It now has a 50% chance of being measured 0 or 1  
    H(q);      
    // Now we measure the qubit in Z-basis.
    let result = M(q);

    // Reset the qubit so it can be safely released.
    Reset(qubit);
    return result;
}

إشعار

Reset يتم استخدام العملية لإعادة تعيين qubit إلى الحالة |0〉. في Q#، يجب أن تكون qubits في حالة |0〉 بحلول وقت إصدارها.