What we need to now look ahead to in the course is to try to expand the category of varieties okay, so far we have been looking at affine varieties and quasi-affine varieties which are open subsets of affine varieties but then we need to also include more general affine varieties and the next in this list are the projective varieties and the quasi-projective varieties and the projective varieties are they have properties is very different from the properties of affine varieties okay. So you know what I wanted to start with is since we are looking at we have been looking at affine varieties okay, the first thing I wanted to say is about the so called Jacobian conjecture which is a very simply stated conjecture but which is open even the simplest case okay and the reason it makes sense to talk about that conjecture now is because you know what automorphisms you know what morphisms of varieties are you know what are isomorphisms of varieties and you know how to characterize isomorphisms of affine varieties okay. So I will first recall the following thing from the previous lecture so if you recall x any variety of course here for us any variety will mean either affine variety or quasi-affine variety okay and y an affine variety which means y is an irreducible close subset of some affine space over an algebraic closed field of course then we have a natural bijection so on on the one hand you have morphism of varieties from x to y that is bijective to homomorphisms of k algebras from Ay to O x okay we proved this bijection and in fact what was the what was the if you recall this map if I call this map as alpha then how does how is this map defined it is the map in this direction is just given by pull back of regular functions okay so you know in other words if f from x to y is an element on this side you need some morphism from the variety x to the affine variety y then you send it to alpha f this alpha f is going to be a k algebra homomorphism from the ring of polynomial functions on y to the regular functions on x and that is very very easy namely you give me a polynomial function let me put it as p on let me put it as capital P give me a polynomial function capital P on y okay you compose it with f to get a regular function on x note that a of y is the affine coordinate ring of y the coordinate ring of functions polynomial functions on y it is just polynomials restricted to y and these are the polynomial functions on the affine space in which y sits y is an affine variety so y sits inside some an the ambient the bigger affine space and on this bigger ambient affine space you have the polynomials in n variables and each of these polynomial functions by evaluation defines a map into k which can be thought of as a map into a1 and it is a regular function of course and you restrict such polynomials to any subset in particular to y and you get a polynomial function on y only the only thing is that this polynomial function on y is not represented by unique polynomial it is represented up to addition by a polynomial in the ideal of y okay which consists of polynomials which vanish on y okay so give me a polynomial restricted to y and I just compose it with f first apply P then apply f that is a regular function on x because a polynomial function restricted to y is of course a regular function on y and what is happening is I have a regular function on y and then by composing it with f I get the pullback of the regular function on x and the pullback of a regular function has to be a regular function because f is a morphism because that is already built into the definition of a morphism. So this is how this map is defined okay and there is also there is also the if you look at the map in the reverse direction alpha inverse how is that defined well give me a give me a home of some phi from k algebra home of some from Ay to OX okay and then of course you know if of course you know you assume that y is thought of a sitting inside affine space and Ay is just well kf is identified with kf x1 xn which is the polynomials on the affine space dxi being the coordinate functions divided by the ideal of y okay and so what you do is that you just take the xi you take the xi bars which are elements here they are the images of xi in this quotient okay. So xi bar just denotes the coset xi plus iy in the quotient ring okay and you simply send it to a certain function let us call it as hi it is a regular function on x and the fact is that you will what will happen is that from x to an you will have a map which will send any point x small x to this h1 x this n tuple defined by the hs hn of x because I have n of the xi's so I have their images here which are n of the xi bars. So I get n of the hi's okay and then I evaluate this point at each of these n functions I get an n tuple which is a point in an this is the map and the fact is that this map will factor through a morphism g through the close irreducible close of variety y of an this diagram will commute and this phi will be nothing but alpha of g this is the surjectivity okay. So start with a phi here then you get these hi's using the hi's you define a morphism of x into an the morphism will land inside y and if you call that morphism is g then alpha of g is the phi that you started with okay that is the surjectivity that gives all the surjectivity and that also defines how that the alpha inverse of phi is this g okay g is just alpha inverse of t this is how you get the inverse map and that is how this is a bijection okay and as a corollary to this what happens is that if you know if x is also an affine variety then O x can be replaced by A x because for an affine variety the ring of regular functions it can be naturally identified with the polynomials restricted to the affine variety okay. So and alpha will take a bijection to a bijection okay and therefore what it will tell you is that if x is also affine then x and y are in fact I should say alpha will take an isomorphism to an isomorphism okay that is an invertible not just a bijection but an invertible morphism to an invertible morphism an invertible morphism varieties will go to an invertible ring home morphism okay that is a ring isomorphism and isomorphism of varieties will go to an isomorphism k-algebras okay. So alpha will carry isomorphism to isomorphisms provided you know x is affine alright and what that will tell you is that it will tell you that 2 affine varieties are isomorphic if and only if they are coordinate rings affine coordinate rings that is just the rings of polynomials on those varieties are isomorphic. So the corollary to this is the corollary to this is x affine and y affine are isomorphic if and only if if and only if Ax and Ay are isomorphic of course this the isomorphism when I say x and y are affine and isomorphic there I mean isomorphism is varieties and when I say Ax and Ay are isomorphic I mean isomorphism as k-algebras okay. So 2 affine varieties are isomorphic if and only if they are rings of polynomials the rings of polynomial functions on those affine varieties are isomorphic as k-algebras okay and how many such isomorphisms are there there are as many as there are as many isomorphisms here as there are isomorphisms here okay. So you know as a particular case what you can do is well you know I can take I can take for x and y just An itself. So you know take x equal to y is equal to An so what you will get is you will get morphisms of varieties from An to An is is bijective to the k-algebra homomorphisms from Af An to Af An to Af An and of course you know Af An is the polynomial ring. So you know if you want well both of these are equal to k if you want x1 etc xn okay if you take them to be the ring of polynomials if you take the ring of polynomials to be the ring of polynomials in n in determinants x i's okay and in particular if I look at the automorphisms so the word automorphism means a self isomorphism it is a morphism is from one object to another object an automorphism is a morphism from the object back into itself and in fact a morphism of an object back into itself in general is called an endomorphism okay and an invertible endomorphism is called an automorphism okay. So here of course when I say morphisms from An to An actually I am looking at the endomorphisms of An so this is all the endomorphisms these are maps from An back into itself they are endomorphisms so of course the you know the other notation is endomorphisms as varieties of An and of course here what I will have is endomorphisms as k-algebras of the polynomial ring Af An okay and what are the automorphisms are the invertible endomorphisms they are i's they are endomorphisms which are also isomorphisms okay so they are self maps they are morphisms of the object back into itself which can be inverted okay. So if you look at the automorphisms that is of course if you look at it carefully this is a group because the composition of two morphisms is again a morphism therefore the composition of two automorphisms is again an automorphism so this is a group and on the other hand you also have a group here this is automorphisms as k-algebras of k well let me write as A of An okay. So and then alpha carries automorphisms to automorphisms okay so this alpha will also give you a map like this okay you start with a morphism a morphism is an isomorphism which means it is here if and only if its image is here and conversely okay and now the you see the Jacobian conjecture is connected with automorphisms of the polynomial ring alright. So let me make a statement so what I want to look at is let us take any morphism from An to An okay how is it going to be given it is going to be given by N polynomials in the N variables okay any element of phi of R let me use f of morphisms of varieties from An to An is given by polynomials in fact so let me write this f1 etc fn in N variables so N polynomials in N variables that is just because of this bijection okay. So you know what are all these you know I start with so here is my f from An to An then you know I have this is mapped that is a point that is an element here it is mapped to an element here this is alpha of f and this alpha of f is a map from well k x1 etc xn to k x1 etc xn where I am identifying the ring of polynomials on An with k x1 etc xn okay and how is a from a polynomial ring a map is dictated by the images of the variables. So you know if I take alpha f of xi this is what alpha f takes xi2 and this N tuple dictates the k algebra of morphisms alpha of f because the universal property of the polynomial okay so what I want to tell you is that and it is these alpha f of xi that I am calling as fi's okay so let me write that here I need a better duster. So I have xi going to alpha of f of xi okay and I am calling this as fi okay so essentially what you are doing is that corresponding to this morphism An to An that corresponds to giving me N polynomials okay and that is what I have written in the previous line that a morphism that a morphism from N to N is simply given by N polynomials in N variables okay and when is this morphism an isomorphism when it has an inverse okay f is an automorphism that is it is a invertible morphism namely an isomorphism if it has has an inverse okay and so it has an inverse f inverse so you see what will happen is I will have an f inverse which again will go from An to An okay and that will be mapped under alpha to alpha of f inverse that will turn out to be again a map k algebra homomorphism from the polynomial in N variables to again to itself back into itself and that is again going to be dictated by the images of the xi's under this so alpha of f inverse of xi okay and well if I call this as you know if I call this as gi if I call this as gi which means I am just calling f inverse as gi okay by my previous notation if f goes to f1 etc fn then f inverse equal to gi will go to g1 etc gn alright and what you can see immediately is that see you will have if I start with the point x1 etc if I start with the point with coordinates lambda 1 etc lambda n that will go under if I apply the map f to it what I am going to get is f1 of lambda 1 lambda n and so on fn of lambda 1 etc lambda n this is the point is going to go to okay that is what it means to send the xi's to fi's under alpha of f okay and now this point is if I apply if I apply f inverse which is gi this point has to go back to this but under f inverse where will this point go see this point will go to g1 of f1 of the lambdas I will put a I will put it like this dot dot dot gn of f1 lambda fn lambda this is what it means so what where of course you know where lambda underline is just lambda 1 through lambda n okay. So what you get is gi of f1 lambda etc fn lambda is simply lambda i for every i this is what happens if you have an automorphism right and now what you can do is you know this holds for all lambdas okay so you can write this in a variable form as gi of f1 of x fn of x is equal to xi for every i you can write this in variable form okay which make sense alright and then you know for example if you want you can take the partial derivative on both sides with respect to any xj you will get of course if it is x if you take partial derivative with respect to xi you will get 1 on the right side if you take partial derivative with respect to xj of j not equal to i you will get 0 then what you can check is that you can check you can check that the Jacobian of dou fi by dou xj is a non-zero constant in k. So what you must understand is that you see I take each of these polynomials each of these fi's each fi is a polynomial in n variables and if I differentiate partially with respect to each variable I will again get a bunch of polynomials okay I have n polynomials I have the n fi's I differentiate each n of them with respect to the n variables. So I will get I get this Jacobian matrix okay that is in general going to be a matrix of polynomials okay because you take a polynomial in n variables and differentiate it partially with respect to one of the variables the resulting is the resulting thing is again a polynomial in n variables okay and then therefore if you look at the Jacobian determinant then in fact I think the correct maybe it is better to write it as course here x underline stands for x1 through xn and maybe it is better to write this as Jacobian of f and call it like this okay and the point I want to make is that you see if you calculate the Jacobian determinant it is going to only be you expect it only to be a polynomial because every entry is a polynomial gotten by taking a partial derivative with respect to certain one of the variables and the fact is f has an inverse g okay and therefore you know if you write down everything f followed by f inverse is identity okay and for the identity function if you take the Jacobian you will simply get the identity matrix okay so finally what will happen is that you will see that the Jacobian polynomial of f into Jacobian polynomial of g will if you take the product polynomial it will be equal to 1 which will be the Jacobian polynomial of the identity map which is just the identity matrix you have two product of two polynomials equal to 1 so each of them has to be a constant it has to be a non-zero constant that is why Jacobian of f will be a non-zero constant. So what is a simple argument shows so far is that you know if I start with an automorphism okay I end up with I end up with you know you have bunch of functions I end up with n polynomial functions to start with an automorphism f I end up with n polynomial functions whose Jacobian is a non-zero constant okay that the converse of this is true is the Jacobian conjecture okay so the Jacobian conjecture is if f is not known to be f is not given to be to be an isomorphism initially does then the condition that the Jacobian of f is g is a non-zero constant implies f is an automorphism okay this is the Jacobian conjecture the Jacobian conjecture is that if I start with an f which I do not know is invertible I do not know is an isomorphism but suppose I have the condition that if you take the Jacobian of f namely you take the Jacobian of this n polynomials that specifies f okay under this correspondence if this Jacobian is a in generally you expect it only to be a polynomial in invariables but suppose it turns out to be a non-constant I mean a non-zero constant polynomial then the Jacobian conjecture says that f should be invertible that means you should be able to find another set of polynomials n polynomials which if you plug in to f the f's you will get back id that is the Jacobian conjecture and the point is that somehow so another way of stating that is that you know there is a map from here to the polynomial ring given by taking determinant of the Jacobian okay every endomorphism is given by n polynomials and you take the Jacobian determinant of those n polynomials you will get a polynomial. So you get a map from this endomorphism to your ring of polynomials and what you have seen is that the inverse image of k star that is non-zero elements of k that well that contains this okay namely every automorphism for every automorphism the Jacobian is a non-zero constant but the question is whether if you take the inverse image okay then it will be exactly this that is the question okay namely if you give me n polynomials okay for which the Jacobian determinant is non-zero constant do those n polynomials actually correspond to an automorphism is the question. So the question is whether the inverse image of the non-zero constants under the Jacobian determinant map from this endomorphism is exactly this we know it contains this but what is required to show is that this is exactly this okay that is the Jacobian conjecture and the beautiful thing is that even for k equal to complex numbers and even for n equal to 2 just polynomials in 2 variables this is open okay and it is a very difficult problem and the beautiful thing is that in the case of complex numbers we have also complex analysis holomorphic functions we have that theory also but it does not seem to have helped okay. So this is a very deep problem and working being able to solve this or being able to give a counter example to this is worth being awarded by a fields medal which is the equivalent of you know well priced in mathematics. So that is the depth of the problem it is a very hard problem called the Jacobian conjecture and the point is it can be stated now because you people know that there is a bijection between you know isomorphisms of affine varieties and k-algebra homomorphisms of their coordinate rings so that is the reason why I wanted to state it here. So maybe I hope that many or at least some of you will go ahead and try to tackle this problem in your future career okay alright. So now okay so now this is just to bring in this Jacobian conjecture what I want to do now is I want to go to the question of more general varieties okay so this is what I want to do next right. Now so let me give first an example so what are the varieties that we know so far we know affine varieties and we know quasi-affine varieties okay and quasi-affine varieties are open subsets of affine varieties and you know that there are quasi-affine varieties which are actually affine and for example basic open subsets they are all quasi-affine varieties but they are actually isomorphic to affine varieties in affine space of one higher dimension okay because of the so called Rabinovich trick okay. So the basic open set defined by non vanishing of a polynomial is a quasi-affine variety in that affine space but in an affine space of dimension one more it becomes a closed irreducible closed sub variety okay. So the question you can ask is are there quasi-affine varieties are not affine so I want to give an example of such a specimen okay and just to tell you that there are quasi-affine varieties are not affine varieties. So here is a fact so here is a claim or I can just put it as lemma a2k-origin is not affine is quasi-affine but not affine. So here is the lemma actually it is more than a lemma it is you can call it a theorem because you are going to use this result and you know that this result is in it is a grand version of the Nulstrand sets.  So it is usually or maybe I will have second thoughts and at least call it proposition. So what are we going to do? See first let us understand the statement it is quasi-affine because it is an open subset of an affine variety namely it is an open subset of a2 and it is a non-empty open subset okay because I have only deleted the origin alright it is a complement to the origin. So it is a non-empty open subset so it is certainly a quasi-affine variety but I want to show it is not affine what do you mean by saying it is not affine what I mean by that is it cannot be isomorphic to any affine variety that means you cannot find an isomorphism of this punctured plane okay this is a punctured plane this punctured plane you cannot find an isomorphism of that with an irreducible closed subset of any affine space that is what it means okay that is what it means to say that it is not affine right. So it means that if I take any map from the punctured plane into any affine space certainly it is never ever going to be a closed embedding I can never expect it to be a closed embedding alright. So you see it is like if I if you state it in this generality it looks the proof looks very difficult to you know verify because you are trying to say that I will have to just try to think of look at all possible you know maps morphisms of this into various affine spaces and I will have to check that each one of these is not a embedding onto a closed subset it is not an isomorphism onto a closed subset that is how that is what it means okay but there is a but the way we prove it is rather we use all the techniques that we have developed so far that is some of them. So we prove by contradiction we go by contradiction so suppose a2-point a2-origin punctured plane is affine okay now again what that means is that I am assuming that is isomorphic to an affine variety okay. So see if it is affine then it has an affine co-ordinate ring alright. So then we have a bijection as we have seen there is this bijection alpha which is morphisms of varieties from a2-point-origin to a2 so I have this map from this into homomorphisms of k-algebras from A of a2 to O of a2-point okay. So I have this bijection that I have already written down here okay the set of morphisms from any variety into an affine variety is given by is in bijection with the set of all k-algebra homomorphisms from the co-ordinate ring of the target affine variety to the regular functions from the source variety right. So I am just applying that here but I am noting that well you know since I have assumed a2-point to be an affine variety this can be replaced by A of that okay and of course so this is this can be replaced by A of a2-0,0 and what this means is that what does this mean this means see because I have assumed a2-point as affine there is some embedding of it as a some embedding of it into some affine space some big affine space I do not know what dimension and certainly dimension greater than or equal to 2 alright and in that affine space since it is a realize as a closed sub variety I take the ring of polynomial functions there and that is what this means and these two are one and the same okay that is something that we have proved for an affine variety the regular functions and the ring of polynomials are one and the same okay of course by polynomials I mean polynomials are restricted to the affine variety right. So now the so in particular you know I will look at the canonical inclusion I will look at the inclusion map a2k-the origin this is sitting inside a2 and there is a natural inclusion there is this map sorry let me put the I here okay then I will get this will go to alpha of I okay and what is this alpha of I this alpha of I is going to be a map from k of let me write this like this k of x1 etc xn to you know O of a2k-the origin okay I will have this now the you know that under this bijective correspondence okay oh sorry I should know I should not write x1 etc xn it should be only just x1 x2 sorry of course yeah so alpha I is from k x1 x2 because it is just affine space two dimensional affine space is just polynomials in two variables so that n I wrote below before was equal to 2 right. So I have this map see okay so what I told you is that under this bijection you say I told you isomorphisms correspondence isomorphisms okay what I will prove what you can actually see is that alpha of I is actually an isomorphism therefore it will mean that I has to be an isomorphism but I cannot be an isomorphism because it is not even surjective because there is a point missing okay so that is how you will get the contradiction okay then this contradiction will prove that a2-a point cannot be identified with any close sub variety of any affine space so it is not affine okay. So we claim that alpha of I is an isomorphism this would imply that I is an isomorphism and that is the contradiction so this contradiction will prove that our assumption our original supposition that the point of plane is affine is wrong okay so this proof proceeds by contradiction right. So how to show that alpha of I is an isomorphism okay there are two things that need to be done it is a k-algebra homomorphism I have to show its injective then I have to show its surjective okay. So let me explain why alpha of I is injective so first of all let us understand what alpha of I is alpha of I is you know this alpha is just the map that is induced by pull back of regular functions okay so what is the meaning of alpha of I it means you give me an element here namely it is a polynomial in two variables so it is a function on this a2 okay and if you compose it with I which amounts to just restricting the polynomial to the punctured plane that is what it goes to. So it is just a polynomial going to polynomial restricted to a2-a point a2-the origin this is what the this is what the map is because pull back means you take a regular function the target you compose it with the map in this case the morphism is I but composing a morphism with I is the same as restricting that morphism because I is just the inclusion of this subset okay so pulling back a back a map under an inclusion is just restriction to the subset corresponding to the inclusion. So what is this alpha of I it is just take a polynomial and restricted to the punctured plane okay now how would I show that alpha of I is injective home morphism by showing its kernel is 0 because after all it is a K algebra home morphism to check it is injective I have to just show its kernel is 0. So if I have a polynomial function okay if I have a polynomial which if I restrict to a2-a point vanishes okay then it vanishes everywhere because you see if a polynomial vanishes on a set it will also vanish on the closure of the set because of the continuity of the polynomial for the Zariski topology okay. Therefore if the polynomial vanishes if this is 0 then you are saying that the polynomial restricted to the punctured plane is 0 but the punctured plane is a dense open it is an open subset it is a dense open subset any non-empty open subset is irreducible and dense okay. Therefore this polynomial is going to vanish on a dense open subset therefore it will vanish everywhere by continuity. So what will tell you is that this polynomial as a function vanishes everywhere and in this case this because you are working with an infinite field is an algebraically closed field so it is infinite. So if a polynomial vanishes as a function then it has to vanish as a polynomial. So see so that tells you that alpha of I is injective okay so alpha of I of P is equal to P restricted to a2- the origin is equal to 0 implies P equal to 0 so alpha of I is injective this tells you that alpha of I is injective the only thing that I will have to now prove is that alpha of I is surject if I prove that then I would have then I am done then it will then I would have proved that alpha of I is an isomorphism and we would get the contradiction that we want alright. So how do I prove it is surjective so we do it like this so well alpha of I is surjective how do I prove this well so what I do is I start with I start with the regular function on the punctured plane and I have to show that it is given by the restriction of a polynomial okay. So what is the statement I start with the regular function on the punctured plane and I have to prove that this regular function is nothing but restriction of a polynomial in two variables okay. So start with a regular function phi in on the punctured plane to show phi is equal to restriction of a polynomial in kx1x2 this is what I have to prove alright this is what I have to prove. Now so you know so let me draw a diagram so you have something like this you have the origin this is a2 and I have thrown out the origin so I will put a circuit here okay so this is the punctured plane and I have a regular function on this namely well I have a phi which takes values in a1 so this is my phi and I have to show this phi is actually coming from a polynomial right and what is the meaning of saying that this is a regular function let us go back into that give me any point x in a2 okay then you know I can find an affine neighborhood I can find a neighborhood of x ux okay so you know so this is a neighborhood of x okay and this is I must admit that this diagram is not accurate because the neighborhood does not look like that any neighborhood of a point is going to be a non-empty open set so it will be dense okay so more ideally I should think of the neighborhood well as a compliment of some curves okay right this is how it should look like but then you know so you know if I take a neighborhood ux of the point x it is a compliment of points of curves alright because only closed subset the closed subsets here are curves and these are the one dimensional closed subsets and zero dimensional closed subsets will be points so it will be it will be the compliment of some curves and some may be finitely many points okay that is how an open set here will look like so given a point x I have this neighborhood ux and then what I have is the fact that it is a regular function means that on this ux it is given by a quotient of polynomials with the denominator polynomial not vanishing on ux okay so let me write that there exists an open set open of course the Zariski topology ux containing x and polynomials g i gx hx in kx x1 x2 such that phi restricted to ux is the same as gx by hx restricted to ux and hx does not vanish on ux okay this is the definition of what a regular function is a regular function is something that is locally given by quotients of polynomials and to make sense of the function defined by quotient of polynomials the denominator polynomial should not vanish because you cannot divide by 0 okay so this is what it means alright but now notice that the you know the what I need to prove is that phi comes from a polynomial alright and if phi came from a polynomial then that polynomial restricted to ux will be equal to this quotient of polynomials restricted to ux okay and you know if I cross multiply it what I will get is that I will get hx times that polynomial equal to gx everywhere okay because the fact is if two polynomial functions agree on an open set they agree everywhere if two regular functions agree on an open set they agree everywhere okay the reason is because open sets are dense and polynomial functions regular functions they are all continuous and if a continuous function is 0 on a non-empty open set it is identically 0 so if two continuous functions are equal on a non-empty on a dense set okay then they have to be equal everywhere if two continuous functions are equal on a dense set then they have to be equal everywhere by continuity alright so what this will tell you is that you know finally I have to prove phi is a polynomial okay so it will tell you that hx has to divide gx okay it will tell you that the polynomial will be equal to gx by hx on ux okay but if I cross multiply it will tell you that polynomial into hx is equal to gx on ux but then that will mean polynomial into hx equal to gx on whole affine space because if two polynomials coincide on an non-empty open set they are the same okay. So what it will finally tell you is that hx divides gx okay so to obtain a contradiction I will assume hx does not divide gx and I will try to obtain a contradiction so assume hx does not divide gx for every x I assume that of course you know I am in the polynomial ring which is a unique factorization domain and it makes sense to talk about when one divides the other because you have unique factorization any polynomial can be uniquely factor into irreducible polynomials so this assumption is this assumption will be true only if phi does not come from a polynomial function mind you please understand I have to prove phi comes from a polynomial function okay in other words I have to show phi is just restriction of a polynomial alright but if phi is a restriction of polynomial it will mean that h divides g okay conversely if h divides g alright then phi will be restriction of a polynomial alright so if you assume phi does not come from a polynomial which means if you assume subjectivity is false then you are actually assuming that hx does not divide gx that is what you are assuming okay so let us assume that and come to a contradiction. Now note that on ux intersection ux prime we have well gx by hx is equal to gx prime by hx prime okay you will have this alright and that will tell you that you know gx hx prime is equal to gx prime hx alright and now you see hx divides the right side so hx divides this but hx does not divide gx so it has to divide hx prime okay and you will similarly get hx prime divides hx so the moral of the story is that hx and hx prime will differ by a nonzero concept okay so this will tell you that hx prime is equal to some lambda x x prime into hx this is what you will get okay that is because you see hx let me again repeat the argument hx divides the left side so hx divides this product so it has to divide it does not divide gx that is our assumption so it has to divide hx prime but this argument is symmetric in x and x prime so you will also get hx prime divides hx okay and therefore if two polynomials divide each other they have to just be constant multiples of one another and that constant of course would be a nonzero constant okay so this lambda xx prime is not nonzero and well if you put that back into this what you will get is that you will get the gx into lambda xx prime is equal to gx you will get this okay so it also tells you that the g's are they differ by a nonzero constant multiple of one another alright now what I am going to do is I am going to do the following thing you know a2k is noetherian this is noetherian and you know any subspace of a topological space that is noetherian is also noetherian so this will tell you that a2- the function plane a2-0 0 a2- origin is also noetherian and you know noetherian topological space is quasi compact okay therefore what will happen is that so what you will get is that this is quasi compact so you will get a2- is quasi compact in fact one characterization of noetherian topological space is that every subspace topological space is noetherian if and only if every subset is quasi compact okay so this is quasi compact but you know if I take all the ux's as x varies in a2-0 point I get an open cover for a2-0 point and that is quasi compact so finitely many of these should be enough to cover a2-0 point so this implies that the open cover ux x belonging to a2-0 point a2 puncture plane has a finite sub cover say ux1 union uxn uxm is equal to a2-0 point and mind you each open set is being taken in a2-0 point okay I am for every point in this I am looking at an open set there if you want the only problem is that this open subset might contain the origin but then you can throw it out you can simply throw it out from an open set and replace it with you can puncture it with the origin if it contains the origin so you see this therefore this union will be this alright now well you see what this will tell you is that if you look at it the it will tell you see the hx does not vanish on ux okay so it will tell you that ux is contained in dhx okay so it will tell you that ux is contained in dhx alright and therefore what it will tell you is that all the dhx corresponding dhx's will certainly contain this alright. So this will tell you that dhx1 union dhxn xm will be a2-0 point or it may even be a2 itself so in any case every dhx contains ux so you know if you take the union of all these dhx it has to contain this punctured plane it might even contain the origin alright. Now what I want to tell you is that each of these has a meaning if you if you exhaust each case you will get the contradiction if dhx1 union dhxn is equal to a2 that is equal to the punctured plane what this will tell you is that if you take compliment it will tell you z of hx1 hxn is the point because you know if I take compliment of dh I will get zh and intersection of all the zh is just z of this okay but you see for a point this is actually z of the maximal ideal x1 x2 because the point 0, 0 corresponds to the 0 set of the maximal ideal x1, x2 alright. But you see and mind you that you know all the h's they are all multiples of constant multiples of one another so if you look at the 0 set of all the h's it is essentially 0 set of a single polynomial and you are seeing the 0 set of a single polynomial is a point which cannot happen because 0 set of a single polynomial has to be a curve okay because you know that the you know there are these we have seen this in one of the earlier lectures that there is a notion of geometric hyper surface and there is a notion of commutative algebraic hyper surface it is a locus which is given by vanishing of single polynomial and it has a dimension one less okay. So if all the h's are just multiples of one polynomial then this is just the 0 set of one polynomial and you are seeing a 0 set of one polynomial in two variables is just a point that cannot happen the 0 set of a polynomial in two variables has to be a union of hyper surface. So in this case it should be a union of curves it cannot be a single point so that is a contradiction a contradiction okay the 0 set of a single polynomial in two variables cannot be a single point. On the other hand so the other possibility is that the union of all this is A2 okay if the union of all these things is A2 it will tell you that all the this is something that we have already seen it means that all the h's will generate the unit ideal the ideal generated by the h's will be the whole polynomial okay if dh hx1 dhxm is A2 what it means it will mean is that z of hx1 hxm is a null set okay and this means that the ideal generated by hx1 hxm is the whole polynomial because one version of the notion says that if you take a non if you take a proper ideal a non trivial ideal then the 0 set of the ideal cannot be the null set okay. So the 0 set of an ideal is a null set if and only if that ideal contains is the unit ideal right. So but then you know but all the h's are all multiples of one another so you are saying that this polynomial in two variables is generated by a single element and that is again a contradiction okay. So again a contradiction okay it is a contradiction because you know all the hx's are multiples of one another so this is the ideal generated by single polynomial and you are saying the ideal generated by single polynomial contains one. So it will mean that that polynomial multiplied by some other polynomial is equal to 1 which would mean that that polynomial itself is a non-zero constant but then of course I have assumed all the polynomials the h's so it will finally reduce to assuming that all the h's are constants but then that will tell you that phi's are all polynomials but I already assumed that phi does not come from a polynomial so again get a contradiction okay. So both these contradictions demonstrate that you know if you assume that this phi does not come from a polynomial then you get a contradiction so it means phi comes from a polynomial every regular function and the punctured plane is the restriction of a polynomial in two variables therefore the map is surjective and we are done okay. So that finishes the proof and therefore the moral of the story is the punctured plane is an example of a Cauchy affine variety which is not affine okay. So we do have Cauchy affine varieties which are not affine right so I will stop here and what I am going to do in the next lecture is I am going to tell about projective varieties and Cauchy projective varieties which are the more general varieties than affine and Cauchy affine varieties okay. So let me stop here.


