Research Activity

This page contains a summary of my research/academic activities organized in such a way as to be an archive for myself :-) I keep a separate personal page (including hobbies and related stuff).

Scientific Activity in short

My research currently encompasses three different topics in computational logic.

Computer-assisted large-scale proofs
In 2014, I started working with Peter Schneider-Kamp and Mike Codish on the topic of sorting networks. During this period, we have proved several results about depth- and size-optimality of sorting networks, using a combination of theoretical methods, SAT solving and ad-hoc computer programs. We then started investigating how to verify this results formally, using the theorem prover Coq, and started developing a methodology to deal with similar very large-scale proofs. In October 2016, Peter and I finished a verification of the 200 TB SAT proof of the Pythagorean Boolean Triples conjecture.
Formal models for concurrency
In 2015, I started a collaboration with Fabrizio Montesi on the topic of Choreographic Programming. Choreographies are high-level languages for specifying communication protocols using peer-to-peer communication, endowed with an endpoint projection function that yields correct-by-construction implementations in process calculi. We started investigating into what a core choreography calculus should look like, from the premise that it should in any case be Turing complete, and used that model to study properties such as asynchrony and extraction (the dual of projection), which are much harder to study in more powerful models.
Knowledge representation
In 2012, I started a small research group with Isabel Nunes and Graça Gaspar with the purpose of learning about knowledge representation techniques for the semantic web. We are currently looking into the problem of online query answering, and have proposed a formalisation of hypothetical answers to such queries, which promises to have interesting pratical applications.

Besides those, I've made small contributions in other areas, motivated by my natural curiosity and interest in helping to solve my colleagues research problems. You can browse through my detailed list of publications (which includes postscript versions of my papers, as well as their abstracts and BiBTeX references, in case you need to cite them) or look at the talks I've given (once again, with abstracts, and you may even look at the slides if you feel like it).

Also, as part of my work as a PhD student, I have organized the library of formalized mathematics in Coq developed at the University of Nijmegen, and this now forms C-CoRN (the Constructive Coq Repository at Nijmegen), which has kept on growing long after I stopped working with it.

Awards & Prizes

I have enjoyed all kinds of competitions. While studying in high school, I participated in the Portuguese Mathematical Olympiad, where I managed to win three gold medals (1993, 1994 and 1996), a silver medal (1995) and a bronze medal (1992). In the later years, I was also a member of the portuguese team in the International Mathematical Olympiad (that was in 1994, 1995 and 1996); of course, there it was a lot more difficult to do well :-), but I did manage to achieve a Honorable Mention (known at home as a a Horrible Mention) in the 37th Mathematical Olympiad in Bombay (1996). At the time, that was the third best result ever for a portuguese participant.

As a student at University I entered the Portuguese National Contest of Programming in Logic, where I participated with a colleague in 1999, 2000 and 2001, ranking 2nd the first time and 1st the other two.

Also as a student I got a grant awarded yearly by the Portuguese Ministery of Education to the best students of each university. This was in the school years 1998/1999 and 2000/2001.

My first research prize was awarded to a paper that I wrote with Pierre Letouzey, which was rated the best paper in the CALCULEMUS 2005 meeting in Newcastle-upon-Tyne.

In 2014, another of my publications was included as a Notable Article in Computing in Computing Reviews' 19th Annual Best of Computing list. One year later this paper was voted best paper at CICM 2015 (CALCULEMUS track), where the corresponding presentation was also voted best presentation.

Although not officially a prize, the most rewarding moment in my career so far was receiving a congratulatory e-mail from Donald E. Knuth on one of my papers on sorting networks. It is cited in the most recent edition of The Art of Computer Programming.

Organization of Events

For many years I cooperated regularly, then occasionally, with the Mathematical Olympiad. From 1997 until 2002, I accompanied the participants in the Portuguese final for four days, usually in late April or early May. In September 2007, I was a coordinator at the final of the XXII Olimpíada Ibero-Americana de Matemática (the name is intentionally in Portuguese, since it is a competition where English is strictly forbidden!).

During my last year at university the idea came up to organize a student seminar and, being among the senior students that year, I was invited to join the organization. That seminar, called the Seminário Diagonal, is still running, and I am very happy to have been one of its founders. After returning to Lisbon, I rejoined the organization of the seminar in November 2004 until my leaving the Instituto Superior Técnico in September 2007.

I also changed sides and joined the organization of the Portuguese National Contest of Programming in Logic in 2006 and 2007, while in November 2006 I cooperated in the Scientific Comittee of the SWERC 2006 (Regional Final of the ACM Programming Contest).

Besides (sub-)refereeing for several conferences and journals in Computer Science and (occasionally) Mathematics, I was program co-chair at the Microservices conference 2017. I have also been Track Chair for SOAP at SAC'17 and SAC'18, as well as for MiDOS at SAC'19, and sat on the Program Committee for several editions of established international conferences, including SOCA, MSE@SEFM, FACS, ECAI and AAAI (student track).

Academic Degrees

I graduated from high school in July 1996 with a final mark of 18/20, having studied at Colégio de São João de Brito in Lisbon. In June 2001 I got my degree in Applied Mathematics and Computer Science (specialization in Computer Science) at the Instituto Superior Técnico, also in Lisbon, with a final mark of 19/20.

Afterwards, I did a PhD at the University of Nijmegen (presently Radboud University of Nijmegen, in the Netherlands) under the supervision of Professor Henk Barendregt, which I finished in June 2004. My thesis can be downloaded both in postscript (gzip'ed) or pdf format from my publications page.

From June 2004 until September 2007 I worked as a postdoc first at the University of Nijmegen, then at the (now extinct) Center for Logic and Computation of the Instituto Superior Técnico in Lisbon, and finally on a grant from the Sensoria project at the Department of Informatics of the Faculty of Sciences of the University of Lisbon.

Teaching Experience

My teaching page includes a summary of the places where I have been teaching, the courses I teach/taught, and my teaching-related publications. If that's too much for you, this section has a summary of all the relevant information.

Between September 1999 and July 2001, I worked as a student assistant in the Section of Logic and Computation of the Department of Mathematics at the Instituto Superior Técnico, in Lisbon, teaching exercise classes in several Programming and related courses.

As a PhD student, I helped with the exercise classes for two courses at the University of Nijmegen: T2 (Complexity Theory for Informatics students) and an optative two-week course on Reflection for Biology students, both in 2003/2004.

After moving back to Lisbon, I worked for three years as an Invited Assistant Professor, again at the Section of Logic and Computation of the Department of Mathematics of Instituto Superior Técnico, teaching various courses on Programming.

From October 2007 until August 2009 I was an assistant professor at the Department of Informatics of the Faculty of Sciences of the University of Lisbon, where I taught the introductory Programming course, as well as several exercise and lab classes in other Programming and Theory of Computation classes.

From October 2009 to the end of 2013 I taught at the Escola Superior Náutica Infante D. Henrique, located near Lisbon, and switched back to Mathematics. In those four years, I taught all undergraduate Mathematics courses available (Calculus I & II, Linear Algebra, Numerical Methods, Probabilities and Statistics) and worked on reorganizing the syllabus and producing course notes for several of those courses.

In 2014 I started (again) as a postdoc at the Department of Mathematics and Computer Science of the University of Southern Denmark, becoming Assistant Professor in 2018 and Associate Professor in 2020. I teach different courses in Programming, Logic and Artificial Intelligence.