Formal Methods Engineer

Input Output Logo

Input Output

πŸ“Remote - United Kingdom

Summary

Join IO as a Formal Methods Engineer and bridge the gap between product, research, architecture, and development. You will develop and refine formal specifications, create prototypes, and verify source code, focusing on automated and interactive verification of smart contracts. Your work will involve modeling system performance, providing feedback to researchers and developers, and contributing to the team's knowledge sharing. You will also report on your work through various channels and participate in code reviews and the development of static analysis tooling. This role requires a higher degree in Computer Science and relevant experience in formal methods and functional programming.

Requirements

  • A higher degree in Computer Science or a related field
  • A minimum of 2-3 years of experience in a functional language, preferably Haskell
  • Experience working and collaborating with Git
  • Experience with one or more formal methods
  • Demonstrated ability to work on difficult problems in a self-driven way

Responsibilities

  • Build formal artifacts from research and architectural guidance, and business and engineering requirements
  • Model the performance of formally specified systems
  • Produce prototypes and simulations
  • Refine specifications, using the performance models and simulations to gauge the impact of design decisions during refinements
  • Discover new properties about the specifications and their implications
  • Prove properties of the specifications and of the correctness of refinement steps
  • Communicate with both researchers and developers, and act as a bridge between the two: you will provide feedback to researchers about issues that come up when their work is incorporated into real world systems. You will assist developers in understanding your specifications and in turning them into production code
  • Report on your work, in the form of blog posts, technical report documents, presentations at internal seminars, as well as at workshops and conferences, and/or by contributing to academic papers
  • Participate in code reviews
  • Contribute property-based tests, both for testing properties of the executable specifications/prototypes, and for verifying production code against the executable specifications
  • Contribute to the implementation, extension, and maintenance of custom static analysis tooling
  • Work in an international team across multiple time zones
  • Break down large and complex tasks assigned to you into workable items, and work on them independently
  • Share specialized knowledge with other team members

Preferred Qualifications

  • Experience in one or more of the domains we are working in -- networking, distributed systems, programming language design, blockchain applications
  • Experience with SAT/SMT
  • Experience with Model checking
  • Experience with interactive theorem proving
  • Experience with using Lean or a similar tool
  • Experience with building formal methods tools
  • Domain experience with smart contracts

Benefits

  • Remote work
  • Laptop reimbursement
  • New starter package to buy hardware essentials (headphones, monitor, etc)
  • Learning & Development opportunities
  • Competitive PTO
  • Medical, Dental, and Vision benefits coverage through for the employee and dependents
  • 401k
  • Health Savings Account
  • Life Insurance

Share this job:

Disclaimer: Please check that the job is real before you apply. Applying might take you to another website that we don't own. Please be aware that any actions taken during the application process are solely your responsibility, and we bear no responsibility for any outcomes.