
Japanese: 
あなたが今持っている古典コンピューターでは
これを６回の試行で行うことができます。
しかし、とても素晴らしいことに
量子コンピューターでは
これが１回の試行で可能です。
(音楽)
また会いましたね。Coding with Qiskitへようこそ。
私はエイブです。
箱の中に秘密の数が隠されているとしましょう。
その数は6ビットで記述されているとします。
0と1の6つの文字列です。
この数字を正確に推測するために
何回試行が必要と思いますか？
あなたが古典コンピューターを持っていたら、
秘密の6ビットの数字を見つけるのに
6回試行が必要です。
もし6ビットではなく60ビットの数字だったら
60回必要になります。
一般に、Nビットの秘密の数字を見つけるのに
N回の試行が必要になります。
このことはすぐに計算できますよね？
しかし、もしあなたが量子コンピューターを
持っていたら、
ベルンシュタイン・ヴァジラニ アルゴリズム

English: 
The classical computer
that you have right now
can do this in six tries
but what's even more impressive
is that a quantum computer
can do this in one try.
(upbeat music)
Hi, welcome back to Coding
With Qiskit, this is Abe.
Let's say there's a secret
number hidden inside a box.
And that number is described by six bits,
so six strings of zeroes and ones.
How many attempts do you think you need
in order to guess that number correctly?
If you had a classical computer,
you could find that secret
six-bit number in six tries.
And in fact, if that six-bit
number was, instead 60 bits,
that would take you 60 tries.
And in general, if it had
N bits, you'd need N tries
in order to find that secret number.
So this thing can quickly add up, right?
But if you had a quantum computer,
then you can use what's known as the

English: 
Bernstein-Vazirani Algorithm
to determine that secret
number in one shot,
independent of the size of that number.
So what I hope to do in this video
is show you how to implement
this algorithm in Qiskit.
So the Bernstein Vazirani
Algorithm is an example
of many quantum algorithms,
where a quantum computer
outperforms a classical computer.
So let's ask our computer
to guess a secret number.
And in particular, this is
going to be a binary number.
So it's going to be described by bits,
strings of ones and zeros.
And let's say we write
down the secret number.
In this case, I'm going
to pick a specific one.
It's going to be 1-0-1-0-0-1.
And I put that secret number in a box.
Now, the point of this box
is to give us one function,
and that function is,
if you feed it a guess,
it will tell you yes or no.
So how would you determine the
secret number given this box
where you don't know what's inside it?
One way to do it, would
be to ask this box,

Japanese: 
というものを使って
数字の大きさに関係なく、1回の試行で
秘密の数字を探し出せます。
このビデオで、このアルゴリズムを
Qiskitで実装する方法をお見せします。
ベルンシュタイン・ヴァジラニ アルゴリズムは、
古典コンピューターよりも優れている
量子アルゴリズムのうちの一つです。
それでは、我々のコンピューターに秘密の数字を
推測してもらいましょう。
これは二進数の数字になります。
ですので、ビット
つまり、0と1の文字列で記述されます。
では、秘密の数字を書きとめてみましょう。
この場合、ある特定のものを選びます。
1-0-1-0-0-1にします。
そして、箱の中に秘密の数字を入れます。
この箱のポイントは、
一つの機能を持っていることで、
その機能は、推測させた場合に
yesまたはnoを返答することです。
箱の中に、あなたの知らない秘密の数字が
隠れている時、
あなたはどのようにしてその数字を求めますか？
一つの方法は、この箱に

English: 
"Hey, is the number inside 0-0-0-0-0-0?"
And the box would say no,
that's not the number in here.
So then you'd change the number and ask,
"Is the box having the
number 0-0-0-0-0-1 inside?"
And the box would tell you
no, that's not the number.
And you do this until you
stumbled upon the right answer,
which is the secret number inside the box.
Here's how your computer would do it.
So, your computer would write down
the number 0-0-0-0-0-1
next to the box,
and it would apply what's
called an end operation.
And when it does this,
the end operation is
effectively going to tell it,
one, wherever the two numbers are one.
And zero, when they're not one together.
So this gives you zero,
this gives you zero,
this gives you zero, this gives you zero,
and this gives you zero.
So by doing this, what
your computer has done,

