3. زبان ریاضی
3.1نشانهگذاری
ریاضیات این کتاب چنان نوشته شده که یک برنامهنویس مینویسد: هر نماد شیء مشخصی با یک نوع را نشان میدهد. اسکالرها (float، complex) حروف کوچک یونانیاند α، β، θ؛ بردارها حروف کوچک لاتین با پیکان یا کتاند، u، |ψ⟩؛ ماتریسها حروف بزرگ، U، H. کت |ψ⟩ بردار ستونی دامنههای مختلط است؛ ⟨ψ| سطر مزدوج-ترانهادهٔ آن. در سراسر کتاب، هر نماد در هر بافت یک معنا دارد و ارجاعهایی مانند (37.6) میگویند ایده کجا بازمیگردد. سریعترین راه خواندن مقالههای کوانتومی ترجمهٔ هر عبارت به «این چه شیء numpy است؟» است — کت آرایهای به شکل (2ⁿ,) است، دروازه آرایهای (2ⁿ, 2ⁿ)، و ماتریس چگالی آرایهٔ هرمیتی (2ⁿ, 2ⁿ). نشانهگذاری API است؛ امضایش را یک بار بیاموزید و بازساختنش را رها کنید.
3.2اسکالرها
اسکالر یک عدد است — سادهترین شیء ریاضی، و در محاسبات کوانتومی هیچوقت آنقدر ساده که float. دامنهها مختلطاند؛ احتمالها حقیقی و نامنفی؛ زاویهها حقیقی، معمولاً بر حسب رادیان؛ شمار کیوبیت و شات عدد صحیح. هرکدام قواعد حساب و حالتهای شکست متفاوتی دارند، پس عادت مهندسی این است که پیش از ضرب بپرسید «اسکالر از چه نوعی؟». احتمالها باید روی همهٔ نتایج جمع به ۱ شوند؛ دامنهها در عوض قید نرمالسازی روی کل بردار حالت را ارضا کنند. در کد، کمیتهای احتمالی-گونه را در ممیز شناور نگه دارید اما صحیحهای دقیق (شات، کیوبیت) بهصورت int پایتون ردیابی کنید. مراقب تلهٔ کلاسیک عددی باشید: احتمالهای محاسبهشده بهصورت |دامنه|² در حساب دقیق همیشه نامنفیاند، اما گرد شدن ممیز شناور میتواند مقادیری مانند 1e−17 منفی تولید کند که کد پاییندستی (مثلاً np.random.choice) ردش میکند.
3.3اعداد حقیقی
اعداد حقیقی ℝ پیوستگی میسازند: میان هر دو، بینهایت دیگری. کمیتهای فیزیکی قابلاندازهگیری — احتمال، انرژی، زمان — حقیقیاند. اما رایانهها فقط زیرمجموعهٔ متناهی ذخیره میکنند: اعداد ممیز شناور IEEE 754، تقریباً 2⁶۴ مقدار متمایز بهازای هر double. شکاف میان پیوستگی ریاضی و زیرمجموعهٔ ذخیرهشده، جای زندگی بخش بزرگی از دردسرهای عددی است (7.1). دو عادت که همین حالا بسازید. اول، هرگز نتیجهٔ ممیز شناور را برای برابری دقیق تست نکنید؛ با تلورانسی مانند abs(a - b) < 1e-12 مقایسه کنید. دوم، به یاد داشته باشید ادعاهای «حقیقی» در فیزیک — احتمال نامنفی است، هامیلتونی هرمیتی است — دقیقاً همان خاصیتهاییاند که عددیهای شما باید حفظ یا راستیآزمایی کند، نه فرض کند. در محاسبات کوانتومی، نتایج اندازهگیری حقیقیاند اما ماشینی که تولیدشان میکند روی حساب مختلط اجرا میشود؛ اعداد حقیقی رابطاند، مختلطها موتور.
3.4اعداد مختلط
عدد مختلط z = a + bi جزء حقیقی a و موهومی b دارد، با i² = −1. در پایتون نوع بومی است: complex(3, 4) با .real، .imag و abs(z) داخلی. جمع مؤلفهبهمؤلفه و ضرب با قاعدهٔ توزیع؛ تقسیم با ضرب در مزدوج تعریف میشود. از نظر هندسی، ضرب میچرخاند و مقیاس میدهد — همین واقعیت یگانه توضیح میدهد چرا دامنههای کوانتومی مختلطاند: فازها باید بتوانند پیوسته بچرخند تا دامنهها حذف کامل شوند (تداخل). دامنههای حقیقی فقط تقویت یا تضعیف میتوانستند، هرگز حذف کامل. هر دامنهٔ این کتاب عدد مختلط است؛ هر احتمال |z|² است، حقیقی بهحکم ساخت. هیچ چیز عرفانی اینجا نیست — numpy با complex128 بومی کار میکند و هزاران تا از آنها را در هر شبیهسازی دستکاری میکنید بدون اینکه هرگز i را «در طبیعت» ببینید.
import numpy as np
z1, z2 = 1 + 2j, 3 - 1j
print(z1 * z2) # (5+5j): ضرب مثل چندجملهایها در i
print(np.abs(z1), np.angle(z1)) # قدر مطلق sqrt(5)، فاز atan2(2,1)3.5مزدوجسازی مختلط
مزدنگ z = a + bi برابر z* = a − bi است: علامت جزء موهومی برگردان، انعکاس نسبت به محور حقیقی. مزدوجسازی، پل میان دامنههای مختلط و احتمالهای حقیقی است: |z|² = z·z* = a² + b². در numpy، np.conj(z) یا z.conj(). سه قاعده که دائم بهکار میبرید: مزدوج حاصلضرب، حاصلضرب مزدوجهاست، (zw)* = z*w*؛ مزدوج مجموع، مجموع مزدوجها؛ و عددی دقیقاً وقتی با مزدوج خود برابر است که حقیقی باشد. مزدوجسازی در محاسبات کوانتومی در دو جای باربر ظاهر میشود: برا ⟨ψ| مزدوج-ترانهادهٔ کت |ψ⟩ است، و ماتریسهای هرمیتی (4.9) — قرینهٔ کوانتومی ماتریسهای متقارن حقیقی، بهکاررفته برای مشاهدهپذیرها و هامیلتونیها — با شرط H = H† تعریف میشوند که † یعنی ترانهادهٔ مزدوج. فراموشکردن مزدوجسازی از رایجترین باگهای شبیهسازی است.
3.6قدر مطلق و فاز
هر عدد مختلط ناصفر قدر مطلبی r = |z| = √(a² + b²) و فازی θ = atan2(b, a) دارد — زاویهٔ پادساعتگرد از محور حقیقی مثبت. قدر مطلق «چقدر» است، فاز «در کدام جهت چرخشی». مکانیک کوانتومی دقیقاً به این دوپاره اهمیت میدهد: قاعدهٔ برن فقط به قدرهای مطلق وابسته است (احتمال = |دامنه|²)، اما تداخل کاملاً به فازهای نسبی — دو دامنهٔ همقدر میتوانند تقویت (اختلاف فاز 0) یا حذف کامل (اختلاف فاز π) شوند. به همین دلیل فاز سراسری — ضرب کل حالت در e^{iφ} — نامشاهدهپذیر است، اما فازهای نسبی میان مؤلفههای پایه، بار واقعی دروازههایی مانند S و T. در کد، np.abs و np.angle دو بخش را جدا میکنند؛ فازها در ±π میپیچند، پس فازها را به پیمانهٔ 2π مقایسه کنید، هرگز مستقیم نه.
3.7فرمول اویلر
فرمول اویلر، e^{iθ} = cos θ + i·sin θ، میگوید نمایی عدد موهومی روی دایرهٔ واحد سفر میکند. سودمندترین همانی این کتاب است چون دو بخش قبل را یکپارچه میکند: e^{iθ} قدر مطلقی دقیقاً ۱ و فازی دقیقاً θ دارد، پس هر عدد مختلط بهصورت z = r·e^{iθ} تجزیه میشود — مقیاسی ضربدر چرخش. پیامدهای همهجا-موجود: ضرب در e^{iθ} فاز بردار را بدون تغییر طولش میچرخاند (این همان کاری است که دروازههای فازی فیزیکی میکنند)؛ cos θ و sin θ بخشهای زوج و فرد e^{iθ} هستند؛ و e^{iπ} = −1، همانی مشهور، فقط نقطهٔ پادپای دایره است. وقتی بعداً دیدید U = e^{iHt} (تحول زمانی زیر هامیلتونی، 4.20)، بخوانیدش «فاز را پیوسته با نرخی که H میگذارد بچرخان». فرمول اویلر فرهنگنامهٔ میان جبر و هندسه است.
3.8بازنمایی قطبی
ترکیب قدر مطلق و فاز: z = r·e^{iθ}، با r ≥ 0 شعاع و θ زاویه. این مختصات قطبی صفحهٔ مختلط است و بازنمایی طبیعی برای دامنههاست چون عملهای کوانتومی روی دو بخش جدا عمل میکنند — دروازههای یونیتی r (نرم) را حفظ و θ (فاز) را دستکاری میکنند. numpy رفتوبرگشت را مستقیم میدهد. هشدارهای عملی از مهندسی: فاز θ فقط به پیمانهٔ 2π تعریف شده، پس «فازِ» یک دامنه نمایندهای است نه مقدار یکتا؛ np.angle(0) تعریفنشده است، منطبق بر واقعیت فیزیکی که دامنهٔ صفر فاز حمل نمیکند؛ و انباشت عددی چرخشهای زیاد میتواند قدر مطلق را از 1 دور کند، و به همین دلیل شبیهسازها حالتها را دورهای بازنرمال میکنند. هنگام اشکالزدایی مدار، دامنهها را قطبی چاپ کنید — الگوی فاز بسیار خواناتر از جفتهای خام حقیقی-موهومی است.
3.9بردارها
بردار فهرست مرتبی از اعداد است که میتوان جمع و مقیاسش کرد: u + v مؤلفهبهمؤلفه جمع میکند؛ c·u همهٔ مؤلفهها را مقیاس میدهد. هندسی یک پیکان؛ محاسباتی آرایهٔ numpy یکبعدی. در محاسبات کوانتومی، حالت n کیوبیت برداری از 2ⁿ دامنهٔ مختلط است، پس «حالت» و «بردار» در سراسر این کتاب یک شیءند. عملهای مهم کماند: ترکیب خطی (3.13)، ضرب داخلی (3.16) و ضرب ماتریس (4.4). پایتون هر سه را با numpy میدهد. عادت چککردن شکلها را پیش از هر عمل بسازید — psi.shape باید (2**n,) باشد برای بردار حالت، و بیشتر باگهای «کوانتومی» در زیر، باگهای معمول شکلاند. بردار وقتی نرمال است که مجموع مجذور قدرهای مطلق مؤلفههایش ۱ باشد؛ شبیهسازها باید این ناوردایی را صریح نگه دارند، چون رانش ممیز شناور بهآرامی فرسایشش میدهد.
3.10فضاهای برداری
فضای برداری مجموعهای از بردارهاست بسته تحت جمع و ضرب اسکالر: جمعها و نسخههای مقیاسشدهٔ اعضا درون میمانند. همین بستهشدگی انتزاع را مفید میکند — بدون خروج از فضا جبر میکنید. فضای برداری مختلط ℂⁿ، n-تاییهایی از اعداد مختلط است؛ حالتهای یک کیوبیت در ℂ²، دو کیوبیت در ℂ⁴ (از راه حاصلضرب تانسوری، فصل ۵) و n کیوبیت در ℂ^{2ⁿ}. دو زیرفضا دائماً در محاسبات کوانتومی مهماند: مجموعهٔ حالتهای معتبر (بردارهای نرمال، کرهٔ واحد) و مجموعهٔ گسترده توسط حالتهای منطقی یک کد در تصحیح خطا (فصل ۳۷). ببینید «فضا» چه میخرد: بُعد (3.15) درجات آزادی را میگوید، پایه (3.11) دستگاه مختصات را، و کل واژگان هندسی — طولها، زاویهها، تصویرها — از ℝ² به ℂ^{2ⁿ} بدون تغییر منتقل میشود.
3.11پایهها
پایهٔ فضای برداری فهرستی از بردارهاست که همهٔ فضا را میسازند و اضافی ندارند: هر بردار دقیقاً یک راه بهصورت ترکیب خطی اعضای پایه نوشته میشود. برای ℂⁿ، پایهٔ استاندارد {e₁, …, eₙ} است — eₖ در مؤلفهٔ k یک و بقیه صفر دارد. در محاسبات کوانتومی، پایهٔ محاسباتی { |0⟩, |1⟩, …, |2ⁿ−1⟩ } همین ایده است: هر حالت، فهرست دامنههایش نسبت به این پایه است. انتخاب پایه انتخاب دستگاه مختصات است: همان بردار در پایههای مختلف مختصات مختلف دارد (تغییر پایه 4.14)، و فیزیک (قواعد برن، اندازهگیری) در هر پایهای همان است اما فرمولهای ساده در پایهٔ درست سادهاند — مثلاً مشاهدهپذیر Z در پایهٔ محاسباتی قطری است. دو پایهای که مکرر میبینید: محاسباتی (Z-محور) و هادامارد {|+⟩, |−⟩} (X-محور)؛ دروازهٔ H دقیقاً ماتریس تغییر پایه میان این دو است.
3.12مختصات
مختصات یک بردار نسبت به پایه، ضرایب ترکیب خطیاش است: اگر |ψ⟩ = Σᵢ αᵢ|eᵢ⟩، مختصات (α₁, …, αₙ) هستند — در محاسبات کوانتومی، دامنهها. بازنمایی مختصاتی و بازنمایی شیءگری هر دو «بردارند» اما یکسان نیستند: بردار خودش موجودیت هندسی است، مختصاتش تصویرش روی پایهٔ انتخابی. آرایهٔ numpy شما همیشه مختصات نسبت به پایهای ضمنی است — بهطور پیشفرض پایهٔ محاسباتی. هنگام تغییر پایه، همان شیء مختصات تازهای میگیرد (رسمِ «برازش» در برازش گرافیکی) و شبیهساز شما باید بداند کدام پایه — ابهام اینجا همان جایی است که باگهای اندیان لانه میکنند (بنگرید 5.10 برای حالت چندکیوبیتی). قاعدهٔ عملی: هر آرایه را با پایهاش نامگذاری کنید (در کامنت یا نام متغیر)؛ پایهٔ بینام، دروغی است که منتظر اتفاق است.
3.13ترکیبهای خطی
ترکیب خطی، ساخت بردار جدید از بردارهای موجود با جمع و مقیاس است: u = Σᵢ cᵢ vᵢ. این ساختِ زیربنایی همهٔ محاسبات کوانتومی است: برهمنهی دقیقاً ترکیب خطی حالتهای پایه است — |ψ⟩ = α|0⟩ + β|1⟩ — و دروازهها خطیاند یعنی ترکیبها را حفظ میکنند (این همان «تکامل خطی» در موضعیات بخش چهارم است). خطی بودن دو جهت دارد: روی حالتها (A(u+v) = Au + Av) و روی ضرایب (A(c·u) = c·Au)؛ هر دو با هم یعنی «دروازه فقط با ماتریس ضرب است». در numpy، ترکیبهای خطی فقط c1*v1 + c2*v2 هستند — بدون هزینه، بدون جادو — و تمام «توان عجیب» برهمنهی، از قدرت این ساخت ساده با پایههای نمایی-بزرگ میآید، نه از خودش.
3.14استقلال خطی
بردارها مستقلاند اگر هیچکدام از بقیه ساخته نشوند: Σᵢ cᵢ vᵢ = 0 فقط وقتی همهٔ cᵢ صفرند. استقلال همان «اضافی نبودن» است — پایه دقیقاً فهرستی مستقل است که فضا را میسازد. در محاسبات کوانتومی مستقیمترین حضورش در درهمتنیدگی است: |00⟩ و |11⟩ مستقلاند، پس ترکیبشان (|00⟩+|11⟩)/√2 حالتی است که به هیچ حالت تککیوبیتی فروکاستنی نیست (بنگرید 5.8) — استقلال، مادهٔ خام جدانشدنی است. محاسبهٔ عددی: ماتریسی با این بردارها بهعنوان ستونها بسازید و رتبه بگیرید (np.linalg.matrix_rank)؛ برای پایهٔ کامل، رتبه = بُعد. عملی: پیش از فرض «اینها پایهاند» (مثلاً مجموعهای از حالتهای ویژه)، رتبهشان را چک کنید — مقادیر ویژهٔ تکراری، استقلال را بیصدا میشکنند.
3.15بُعد
بُعد فضای برداری، شمار اعضای هر پایه (خوشتعریف: همهٔ پایهها هماندازهاند) — شمار درجات آزادی. برای محاسبات کوانتومی، بُعدِ فضای حالت n کیوبیت 2ⁿ است: یک کیوبیت ۲، دو کیوبیت ۴، ده کیوبیت ۱٬۰۲۴، سی کیوبیت حدود یک میلیارد. این رشد نمایی، مهمترین عدد در کل کتاب است: هم دلیل توان کوانتومی است (فضای بزرگی که ماشین بومی کاوش میکند) و هم دلیل سختی شبیهسازی کلاسیک (ذخیرهٔ همان فضا). بُعد را با استقلال و پایه کنار بگذارید: «فضای حالت n کیوبیت، فضای برداری مختلط 2ⁿ-بعدی با پایهٔ محاسباتیِ رشتههای بیتی» — جملهٔ کاملی که از این به بعد همهٔ محاسبات رویش سوار است.
3.16ضرب داخلی
ضرب داخلی، عددی است که دو بردار را میسنجد: ⟨u, v⟩ = Σᵢ uᵢ* vᵢ (مزدوج روی اولی — ترتیب مهم است). خواص: هرمیتی (⟨u, v⟩ = ⟨v, u⟩*)، خطی در آرگومان دوم، و مثبت-معین (⟨u, u⟩ ≥ 0، با برابری فقط برای صفر). در فضای مختلط، مزدوجسازی در تعریف ضروری است — بدون آن نرمهای منفی ممکن میشد. در numpy: np.vdot(u, v) (مزدوج میکند) یا np.inner (برای حالت حقیقی برابر است اما عادت به vdot بسازید). ضرب داخلی سهجای باربر است: نرم (3.17)، عمود بودن (3.18) و آمپدانس اندازهگیری — احتمال یافتن ψ در حالت φ برابر |⟨φ|ψ⟩|² است، که همان قاعدهٔ برن به زبان ضرب داخلی است. ضرب داخلی، «زاویه» فضا را میسازد؛ بدون آن هندسهای نیست.
3.17نرمها
نرم، طول بردار است: ‖u‖ = √⟨u, u⟩ = √(Σᵢ |uᵢ|²). نتیجه همیشه حقیقی و نامنفی است (مزدوجسازی در ضرب داخلی همین را تضمین میکند). حالتهای کوانتومی، بردارهای نرمالشدهاند: ‖ψ‖ = 1 — قیدی که مجموع احتمالها را ۱ میکند و شبیهساز باید دورهای بازتأییدش کند (رانش عددی). نرم از ضرب داخلی میآید (نرم هیلبرتی) اما نرمهای دیگر هم در مهندسی میبینید: نرم ۱ (Σ|uᵢ| — در محکهای فشردگی حالت)، نرم بینهایت (ماکس — در کرانهای خطا) و نرم فروبنیوس برای ماتریسها. نامساوی مثلثی ‖u+v‖ ≤ ‖u‖ + ‖v‖ برای همه برقرار است و در تجزیهٔ خطاها («خطای گام اول + خطای گام دوم کران خطای کل است») روزمره ظاهر میشود. در numpy: np.linalg.norm.
3.18عمود بودن
دو بردار عمودند اگر ضرب داخلیشان صفر باشد: ⟨u, v⟩ = 0. معنای فیزیکی-کوانتومی: عمود یعنی کاملاً قابلتفکیک — اندازهگیری که ψ را از φ تشخیص میدهد، آنها را با خطای صفر جدا میکند؛ غیرعمود یعنی عدمتفکیکپذیری ذاتی (آماری). حالتهای پایهٔ محاسباتی دوبهدو عمودند؛ |0⟩ و |1⟩ عمودند اما |0⟩ و |+⟩ نه (⟨0|+⟩ = 1/√2) — و همین عدمعمود بودن، فیزیک اندازهگیری در پایهٔ اشتباه است. عمود بودن نسبت به فرم مختلط ظریف است: ⟨u, v⟩ = 0 با ⟨v, u⟩ = 0 همارز است اما «زاویهٔ» میان بردارهای مختلط مفهوم هندسی سادهای ندارد — با ضرب داخلی کار کنید، نه تصور هندسی. بستههای عمود، زیرساخت فصل بعدیاند.
3.19پایههای متعامد-نرمال
پایهای که اعضایش دوبهدو عمود و نرمالاند — «پایهٔ orthonormal». خواص کاربردی: مختصات نسبت به چنین پایهای با ضرب داخلی مستقیم درمیآید، αᵢ = ⟨eᵢ|ψ⟩ (بدون حل معادله!)؛ نرم از مختصات، جمع مجذورهاست؛ و تغییر پایه میان دو پایهٔ متعامد-نرمال با یونیتی انجام میشود (4.14). پایهٔ محاسباتی و پایهٔ هادامارد هر دو متعامد-نرمالاند؛ دروازهٔ H اعضای یکی را به اعضای دیگری میبرد — یعنی خودش یونیتی است. برای مشاهدهپذیرهای هرمیتی، قضیهٔ طیفی (4.18) میگوید بردارهای ویژهشان پایهٔ متعامد-نرمال میسازند: اندازهگیری یعنی بازنمایی حالت در پایهٔ ویژهٔ مشاهدهپذیر. فرایند گرام–شیمیت، هر مجموعهٔ مستقلی را orthonormal میکند — در numpy با np.linalg.qr — و در ساخت کدگذاریهای QEC (فصل ۳۲) بهکار میرود.
3.20نشانهگذاری برا-کت
زبان دیپلماتیک حوزه، در یک بخش. کت |ψ⟩: بردار ستونی (حالت). برا ⟨φ|: مزدوج-ترانهاده (سطر) — آمادهٔ ضرب. ترکیبها: ⟨φ|ψ⟩ عدد است (ضرب داخلی — «همپوشانی»)؛ |ψ⟩⟨φ| عملگر است (نگاشت جهت ψ به جهت φ)؛ ⟨φ|A|ψ⟩ عدد است (دامنهٔ مؤلفهٔ φ پس از عمل A). نمادگذاری چند-کیوبیتی: |ab⟩ مخفف |a⟩⊗|b⟩ است؛ در ارقام دودویی، |011⟩ یعنی |0⟩⊗|1⟩⊗|1⟩. نمادهای فشردهٔ رایج: |+⟩ = (|0⟩+|1⟩)/√2 و |−⟩ = (|0⟩−|1⟩)/√2. مزیت واقعی نشانهگذاری، خوانایی جبر است: رابطهٔ A|ψ⟩ = λ|ψ⟩ (معادلهٔ ویژه) در برا-کت خودشناس است. تلهٔ رایج: برا مزدوج میگیرد — ⟨φ| نسبت به ستونِ φ ترانهادهٔ مزدوج است، نه فقط ترانهاده؛ در numpy یعنی np.conj(phi) قبل از ضرب. با این نشانهگذاری مقالهها خوانا میشوند؛ بدونش ترجمهاند.