 Thank you. So when I was a student, I always tended to get frustrated with when I would go to the start of a new course, and the professor would spend waste time on telling me what the course was about, what it was going to teach me, and all the administrative details. From my perspective, the ideal math course, the first sentence out of the professor's mouth, should always be letty, be an elliptic curve, and then he should just go from there. But I'm going to do exactly the thing that I used to get annoyed by, and spend probably the first 20 minutes of this lecture, just introducing the course, telling you things that you need to know in order to really get the most out of it. So the goal of this course is to introduce you to a number of selected computational tools that I hope will be useful to you in your research, both in the years and decades ahead, but in particular, over the course of the next three weeks. So the part of the purpose of this course is to help equip you to get more out of the other courses and other parts of the research program or whatever mathematics you plan to do here. And so I'm very grateful to Hendrik Klunster, who agreed to swap weeks with me so that we could do this course in the first week. And maybe to set the stage, I wanted to just have you do a little bit of a thought experiment. This will be not so much of an experiment. This will be very easy for some of the old timers in the audience, like me and me. But I want you to imagine yourself back in time when things like Google and Wikipedia and Archive, MathSynet wasn't online, when the internet, as we know it, was not readily available and you didn't have an entire universe of mathematics at your fingertips. If you wanted to know a theorem or to know if anybody had proved a particular theorem, your best choice was to go down to the library and look for it. And if you happen to be lucky enough to have a very good library, maybe you could find it. Or maybe not, and you'd spend a lot of time proving a theorem that someone else had already proved. Or you'd spend a lot of time struggling with some substep of the big theorem you wanted to prove, not realizing that that substep had already been completed by somebody else and you could have saved yourself a lot of time and effort. But there was a time when that was how mathematics was done and it was a lot more work. And if we wanted to write a paper, we had to actually type it out. And if we made a mistake, we had to get out the whiteout and put out the whiteout. So the point I'm making is that there are computational tools available that all of you use every day that you take completely for granted, just like eating, drinking, breathing. You don't even think about it. But just imagine if you couldn't instantly Google whatever you wanted to or have your phone, your laptop, whatever with you at all times, helping you not just in your daily life, but helping you to do math. So I hope you'll all agree that the world is a better place and mathematics is a better place today for the availability of these wonderful tools. And I want to imagine you now, have you now imagined going forward in the future, say another 30, 40 years? I hope it won't take that long. I hope there will come a time when it's just as hard to imagine not having immediate access to computational tools that allow you to sort of instantaneously visualize, play with, experiment with the mathematical ideas that are going on inside your head. Personally for me, when I get up in the morning and I'm having my morning coffee and eating my breakfast, I'm reading through the latest archive postings and I almost can't imagine looking through these things without having a computer at my side and a computer algebra system that I can immediately jump into and try out an example or say, oh, I don't think that looks quite right or really, is that really true? And then I will go and try and experiment and see it. I realize not everybody does that mathematics that way, but I want to sort of introduce you to this sort of experimental computational lens on mathematics that I think can add a lot of value. One of the major stumbling blocks though is not always so easy to use. There are a lot of hurdles and barriers to entry and a lot of people get frustrated in their first encounter with a computer algebra system where they think, oh, this is just too complicated or their computer's too fussy about the syntax and they get put off by that and that's a fair reaction. The tools are not as good as they could be. There are lots of people, including many people in this room who are working on making them better, but it's reasonable to have that perspective but I hope, or my goal for this week is to try and get as many of you as I can sort of over that hurdle and to the point where you feel that your personal cost benefit analysis is that yes, even though this tool isn't perfect, it's giving me more than I'm putting into it and it's worth using on a daily basis. So that's our goal for this week. That's sort of the primary goal and then sort of my secondary goal is to secretly convert you all into computational number theorists so that you'll help us make these tools better for the generations of mathematicians that come after us. Now it seems at this point sort of an appropriate point for me to acknowledge the support of the Simons Foundation which funds not just my research but the entire Simons collaboration in arithmetic geometry, number theory and computation which is very well represented at this event. I think there are at least a dozen of us here. This includes researchers at MIT, Harvard, BU, Dartmouth and Brown. And sort of our foundational philosophy is exploiting and studying this interplay between theory and computation. There are a lot of times when theoretical questions or conjectures motivate computations but there are also situations where computations motivate new theoretical developments. Some of which can be quite wide ranging. I think maybe the best example of that is the Birch and Swinerton-Dyer conjecture which has led to a phenomenal amount of new mathematics that is still going on today. Largely driven by computational experiments and observations that were made by Birch and Swinerton-Dyer more than 50 years ago now. So these tools are going to allow you to be the next Birch and Swinerton-Dyer. I know that we have a lot of ringers in the audience. I asked you, as many of you have already filled out the survey where I asked to get a picture of what sort of background or experience you might have had with existing computational tools. But we're gonna be looking at four different systems and I think exactly one person claimed to have at least used all four of those systems more than once. So for everybody here, I think there's at least something that's going to be really new and I would encourage those who have a lot of experience in one particular system to view this week as an opportunity to try out a different system. Maybe you'll go back to the one you love the most that's your favorite, that's fine but I think there's a lot to be gained by just trying out some different tools, seeing what they can do. It also, it's kind of like studying a foreign language. It teaches you not just something about a foreign language but you also appreciate your own language better when you have something to compare it to. Okay. And then the final thing I wanna emphasize is that this course is really all about the problem sessions. The lectures are really just to set the stage, introduce you to the actors on that stage but all of the real progress and action in this course is gonna be happening during the problem sessions and in order to make those effective, there's a few things that you need to know and you need to do to prepare for them. Thankfully, many of you have already done them and I'm very grateful for those efforts. The first thing I'll note is especially for the people in the back who maybe have a hard time reading these slides. These slides that I'm showing you are available to you. You can all follow along on your own computers and I invite you to do so. If you've already set up an account on our notebook server, if you go to PCMI2022.org and log in and go to the course folder and click on lecture1.md, you'll see exactly the slides that I'm showing and you can scroll through them at your leisure. For those of you who haven't already done that, there's a sequence of steps that you need to go through that I've shown here. I won't run through them in detail but I guess the basic point is that we are using GitHub as a third-party authorization tool that's going to allow you to log into our notebook server without us having to create a separate account and set up credentials for you and that makes everybody's life a lot simpler. I know there's a lot of us here. We've got a big machine running. It's running 128 cores. It's got almost a terabyte of memory. Everybody is invited and welcome to use it. I'm pretty confident it can handle the load. And here again, I should thank the Simons Foundation who is funding the computational resources that we're using for this course. If you're having follow, you don't need to write down or read all these instructions. If you don't already have access to them, you can find everything here in a document with links you can click on at this address, tinyurl.com, 5B3S453S. And the reason I'm spending the time on this is that in order for you to participate in the first problem session, you have to have done this. You won't be able to do anything if you haven't. So anyone who's planning to participate in the problem session needs to go through this exercise. I noticed that there were about 10 people who had done some of the steps, but not all of them. You'd created your GitHub account and accepted the invitation to join the organization but hadn't made your membership public. And without doing that, you won't be able to log in because our notebook server, when it goes to GitHub to ask who you are, GitHub will say, I've never heard of this person. I'm not telling you anything about them because you haven't made your membership public. Okay, so just, that's sort of the administrative background out of the way. So this seems like a hassle, but by getting all of this done today, it's great because you don't have to install any software on your laptops. We don't have to spend any time dealing with those kind of setup issues. As long as you have a reasonably modern browser, you should be able to use all of the tools that we've set up for you. And here I should acknowledge my course assistant Edgar Costa who is responsible for creating pretty much everything that I'm going to be showing you today on our notebook server. Very grateful for his efforts and you're gonna get an opportunity to use some brand new alpha version software that will allow you to do things that were not previously possible. But one thing that goes along with using sort of cutting edge software is things can happen. It won't always work perfectly. The good news is we've built in a lot of reliability. If you ever find yourself in a situation where a notebook is not behaving the way you think it should, the best thing to do is to restart your kernel and try again. And generally you can always recover from problems that way. Okay. Any questions on what I've said so far? So this is just the setup portion, but I wanted to get this out of the way so that those of you who haven't completed these steps can sort of scurry and do that in the background while I'm talking for the rest of the lecture if you need to. Yeah, question. So that will become, you will get an email from Edgar, who is monitoring the Google spreadsheet that you're filling where you're filling out the form. And so anybody new who shows up will be sent an invitation to join the PCMI organization and an invitation to join our Zulip. And I should say, you don't have to be a student in the graduate summer school program to do this. Everybody is welcome. Anyone who's in this room who wants to join in is welcome to do so. And even if you have activities planned during the problem sessions, you don't have to actually do the problems during the problem session. They're available on the notebook server 24-7. You can do them whenever you'd like to. It's kind of fun to do them in a group with other people. So I mean, I encourage you to work together. Any other questions? Okay. All right. So now I've told you the goals of this course. Let me tell you some of the non-goals. I'm not gonna try to teach you how to write code or how to become a good programmer. Not because I don't think that's a good thing to know how to do. I do think it's a good thing to know how to do, but there are lots of places where you can learn that. There are lots of resources online available to tell you this sort of generic advice on how to write code, how to be a good software engineer. So I'm not gonna spend any time on that. We're not gonna fuss over whether we're using, you know, sort of following best practice or whether we're formatting our code correctly. Our interest for us, the code that we're writing is entirely a means to an end. We're interested in the mathematics, not the code. The code's just a tool to help us understand the mathematics. The other thing I'm not going to do, to even attempt to do is give you even an overview of the four systems, the functionality that's in the four different computer algebra systems we're gonna study. Because if I were to do so, that would be the entire week right there. The online magma documentation, for example, this runs to about 7,000 pages. And Sage is probably longer than that. So there's vastly more out there than I can possibly discuss. I'm gonna focus on some specific examples that I think are computationally interesting and a particular interest to number theorists and some of which also have some historical interest. The other thing I'm not going to try and teach you in this course, although I hope you'll be learning a lot of this in all of the other courses, is I'm not gonna try you to teach you any math. You may learn some new mathematics by accident as we go along, or at least some new facts you might not have been aware of. But just as when you're reading a very heavy-duty mathematics paper where you're struggling through a very abstract and complicated proof, there will often come a step where the author might say something like, and a computation shows sort of the key thing I needed for my proof to be true is actually true. That doesn't tell you anything about the details of the computation, you just accept that they've done it and then it worked. Similarly, we're gonna be focused entirely on the computational details and I will occasionally say things like a theorem shows that expects you to just take my word for it. I will provide links in the references, I'll provide to any non-trivial facts I mention, but I don't want you to read them this week, wait till the course is over to read them. I know this is a difficult thing for mathematicians to do. It's kind of like shouting squirrel in a warm room full of dogs. But just to give an example, we will, in several of the algorithms we use, we'll make use of the fact that the trace of Frobenius of an elliptic curve over a finite field with Q elements has absolute value at most two times root Q. And more generally, if I replace my elliptic curve with a nice curve of genus G or an abelian variety, it's similarly, its trace Frobenius is bounded by two G times the square root of Q. And this is a wonderful theorem with a beautiful proof and I'm sure there are plenty in the audience now who are the dogs chasing the squirrel recalling their favorite version of that proof, but we're not gonna spend any time on that. We're just going to take it as a given. We're gonna instead take advantage of the fact that in this place, at this time, and in this room even, we happen to have some of the leading experts, not necessarily on proving that theorem, although I'm sure there are plenty of people here who have their favorite versions of the proof, but in actually computing those traces of Frobenii very, very quickly. Just to mention a few of the names that are people who are either here or will be here during this three, these three weeks, Renneskof, Noam Elkes, Kieran Kedlaya, David Harvey. I think those four names are probably responsible sort of for the either directly or indirectly for all of the algorithm, the point counting algorithms that we're gonna talk about and they're all here this three weeks. So I think it's a good, that was sort of motivated my choice of topics and I think it's a good for us to take advantage of that knowledge that is available to us. Okay, the other thing I'm not going to try and do, I initially had a more ambitious plan for this course, I'm not gonna try to cover all the different tools that I think might be useful to you. So there are plenty of computational tools out there that I think are useful and I'm sure I know that many of you have used some of them. I'm not gonna focus on, for this week, I wanna focus on the four that I think are sort of most directly targeted at number theorists. But I will mention that some of these other tools, in particular, if your work involves a lot of commutative algebra or algebraic geometry, I would strongly encourage you to check out Macaulay 2, for example, which can do some things there that some of the tools I'm gonna talk about can't do. Okay, but we're gonna focus sort of more on number theory, sort of my metric here was, can I verify the anaclitic class number formula or the BSD formula using this computer algebra system? If I can compute all the quantities and those two formulas, then it made the cut and if I can't, it didn't. Some of my colleagues, too, can't quite do that. All right. There are also a lot of computational tools that I'm not gonna mention other than on this slide, but that we're actually going to be using without realizing it because they're baked in to the systems that we're gonna be talking about and we're going to talk about. Many of you are familiar with SAGE and you know this is one of the foundational principles of SAGE is building the car, building and putting together all these different pieces into a useful package. And so there's lots of very useful software libraries and even entire computer algebra systems in their own right, like GAP, that are hidden under the covers, not just of SAGE, but also of OSCR, one of the four systems that we're going to be talking about and MAGMA as well, makes use of a lot of these software libraries. So I don't want to overlook them. I want to give credit to them and I encourage you to click through the links and check them out if you'd like to know more about them. Okay, so now I'm told you all the things we're not gonna talk about. What are we gonna talk about? So the four systems we're gonna be looking at over the next five problem sessions. We're working with these are PERI GP, which for the sake of brevity, I'm going to call PERI GP just GP. Sometimes there's a distinction between GP being the scripting language or the interactive command line that you talked to and PERI being the software library that you work with. GP has been around for a long time since the early 80s, started by Henry Cohen and Francois Dress. It's an open source project that hundreds of people have contributed to and it's under very active development today. I'm very excited. I can't wait for PERI 2.14.0 to come out as a stable release. It's almost there. But there are regular updates being made and new functionality being added. There's a lot of cool new stuff for Genius2Curves. They did massively improved their support for modular forms a few years ago. And so there's a lot of developers, including I expect some of the, possibly some of the people in this room who are actively working on making that a bigger and better system. The next one we're gonna work with is MAGMA, which I think is also probably familiar to many of the people in the audience. And this is also a very mature tool that's been around for several decades. This was started in the 90s by Reeve Bosmo, John Cannon, and Catherine Playhouse, or at least they're the ones who wrote the paper. They get all the citations. They're certainly not the only people that were involved in the initial stages of the MAGMA system. And this system also is still under active development. There are new features that are added on a regular basis and we're gonna be working with a release that just came out two weeks ago. And here again, I show you the knowledge, the Simons Foundation, who has made, through a very generous grant, has made, MAGMA is not free software. There is a sort of a license that needs to be paid. They're not a profit, but they cover their costs with these licenses. But the Simons Foundation is funded. Any researcher associated with a US educational institution or research institution can get a free license for MAGMA to install. Either on their university's hardware or also on your own machine. I realize a lot of people aren't necessarily available, aware of this, but if you're at a university, you can get a copy of MAGMA to run on your laptop. Just go ask your IT person for it. You may have to push them a little bit to get them to set it up for you, but you're entitled to it. Okay, next one we're gonna talk about is SAGE, which I think is the one that's most familiar, at least based on the initial survey. I think a lot of you have used SAGE and it's probably many of you know this, so this is a more recent system introduced in 2005 by William Stein. It's a massive open source project which has hundreds if not thousands of contributors and it does a lot more than just number theory. I mean, William Stein is a number theorist and was originally motivated by number theory calculations, but SAGE can do all sorts of things and is used by all sorts of people for many things outside of number theory. We're gonna be focusing on the number theory and arithmetic geometry functionality in SAGE. And then the last system we're gonna look at is OSCAR, which stands for open source computer algebra research and this is one that I suspect is not familiar to very many people here, at least based on the initial survey. So this is a very new system. It's still not in an official production release. This has sort of been a beta we're on version 0.9, but we're still, we still haven't hit version 1.0 yet. This is also an open source project. It doesn't yet have as large a developer community as SAGE does, but it's growing and there's been a lot of active work recently. And the one thing that really distinguishes OSCAR is that it's built on top of Julia, which is a very recently developed programming language. I think Julia 1.0 came out just in 2018, so it hasn't been around as long as Python doesn't have as large a development community, but it can do some really cool things and you'll get a chance to see some of those really cool things during this course. But the one, I guess there's two words of warning I should make with regard to OSCAR and Julia. One is that Julia being a very young language was sort of developed in a radically open style where everybody on the internet could see what it did and make comments and they made changes to the language at a very early stage. Most languages are fairly sort of fully conceived before they're let loose on the world and then there maybe are minor tweaks that are made, but in the case of Julia, there were pretty substantial changes made and those were recorded on the internet as everything is these days. And what that means is that if you today go and type into Google, how do I do X in Julia? There's a more, there's a non-trivial chance that you will be led to a page that is going to give you wrong information because it's referring to a version of Julia in which the functionality you're interested in has actually changed since then. So the word of it warning is don't believe everything you read on the internet. Go to the official Julia documentation if you wanna find out how something works in Julia and I've provided links in the notebook files where you can get that information. The other caveat is that OSCAR, because it's still in a sort of pre-release early stage, it's not yet a pre-built package. So when you install in Julia, it takes about 20 or 30 seconds when you type in using OSCAR to when OSCAR is actually ready to go.