All Blog Posts
Proving 50-Year-Old Sorting Networks Optimal: Part 1
Introducing the problem of minimal size sorting networks and summarizing the previous state of the art.
The Assembly Language of Satisfiability
How SAT solvers relate to higher level tools like SMT solvers.
Refactoring Varisat: 1. Basics and Parsing
Refactoring my CDCL based SAT solver written in Rust.
Refactoring Varisat: 2. Clause Storage and Unit Propagation
Implementing a clause allocator and watchlist based unit propagation.
Refactoring Varisat: 3. Conflict Driven Clause Learning
Implementing search using decisions and clause learning.
Refactoring Varisat: 4. Heuristics
Implementing heuristics for decisions, restarts and clause deletions. Also clause minimization.
Refactoring Varisat: 5. Incremental Solving and Proofs
Implementing assumption based incremental solving and proof logging, including LRAT proof logging.
Varisat 0.2.0 Released
Release of my refactored CDCL based SAT solver written in Rust.
Inroducing a CDCL SAT solver written in Rust.
Varisat 0.1.3: LRAT Generation and Proof Trimming
Varisat can now directly output and trim LRAT proofs.
Encoding Matrix Rank for SAT Solvers
Using a variant of the LU-decomposition to encode matrix rank constraints for SAT and SMT solvers.
Inroducing a Rust library to work around interprocedural borrowing conflicts.
Pushing Polygons on the Mega Drive
Write-up of the polygon renderer used for the Mega Drive demo “Overdrive 2”.
Not Even Coppersmith’s Attack
Factoring ROCA weak RSA keys without using Coppersmith’s method.