Software Engineer (Engineer III to Principal) - Formal Methods
Design and develop tools that verify smart-contract correctness and identify security issues. Implement symbolic model checking, SAT/SMT solving, abstract interpretation, data-flow analysis, and deductive verification, while contributing across the software lifecycle.
Responsibilities
- Extend automated program verification tools and implement new tools
- Improve symbolic software model-checking algorithms including BMC, CEGAR, and IC3/PDR
- Build translators into intermediate representations and optimize generated models
- Formalize new smart-contract security properties for automated verification
- Collaborate with engineers and management on technical direction
- Deliver software across analysis, design, testing, operations, CI/CD, measurement, feedback, and support
Requirements
- Master's degree in Computer Science or related field, or five years of equivalent experience
- At least four years of software development experience, including internships, research, or open source
- At least two years of experience with model checking, formal verification, SAT/SMT solving, abstract interpretation, or related disciplines
- Knowledge of data structures, algorithms, mathematical logic, and automata theory
- Preferred: PhD in automated reasoning or publications in relevant conferences
- Preferred: Experience with OCaml or Haskell
- Strong problem-solving, collaboration, and learning skills
Benefits
- Medical insurance
- Vision insurance
- Dental insurance
- 401(k) plan with company matching
- Life and accidental death and dismemberment insurance
- HSA with high deductible plan
- FSA
- Flexible paid time off and holidays
- Variable commission program for business development sales roles