What is this graph

About Me

In August 2021 I joined the Programming Group at the University of St. Gallen, Switzerland as a PhD student where I'm supervised by Guido Salvaneschi.

Between 2017 and July 2021 I was an R&D software developer at Agilent Technologies (formerly Genohm) in Lausanne, Switzerland.

In June 2017 I obtained a master's degree in computer science from the École polytechnique fédérale de Lausanne (EPFL) in the LAMP lab. In my thesis I simplified conceptually a polymorphic safe-and-precise effect system.

In 2015 I obtained a bachelor's degree in computer science and a minor in mathematics from the American University of Beirut (AUB). My bachelor's graduation project was to design and implement a quantum functional language.

I am an avid reader, my Goodreads profile lists all my non-technical interests (those outside of CS and math). I speak/read fluently three (natural) languages: English, French, and Arabic.

In my spare time, when I'm not reading or programming, I play Go, snooker, and the mandolin.

Academic Interests

Technical Knowledge and Setup

I am proficient in many programming paradigms; functional, imperative, and object-oriented, with preference to functional languages. I mainly use Python for small applications, Bash for write-once-execute-once code, C and D for any heavy lifting, Octave for quick plotting and mathematical computations and Haskell for any type-theoretic experiments and programs that must be correct. I am proficient in these programming/scripting/markup languages:

My primary editor is Vim.

I live in the command line most of the time.


What is this graph above?

This graph represents a 69-state machine, in fact, a quantum Turing machine [PDF]. It's a machine that abides by the laws of quantum mechanics. This machine can be thought of performing the following algorithm on each superposition |k,x⟩ in a 6-dimensional Hilbert space

x ∈ ℕ8
k ∈ ℕ8
while |x-k| < 4:
    x := x + 1   mod 8
This machine is significant to me because I devised it to exhibit conditional looping (as opposed to a statically-bounded loop) which I could not find in the literature. In the process I discovered that the fixed-point of a sequence of compositions of unitary functions may not be itself unitary which raises the question of computing the inverse of such a function.