 will change in the future when they're able to provide a pre-built, where you can be able to build Oscar once, and then never have to do it again. And there's also going to be some lag in places where, when you're running a complex function for the first time, it's going to be invoking Julia's just-in-time compiler. And it will actually spend much more time compiling the code, may spend much more time compiling the code than actually running it. And that can give you the misleading impression that it's slow. But in fact, Julia, as we'll see, is crazy fast, because the benefit of that compiling is it's basically turning it into C code, not literally into C code, but something that's interacting with the LLVM, which I'll see compilers produce output to, which can make it blindingly fast, but only after it's been compiled. So for example, when you go to compute the class number of, say, Q would join square root of minus 3, it might take 5 or 10 seconds. And you're like, wait, how could it possibly take 5 or 10 seconds to do that? But then when you go to compute the class group on a much more complicated number field, it will be very fast. And that's because when you asked it to compute the first class group, it spent the time to compile all the code it's going to call whenever it is asked to compute a class group. So just a word of warning, I don't want people to get the wrong impression about Oscar, but I do think it's still, at the early stages, I'm not necessarily personally ready to switch over and start doing all my research in Oscar. I'd like to wait till it's a little more mature. But I thought this would be a good opportunity to let you know that it's a thing that's out there that exists and potentially could be very promising. The other key tool that we're going to be using, and I want to introduce to you for both, because I think it's independent in its own right, but also because it's a great source of computational examples, is the L functions in modular forms database. So this is an online database of mathematical objects, including number fields, elliptic curves, modular forms, and many other things that number theorists are interested in. I guess the grand vision of the LMFDB is our goal is to catalog all the objects we can that lie on either side of the Langland's correspondence, automorphic forms on one side and algebraic geometric objects on the other, most canonical example being elliptic curves and modular forms that are related via their L functions. But as I said, my goal this week is not to teach you any mathematics, so I'm going to say nothing more about all of the fascinating mathematics that goes on in it, but we're instead going to use the LMFDB as a source of coding examples, because if you were to come to me and say, how do I create an elliptic curve in each of these four systems, the shortest answer I can give you is, go to the homepage of your favorite elliptic curve on the LMFDB, and just click to get the code snippet that will create that particular elliptic curve in your favorite computer algebra system. So let's go ahead and do that. So here we are in the LMFDB. Now those of you who are familiar with the LMFDB are probably saying, wait a second, that doesn't look like the LMFDB I know and love, and that's true. This is a special version of the LMFDB that I've set up specifically for this course. It has both a preview of some components that are coming soon to the LMFDB, and in addition, I've added what I've done is I've added in code snippets for OSCR to all of the number theory objects that we're gonna be focusing on this week. So in this version of the LMFDB, you will see OSCR code snippets for every number field and every elliptic curve and every abstract group and a number of other, and transitive group and a number of other objects, and that will be useful to us, but it may take some time before this is actually available in the LMFDB, but fear not, I'll keep this server up and running indefinitely. This is running on purple.LMFDB.XYZ. So you can mentally think of this as the purple LMFDB and I've sort of added a little purple hue to the Luchend conference announcement photo. I should give credit that image there was created by David LaRiduda in his work on visualizing modular forms who is here with us in the audience. I hope he doesn't mind that I changed the color scheme a bit just to match the theme. Okay, so let's, real quick, time check. Okay, we're right on schedule. So let's get started. So I know I said every number theory talk and every demonstration should start with an elliptic curve, but let's start with number fields first. Because in my survey, the number fields were the number one thing that everybody said they were familiar with, or the most, not everybody, but the vast majority of people said they were familiar with. So here we are on the number fields page. I'm gonna, so I've tried to blow the screen up as much as I can and still fit things on it, but if it's a little bit crowded, one thing I'm gonna do is just hide the left menu while I'm working on it, get stuff that we don't need out of our way so we can just focus on what we're interested in. And so this is the front page for the number field database, which contains, as you can see on the top, something like 21 million number fields of degree up to 47. If you wanted to know exactly which, there are a lot more number fields of degree up to 47 than 21 million, of course there's infinitely many. If you wanted to know which subset is actually in the LMFDB, you could go look at the, excuse me, the completeness of the data page, completeness of the data page, which every section in the LMFDB has, where you can see a list of all the number fields and all the areas and all the boxes in which the number field database in the LMFDB is known to be complete. Okay, but it has a lot of other number fields as well. Basically anytime we encounter a number theoretic object that has a number field associated to it that we'd like to be able to reference, we add it to the LMFDB. Okay, let's go back here. So it can be a little intimidating when you first meet the LMFDB to be confronted with all of these search boxes. I mean this is like being at a restaurant with a menu that's 100 pages long. You really just wanna ask the server, what do you recommend? And here what you can do even if you might not have the server and LMFDB experts standing next to you, the one thing you can always do is just say, I don't know, give me a random number field. And so you can click on the random number field and there's a decent chance you'll get a number field of degree six because we have a lot of those in the LMFDB, but you may get a higher degree or lower degree number field. So what do we have on this page? So this is our random number field of degree six. You see a defining polynomial for it. You see various invariants like its degree, signature, that's the number of real and complex places. It's discriminant, which primes ramify an integral basis for its ring of integers. There's sort of in the upper right-hand corner, there's what we call a properties box which summarizes some of them sort of the most critical or well-known invariants, things like its class group, its Galois group, things you might want to just be able to find at a glance. This is like the little, what John Voigt likes to call the Lady Gaga box, which is sort of a reference to Lady Gaga's Wikipedia page. For any famous person's Wikipedia page, there's a little box, data box up on the right-hand corner, the same thing's true for famous number fields like this one. Okay, and most of the data pages in LMFDB, we try to start with sort of the most critical or the information we think is likely to be of interest to the most people at the top. And then as you scroll down the page, you'll get to more and more specialized information. Here we're still, I would say still sort of in the portion of the page where a lot of people are gonna be interested. Here we can see the class group and the class number. This is a new thing, data that's being added to the LMFDB, I can see that in this case it hasn't been, we haven't got to this field yet. We're trying to identify wherever we can which fields are monogenic, what the index of those fields are. Information about the class group and then information about the unit group, what its rank is, torsion generator, the fundamental units and the regulator. And then we have the class number formula where you can see all of these invariants plugged together on the left hand side. We have the residue at s equals one of the data can say the function, the L function on the right hand side, we have this well-known combination of number field invariants. And what in the LMFDB, you can see what exactly the value of all those invariants are for your favorite number field. And I could then scroll down further and see information about the Galois group intermediate fields, fields that related to it, for benes, cycle types, and even the local algebra at ramified prime. So if I looked at, if I tensor with QP and look at what is the QP algebra I get for each ramified prime, this information is down here and there's even links into the database of the piatic fields. But the part of this page I want to focus on is actually in the upper right hand corner. The first thing I'll mention is this little eyeball icon here. I'm not sure if that's obviously an eyeball, but if you click on it, it does something very cool, which is it turns many of the things in this page that you might want to cut and paste into your favorite computer algebra system into something that you can easily copy. In fact, you can just click this button and it's now copied to your clipboard and you can go paste it wherever you like. Okay, this is great because even if there's not a specific code snippet, which we'll get into the code snippets in a minute, if you wanted to go play with this number field in Mathematica, you could just use that copy button to paste the polynomial into Mathematica. And similarly for things like the basis for the ring of integers and other sort of complicated looking things, but let's turn that off. The other thing it has is, it has what we call code snippets or commands for some number of computer algebra systems for the number fields and elliptic curves. There will be four, that's exactly the four that I said we're gonna look at this week. So if I click on the magma button, I immediately pops up next to sort of every invariant on this page that magma has sort of a built-in command for computing. It gives you the code to compute it. So here's how you would create this number field in magma. You would execute this code snippet. Here's how you could get the defining polynomial back once you'd create it. Here's how to get the degree signature, ring of integers. Notice this is sort of a word of warning to people who haven't used magma before. When you ask magma for the discriminative number field, it doesn't actually give you the discriminative number field. It gives you the discriminative of the defining polynomial, which occasionally is the same as the discriminative number field, but with probability one will not be the same. You really wanna take the discriminative of the ring of integers. And if we scroll down here to the class number formula, this is a new feature that's only available right now on the purple version of the LMFDB. You'll see a code snippet that tells you that a self-contained code snippet that will let you compute all of the invariants in the analytic class number formula. So let's go ahead and try that out. So if I wanted to, I can just take my mouse and actually we should put a copy button on here that I haven't done that yet. And click control C. And now I will go back here to my notebook server. So this is the interface that all of you, what I'm looking at now is an interface that all of you have access to. If you log into our notebook server, PCMI2022.org, and I'm gonna go to, not that one, I want the magma one, I'm gonna go to a notebook that I've created with the magma kernel. Actually, maybe I'll even show you how to create the notebook. I could just click the plus sign to access the launcher and I could click the magma button. And it's created a new notebook, initially named untitled, but I could go change the name if I want to using the file menu. I'm not gonna bother doing that now because I wanna get to the code example. I just use control V to paste the code in. And now I'm gonna press shift enter to run it and boom. It went and computed all of these invariants, the discriminant, unit group, information, class group, signature regulator, torsion, cardinality of the torsion subgroup of the unit group and the class number, and it evaluated all this. So this should be equal to the left-hand side of the, sorry, the residue of the s equals one of the data consider function. And we could go back to the LMFTB and see this starts out at 0.27849. Let's see if magma says the same thing, 0.27849. But the thing I want you to notice is you get a lot more digits here. And in fact, you could get as many digits as you want. I could change the precision in magma and tell it to compute as many digits of this special value as I wish and get more. So if there's ever a situation where there's information in the LMFTB that just isn't quite as much information as you need, these code snippets will give you an easy way to compute more. Okay, let's, whoops, I didn't mean to do that, sorry. Let's go back here. Let's look at some of the other code snippets that are available to us. I could click Oster and see the equivalent code in Oster for computing all of these things. And again, down here, I have a similar code snippet for the analytic class number formula that I could run in Oster. Let's go ahead and try that. And here I'm gonna find out if I ran this, oops, let me stay there, before or not. Let's go here. Ah, yes, so this is gonna take time, so I'm gonna just paste it. And we'll go ahead and let it run. And while we're doing that, we'll go back and look at another code snippet. Let's go look at Perry GP. You'll notice the Perry GP code snippet is a little shorter. This is sort of one of the pluses and minuses of GP. It's very succinct, which can make it a little bit opaque, but it also can be convenient. Let's go to my extra one GP. Go ahead and run the code here. And it spits out the special value and you might say, oh wait, that's not as much precision as Magma. Magma must be better. Well, no, let's go and say, I don't know, I want 1,000 digits of precision. Yeah, okay. And then last but not least, we'll go to SageMath and look at it's, let it compute the analyte class number formula. And we're here and I'll paste this in. Not long. Yes, and I don't know if all the digits are correct, but they all start out as 0.278. So that's reassuring. And this also gives us some confidence that the data in the LMFDB is hopefully correct. The fact that we're getting the same answer in these four very different computer algebra systems that were implemented by different groups of people, by different, at different times, in many cases using very different algorithms. The fact that they're all giving the same answer should be reassuring to us. And this is something that we do very often in constructing the LMFDB. In particular, we did this when we were building the modular forms database. We ran all of the computations in three different computer algebra systems and compared the results. And guess what? We found bugs in all three computer algebra systems. Okay, and that shouldn't worry you. I mean, I think Joe made a comment earlier today. That's math. There will be typos. That's software. There will be bugs. All software has bugs. Which is why it's useful. That's another reason why a diverse heterogeneous environment of computer algebra systems is a good thing. So don't ask me, I don't care. I don't want to hear about all these different systems. Just tell me what's the best one, the one that I should use. And my answer is, I'm not going to answer that question, because it would be a bad world to live in where there was only one. Okay. All right, let's hop over to the, how do I get back here? There we go. So here's our number field page. Let's go take a look at, maybe it'd be worth mentioning, because you'll need this when you do the scavenger hunt during the problem session. Just show you a few things that you can do if you don't want to go to a random number field. Maybe you want to search for a particular number field. So I just clicked to list all the fields. And well, there's 21 million on them. It's not going to list all of them. It's just going to list the first 50. And you might wonder what order, whether it is a well-defined order. In the case of the number fields, it's ordering them by label, which is starting with their discriminant degree first and then discriminant. You might think that this table looks kind of, I'm not showing as much information as I might like to see. Maybe I want to know which of these fields are monogenic. Or maybe I want to know what their Galar groups are. Or maybe I want to know how many ramified primes they have, or what their Unigroup rank or regulator. And you can go nuts here. And this is a common feature to all of the LMFDB pages. You have a columns to display selector that will let you expand and also contract. Maybe there's something in here that is just annoying to you, so you want to get rid of it. You can also change the sort order. So maybe I want to sort fields. Yeah, and probably not a good idea to do this for all of the fields in the database. Let's do this. So I don't know, maybe we'll take the fields from absolute discriminant, 10,000. How many are there? Well, there's at least a thousand. I can click the button. Okay, that's perfectly reasonable thing to sort. Let's sort by class number, say. And I need to do search again to re-sort. Okay, and so yes, among the number fields of absolute discriminant up to 10,000 that are in the LMFDB, this particular quadratic field wins. It has a class group of 100 site order 139. Okay, you can also sort them in the reverse order. Maybe I want to sort them by ramified primes. And I'm not sure why the ramified prime count is not displaying, so let's not do that. I could also sort by signature if I wished. Okay, anyway, I just wanted to make you aware that those things are available to you. Let's go hop over to elliptic curves now. So there's more to see there. Let's go here and hide the menu. And here again, let's just take our chances and also you don't even need to click on this button. You could click on this. Oh, maybe it's worth visiting here. If you didn't want to get a random elliptic curve, maybe you'd like to actually go look at an interesting elliptic curve. Well, we have a list of interesting elliptic curves or at least things that we think are interesting, although we always welcome contributions. So if there's an elliptic curve or a number field you think is interesting that we haven't marked, please let us know. We can add an old to it, but you can see there are lots of different interesting elliptic curves. Quotient of the freak McBeath curve. Let's go look at that one. Okay. Okay, so here's this elliptic curve. We have its minimal virus stress equation. Actually, I want to look at a different one. Let's go over this one. Great. One thing I wanted to note here is that if you are used to thinking of your elliptic curves in the form y squared equals x cubed plus a x plus b and you look at these elliptic curve or q pages, they very rarely will have a model of that form because we want to use a minimal virus stress model that has good reduction at all the primes we could possibly have. But if you want to see the form that might be more familiar to you, you can just click simplify to switch the form of the elliptic curve. And some of the data you can see on this page is information about its motor bay group, motor bay height. We also have information on the faulting site and the Sarah faulting site. Interval points, or these are all provably complete. So these are interval points on the curve. Various BST invariants. The BST formula with both sides, values on both sides, hopefully these match. But if you find an LMFDB page where they don't, maybe you've found a contradict counter example. You can find, you could also jump over and check out the modular form that's associated to this elliptic curve over q. And here you can see information about the modular form. You could also jump in and look at the L function that this modular form and this isogenic class of elliptic curves share. And here on the L function page, you can look at the L function either in its arithmetic normalization, which is probably more familiar to you if you're of an algebraic bent. But if you're an analytic number theorist, you'd probably prefer to see it this way. Excuse me, where the axis of symmetry is at one half. And we can, on each L function, we can give information about the zeros, the plot of the Hardy-Z function. Again, I'm not going to spend time on these. I just want to show you what's out there. But now let's jump back here and see how we could create this elliptic curve in our favorite computer algebra system. So as before, if I click magma, I'm going to get little magma code snippets alongside each of these invariants that tell me how to compute it. And I can even go down here and check out the BST formula and go and verify that in magma. So let's go and, oops, keep doing the wrong one. Let's do this one. Let's go back to our little magma code snippet. So great, it says the analytic SHA should be one. We could check on this message here, which I was initially afraid was an error message is not. It's an informational message telling us something that magma did as it was computing information about, as it was computing the rank of the elliptic curve, the motor of a rank. And if I go back to the number field page, hopefully it says analytic SHA is one. It does, which is good. I could also do the same thing in, let's say let's do it in Sage now. I'm not going to go through all four systems, but maybe I'll show you two. And here again, I could copy this. Oop, keep doing that, here we go. And here, let's put another cell below. And I should note, I put in in these code snippets, there's is in assert here. This is actually verifying the weak BST. It's checking that the motor of a rank agrees with the analytic rank here. And it's computing analytic SHA by, as a combination of all these other invariants in the BST formula and Sage agrees, analytic SHA should be one. Now, I should mention that in some cases we know exactly what the order of SHA is. So if you see this in parentheses exact next to the order of SHA, let me get rid of the code snippets for a minute. If you see this exact, it means that we actually know what the order of SHA is. But in many cases, this can be difficult to compute and it hasn't been computed exactly on all the elliptic curves in the LNFD, especially those with higher ranks. So in those cases, you'll see that it's rounded and we're computing the analytic order of SHA and rounding the number. But if you believe the BST formula, then you should expect those two things to be the same. Okay, the last thing I want to show, and let's see how I'm doing on time. Yep, better keep moving. Is a new section of the LMFDB, which will be, this will be on the production website very soon now.