guys, I'm Braden, Editor-in-Chief of SupplementsWorld.com. Today we'll be going through a few questions that you guys have left with us and who best to answer than our fitness expert, Rob Riches. Yes, you right now. Thank you for having me. So, today's subject is competing and modeling. Okay. Next one is coming from Bill from Austin. This is question two, how long do I need to prepare for a competition? 10 to 12 weeks. Sometimes it could be a little bit longer. And the reason we say three months is from a starting point of reasonably good shape, fairly moderate to low body fat. So this isn't just anyone saying, hey, I'm going to do a show. I'll give myself three months to compete. You need to have a good starting foundation. You need to have a good understanding about training, about nutrition and sort of a solid maybe three or four, six months of training under your belt. Then from that point, you can start to manipulate me some changes over the course of eight, 10 or 12 weeks. Manipulation to your diet, increasing of your cardio and maybe a more pinpoint laser-like focus on particular regions of your body. And we need that long to make those changes gradual as opposed to trying to do everything within a shorter space of time. That way you can hold on to more lean muscle mass and start to lower your body fat percentage without just dropping weight from everywhere. Rob, thank you very much. That covers our fitness questions. And guys, by all means, if you have any questions, further questions from what we've spoken about or any new questions that you would like to ask Rob, shoot us an email. Yeah, leave a comment on this video and we'll try our best to answer all the questions we can. And until next time, please follow us on Facebook or YouTube and Instagram, Twitter, and so on. We've got content pretty much daily relating to training, nutrition, supplementation. If you have a question, I'd say Twitter is our best point of contact just because we're on it all day. But if not an email and one of the team, I guess we'll find it and shoot it over to us next time. Bye.


