We talked a bit about the hardware, you know, people are working on the hardware of quantum computing, yep
What about software? where do you start thinking about that?
Writing software for a quantum computer
In my opinion is actually not very very different from how we write software for just a normal computer
and we think about
software in terms of being able to write down instructions
for the computer and the computer executing these instructions changing some internal state when I write instructions for
any type of computer whether it be like a modern MacBook Pro or an old PDP-11
In both cases in the end, we have an assembly code that gets executed that's changing the memory the disk
The registers in your CPU and so on and it's not different with a quantum computer
It's just like the question is what are we changing?
And how do we change them? We can really describe these things
in quite simple terms, if we were to do this in with sort of full textbook honesty, we would discuss things like
finite dimensional vector spaces and in Hilbert spaces and
Linear operators and unitary maps and all that stuff and all that stuff is very very important
If if you're actually sitting down writing a program but to get an understanding of it
I think we can do away with it. And actually just think about things in terms of simple probabilities. So the idea of a Qubit
So Qubit is a Bit in a quantom computer
Yep it is. Yeah. It's sort of the fundamental building block. It's like a it's like a bit and a regular computer
The way I think of it is it's a resource in the computer. It's a resource that you can use to perform a computation
So a qubit to me is anything it's sort of abstract. But anything that has two states of being and
Some possibility or probability of those states. So for instance we can think about
Photons and their polarization a photon can be sort of polarized left and right or it can be polarized up and down
But if we're not looking then maybe it's it's possibly in one or the other. Maybe it's 50%
moving and traversing left and right and 50%
Moving up and down. This is just for photons
Turns out there are lots and lots of different ways to construct qubits the qubits that that we work on in the so called field
Of superconducting quantum computation. We use a device called a superconducting charge qubit
It doesn't matter all the details, but it suffice to say that the two states there
Are is their charge or is there no charge in this circuit?
And then of course, we have the same thing. It could we could have a probability like maybe there's a 10% chance
there's a charge or maybe there's a
90% chance there's a charge. These are called superconducting charge
Qubits again, it sounds complicated, but the essence is the same two states
but maybe it's in one or the other the interesting thing though is
When we have multiple qubits, and this is really where the power of quantum computation happens
We can actually think of it sort of simply
Diagrammatically that if qubits if I just represent them sort of as a circle here, maybe we have three the idea
Is that these qubits can interact this guy can interact with this guy?
this guy can interact with this guy and these can interact with one another and every time we add a qubit if we were to
Add a circle here. Let's say we added this fourth qubit right here
We noticed that every single one of them can now interact with it. We have to draw lots of these lines
It turns out that a quantum computer can deal with these additions of qubits in a very efficient fashion
But like I said a qubit is something where it has two states
So each of these guys can be in two states with a particular probability
let's say the two states and our just 0 and 1, our qubit can be 0 or 1 or
Possibly something in between. So if I write down these qubits with the probability, let's say we have three qubits here
I'll call it Q0
Q1 and Q2 what we have is
That qubit 0 let's say it's this one right here 1 and 2, well qubit 0 could be in 0 or 1
so it has some probability of being in 0
Qubit 1 also has some probability of being in 0 and qubit 0 also has some probability being in 0
maybe that's a 10% chance
But now we have to painstakingly go through a write every one qubit 0 has a probability of being in the 0 state
Qubit 1 also 0 and qubit 2 and we can write down all these possibilities
Etc, etc until we get to the possibility that all of them are one and each of them has a probability. Maybe this is 5%
Maybe this is 7%, maybe this is like 35%, maybe there's a very high percentage chance that all of them are one
8% and so on
so every time we add a qubit the size of this table doubles the number of probability percentages doubles and it turns out that
these probabilities right here are ultimately what a quantum computer is computing with when we do an
Instruction on a quantum computer when we instruct it to do something in the end
it's always about changing these probabilities to favor some computation that we're trying to do
When we start up a quantum computer, when we flick the switch on
it'll start as 100% in this state and everything else will be 0%
We start off here, and we know that we start off here. It might be that when we apply a certain operation
So for example an operation as is the so called
superposition
Initialization or we call it Hadamard initialization
This is if we have any number of qubits, so starting off in zero, and maybe we want every probability to be equal
So if we want to start off here
We do something called Hadamard initialization where we do
a particular instruction called the Hadamard gate and what happens is this 100% now turns into
Let's say we just have one qubit
It would be 50% chance in the zero State and 50% chance in the one state if we had two qubits Hadamard
initialization would cause us to be 25% chance with both qubits being 0
25% chance
0 1
25% chance being 1 0
25% chance being 1 1 the point is is that this particular instructions one instruction on a quantum computer?
Allows us to change these probabilities in a way that we'd like and it might be useful for us to do something like this Hadamard
Initialization with all the probabilities being equal because then from here we could do some operation that affects all these qubits and affects all these
Probabilities sort of in the same way. But like I said, this is just one possible instruction
So there can be an infinite number just like a normal computer it's not that they're an infinite number of instructions
It's that they're an infinite of possible things you could do with the instructions
So one of the greatest discoveries was that we can arrange these probabilities to be in whatever way that we would like
Using five instructions total
there are sort of five different ways that we can
Permute these things and change them and there are this, one is called a measure instruction
measure instruction is pretty important because while we're talking about probabilities
we can't actually see these probabilities in the quantum computer
They're just in there
At some point. We do want to see are they zeros or ones? Like we need to answer that question
So the measure instruction will take any list of probabilities and turn it into
One of them will change to 100% So each of these is 25% chance. It'll pick one
Let's say it's this one right here and measure is gonna make this a hundred percent with the other ones being zero percent
That's one way of changing and then incidentally we also get to read out from the clunkier that it was a 1 0
That's how we get our answers. That's the only way we get an answer. In fact from the quantum computer
The rest of them are just purely ways of changing these probabilities. There are lots of different ways
You can have instruction just like norm...
Regular computers every single computer that's ever been built or every single CPU that's erver been built always has a different instruction set
One possible instruction set is the following we have this Hadamard
Is that named after someone?
Yes, it's named after I think he was a mathematician
He worked on a variety of mathematical subjects and there's a matrix that's actually one divided by square root of 2
1 1 1 negative 1 which is a so-called Hadamard matrix
Incidentally this is also used to represent how these probabilities change so Hadamard is one instruction
There's another instruction called Phase, again It just has the effect of changing probabilities around in a particular way
There's another instruction called the T gate not very
Creatively named there's another instruction called the CNOT gate and what's special
about the CNOT gate is that all of these right here act on one qubit
We say I want to do a measure on qubit 2 or i want to do a T gate on qubit 0
It sort of affects only one qubit. It'll affect a lot of probabilities because even though we're operating on one qubit here
it accounts for this entire column so it actually changes all the probabilities
CNOT is special because we get to choose two qubits
This is how we get this
interaction between them so CNOT you can say I want to do this on qubit 0 and qubit 2
For instance and this itself is an instruction in a sort of quantum assembly code
Are these instructions a bit like gates?
Yea, so they are like gates but there's an interesting reversal and for example a NAND gate is something like this where data is coming
Into the gate and data comes out of the gate
what's interesting about these gates and quantum computation is sort of the opposite you have data that's sitting there all these probabilities and
You like apply the gate to the Machine and all the probabilities change. So you're not sending data into the gate
You're not putting this gate on the chip like a NAND gate for instance
Is a gate that you would actually etch into a chip
Here it's an instruction that you apply to the computer and it changes these probabilities, but nonetheless
They're both different operations that you do on data
And how does what you do is code get changed into these operations of instructions
Yeah, so like with normal computers you can write these instructions out as assembly code. In fact one example is
Say I want the following probabilities
I have 0 0 0 1 1 0 1 1 I want this I want it to be 50% chance to be 0 0 or
50% chance to be 1 1 this is called a bell state with a bell state. It's interesting because
Theoretically let's suppose I have a qubit. Let's say close I could hold a qubit and
Let's say I gave you a qubit
it's 50% chance 0 0 or 50% chance 1 1
so even if we travelled halfway across the world and I decided to measure my qubit with the measure
Instruction and I determine that to 0
Then I know for certain that you must be a 0 because there's a zero percent chance that were different, but somehow we determine this
It's a 50% chance. It's not that it is already chosen literally is 50% chance. You don't know which one it is
So we can write a program to construct a bell state
I won't explain exactly why it works this way
But you do a Hadamard on my qubit, qubit 0 we do a CNOT on
My qubit and your qubit and we're done. This is a quantum program. You can write this out.
Now there are higher levels of quantum programming where we don't want to restrict ourselves these instructions
Maybe I want to more directly Express the probabilities and how I want them to change
They all have to add up to 1 of course. I mean, we have a certain percentage chance
It has to be 100% in the end, but maybe I want to shift the probabilities around in a particular way
But not in any of the ways that's in our gate set
I can write that down that can use something called a quantum
compiler a piece of software that that converts what I want into these native instructions that gives me the
next level of abstraction in the code
we can go all the way up to using a full-blown library for writing this stuff one library that
We've constructed is something called "PyQuil"
Which allows us to actually write Python code to express quantum computations in Quil is actually this instruction set here
Quil stands for quantum instruction language, which lets you write down this assembly code
But hey, who came up with this things?
is this a commercial thing or is this like...
Yeah, yeah so quil was originally this particular type of instruction set
Was a paper that I actually wrote a while ago
The idea of gates and everything was very well known for many decades previous to that
So this is a particular encoding of gates as instructions PyQuil is a library that's open source, it's free
There are no restrictions really on using it to construct these programs, but it does allow you to actually connect up to
Rigetti Computing's real quantum computers if you if you so pleased to actually run your programs
But if you don't want to connect up to the quantum computers and you just want to simulate on your own laptop this can connect
Up to a an open source
Simulation tool that we have if you just kind of want to see how these probabilities change and so on
Not quite you still have to express a quantum computation so a quantum computer doesn't print things out it's
it's manipulating these probabilities so at some point you start to express things as
Quantum instructions, so definitely if you wanted to make a bell state writing the bell state program you could do that
But could you write "Hello world?" No, and this goes back to the fact that the quantum computer is a coprocessor
Just like saying you don't write 'Hello World' on your GPU generally
You don't express any particular computation and you also don't compile Python Into code on your GPU
You write special code within Python that gets run on your GPU and it's the same thing with quantum computing
and i know you said there are certain stabilty issues do you get hard answers outta this?
So, yeah, so when an answer comes out when you measure you do get definite answer out, however
since there's noise what we have to do is write our program get an answer out and store that and actually
Rerun it multiple times
We have to gather statistics about the answer and it turns out that the more you do this the more
Accurate your answers become and that is to account for noise in the quantum computer currently
So when we're talking about setting these probabilities, what you want them to be
and i understand kind of running operations and gates to do
just sounds like you know the answer
Yeah, no, you don't know the answer
You just show that
If you were to do this series of operations that you'd get the right answer on, the answer might be different depending
ofcourse the answer will be diffrent depending on the problem that you have
so for instance one of the
Main questions the quantum computer can solve is the same question that you can get from something called the Fourier
Transform where you can find if you have like a sound wave and you want to find what frequencies it has
you know that if you run the Fourier transform
Proven using mathematics and so on that the answer will be the set of frequencies that make up that sound
Likewise here. There's actually something called a quantum Fourier transform where if you run it
you know that probabilities will accumulate on the
Answers or the frequencies. Maybe that your that your sound wave has
So, you know just by the construction of your program that you'll get the correct answer
Not that you know the correct answer itself at the front-end, and that's the same with classical computing in my opinion
You rarely do you know what the final answer is
You just know the computation or the program that you've written will produce the correct answer
You need more than one qubit to make this work
You can use a qubit
if you have a normal qubit your table is gonna look like this you're gonna have prob and
Maybe it's like 50% in your states are just 0 and 1
Except they're just not very many useful things you can do with a single qubit
the power really comes from multiple qubits because you get this nice scaling law where if you have n qubits the number of
Probabilities that you get to work with is 2 to the power of n so every single additional qubit you're doubling the number of probabilities that you have to work with
How do you know how to do that for a regular computer though
Well, I suppose with a regular computer if you're if you're adding numbers together
Yep something comes out. Mm-hmm. It's the same thing at the quantum computer
Your input is a bunch of probabilities which you know at the very start and all these gates change those probabilities in a controlled way
You know exactly how Hadamard or Phase or T or CNOT
you know exactly how it's gonna change those and you can write down exactly how it'll change those so you can
Mechanically do the computation in the same way that we can mechanically do it with adders or ale use or whatever
Just turns out that the most basic type of computation is actually a really it's a really large one
It's actually equivalent to a big matrix multiply. If you were to write this out your probabilities as a column vector
50% 25%
Whatever 7% etc, etc
Every operation in a quantum computer is actually specified as a matrix. You have a big set of matrix elements
Maybe it's like 1 0 0 0 0 0 0 0
1 1/2
3/4 whatever I'm making it up as I go along of course, but you know with certainty 100% certainty that this operation
Maybe this is like Hadamard on qubit 0 and Hadamard on qubit 1 or something like that
it's not but you know that this operation is gonna change his probabilities and I could if I wanted to
Manually go and compute this matrix multiplication. The thing is like I said this vector right here grows
doubles in size every time I add a qubit so it's better for a quantum computer to do it as opposed to me
or even a normal computer doing it
Yep, this multiplication happens on the order of 50 to 250
nanoseconds on a computer no matter the number of qubits that you have even if you have
250 qubits this vector right here would be 2 to the power of 250 which is some enormously large number
I don't even know an order of magnitude estimate of what that is
It's so bigger than any computer on earth could store bigger than any computer in the universe could store but nonetheless it will do this
Multiplication in 50 nanoseconds, which really starts getting into why quantum computers show promise for very fast or very powerful applications
How much does a quantum computer cost then?
Oh my gosh
All the components it costs a great deal for sure if you want to buy one and have it in your living room
Yeah, so one of the big popular ones is a very recent algorithm back in I think 2014 is when I came out