Japanese: 
「中の数字は、0-0-0-0-0-0ですか?」ときくことでしょう。
箱がnoと答えたら、その数字はここにはありません。
次に、数字を変えて聞きます。
「箱が持っているのは、0-0-0-0-0-1 ?」
箱がnoと答えたら、その数字ではありません。
そして、正しい答え、
つまり箱の中にある秘密の数字に
に出会うまで、これを繰り返します。
あなたのコンピューターがこれを行う方法は
次のとおりです。
あなたのコンピューターは、
箱の横にある数字の
0-0-0-0-0-1 を書きとめ、
いわゆるAND操作を適用します。
これを行うと
2つの数字が共に1である場合に
AND操作は、1と返答します。
どちらかが1でない場合は、0になります。
ですので、これは0を、これは0を、
これは0を、これは0を
これは0を答えてくれます。
これによって、あなたのコンピューターは、

Japanese: 
箱の中の、この桁が1であることを
見つけ出します。
そして、あなたのコンピューターは、
0-0-0-0-1-0 を使って同じ操作を続けます。
そしてご覧の通り、
2番目の数字が1かどうかを確認しようとしています。
３回目の
AND操作
を行うことで
また４回目のAND操作を行うことで、
同じように
６回のAND操作で
秘密の数字のどの桁に1があるか探し出します。
このようにして、コンピューターは、
6回の試行で箱の中の秘密の数字を探し出せます。
ランダムに64回推測するのではなく。
私たちは、どこから始めましたか？
64回の試行で秘密の数字を探すのは
大変な仕事に思えます。
あなたが今持っている古典コンピューターは、
これを6回の試行で出来ます。
しかし、もっとすごいことに、
量子コンピューターは、

English: 
is figured out that this digit
is one, in the box.
And then your computer would continue
by doing the same
operation, using 0-1-0 here.
And as you can see, what it's doing,
is trying to figure out if
that second number is also one.
And by doing this with
a third
end operation,
a fourth end operation,
and doing effectively,
six end operations, it would figure out
how many digits in the
secret number, are one.
And by doing so, the computer
would be able to find out
what the secret number is
inside the box in six tries,
instead of the 64 that it took
by just guessing randomly.
So where did we start off?
64 tries to find that secret number
seems like a lot of work.
The classical computer
that you have right now
can do this in six tries.
But what's even more impressive
is that a quantum computer

Japanese: 
これをたった1回の試行で出来るのです。
では、Qiskitでどのようにこのアルゴリズム実装するか
お見せしたいと思います。
いつものように、最初にQiskitをimportします。
つまり、from qiskit import * と入れます。
そして、結果を描画できるように準備します。
つまり、
%matplotlib inline
from qiskit.tools.visualization
import plot_histogram
Qiskitを始める準備が出来たので、
秘密の数字を1-0-1-0-0-1と入れます。
これが、これまで私たちが話してきた秘密の番号です。
では、回路を設定して、
秘密の数字のビット数である6個の量子ビットと
＋1量子ビットと
結果を保存するための古典ビットを6個用意します。
最初にアダマールゲートを

English: 
can do this in one try.
And what I'd like to do is show you
how this algorithm works on Qiskit.
So as always, I'm going
to first import Qiskit.
So I'm going to say, from
Qiskit import everything,
and I'm going to prepare
to visualize my results
by saying
map plot lib inline
and from Qiskit dot
tools dot visualazation
import
plot
histogram.
So now we're ready to
start working with Qiskit
and I'm now going to say the
secret number is 1-0-1-0-0-1.
So this is the secret number
that we've been talking about so far.
So let's start by building
a circuit made from,
six, which is the number of bits
that we have in the secret
number plus one qubits
and six classical bits on
which we'll store results.
And what I'll do is start off
by applying a Hadamard Gate

English: 
to the first six qubits
out of the seven qubits that I'm using.
So I'll say Hadamard on
zero, one, two, three, four, and five.
So these are the first six qubits.
All right, so let's apply that,
and as always lets do circuit dot draw
output
equals
matplotlib.
And that's how our
circuit looks right now.
For the last qubit I'm
going to do one more thing,
which is to ask for an X
gate before a Hadamard on it,
so I'm going to say
circuit dot x on qubit six,
and circuit dot h on qubit six.
All right, let's see how that looks.
So now this is how our circuit looks.
We have Hadamards on all of the qubits
with this additional X
gate on the last qubit.
I'll put a barrier here
so that things are a bit clearer for us.
A barrier simply adds
this vertical line that
you're seeing here.

