Steven de Oliveira

Ph.D. Student in formal methods


Since 2014, I work on C programs Model Checking at the Software Safety and Security Laboratory, at the CEA. I mainly work on the development of Frama-C, an open-source framework for the development of C programs verification applications.

  • Development of the model-checker CaFE, based on the temporal logic CaRet
  • Development of the loop invariant generator Pilat, available on GitHub
  • Development of Ocaml libraries of polynomials and matrices (used in Pilat)

You can contact me here. Also, you can find my CV here.

    2017

  1. INF441 - Advanced programming - Ecole Polytechnique
    Kaustuv Chaudhuri, Steven de Oliveira, Hugo Illous, Samuel Mimram, Mario José Parreira Pereira, Xavier Rival, Pierre-Yves Strub
    • Ocaml
    • Functionnal programming
    • Abstraction
  2. 2016

  3. INF411 - Programmation and algorithms - Ecole Polytechnique
    Jean-Christophe Filliâtre
    • Java
    • Basic data structures (Linked list, trees,...)
    • Genericity

  4. INF431 - Concurrency and distributed computing - Ecole Polytechnique
    Roberto Blanco, Kaustuv Chaudhuri, Steven De Oliveira, Cezara Dragoi, Eric Goubault, Samuel Mimram, Giselle Reis, Christelle Rovetta, Francesco Zappa Nardelli
    • Java
    • Complexity
    • Threads, locks
    • Map-reduce, Hadoop, RMI
  5. Homework : Strange programs and behaviors

    2015

  6. INF472 - Web applications - Ecole Polytechnique
    Steven de Oliveira, Baptiste Desprez, Andrey Ivanov, Christelle Rovetta, Olivier Serre
    • HTML, CSS, PHP
    • Databases (MySQL)
    • Security, javascript, ajax
  7. Open course (in french) : jQuery

    2017

  1. De Oliveira Steven, Bensalem Saddek and Prevosto Virgile (2017, October)
    Synthesizing invariants by solving solvable loops
    In 15th International Symposium on Automated Technology for Verification and Analysis (ATVA 2017)

    When proving invariance properties of a program, we face two problems. The first problem is related to the necessity of proving tau-tologies of considered assertion language, whereas the second manifests in the need of finding sufficiently strong invariants. This paper focuses on the second problem and describes a new method for the automatic generation of loop invariants that handles polynomial and non deterministic assignments. This technique is based on the eigenvector generation for a given linear transformation and on the polynomial optimization problem, which we implemented in the open-source tool Pilat.

  2. De Oliveira Steven, Bensalem Saddek and Prevosto Virgile (2017, June)
    CaFE : un model-checker collaboratif
    In Approches Formelles dans l'Assistance au Developpement Logiciel (AFADL 2017)

    De nombreux travaux s’appuient sur la logique temporelle linéaire (LTL) pour décrire formellement le comportement attendu d’un programme. Une extension particulièrement intéressante de LTL pour l’analyse de programmes est la logique CaRet, qui autorise des raisonnements explicites sur la pile d’appel. Ce papier présente CaFE , un greffon de la plate-forme Frama-C qui vérifie automatiquement de manière approchée qu’un programme C véri- fie une formule logique CaRet donnée. Il décrit également la mise en œuvre de CaFE et ses interactions avec le reste de la plate-forme.

  3. 2016

  4. De Oliveira Steven, Bensalem Saddek and Prevosto Virgile (2016, October)
    Polynomial invariants by linear algebra
    In 14th International Symposium on Automated Technology for Verification and Analysis (ATVA 2016)

    We present in this paper a new technique for generating polynomial invariants, divided in two independent parts : a procedure that reduces polynomial assignments composed loops analysis to linear loops under certain hypotheses and a procedure for generating inductive invariants for linear loops. Both of these techniques have a polynomial complexity for a bounded number of variables and we guarantee the completeness of the technique for a bounded degree which we successfully implemented for C programs verification.

  5. De Oliveira Steven, Bensalem Saddek and Prevosto Virgile (2016, June)
    Algèbre lineaire pour invariant polynomiaux (slides)
    In Approches Formelles dans l'Assistance au Developpement Logiciel (AFADL 2016)

    Nous présentons dans ce papier une nouvelle technique de génération d’invariants dans le contexte d’un certain type de boucles polynomiales. Notre méthode a l’avantage d’être plus rapide que les méthodes existantes pour des boucles équivalentes et plus simple à implanter car elle repose sur des algorithmes d’algèbre linéaire de complexité polynomiale. Un outil implé- mentant cette méthode est en cours de développement dans Frama-C [2], une plateforme open-source, extensible et collaborative dédiée à l’analyse de programmes C.

  6. 2015

  7. De Oliveira Steven, Prevosto Virgile and Bardin Steven (2015, January).
    Au temps en emporte le C.
    In Vingt-sixièmes Journées Francophones des Langages Applicatifs (JFLA 2015).

    Le (bon) séquencement des événements au fil du temps fait partie des nombreux sujets d'analyse de programmes, par exemple pour l'étude de protocoles d'échange d'information ou de systèmes embarqués. De nombreux travaux de logique temporelle linéaire (LTL) permettent de décrire formellement le comportement attendu d'un programme, sous la forme d'une succession d’actions distinctes. Implanté au sein de Frama-C, plate-forme d'analyse de code source en langage C, le greffon Aoraï permet la génération de spécifications équivalentes, dans leur ensemble, à la conformité d'un programme C donné vis à vis d'une formule de logique temporelle linéaire. Ce greffon discrétise le temps de telle sorte que seuls les appels et les retours de fonctions sont considérés comme des événements. Cet article présente Model-CaRet, un nouveau greffon Frama-C qui généralise la trace étudiée par Aoraï. Plus précisément, Model-CaRet est dédié à la génération du test de satisfiabilité, et à sa vérification automatique, d'une formule de logique CaRet sur un programme C, représenté sous la forme d'une machine à états récursif. CaRet est une extension naturelle de la LTL permettant l'étude simultanée de plusieurs traces d'exécution, et en particulier de manipuler explicitement la pile d'appel du programme dans les formules.