Dear students today we will talk about
hybrid proofs but to talk about hybrid proofs
we will use an example and one of the main
uses
of the hybrid proofs is when there is a
repetition of some underlying primitive
so for hybrid proofs
today what we will do is we will convert a
pseudorandom generator that has
n+1 bits of output
to another pseudorandom generator
that has n plus some lets say
pn where p(n) is polynomail
bits of output, so we are extending the output length of a
pseudorandom generator
remember this pseudorandom generator with n+1 bit output
we know how to create using
for example a one way function,
sorry one way permutation let's say
that has N bit output + the hardcore bit
associated with the one way permutation
so we can do this, we know how to do this now from
n+1 bit output PRG so a PRG that essentially gives
one more let's say pseudorandomness to us
we will obtain polynomially many pseudorandom
bits. The construction is
extremely simple. So
consider remember
the PRG needs to start with N bits
of pure randomness
So now what we're going to do is
let's say our n+1 bit
PRG is called Gn+1 so it's
domain is n bit values
and its range is
n+1 bit values.
now using this we will run this once
so let's run Gn+1 on this
n bit random value, what will it give us
it will give us
n+1 bit output.
so we started with
N bits of randomness here we now have n+1 bits after
we now have n+1 bits after running
Gn+1  once
now we will take the first n bits of
this
we will run 
Gn+1 again. what's it going to
output
it will again output n+1 bits so
n bits here one bit here and now we will
copy this one bit here.
so essentially
now we have n+2 bits after running
Gn+1 twice we have n+2 bits. now let's run
this Gn+1
one more time to again give us n+1
bit output so
n bits here. one bit here. and we will copy
these two bits here
so in total we have
n+3 bits now.
if I continue running Gn+1
on the first n bits of this value eventually
what I will obtain is
if I run this 
in total P(n) many times
I will obtain n + p(n) bits at the end
So remember
what we said. If I run
Gn+1 once I have n+1
more bit
If I run Gn+2 twice I have
n+2. If i run three times 
I have n+3
which means if I run it p(n) times
I will have n+p(n)
now with these what we are going to construct is
the following
our goal is to construct G let's say
n+p(n) this is a new pseudorandom generator
we are constructing its input
is n bits random value
and its output will be n+p(n)
bits of pseudorandom value
so if I run
G(n+1). essentially
p(n) times using this
first n bits of the result and then keep the
extra bits here this
will give me my construction for
Gn+p(n) remember p is a polynomial here
so by running this pseudorandom 
that has n+1 bit output
P(n) many times I'm going to obtain Gn+p(n)
and if this Gn+1 is a 
polynomial algorithm
this whole Gn+1 will take
polynomial time.