Japanese: 
用意した7量子ビットのうちの
最初の6量子ビットに適用します。
つまり、アダマールを
0, 1, 2, 3, 4, 5にかけます。
これは最初の6量子ビットです。
では、これを適用して、
いつものように回路を表示します。
circuit.draw(output='mpl')
このように回路が表示されます。
最後の量子ビットには
アダマールゲートをかける前にXゲートをかけるので、
circuit.xを6量子ビット目に
circuit.hを6量子ビット目に。
ではどう見えるかみてみましょう。
現在の回路の見た目です。
アダマールゲートをすべての量子ビットに
Xゲートを最後の量子ビットに追加でおいています。
ここにバリアーを入れて
すっきり見えるようにします。
バリアによってこのような
垂直な線が追加されます。

English: 
And now what I'm going
to do is build the box
that contains the secret number.
So remember that the secret
number is written here,
and what I'm going to do is,
for every one that I see
in the secret number,
I'm going to put a cX gate.
And in particular the way I'm
going to apply the cX gate
is as follows.
So I'm going to say circuit dot cX.
You see this one on this first bit,
so I'm going to go from
the last
qubit that we didn't have the X on,
up to that qubit that is
the last qubit in the lines.
So I'm going to say cX from five to six,
and see how that works.
Yep, so that's the first
one in our secret number.
So let's keep doing this.
(keys clacking)
So the secret number is 1-0-1-0-0-1,
so the fifth bit is going
to have a controlled X,
the third bit is going
to have a controlled X,
so I'll do three.

Japanese: 
秘密の数字が含まれている箱を構築しましょう。
秘密の数字がここに書かれていたので、
これから
秘密の数字にある全ての1を
cXゲートに入れます。
CXゲートに適用しようとしている方法は
次のようになります。
circuit.cx()を使って
１番目のビットに1があるので、
Xゲートがかかっていないビットの最後のビットから
一番下の線の量子ビットにCNOTをかけます。
つまり、5から6へのCXで
このように動きます。
これが秘密の数字の最初の1です。
これを続けます。
(キーボードの音)
秘密の数字は、1-0-1-0-0-1なので
5個目のビットに制御Xを操作し
3個目のビットも制御Xを操作し
3にします。

English: 
And finally the zeroes bit is
going to have a controlled X.
So this is how our circuit looks.
Let's draw it.
So now the easiest way to
see that the secret number
is encoded into this box
is by reading off one
when you see a controlled
X, and zero when you don't.
So one,
zero,
one,
zero,
zero,
one here.
And that's the box that
encodes the secret number.
So I'll make it clear by
applying a barrier here again.
And this is how our circuit looks.
And finally what I'm going to do
is apply another set of Hadamard gates.
So I'm going to apply
that operation again.
And that's how our circuit looks.
And that's it.
We've now built the
Bernstein-Vazirani algorithm.
So in order to understand
how this circuit works,
I'm going to add measurements at the end.
So put another barrier,
(keys clacking)

Japanese: 
最後に、0個目のビットにも制御Xを操作します。
これが回路の見た目です。
表示しましょう。
秘密の数字がこの箱にエンコーディングされている
ことを確認する最も簡単な方法は、
制御Xがあったら1、なかったら0とする方法です。
ですから1、
0、
1、
0、
0、
1になります。
これが秘密の数字をエンコードする箱です。
ここに再度バリアを入れて、見やすくします。
これが回路の見た目です。
最後に、別のアダマールゲートのセットを適用します。
この操作を繰り返し適用します。
これが回路のの見た目です。
以上です。
私たちは、ベルンシュタイン・
ヴァジラニ アルゴリズムを構築しました。
この回路がどう働くか理解するために
最後に測定を追加します。
また別のバリアを入れ、
(キーボードの音)

English: 
and I'll say circuit dot measure,
and in particular put
the results from bits,
zero, one, two, three, four, five
into the classical bits,
zero, one, two, three, four, five.
And that's how the circuit looks.
Now we're done and we're
ready to simulate the circuit.
So let's run the circuit
to see that it's working.
So what I'm going to
do is say the simulator
is err dot get backend,
chasm
simulator,
and I'm going to execute the circuit
that we've built that we've built so far.
I'm going to choose the
backend to be the simulator,
and I'm going to say I
want one shot, because,
I promised you that this
would all be done in one shot.
I'm going to take the
result of this execution,
and store it into a
variable called result.
And then I'm going to say
count is result dot get count.

Japanese: 
circuit.measure()と入れて、
ビット 0, 1 ,2, 3, 4, 5 からの結果を
古典ビットの
0, 1, 2, 3, 4, 5 へ入れます。
これが回路の見た目です。
これで回路ができ、シミュレーションの
準備ができました。
では、回路を実行させて、
その動きをみてみましょう。
こう入れます。
simulator = Aer.get_backend('qasm_simulator')
これまでに構築した回路を実行します。
バックエンドとしてシミュレーターを選択し、
1ショットに設定します。なぜなら、
約束したように、これは1回でできるからです。
この実行の結果を取り出して
resultという変数に入れます。
counts = result.get_counts() と入れ、

