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.
- Formal study of Programming Languages with a focus on safe type systems,
- Mathematical Logic and its relation to programming,
- and Quantum Computation from the perspective of computability: here's an introductory article about
Quantum Computation [PDF].
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:
- C, D, Haskell, Scheme, Java, Scala
- HTML, CSS, and LaTeX
My primary editor is Vim.
I live in the command line most of the time.
- George Zakhour, Pascal Weisenburger, and Guido Salvaneschi. 2023.
Type-Safe Dynamic Placement with First-Class Placed Values. Proceedings of the ACM Programming Languages 7, OOPSLA2, Article 297 (October 2023), 29 pages. https://doi.org/10.1145/3622873 [author version]
- George Zakhour, Pascal Weisenburger, and Guido Salvaneschi. 2023. Type-Checking CRDT Convergence.
Proceedings of the ACM on Programming Languages 7, PLDI, Article 162, June 17–21, 2023, Orlando, Florida, United States. https://doi.org/10.1145/3591276 [author version]
- System F-CA My masters thesis that builds on the work of
Fengyun Liu where we
design a precise-and-safe polymorphic
effect system using capabilities using one kind of functions
(kind here does not refer to the standard type-theoretic definition).
- Braqet and the MG-QTM Simulator
Braqet is the functional quantum programming language I developed for my bachelor's degree.
Its type system adopts the linear types introduced by Selinger and Valiron (2006) with the exception that control in Braqet is purely quantum.
The MG-QTM Simulator simulates MG-Quantum Turing Machines and visualises them.
MG-QTMs are more general
SR-QTMs [PDF]. For the visualization of the graph
I used a
Forced-Directed Graph Drawing Algorithm [PDF].
- Damncheck A property-based testing library for
D. [Source Code]
- Simulation of a Quantum Particle in a Box
- e Project I found the first 5,087,137 digits of
e in ~1hr29min. In 2019 I wrote a parallel version that descreases the runtime linearly with the number of processes and ended up finding the same digits in 27min5sec with 8 threads.
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
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.