So our next speaker is Benze Arato from BI Consulting. He also organizes the PiData Budapest Meetup, and he is a visiting lecturer at the Central European University, where he is teaching courses on data visualization and visual analytics. So welcome, Benze, and let's start. Thank you for your kind introduction, so I can kind of slip my first slide. Just one thing I might be able to mention that this talk is kind of in the intersection of two of my kind interests, data visualization and working with Python. And during the talk, I kind of like to share my experience what I had when I was learning about different options which exist in the Python world for visualizing data. Let's start with a bit of thank you. This talk would not exist without the help, the works, the presentation, the talk for many people from the Python data visualization community. So thank you for all, and special thanks to Jim and Nicholas who was kind enough to provide feedback during the preparation for this talk, and my colleague Annette who helped with the code examples what you will see during the talk. So thank you very much. And the word of caution as well. At first the Python data with landscape is quite large. So this talk will only cover a subset of the libraries and not everything which is there. All libraries have pros and cons, and evaluation is always subjective. So what you will hear is actually my point of view, my personal opinion. You might have different preferences for how you would like to visualize your data. And finally a technical comment that the code samples was prepared on Google collab and works well there. But if you want to try them out in different environments, you might have to make adjustments. All right, first part introduction. The reason for this talk is came back to this very nice chart when I was researching the different options existing the Python visualization landscape. I was a little bit confused, but there is so many libraries that connected in very interesting ways. There seem to be libraries doing the same thing. They are libraries with different syntax. So I set out to kind of structure them in a way to create a map which will help me understand what kind of libraries are there, which are the main libraries and how they are built on each other. And this is what I will share today, but a bit of preparation before the main part of the talk. Many times we mentioned that some libraries are more low level detailed, whereas we can say imperative, which means when you have worked with the library, you have to exactly tell to the computer how you want the chart created with the exact steps. And with other libraries, you can go to the decorative way where you just tell the computer that what should be done. I need a scatter pod for two of these variables. And the library will kind of find out the exact details how they would work, which feels typically used by the higher level libraries when the code would be shorter, easier to use, easier to understand. The examples in the talk would use the penguin data sets. It's a very nice and funny data set recently released. It has data on several observations and different kind of penguins. So this is how it looks like loaded into a pandas data frame. We have a species information, which kind of penalties, the location, some measurements, other categories. This is the data set that creates all of the example charts. It is loaded into a data frame called DF. That's what you will see in the code examples. So the first major part of the talk is the charting libraries. And I try to group them together because I believe there is separate group of charting libraries which is connected to each other or building on each other. The first and probably the most well-known library is Matpotlib. There is a saying that everybody starts charting in Python with Matpotlib. This is the chart. This is the library that has been around for the longest time. It does many, many things. So it has a large number of use cases where you can use Matpotlib for academic publication, to data discovery and creating working libraries for any kind of digitalization need. It's a very nice thing in the digitalization world in Python that almost all of the libraries has a nice gallery where you can see at least what kind of chart is supported by the libraries. And also, typically if you click on a library then you will see a code sample so it's very easy to understand what kind of code you have to write to create in Matpotlib a bar graph or a horizontal bar chart or any other kind of chart which is supported by Matpotlib. All right, let's have a look our first example chart. So here what we create with every library is a scatter plot which kind of compares the build length and the flipper length for the penguins and we color the different species of the penguins in different colors and we have a legend and some axis titles. And in sense the method of the code is quite straightforward. We are importing the library. We are setting an option about the figure size. Then we are looping the species groups. So every kind of species we are adding a set of markers on the plot. Then we are showing the legend and setting some axis labels. It's understandable, it works well but you will see that higher level libraries will offer a much more shorter syntax creating a very similar chart. So let's start building our data visualization map. The background is Matpotlib is Matlab, the Matlib software package. It's an open source and option of variation of that and it is a charting library. And you know, in a sense you can use Matpotlib, you don't have to use anymore. But there is two major challenges working with Matpotlib which is a very common finding with Python users. The first that the Matpotlib because it's an imperative low level library you have to code many things manually and sometime you will wish for a higher level library easier to understand syntax. There is a Q&A there but anyway we have to continue on that. So one set of related libraries to Matpotlib will try to solve the first problem the low level, very variable syntax. Seaboard is one such library. The goal of Seaboard is to provide a higher level API or interface on top of Matpotlib. So it would be easier to create charts and also has quite nice visual defaults. So typically a Seaboard chart would look nice without any kind of further adjustments or settings. It has a special focus on statistical charts as well. So if you look for statistical work problems Seaboard will have the chart you need. There is a gallery as well but I will mention them just flip through them. And okay, let's have a look at the Penguin chart in Seaboard. You can see interesting things there. There are still importing Matpotlib because some options not present in the Seaboard API so it kind of goes down in the Matpotlib level and set there for example the figure size and the other thing you can see here that the actual code for creating the Skeptor plot is indeed much more shorter and I would say more easy to understand.  The other library I want to mention here is Plotline Plot9 has the same goal it's one to be a higher level library on top of Matpotlib but this comes from the philosophy from the R word and GG plot. If you ever worked with R you will know that in the R word GG plot is the data visualization library which is a very nice syntax so people who are coming to Python from R and has experience creating charts in GG plot then they will find plotline very very similar to GG plot and it would very easy for use for them because the syntax very closely copies the GG plot syntax. As you can see in some example it is a high level library you exactly need just three line of code to create the plot you are importing plotline and then you are setting the variables and then you are coloring them by the species and you are done everything else like the axis labels or the legend with the species is automatically generated you don't have to specify them manually. Okay there is a few summary slides during the presentation this is for later viewing so this is just when you review the presentation you can see what I told in the talk. Let's have a second look at our map so we have a core low level library and if you wish to use something which is a higher level easier to use then we can either go to Seaboard or if we have we already have no experience with GG plot then plotline would be a good library for them and this is the first group of libraries libraries a total and a higher level of wrappers around Matpotlib. Let's move to the second group if you are I told that there is basically two challenges related to using Matpotlib the first is the low level syntax and the second there was for a long time lack of any kind of interactivity interactive features so if you wanted to have like browser based javascript over visualization where you can have interactive features Matpotlib doesn't really did that that was the reason for the creation of bokeh which is I would say the probably the second most widely used and well known data visualization library in Python bokeh was created to be able to do interactive charts in the browser powered by javascript but it is actually a little bit more than just a charting library because the bokeh library also has interactive controls or widgets so you know sliders checkbox radio buttons and it has features for building applications as well so you can use bokeh as just a charting library or you can try to build complete applications and dashboards just in bokeh we have our gallery as well there with examples where to check out and then if you get to the code again I would say there is two things to see here the first that the bokeh code is kind of not short so you can see again here that bokeh is a lower level library where you have to specify many things manually you have complete control how bokeh works but you do have to learn the syntax and write the code to set every option the way you want and the more interesting part on the left side you can see the chart there the top right corner there is a toolbar this is where you can get the interactions you can zoom in into the chart you can select points you can save it and there is many more interactivity feature of bokeh this is just a presentation so I can't show the interactive feature to you but I will be share the Google Collab notebook with all of the example charts so you can try the interactive features for yourself after the presentation has been finished alright bokeh background let's move forward what we have here is our map so now we have bokeh as a second core low level library and now probably you can guess what's coming up of course there is higher level wrapper libraries for bokeh as well which would make it more easier for creating charts in a more short, more dense syntax the first I want to mention is holoviews it is a way for creating chart just by telling holoviews how your data look like and the chart would be auto generated for that an interesting part for bokeh is that for holoviews I'm sorry that it is supporting not just bokeh it also supports metapotlib as the documentation say there is different backends for holoviews the key point is here that once you learned the holoviews syntax and the holoviews AP course from creating different kind of libraries then just with the single line of code and maybe very minor adjustment you can have your chart generated either as bokeh base charts or metapotlib base chart there is even a new support for the plotlib backend so holoviews try to be a really an overall library which will serve as a common unification interface for several backends and if you are moving to the holoviews code example the holoviews penguin chart you can see that again this is just three lines of code because it's a high level decorative library we are importing holoviews we are setting the backend to metapotlib so the charts here is actually rendered by metapotlib and the actual chart creation code is just one line we are telling holoviews that we need a skeptor plot passing in the list of variables and setting some options for coloring and figure side much more shorter I would say than the pure bokeh version from the same chart or pure metapotlib version from the same chart there is actually holoviews is a high level library which wraps both bokeh or metapotlib based on your preference but there is more you can see there is some white space below holoviews because there are actually more than one high level rapid library for bokeh let me quickly flip through them there is hvplot which aims to create a common charting interface for several python data containers so the id is here then you can visualize your data stored in pandas or in dusk or in x-array with exactly the same syntax hvplot will read your data from the data container and then generates holoviews object so hvplot is based on top of holoviews and the actual charts will be then visualized by bokeh and now the interesting option is pandas bokeh library which is an independent project done by patricklobile if I pronounce it right the goal is kind of the same you have your data is in pandas or geopandas or python data frame and you want to plot them using bokeh then you can just import pandas bokeh and then you can use the plot bokeh function so just a single line of code for your data frame data visualized in bokeh it's a bit same in context same in goals that what hvplot does your data is in a data frame you want to visualize in bokeh the most simple way it's possible and it was very interesting to see the sponsor announcement for spotify because another chart for working for bokeh data would be chartify and it does come from spotify there is a very nice blog post where they described they wanted to have a standard highway easy way to create charts for spotify for all data scientists and they did not find anything which really liked so they created their own which is open source and that's chartify I don't have an example for that but on the chartify website there is very nice examples how you can use chartify to chart your data okay our summary sites for later viewing and let's have a look at the map so now we have two low level core libraries matplotlib and bokeh and we have several high level wrappers for each of them let's move forward the third group of pytovisualization libraries in my classification would be the plotly family it is actually several several components building on top of each other coming from the same company the same group of people the lower level libraries is the plotly open source libraries there is a pyto library there is an r library my understanding is there is also a julia library is in the works and then there is the plotly javascript open source library this is all of the pyto or julia visualization so you can create your low level charts in pyto or hopefully soon in julia and they will be rendered by the plotly javascript library if you have a closer look at the python open source I'm sure you will see that there is a huge number of chart types supported this is just the first part of a long list but on the left side you can see that there is fundamentals basic chart, statistical chart scientific chart, financial chart map there is even support for 3D charts and my understanding is that it's kind of a unique feature supporting 3D chart generation which no other pyto library does really well so if you need 3D chart probably plotly would be a good solution for you but I have no code option for plotly because since the last year there is a new higher level library from plotly called plotly express and the recommendation is now that if you want to create plotly based chart you should start at plotly express you can always get down to the plotly level if you need there is something you can do in plotly express but in general speaking the plotly express library would be a more easier and nice experience for creating plotly based charts this is the documentation side you can see that there is more than 30 different functions in plotly express so there is many many chart type which you can actually create just working from plotly express without moving into the lower plotly level charting API let's have a look at the example code this is how you can create the ping-ring chart in plotly express it's very very straightforward you are importing the library and you are just telling it I need a skeptic plot here is my data in the data frame here is my here's my variables I want to be plotted I want to mark colored by species and we are just setting the size and everything is done very very nice sweet short syntax background information and then so now we covered three groups of libraries the map plotly family let's call that way the bokeh asset of libraries and the plotly get and the plotly get object and we have four four set of libraries have to be discussed and that would be a little bit different than the previous ones so because Viga and Viga like those are not libraries they are visualization grammars which means that they are way of describing your visualization appearance and interactivity in json format in json objects Viga is a low level very detailed specification and there is Viga light which is a little bit more which is more structured easier to describe a standard chart you can see here that the bar chart in Viga needs a very long description about the hundred line of codes the same charts in Viga light just half a screen because Viga light is a higher level way of describing chart and there is a Python library for generating those descriptions which could alter this is definitely built on top of Viga and Viga light so if we move to the code we can see that alter it is very very high level we are just importing them and there is just one command to create the chart we are telling the alter that we need the mark to be circles we are encoding two variables at the x and y axis and we are encoding the color by the species variable and we are setting some properties so this is our final version of the charting libraries part we have four major way of creating charts and the wrappers similar with Bokeh with the protley line of code and Altair as a fourth way and we are almost finished here but let me just mention that sometimes you need not just simple charts you want to build dashboards or data apps which has typically more typically more than one chart and that's some interactivity controls selectors and probably a way to run code and update your dashboard or app with the results of the code and there is four options also for them I'm just mentioning all of them there is protley from protley dash protley dash from protley the company are working with our creating protley and it's let you create nice dashboard kind of visualization and apps is an example you have your selectors on the left and the visualization key PIs and charts on the right there is a panel which is anaconda related I would say the same people are working on that who are writing collobius a very nice feature of panel that supports inclusion of different kind of charting libraries on that simple dashboard you can see that the same chart is created in HV plot in Altair in Metcotelep and in protley and they are displayed on the same dashboard with some interactive controls so panel is a friend to everyone there is Voila there is a different approach a very nice approach I would say Voila aims to be to provide an easy way to turn your Jupyter notebook into an interactive web apps so this is how something this is how Jupyter network look like after working in Voila your code cells is kind of hidden so the end user just see your widgets and visualization results but they don't see your code they can't run any kind of code it's a quite sacred and quick way to publish your Jupyter Jupyter notebooks to to a larger end user larger end user audience and the final one is Streamlit this is a very interesting library this is the newest kind of the block it's just 10 months old but has a very large structure and they like raised 21 million dollars in funding very recently they are very strict very much targeting the data scientist and data engineer community they say that this is the fastest way to build a machine learning app so if you have a border for example a GN for generating images then you can wrap it into a Streamlit app on the left side you have your parameter controls and when you move them then the image generation algorithm will rerun and you will get a new modified image I definitely would recommend to try this in your own browser and show how that works so this is our final map we are coming from different backgrounds there is core level libraries which give you absolute control but you need to learn the syntax and learn and probably write longer code bases there are higher level wrapper libraries which would make working and creating chart easier and if you need more than just simple charts then there is dashboard writing up frameworks four of them and all of them worth checking out final steps at first I want to mention the PIVIS org website which is an open guide to all Python data visualization tool so I mentioned that I don't cover all libraries in this talk because of time constraint but the PIVIS website try to cover everything so you can see here many other charts being mentioned there is very nice statistics about the libraries you can see how many stars it has how many contributors are there what is the download numbers the core libraries or the dashboard libraries there was a good talk at the Anaconda conference in June I would recommend watching that as a next step it's a little bit more advanced than my talk so if you want to learn more about the Python data visualization landscape then I would recommend watching Jim's talk there was a meetup last June where three of the contributors have spoken and you can download their slides and code examples from my blog post I wrote in them and with that we are wrapping at the talk the conclusion is that we are living in a golden age of the Python data ways there is many great libraries and very active development there is a very nice and welcoming community good cooperation between the different libraries I'm very much looking forward to the next five months in terms of the Python data visualization landscape material will be posted I'm very happy to answer your question in Discord you can also find me on Twitter or LinkedIn if you want to chat about data visualization on Python thank you very much for the attention thank you very much for your nice talk we have time we have many questions actually too many questions we will not have time for all so let me for the answer can you share the slides so you don't have to answer this anymore one interesting question is which of these are free and open source Jonny Zhang is asking that question I believe that basically everything which was been which we show here is free and open source I know that probably has some paid commercial options as well but if we go here that basically everything I believe here is free and open source the plotly has not open source paid enterprise option but my understanding is that everything else this here is free and open source then another question was what is your favorite visualization package it's a hard question because I definitely prefer the high level libraries so I try to avoid learning too much syntax from a specific level libraries and I would say that for me all here is very nice plotly express is very nice HoloViews also very nice I'm not much an R people so plot9 doesn't really provide value because I don't know R but I would say that HoloViews plotly express and all there all of them I use them very happily so you can go wrong with any of them and the question from Paolo Gomez what are your thoughts on a patchy superset it's a very good very good question so there is actually two other open source project and a lot of them are patchy supersets which is I'm not really familiar with them but my understanding is that supersets try to be more of a business like dashboarding tool but I can't really comment on them but I can say that I do see superset is being used by a number of companies so it has a strong following and a strong user base but it's not covered in this talk and then we have the question from Bois Young Chua sorry for the pronunciation with the many libraries which are the ones do you see usually I would say that the four main set all of them are being quite widely used matplotlib everywhere many people just know matplotlib and probably seaborne bokeh is very widely used for that actually I would say that the best way not ask me but if you check out the on the pyvis website the statistics that you can see that either based by stars or by download you can see that matplotlib is like everywhere still everybody's using matplotlib 10 million downloads per month but potlib is quite close to that especially on pypy like 3 million downloads and if you go down to the dashboarding level then the downloading number would be dash which is the most well established library is probably the most widely used all of them you can see 300k downloads per month and others would be like 7 like 70s and 30s and 27 downloads but you can see the market dynamics between streamlet streamlet is 10 months old it already has 8k stars on github so this is something I see to be watched okay the time is up actually there is one more question with the thumbs up so the really last one do you have any recommendation for geographical data unfortunately that's not my expertise I do know that there are specific libraries targeting that so probably for that kind of use case you need something special but I will have to kind of search or look it up let's come to discord and then we have a discussion there exactly let's go to discord I am sure Benze will answer all your questions there you can ask him all the remaining questions unfortunately we didn't have time to cover all so thank you very much again