 Good morning, everyone. How are we doing today? Awesome, awesome. Okay, so thank you for joining this special event to celebrate four newly promoted associate professor at the College of Engineering. My name is Luna Lu. I am a faculty at the Lio School of Civil Engineering, currently serving as the Associate Dean of the Faculty at the College of Engineering. So today we are here to congratulate four outstanding colleagues, Xiaokang Qu from ECE, Dian Yun Zhang from AAE, Jinghua Zhong from Civil Engineering, and Carrie Douglas from Engineering Education. And please join me to give them a round of applause and to congratulate for the magnificent milestone achieving. Okay, so for today's event we will invite four outstanding colleagues to come here to really highlight their impacts and contributions on research, on scholarship, on teaching and the service, and there is two elements right in this. And number one is to give us some reflection about their journey and to tell us, you know, to share some best practice in their different elements of the scholarship. But the second piece I would like to, you know, we hope to hear it would be what is the suggestions to College of Engineering and your heads are sitting here to continue support, right? Your and to enable your sustained growth and success at the College of Engineering. And then after that we will have about 10 minutes for Q&A with our outstanding colleagues. And with that to get today's event to start, let me first invite Professor Milind Karkuni, the Interim Head of Electrical Engineering and to introduce our first speaker. Thanks Luna. So hi everybody, for those of you that don't know me I'm Milind Karkuni, I'm the Interim Head of the, I'm supposed to say this exactly nowadays, Elmore Family School of Electrical and Computer Engineering. There's a little shock collar that buzzes me if I get that wrong. So I've only been Interim Head for two months and so this is the first time that I've gotten to introduce somebody for the celebration of our associate professors and it really I'm very extremely thrilled that the person that I do get to introduce for this is Xiao Kang Chu for a couple of reasons. So one, Xiao Kang and I are actually in the same research area. We both work in compilers and programming languages. I was on the committee that hired him. I was his mentor assigned to him when he started back in 2016 coming off a postdoc at MIT. He teaches a lot of the same classes that I teach and so it's been incredibly rewarding to watch him blossom as a faculty member over the time that he's been here. And it was my great privilege to put him up for tenure last year and he sailed through because he's an excellent faculty member and so I'm really excited to have the opportunity to introduce him to all of you and for him to get to tell you about the work that he's doing as he's established himself as really a world leader in the space of what we call program synthesis which he's going to tell you about. And so thanks everybody for being here and thanks Xiao Kang for being such an incredible colleague and collaborator and friend over the years. So here you go. Can you hear me? Yeah, thank you very much to Luna and Milling and thank you everybody for being here. This is a very, very special, most special talk I've ever given when Maria gave me the kind of hint questions. I was like wait a second. How come I can answer a question like this? What did you do to succeed? Is that question for senior faculty celebrating their retirement or 60th birthday? But later on I appreciate the opportunity to get here to share my scholarly pursuit and reflect on what I did and think about the directions, the future directions for my research, teaching and service. All right, so I got my bachelor and master's degrees in computer science from Nanjing University. So this is a library of the university where I spend a lot of time there. My favorite courses were complexity, computability, mathematical logic, pretty much everything about theoretical computer science. So I said okay, I want to get some research experience on theoretical computer science. I talked with a professor. There was only one professor on theoretical computer science in my department who taught us the courses. I talked to him and he said no. He said he recruited only at most one student each year and the slot is taken. So I was frustrated. I said okay, let me get some other research experience. So I worked with Professor Shen Dong Li on the project on software testing. So it's about how to automatically generate test cases. He's a very nice professor. It's a very nice project. Nothing's wrong, but I think my heart is still with theory. I think testing is not going to be, you will never stamp correctness stamp on the program. So it's testing is, you can always figure out some torn cases that you cannot cover. So how can we formally prove the correctness of the program? That's what I'm more interested in. And then at that time, I get access to some formal methods and the model checking, all these domains of areas of research. So I say okay, I decide to go to grad school for my PhD and my dream school was UPenn at that moment. I wanted to work with Rajeeva Lua on model checking stuff, but I got rejected. So I was frustrated again. I said okay, maybe I should get a job. So I applied for jobs. My dream job was Google. I got rejected again. I got a bunch of other job offers, but I said okay, maybe I still want to get a PhD. So and I got an offer from UIUC. So that's how I came to US, came to Midwest and cornfield. This is a civil center for computer science. I spent six years there. My advisor was Madhu Pasathrasi. He's a very special professor. He's so special. He has his own taste of research. He has his own agenda and his own criteria of research. And he does not really care about who else care about his research. It happened to be important problems and got appreciated a lot. But to be honest, I don't think he needs any student. He can work on the problem himself. But he's willing to work with students who share, who are equally passionate about the same research directions. And along the path, they will learn how to do high quality research. So my research is about formal verification, basically how to formally verify the correctness of the program. And it has a long history. It's one of the oldest areas of computer science. People have known the principles. People have known how to automatically verify a lot of kinds of programs. But heaps are still one of the most challenging areas. Basically, you can define the tree structures, link structures, graphs, et cetera. So they turned out to be super challenging. And my research was on how can we build a new logic and a new decision procedure as a new mathematical weapons to help automate your reasoning. And I developed the drive logic, which is the first disciple logic that can verify binary search trees for the first time. But binary search trees are still not strong enough. There's way more complicated data structures. So another thing I did as a PhD is to develop natural proofs. This is an automatic verification for a lot of more complex data structures. So in the last year of my PhD, I was serious thinking about academic jobs. I think I have a good publication record. I had four proper PLDI papers by that time. And my acceptance rate was 100%. I was lucky. I'm not that lucky anymore. But I'm not sure I'm ready in other aspects, teaching, communication, presentation, or the other skills needed as a faculty. But Madhu encouraged me to say, okay, you should apply anyway. You never know. I applied, and I know I was not ready. But also as in what time I get access to learn more about the topic called program synthesis. So program synthesis is very related to program verification. Basically, you don't have the program at the beginning. You have the intent. You have the specification. What do you want to have as a program? And we hope to have a machine, a program, to generate a program for you. So very related to the verification, but still different. I come to realize that this is a new, well, a more un-explored area. So in verification, it's more mature. People know all the principles. But in synthesis, it's still in the case that people don't really know what are the fundamental problems. So that means more opportunities to work on. So I feel like it's a good opportunity for me to explore this area a little bit. And Rajiv Alua from UPenn just got an NSF expedition in the computing project. It's a $10 million multi-institution project from NSF. And they are recruiting postdocs. So I applied and got the opportunity to work with Amandu Solarisama at MIT and also with Jeff Foster at Maryland then. So my work is to get some fundamental research problems solved for synthesis. So one thing is natural synthesis. So I talk about natural proof. It's about verification. And natural synthesis is about how can we synthesis programs? So the fundamental observation is that verification is not too different from synthesis. So verification is about searching for proof. And the synthesis is about searching for a program. And the two jobs need to be done in tandem. So we can do them together. And that's what natural synthesis is. And also we help Java programmers to generate programs automatically. The true is called the Java sketch. And online these systems, there's going to be a lot of synthesis algorithms ideas going on. And I also got the chance to work with Amandu. He's nice enough to invite me to co-develop the 6.85. This is the first synthesis curriculum in the US. And I learned a lot. I got a lot of insights from this teaching experience and also brings the course adapted version to Purdue as my automatic programming course. Then I'm a boiler maker. Okay. So I still remember the first day of my, the day of my interview, right? I was quite nervous before my job talk. Well, this is the only EC department I've interviewed with. I'm from the CS background. I interviewed a lot of CS or CSC departments. Do they really understand my research? Will they appreciate my research? So I was kind of nervous. And, well, Milena was there in your talk. And he was nodding the head. So I got to be assured a lot. So, okay, at least somebody understand my research. And then he asked you questions. And he really, really answered my research. That's great. And also, I think I remember Sanjay Rao was there. And he asked questions. He got confused with the example. And then we kept going on the conversation in our one-on-one meeting. And also continued on the dinner. I had to open up my laptop and walk through the example to him. So he's not in this area. But he's so serious about my research. He's curious. And he's looking forward to see some connection and some collaboration opportunities. And that turns out to be my first successful NSF award after seven rejections in a row. So I know many people around have similar experience, right? So submit, submit, submit. So, yeah, this is the first successful one with Sanjay. And I think I don't have time to talk about the more about project. But basically, this is interdisciplinary collaboration. And it's very insightful for me to realize that it's not just about the theoretical stuff. It's about how to engage with the user, right? So the network design, architects, they don't really know anything about programming languages. And how to engage with them, how to interact with them in a natural way, right? So that's what the comparative things this project is about. And that also helped me shape up my counter research, right? So my past experience helped me to find a sweet spot in the intersection of things this formal guarantees and user interactions, right? So my research is going, zooming into this niche area. And I think that's important to make sure that we can generate programs and the programs are correct as an interaction with user as natural acceptable, right? So all these targets need to be achieved at the same time. Okay, this is not the last slide. I have another slide for future plans. But I want to take this opportunity to thank everyone who have influenced me in this scholarly pursuit, my advisors, mentors, colleagues, my academic siblings, everyone, especially my students, my family, my parents, my wife, Peng and my kids, Elias and Timothy. So yeah, thank you so much for helping me along the long path of the scientific journey. Okay, so before I stop, I'm supposed to say something about future plan, but I don't really have much to say about it. Just got to tell you that it's a good time to sit down and think about what's going to happen next, right? But program things is a rapidly changing area today, right? 40 years ago, everybody knows that it's difficult. And this is one of my favorite quotes from Alan Perlis, the first two-ing award winner, right? And 40 years later, we have TechGPD. We got programs generated and we got the lollipop, right? So yeah, so I really like large language models. I think that will play a key role in my future research. This is the elephant in the room. Everybody's talking about it, but we don't really know how powerful it is and what's the right way to engage with the larger language models. So we can leave more conversation up to the questions. Thank you very much. So we've got time for some questions for Xiaokang. What would you say is the difference between tools like ChatGBT and the program synthesis that you talked about earlier? Yeah, so the overall target is similar, right? So program synthesis wants to generate programs and large language models can be used to generate programs. In some sense, machine learning in general is also a sort of program synthesis approach, right? You train the model from the data and the model is just a black box program. It's a program, but you don't understand it, right? So in some sense, they're the same thing, but with different focuses, right? So program synthesis is going to be generating white box programs. And the challenge thing is that there's a huge space of programs. How do you spot the right programs that satisfy your intent, right? And while machine learning is a little bit different, the problem is you have so many programs that can satisfy the correctness, right? But how to avoid overfitting, how to find the right program, right? So there's a little bit of difference, but a huge connection between the two areas, and they are more and more converging and interacting in a lot of interesting recent work. So while people are thinking about questions, I had a question. Kind of jumping off of the question we had here about the overlap between machine learning models or LLMs and program synthesis. The challenge, the struggle that I always have with LLMs or thinking about LLMs for doing, for generating programs is that I have, to me, it takes away the fun part of programming, which is coming, figuring out how to solve the problem and leaves behind the part that I hate the most, which is figuring out where the bugs are and how to fix them. Do you see an opportunity to use some of the techniques that you've come up with to kind of help with that process? Maybe you've done a lot of human and the loop kinds of synthesis problems. Is there an LLM and the loop synthesis approach that you could use? Yeah, sure. I think large language models are a huge opportunity for us to interact with machines in a lot of different interesting ways. My vision is that large language language models are going to be our personal assistant. Just like your research assistant, you talk with the model. I want to generate a program. I want to implement something. Go get this job done for me and it gets back to you and with a prototype and you give comments and suggestions for improvements. Just like pretty much like human interaction. But we still need to know the underlying techniques. I think all we teach, all we have learned from program synthesis, all the formal methods, languages, reasoning techniques are still there. We still need all these techniques, just like we have calculated, but we're still teaching our kids arithmetic. They need to know the inner workings, how is support work. The problem is always there. Here's the program. How do we, the program is correct. It's done by yourself or done by a black box machine as a separate thing. But I think the underlying techniques are always necessary. We need to learn and take them into the large language models too. But it's still not clear what's the ideal model of interaction. So I was actually just told that we need to move on to the next speaker. I'm in the interest of time. We've got four people to get through. So let's thank Xiaokang again.