Ви можете спростити "створити стан" проблем, розбивши їх на три частини:
- Підготуйте колекцію величин, які вам знадобляться, не турбуючись про фазу чи стан, який має величину.
- Зафіксуйте фази.
- Зафіксуйте замовлення.
Тепер розглянемо стан Харді. Які масштаби нам потрібно зробити? Нам потрібен один примірник3/12−−√ і три екземпляри інстанції 1/12−−√. Ми можемо робити їх по одному, маючи стан "залишкової амплітуди", на який ми продовжуємо розщеплюватися.
Починаємо з усієї амплітуди в одному стані із збудженням зліва, ℓ0|1000...00⟩ де ℓ0=1. Що ми хочемо зробити - це перемістити збудження вправо, залишаючи позаду бажані величини. Тож для початку ми хочемо залишити після себе величину3/12−−√. Ми можемо це зробити з контрольованимRy(θ0)операція, де керування є лівим лівим кубітом, а ціль - кубітом праворуч. Вибираючи правильне значення дляθ, це призведе до стану 3/12−−√|1000...00⟩+ℓ1|1100...00⟩. Потім CNOT другий кубіт повертаємо на перший кубіт, щоб дістатисяℓ1|1000...00⟩+3/12−−√|0100...00⟩. Далі ми хочемо знятися1/12−−√. Виконуємо іншеRyкерований самим лівим кубітом, за яким рухається зворотний CNOT, але на цей раз з ціллю - кубіт третій зліва. Підбираючи ідеальнеθ1 ми виробимо державу ℓ2|1000...00⟩+3/12−−√|0100...00⟩+1/12−−√ℓ2|0010...00⟩. І ви просто продовжуєте це робити, поки не отримаєте всі необхідні вам амплітуди, зручні для вирішення яких хвилюються окремі кубіти.
Тепер ви хочете виправити будь-які неправильні фази, породжені Y обертаннями. Для стану Харді це легко, оскільки всі фази є позитивними. Загалом ви орієнтуєтесь на кожну позицію кубітаk з Rz(ϕk) операція з належним чином обраним ϕk Значення, і це дозволить отримати фази правильно.
Тепер ми хочемо правильно замовити. Найпростіший спосіб зробити це - мати кілька зайвих кубітів, які є вашими вихідними кубітами, і для кожного з кубітів, які ми підготували до цього часу, і кожного з вихідних кубітів, або додайте CNOT між двома, або ні. Наприклад, якщо стан з амплітудою3/12−−√ повинен бути |11⟩, тоді нам потрібно CNOT від нашого лівого кубіта на обидва вихідні кубіти. Тоді нам потрібно обчислити крайній лівий кубіт за допомогою багатокерованої операції NOT. Для кожного вихідного кубіта повинен бути один елемент керування, а тип керування (qubit-must-be-on vs qubit-must-be-off) визначається залежно від того, чи ви переключили кубіт чи ні.
Застосування цих кроків створює неефективну, але правильну схему для створення стану Харді. Ви можете відкрити ланцюг у Quirk :
Якщо ви хочете створити стан, не використовуючи стільки робочої області, завдання стає складніше. Але ви все одно можете слідувати величинам, а потім фазам, а потім впорядковувати шаблон. Також є розумніші способи приготування наборів величин, які мають приємні візерунки. Наприклад, коли лише одна амплітуда відрізняється від інших, одного кола часткової амплітудної амплітуди може бути достатньо для підготовки стану.