Here, I describe my expectations for a project, and suggest some possible ideas for projects. If you have an idea of what you'd like to pursue for a project, that's great. Look at this list for ideas, and feel free to talk with me and we can brainstorm to find a fun and interesting project.
The goal of the project is for you to go a bit deeper into some aspect of formal verification than what we covered in class. A realistic project should take about 40-60 hours of your time -- a term is 14 weeks; a 3 credit course should be about 9 hours/week of total work; the project is 40% of your grade, that works out to (14 weeks) *(9 hours/week) *.4 = 50.4 hours.
The final product of your project is a report. If you're a M.Sc. student, this report should be a M.Sc. thesis proposal. You're not obligated to do your M.Sc. with me, it's practice for formulating a thesis proposal no matter who you end up choosing to work with. Of course, if you're project leads to our working together, I'll be happy with that as well, but it's not required, and it's certainly not part of your grade. As such, the proposal should:
I will also consider projects that are primarily a literature survey or address a theoretical aspect of formal methods using paper-and-pencil proofs. A literature survey project will be much more extensive in the papers that it covers (e.g.\ 15-20 papers) and should present them in an organized, coherent way, for example, putting forward a taxonomy of the research approaches and results. If you want to do a literature survey or theory project, please talk to me first.
I am often asked if a team or partner project is acceptable. Yes, but only if there is a really good reason for it. I prefer to avoid projects where student X depends on student Y to pass. If the team or partner project can be divided into separate projects (at least from an evaluation perspective), then I strongly prefer that. Otherwise, the project needs to clearly state who is responsible for what, and the milestones and dependencies make sure that each member of the team has a clear path to success.
cons
,
car
, and cdr
) are unavoidably polymorphic. Yan has worked
out solutions for these particular functions. Can this be generalized to support
general, user-defined, polymorphic functions? I believe the answer is “yes”,
and that showing so would be a fun and interesting project.
My expectation is that proofs are possible now, but that doing one will quickly point to ways we could make such proofs way easier. ACL2 has extensive support for metaprogramming. This means that once we spot common patterns in proofs from a particular domain, then we should be able to automate much of the effort. Doing the first proof on a fairly simple example is a great course project. Implementing domain specific meta-functions for reasoning about machine learning algorithms and demonstrating them on real examples would be a great thesis topic.
Or, you can talk with Ivan Beschastnikh, or Ron Garcia, or Alan Hu, or Karthik Pattabiraman, or Julia Rubin, or Alex Summers (arriving at UBC in March), or any of the faculty I've mentioned above. I'm sure there are other faculty here with projects ideas that would fit well in CpSc 513. I'm always happy to discuss project ideas with you.