English: 
And then what I'll do
is print out the count,
so that we see what the output is.
And as you can see here,
in that one shot that we did,
the result was 1-0-1-0-0-1.
So the circuit was able
to guess our secret number
in that one shot.
Now let's try a little bit
of an advanced example.
So what I'm going to try to do here,
is to generalize the code
so that it works on any secret number.
So to make this a bit more general,
here are the changes that I'm going to do.
So instead of saying
apply the Hadamard gate
to qubits zero through five,
what I'm going to say is
apply the circuit dot h,
going through
range length
of secret number.
So in Python what this does
is return exactly the array
zero through five for this
particular secret number.
And again what I'm going to
do is comment this line out
and say apply this to the
(keys clacking)
last qubit,

Japanese: 
countを表示して
出力を見れるようにします。
ご覧の通り、
設定したように1回のショットで
結果は1-0-1-0-0-1になりました。
このように、この回路は秘密の数字を1ショットで
推定することができました。
次に、少し高度な例に挑戦します。
どんな秘密の数字にも対応できるように
コードを一般化します。
より一般化するために
ここを変更していきます。
0から5までの量子ビットに
アダマールゲートを適用する代わりに
circuit.h(range(len(secretnumber))とします。
これで、pythonは秘密の数字に対応する
0から5までの配列を返します。
このラインをコメントアウトして
これを
(キーボードの音)
最後の量子ビットに適用し、

English: 
and then apply this Hadamard
also to the last qubit.
Okay.
So again let's rerun our piece of code,
see how the circuit looks.
Nothing has changed.
So what we've done is change this part
to be a bit more general.
Now let's change the box.
So how was the box encoded?
We simply applied controlled X's
wherever we saw a one
in the secret number.
So how would I write down
this logic in Python?
So I would say four
I I
yes no
and enumerate
the secret number.
And in particular, remember that
we built the circuit from top to bottom,
meaning when we saw a one, the control dex
was applied to the bottommost qubit.
And so what we're going to do
is not take the secret number,
but reverse it.
So I'm going to say reverse secret number.
I'm going to say if
that string contains one,

Japanese: 
このアダマールゲートも
最後の量子ビットに適用します。
OK。
再度、コードを実行してみて、
回路を表示します。
何も変わりません。
この変更した部分が
より一般化されています。
次に箱を変更しましょう。
箱はどのようにエンコードされていたでしょうか？
シンプルに制御Xを秘密の数字の1の部分に
適用しました。
このロジックをpythonではどのように書きますか？
こうしましょう。
for ii, yesno in enumarate(secretnumber)
上から下に回路を構築したことを思い出してください。
つまり、1があったら、制御Xが最下部の量子ビットに適用されました。
secretnumber を使うのではなく
reverseしたものを使います。
reverse(secretnumber)と入れます。
こうします。
もし、この文字列が1を含んでいたら、

Japanese: 
制御Xをその量子ビットのインデックスから
最後の量子ビットに適用します。
いいですか？
ここのコードを
コメントアウトにして
最後に
再度、回路を表示してチェックします。
同じようにここに 1-0-1-0-0-1があります。
ここのアダマールゲートを再び
このコードに取り替えます。
ここをコメントアウトして
回路図を表示します。
何も変わっていないことを確認し
もちろん測定も
このrangeからこのrangeに変更します。
以上です。
これで、回路がより一般的なコードに
書き換えられました。
最後の変更は、この数字を変えます。

English: 
then I'm going to apply a controlled X,
going from the index of that qubit
to the last qubit.
Okay, that should do it.
So that replaces these lines of code,
so I'll comment these out.
And finally,
so let's check again,
how our circuit looks.
Again we have 1-0-1-0-0-1 here.
We're going to say all
these Hadamard gates again
can get replaced with this line of code.
I'll comment this out,
look at the drawing again,
see that nothing has changed,
and the measurements of course going from
this range again,
to this range.
And that's it.
So we've now rebuilt the circuit
in a more general piece of code.
The last change I'm going to
make is change this number
so the quantum circuit that we're building

Japanese: 
量子回路が6量子ビットで構成されていない場合にも
秘密の数字の長さ+1で
古典ビットは秘密の数字のビット数に
なるようにします。
以上です。
この回路はより一般的で
秘密の数字を1-0-1-0-0-1から、例えば
1-1-1-0-0-0に変えたら、
回路がアップデートされて
この回路を使って
秘密の数字を1ショットで見つけられます。
この形式で秘密の数字を変えられるだけでなく
秘密の数字の長さも変更できます。
量子回路が秘密の数字の長さに対応して
アップデートされます。
ヘイ、ポール、
ちょっと手を貸してくれませんか？
やってほしいことは、
ここの秘密の数字を
君の好きな数字に変えてほしいのですが
君がやっている間、僕は目を閉じているので
終わったら、シフト＋エンターを押して
スクロールして、
僕が秘密の数字を見ないようにしてください。
OK。

English: 
is not just composed
of six qubits anymore,
but the length of the
secret number plus one,
and it's going to have
as many classical bits
as there are bits in the secret number.
So that's it.
This builds our circuit
in a more general form
and in particular if I
were to go and change
the secret number, from
1-0-1-0-0-1 to something like
1-1-1-0-0-0,
the circuit would be updated,
and I can use this circuit
to find that secret number in one shot.
And again, it's not just that I can change
the secret number in these two forms,
but I can also change the
length of the secret number
and the quantum circuit
should update to accommodate
that change in the length
of the secret number.
So hey, Paul.
Do you want to give me a hand here?
So what I'd like you to do
is change the secret number up top
to something that you'd like,
and I'll cover my eyes as you do this
and remember to hit
shift+enter after you're done
and scroll so that I don't
see that secret number.
Okay.

English: 
Any number?
Any number.
Any amount of numbers.
Yep.
(upbeat music)
Shift+enter.
So that I don't see it.
Okay.
Okay so I'm claiming here
that I can find your secret number, Paul,
by running the quantum circuit,
and it looks like your
secret number was...
(laughs) 1-1-0,
Mmhmm.
(laughs) 0-1-0,
1-0-0,
0-1-1,
1-0-1,
0-1-0.
Was that your secret number?
Say it again?
(laughter)
Instead of talking to Paul,
I have a better way here, which is that
I'm going to go up and
look at the secret number,
and do a comparison side by side
by pasting it here.
So I'm confident now, looking at this,
that I did find the right number.
(hands clapping)
(upbeat music)

Japanese: 
どんな数字でもいいのかな？
どんな任意の数字でも？
はい。
(音楽)
シフト＋エンター。
私は見ていません。
OK。
ではここで私は宣言します。
ポール、私は秘密の数字を探し出せます。
量子回路を実行して、
君の秘密の数字は、次のようです。
(笑い声)1-1-0 ええと
(笑い声) 0-1-0
1-0-0
0-1-1
1-0-1
0-1-0。
これはあなたの秘密の数字ですか？
もう一回言ってくれますか？
(笑い声)
ポールと会話する代わりに
良い方法があります。それは
上に行って、秘密の数字を見つけて
ここにペーストして、並べて比較します。
ここにあるように、自信を持って
正しい数字を探し出したと言えます。
(拍手) (音楽)

Japanese: 
すごいですよね。
古典コンピューターは秘密の数字を探し出すのに
6回の試行が必要ですが、
量子コンピューターではたった1回の試行で
済むことがわかりました。
このアルゴリズムの基礎となる数学を
もっと学びたい場合は、
下にあるリンクから、オンラインのQiskit textbookを
見てみることをお薦めします。
これであなたは、これらの量子回路を理解し、書き、
実行する知識をつけたので、
Qiskit textbook にある他の量子アルゴリズムをみて、
同じように実行できるか見ることができます。
あなたができることの一つとして
実際のハードウェアで量子回路を
試してみることもできます。
やってみた結果を
下にコメントで記入して教えてください。
ご覧いただき、ありがとうございます。
来週またお会いしましょう。
(音楽)

English: 
So this is cool, right?
So for the classical computer we needed
six tries to find the secret number,
but as it turns out,
for the quantum computer
we only needed one try.
If you'd like to learn more
about the mathematics
behind the algorithm,
we suggest that you take
a look at the link below
to the online Qiskit textbook.
And in fact, now that you're equipped
with the knowledge to understand
these quantum circuits
and write them and execute them,
what you can do is take
a look at the other
quantum algorithms in the Qiskit textbook,
and see if you can run those as well.
So one thing that you can do
is also to try to run this quantum circuit
on real hardware.
Tell us in the comments down below
what results you find when you do this.
As always, thanks for watching,
and we'll see you next week.
(upbeat music)
