Hey There Buddo!
A blog about life, programming, math, logic, and physics.
- Posts
- 485 from 10 Jan 2015 to 16 Oct 2026
- Posting
- weekly (42 in the last year)
- Kind
- personal blog
- Feed
- https://www.philipzucker.com/feed.xml
2026 33
- Ghidra + CBMC = Assembly Model Checker
- Category Theory of Terms Emphasizes the Argument List
- Refinement E-Graphs
- A Lean Proof Printing Python Union Find
- Lambda MicroEgg
- Lean Metaprogramming Etudes: Execution is Elaboration
- Validating GDB Interrupt Traces Against a TLA+ Spec
- Grobner / Buchberger / Knuth Bendix for Semirings and Seven Trees in One
- An Intuitionistic Micro Proof Assistant
- Finite Algebraic Effects as dicts and such
- Making TLA+ and x86 Kiss Via Z3Py
- Lifting Terms: Making Well Scoped Syntax Dumber
- A Theory of Arrays (ToA) Union Find
- Arenas, Cyclic Terms, and Flat Equational Systems
- Lifting E-Graphs
- Reading Proof Objects and Completed Rewrite Systems from eprover into Knuckledragger
- Family Orienting Python Frozenset Dependent Type Theory
- Lifting and Lowering Functions with The Dump Calculus
- Thinning/Lifting E-Graphs for Alpha Equivalence: Checkpoint I
- Alpha Equivalent Hash Consing with Thinnings
- Monus, Factor, and Thinning Union Finds
- Refinement Modeling and Verification of RISC-V Assembly using Knuckledragger
- Thinnings: Sublist Witnesses and de Bruijn Index Shift Clumping
- State of Knuckledragger III: Kernel Changes, Symbolic Union, AI, and more
- An Associative-Commutative (AC) Hash Cons with AC matching
- Weighted Union Find and Ground Knuth Bendix Completion
- SMTLIB as a Compiler IR I
- Calling Lean Functions As Python Functions
- Term Ordering Etudes: Ground Lexicographic Path Ordering
- Subterms Modulo Theories I
- Contextual Union Finds
- Dagstuhl Egraphs
- Phil Wrapped 2025
2025 50
- SMTMSMT: Gluing Together CVC5 and Z3 Nelson Oppen Style
- An Inequality Union Find Inspired by Atomic Asymmetric Completion
- Our Latest Ouvres: The GCB and The Incident
- Some Lean Syntax for Knuckledragger
- Semi-Interactive Assembly Verification in Knuckledragger
- SAT Etudes 2: Toy DPLL
- Primitive, Leveled, and Quantifier Union Finds
- Implementing E Unification using SMT
- My House Mildly Burned Down
- ZF style set theory in Knuckledragger I
- Toy Binary Decision Diagrams
- Proving the Infinitude of Primes in Knuckledragger
- Proof Rules for MetaSMT
- A Slotted Hash Cons for Alpha Invariance
- Compositional Datalog on SQL: Relational Algebra of the Environment
- A Python CLI for Verifying Assembly
- Knuckledragger Analysis Etudes
- Semantic Refinement/Dependent Typing for Knuckledragger/SMTLIB Pt 1
- Verified Assembly 2: Memory, RISC-V, Cuts for Invariants, and Ghost Code
- Semi-Automated Assembly Verification in Python using pypcode Semantics
- Using Lean like an External SMT Solver from Python
- Doing Lean Dirty: Lean as a Jupyter Notebook Replacement
- Inequality Union Finds: Baby Steps to Refinement E-graphs
- Telescopes Are Tries: A Dependent Type Shellac on SQLite
- PLDI 2025 and E-Graphs Modulo Theories Talk
- Categorical Substitution Etudes
- Unification Modulo E-Graphs
- Brute E-Graphs Modulo Theories 2: Extraction, Proofs, and Context
- A Python frozenset interpretation of Dependent Type Theory
- Brute Force E-Graphs Modulo Theories via SMT
- NEPLS 2025 and a Short Talk on Knuckledragger
- Proof Objects I Have Loved
- The Inverse Method is a Good Fit for Datalog Theorem Proving
- A Wimshurst Machine
- "Verified" "Compilation" of "Python" with Knuckledragger, GCC, and Ghidra
- A Small Prolog on the Z3 AST
- Measuring the Gain Pattern of a Yagi-Uda Antenna with an RTL-SDR
- Shallow Embedding Logics in Z3 pt. I
- Knuth Bendix Solver on Z3 AST
- Generics and Typeclasses in Knuckledragger
- Building a Watt Balance
- Where are all the Rewrite Rules?
- Comparing Two Verilog CPU Implementations using EBMC
- Treeifying Graphs: Tree Decomposition
- Egg-style Equality Saturation using only Z3
- More Knuckledragger: Simp, Inductive Relations, Sympy NbE, and Software Foundations
- Ten Years of Blog
- SAT Solver Etudes I
- Our Latest Ouvre: The Birthday Scimitar
- Translating Cody's Lean Sheffer Stroke Proof to Knuckledragger with ChatGPT
2024 53
- Review of 2024
- Symbolic Execution by Overloading `__bool__`
- 'Lean-style' Tactics in Knuckledragger
- Dyckhoff Intuitionistic Propositional Prover
- Superposition as a Super Datalog
- Ground Lambda Prolog
- SQL, Homomorphisms and Constraint Satisfaction Problems
- Higher Order Pattern Unification on the Z3py AST
- Tensors and Graphs: Canonization by Search
- Don't Implement Unification by Recursion
- Coset Enumeration using Equality Saturation
- Towards an AC Egraph: Groebner, Graver and Ground Multiset Rewriting
- Using the C Bounded Model Checker as a TLA+
- Rule Synthesis Etudes for Tao's Algebra Problem
- Knuckledragger Solvers for Terence Tao's Equational Reasoning Challenge
- Term Ordering Etudes
- Acyclic Egraphs and Smart Constructors
- String Knuth Bendix
- Oscillator Etudes: Frequency Sweeping
- Ordinals aren't much worse than Quaternions
- Bounding Euler's Constant
- State of Knuckledragger, a Semi-Automated Python Proof Assistant
- Co-Egraphs: Streams, Unification, PEGs, Rational Lambdas
- Naive Automata Minimization
- Gauss and Groebner Egraphs: Intrinsic Linear and Polynomial Equations
- An External Z3 Egraph for Egraphs Modulo Theories
- EGraphs as Ground Completion Talk and EGRAPHS 2024 notes
- Conditional Simplification of Z3py Expressions with Egglog
- Justified SMT 1: The Minikanren inside Z3
- Knuckledraggin' Kleene Algebra
- Ground Knuth Bendix Ordering is Basically Size with Tie Breaking
- Proving Sum n = n*(n-1)/2 and that 1/n tends to 0.
- Hashing Modulo Theories
- Peano Nats in Interactive SMT
- Experiments in the Irrationality of Sqrt 2 with SMT
- DWARF Verification via Ghidra and CBMC
- EGRAPHS 2024 submission: E-graphs and Automated Reasoning
- Resolution Proving I
- Finite Set Theory in Python
- Knuckledragger Update: ATP for Python Interactive Theorem Proving
- Compiling With Constraints
- Termination Checkers: Playing with AProVE
- Copy and Micropatch: Writing Binary Patches in C with Clang preserve_none
- Bottom Up Egraph Ematching Plays Nicer with Theories (AC, etc)
- Automated Equational Reasoning with Twee Pt 1.
- Applicative Python a la ACL2
- Guide to the TD4 4-bit DIY CPU
- Tools for Detecting Undefined Behavior in My Bad C Example
- The C Bounded Model Checker: Criminally Underused
- Metamath for Datalog Provenance
- Harrison Handbook in Python pt 1
- PCode2C: Steps Towards Translation Validation with Ghidra and CBMC
- Knuckledragger: Experimenting with a Python Proof Assistant
2023 9
- Our Latest Ouvre: The Woodpecker
- Answer Set Programming for E-Graph DAG Extraction
- PLDI 2023 notes
- E-graphs are Ground Rewrite Systems 2: E-matching
- A Road to Lambda: E-graphs are Ground Completion
- Relational AC Matching
- Checkpoint: Harrop Clauses and Scoped Dynamic Databases in Regular Prolog
- MiniLitelog: Easy Breezy SQLite Datalog
- POPL 2023 and Puzzle Hunt 2023
2022 20
- Our Latest Ouvre: Dinty Finyins
- Datalog as a Theorem Prover: Harrop Clauses-lite
- Groupoid Annotated Union Finds
- Snakelog: A Python DSL for Datalogs
- Duckegg: A Datalog / Egraph Implementation Built Around DuckDB
- Datalite: A Simple Datalog Built Around SQLite in Python
- Fifty Year Beep
- Egglog0 Talk at EGRAPHS 2022 and PLDI 22 Notes
- Lambda Normalization for Souffle Datalog
- Chocolate in Peanut Butter: Prolog-ish Unification in Datalog with First Class Union Finds
- Souffle Herbie: Hacking Rationals into Datalog to Estimate Float Errors
- Contextual Datalog: Steps Towards Lambda Datalog
- Backtracking a Datalog
- E-Graphs in Souffle IV: It's actually kind of fast this time
- Hashlog: A Simple Datalog in OCaml
- The Almighty DWARF: A Trojan Horse for Program Analysis, Verification, and Recompilation
- Embedding E-graph Rewriting and Egglog in Constraint Handling Rules
- A Questionable Idea: Hacking findParent into Souffle with User Defined Functors
- Constrained Horn Clauses for Bap
- Getting Bap in the Browser 1
2021 31
- Naive E-graph Rewriting in Souffle Datalog
- Our Latest Ouvre: Cars 5
- Instruction Matching with Souffle Datalog
- Thoughts on Differentiation in Z3
- Verifying Nand2Tetris Assembly Programs with Constrained Horn Clauses
- Simple Nand2Tetris Verilog CPU
- Marble Machine Progress: The Slowest Mirror Ever
- Egglog Examples: Pullbacks, SKI, Lists, and Arithmetic
- Replicating Rise4Fun Z3 with z3-wasm
- Egglog 2: Automatically Proving the Pullback of a Monic is Monic
- JuliaCon 2021 Talk on Metatheory.jl and Snippets From the Cutting Room Floor
- Replace Your Friends with a Markov Chain Slackbot
- Egglog: a Prolog Syntax for Egg, Checkpoint I
- An Interpreter of the Algebra of Programming in MiniKanren
- Modeling Separation Logic with Python Dicts and Z3
- Making a "MiniKanren" using Z3Py
- 2D Optics Demos in Javascript
- Encoding E-graphs to Souffle Datalog
- A Simple, Probably-Not-Exp-Time Disjoint Set in Coq
- Partial Evaluation of a Pattern Matcher for E-graphs
- A Simplified E-graph Implementation
- Union Find Dicts: Dictionaries Keyed on Equivalence Classes
- Z3 Tutorial For FMIE 2021
- Rewriting Monoidal Categories in the Browser with Egg
- Progress on Automated Reasoning for Catlab with Metatheory.jl Egraphs
- Translating My Z3 Tutorial to Coq
- CEGARing Exponentials into Z3 with Intervals and Python Coroutines
- Z3, The Word Problem, and Path Homotopy as Equality
- The Empathy Machine
- Automated Propositional Sequent Proofs in Your Browser with Tau Prolog
- Sketchy Exact Reals from Interval Arithmetic
2020 37
- Weakest Precondition with Z3Py
- Modeling TLA+ in Z3Py
- A New Masterpiece, The Accident
- E-Graph Pattern Matching (Part II)
- E-graphs in Julia (Part I)
- I Moved My Blog From Wordpress
- DataFrames.jl Style Linear Relations
- I Gave a Talk on "Executing Categories"
- Theorem Proving For Catlab 2: Let's Try Z3 This Time. Nope.
- Notes on Synthesis and Equation Proving for Catlab.jl
- Yet Another MicroKanren in Julia
- Google CTF 2020 Write Up
- Ray Tracing Algebraic Surfaces
- Defunctionalizing Arithmetic to an Abstract Machine
- Checkpoint: Implementing Linear Relations for Linear Time Invariant Systems
- System Identification of a Pendulum with scikit-learn
- A Buchberger in Julia
- Category Theory in the E Automated Theorem Prover
- Unification in Julia
- MetaOCaml style Partial Evaluation in Coq
- Walk on Spheres Method in Julia
- A Smattering of Physics in Sympy
- Computational Category Theory in Python III: Monoids, Groups, and Preorders
- Computational Category Theory in Python II: Numpy for FinVect
- Computational Category Theory in Python I: Dictionaries for FinSet
- Uniform Continuity is Kind of Like a Lens
- Computing Syzygy Modules in Sympy
- Categorical Combinators for Convex Optimization and Model Predictive Control using Cvxpy
- Naive Synthesis of Sorting Networks using Z3Py
- Notes on Finally Tagless
- Rough Ideas on Categorical Combinators for Model Checking Petri Nets using Cvxpy
- Categorical Combinators for Graphviz in Python
- Stupid is as Stupid Does: Floating Point in Z3Py
- A Sketch of Gimped Interval Propagation with Lenses
- Has My Blog Been Hacked?
- A Sketch of Categorical Relation Algebra Combinators in Z3Py
- Fiddling around with validated ODE integration, Sum of Squares, Taylor Models.
2019 45
- Stupid Z3Py Tricks Strikes Back: Verifying a Keras Neural Network
- More Stupid Z3Py Tricks: Simple Proofs
- Stupid Z3Py Tricks: Verifying Sorting Networks off of Wikipedia
- Our Latest Film Ouvre: The Wassenroid
- Programming and Interactive Proving With Z3Py
- Solving the Laplace Equations with Linear Relations
- Sum of Squares optimization for Minimax Optimal Differential Eq Residuals
- Categorical LQR Control with Linear Relations
- Linear Relation Algebra of Circuits with HMatrix
- Failing to Bound Kissing Numbers
- Learn Coq in Y
- Neural Networks with Weighty Lenses (DiOptics?)
- Gröbner Bases and Optics
- Functors, Vectors, and Quantum Circuits
- Concolic Weakest Precondition is Kind of Like a Lens
- Flappy Bird as a Mixed Integer Program
- Linear Algebra of Types
- Relational Algebra with Fancy Types
- Notes on Getting Started in OCaml
- The Classical Coulomb Gas as a Mixed Integer Quadratic Program
- Fool's Rules Regatta 2019
- Dump of Nonlinear Algebra / Algebraic geometry Notes. Good Links Though
- CAV 2019 Notes: Probably Nothin Interestin' for You. A bit of noodling with Liquid Haskell
- Doing Basic Ass Shit in Haskell
- Annihilating My Friend Will with a Python Fluid Simulation, Like the Cur He Is
- Proving some Inductive Facts about Lists using Z3 python
- A Short Skinny on Relations & the Algebra of Programming
- Some Notes on Drake: A Robotic Control ToolBox
- Why I (as of June 22 2019) think Haskell is the best general purpose language (as of June 22 2019)
- A Basic Branch and Bound Solver in Python using Cvxpy
- Mixed Integer Programming & Quantization Error
- Solving the XY Model using Mixed Integer Optimization in Python
- 2D Robot Arm Inverse Kinematics using Mixed Integer Programming in Cvxpy
- The Beauty of the Cone: How Convex Cones Simplify Convex Programming
- Lens as a Divisibility Relation: Goofin' Off With the Algebra of Types
- Giving the Mostly Printed CNC a try (MPCNC)
- Chile: Nice place
- Proving Addition is Commutative in Haskell using Singletons
- Casadi - Pretty Damn Slick
- Thoughts on Faking Some of GADTs in Rust
- A Little Bloop on Typed Template Haskell
- Cvxpy and NetworkX Flow Problems
- A Touch of Topological Quantum Computation 3: Categorical Interlude
- Applicative Bidirectional Programming and Automatic Differentiation
- A Touch of Topological Quantum Computation in Haskell Pt. II: Automating Drudgery
2018 45
- Bouncing a Ball with Mixed Integer Programming
- Compiling to Categories 3: A Bit Cuter
- A Simple Interior Point Linear Programming Solver in Python
- Nand2Tetris in Verilog and FPGA and Coq
- Trajectory Optimization of a Pendulum with Mixed Integer Linear Programming
- Gettin' that Robot some Tasty Apples: Solving a simple geometrical puzzle in Z3 python
- More Reinforcement Learning with cvxpy
- Q-Learning with Linear Programming (cvxpy, OpenAI Gym Pendulum)
- A Touch of Topological Quantum Computation in Haskell Pt. I
- Deriving the Chebyshev Polynomials using Sum of Squares optimization with Sympy and Cvxpy
- Reverse Mode Differentiation is Kind of Like a Lens II
- Model Predictive Control of CartPole in OpenAI Gym using OSQP
- Division of Polynomials in Haskell
- RC Airplane
- Solving the Ising Model using a Mixed Integer Linear Program Solver (Gurobi)
- OSQP and Sparsegrad: Fast Model Predictive Control in Python for an inverted pendulum
- Approximating Compiling to Categories using Type-level Haskell: Take 2
- Variational Method of the Quantum Simple Harmonic Oscillator using PyTorch
- Shit Compiling to Categories using Type level Programming in Haskell
- Deducing Row Sparse Matrices from Matrix Vector Product Samples
- Pytorch Trajectory Optimization 3: Plugging in the Hessian
- Pytorch Trajectory Optimization Part 4: Cleaner code, 50Hz
- Extracting a Banded Hessian in PyTorch
- Cartpole Camera System - OpenCV + PS EYE + IR
- PyTorch Trajectory Optimization Part 2: Work in Progress
- Pytorch Trajectory Optimization
- Garbage Can Compiling to Categories with Inspectable Lambdas
- CartPole Maths
- Analytic Center in Python using Scipy and Numpy
- Noise and The Fluctuation Dissipation Theorem
- Reverse Mode Auto Differentiation is Kind of Like a Lens
- CartPole WORKIN' BOYEEE
- Some random links on uses of Convex relaxations, in particular Semidefinite programming
- Making a Van Der Graaf Generator
- Cart Pole Trajectory optimization using Cvxpy
- LQR with CVXPY
- STM32F411 Discovery Board Getting started
- Cart Pole using Lyapunov and LQR control, OpenAI gym
- Trying Platform.io
- Linksprite CNC machine
- 3d Printed Soda Can Stirling Engine
- Functor Vector Part 2: Function Vectors
- Haskell Gloss is awesome
- An ignoramus thinking about Compiling to Categories
- Checkin out the OpenAI Baselines
2017 56
- Functor Vector Part 1: Functors in the Basis
- How I Ruined Today Reading Haskell Posts
- Using the Purescript Servant Bridge
- Resources on String Diagrams, and Adjunctions, and Kan Extensions
- Iterative LQR Controller
- Downloading and Collecting Coursera videos
- Many Body Physics (Part 1)
- Fixing up some jekyll problems for jupyter
- Deep Learning Coursera Notes
- Maker Faire NYC
- Cellular Automata in Haskell
- Ordered pairs in Idris
- Position Tracking using Wifi
- LimeSDR, gettin going
- 3d printing Linkages
- Notes on ROS and ORB SLAM 2
- Using Z3 to solve a simple logic puzzle
- Propagators
- Caffe: Getting Started
- Simple GnuRadio Sonar Rangefinding
- What a great talk! NP solvers in Clojure for puzzles
- Gstreamer
- A couple of interesting deep learning topics
- Elm, Eikonal, and Sol LeWitt
- Making a Podcast
- Nerve: Elixir OS packager for Raspberry Pi
- Quantum Information and Computation Resources
- Movidius Neural Compute Stick
- Drone Notes
- Blockchain
- Ghent: Disneyland?
- Berlin: Sausages, Spetzle and Nazis
- Amsterdam
- Euro Trip Post Analysis
- Brussels: a hell of a town
- Copenhagen: Babies Bikes and Smorresbrod
- Euro trip Start
- Contracts and Category Theory
- Convolution and Tensor Product
- Deep Learning Basic Shapes
- Chebyshev Polynomials
- Some Resources on Automatic Differentiation & Power Series in Haskell
- Some simple ST Monad examples
- Scientific Programming in Haskell with hmatrix
- A Low Level Haskell WatchList
- Topological Bands I.
- Topological Data Analysis
- OpenCV Android
- FEM again
- VGA FPGA
- Hackathon: Matter.js
- Fenics and gmsh
- SAT solving and SMT
- Install WebPack ISE 14.7 on Ubuntu & Spartan AX309 FPGA Board
- Single Bit Quantization
- Some simple FPGA stuff
2016 43
- FPGA renaissance
- Classical Landauer-Buttiker
- Calling a C function from Python
- Installing OpenCV 3 for Aruco on a Raspberry Pi 3
- From Whence Superconductivity?
- Hash Vectors and Interacting Particles
- Pipe Raspberry Pi Video into ffmpeg and opencv: A Failure So Far
- Topologically Non-Trivial Circuit or Making the Haldane Model with a Gyrator
- Python Xbox Controller Mac
- Band Structure
- Shaders, Raymarching
- Band Theory on a Mobius Strip
- Extra Simple Simply Typed Lambda Calculus in Haskell
- Haskell - Where am I at?
- Some parsing in Haskell
- A whole new world. Propositions as types. Idris. Rule-rewriting
- Triple Booting Macbook for ubuntu on flash drive
- Installing opencv on ubuntu 16
- Aruco in opencv
- python generators and infinite power series
- USB nrf24L01
- Some Projective Geometry for our laser scanner
- Some opencv testing code
- ROS: robot operating system
- Visual Odometry and Epipolar Stuff
- Getting goddamn wifi on the goddamn orange pi pc
- A Stack Monad in Python
- Keras and Learning Sine
- Monads are still f'ed up, but good?
- FEM and multiphysics oh my
- Gears and Drawing them in Onshape (and in general I guess)
- Metropolis sampling of quantum hall wavefunction
- Machine Learning on AWS and not
- BILDING A DRONE. FartMachine9 FLIES FREE AND TRUE
- Vomitting Out Some Machine Learning with Torch
- Annihilation Creation with Wick Contraction in Python
- Attaching the Jordan Wigner String in Numpy
- A little Automatic Differentiation in Python
- Quantum Harmonic Oscillator Algebra in Sympy
- Using EDA Playground
- Openscad Text Cut
- Gnuradio Delay Correlation
- Hackrf
2015 63
- OpenCV feature detection and tracking
- More Opencv
- Knife Bot
- Ubuntu Virtualbox
- NMR: a baby birds first fall from the nest
- Performing Some Laplace Experiments
- ipywidgets: useful little buggers
- Interesting Command Line Guys: Sox and Socat
- rtl_power & gnuradio
- A fun little man of rutherford scattering
- Perfect Latkes
- I'm a ham now. DEAL WITH IT
- Kivy and Buildozer
- Lm358
- Pausing Prints
- LiveUSB windows stick for Macbook
- Parabola. OH GOD PARABOLA. No. NO. NOOOOOOO
- Gettin Back Goin on FPGA
- Magnet Sensor arduino
- High Speed DAC Aliexpress
- Orange pi
- Folgertech prusa update
- Raspberry Pi
- Opencv
- Root Beer ONE
- Writing a Wordpress sketch Plugin: Mr. Sketchy-Poo
- Chinese Arduino Problems on Mac
- Da Laser BACK END BABY
- Aiming a Laser Project
- SVG to C data using python
- Radio Update
- Avr-gcc and Arduino
- Bootstrapping myself into RF
- Folgertech Prusa update
- Problem 1: Free Particle
- Problem 2: Schutz chap 5
- Folgertech Prusa i3 Printer
- Superconductivity, whaddup
- More with RTL-SDR
- Playin around with ESP8266
- Getting Going with RTL-SDR (A computer radio thingy)
- ngspice, huh
- Random Potentials and QFT I
- Some thoughts on many body quantum mechanics
- Recording Audio in Python
- Curses and Ncurses or whatevs.
- Python Wave File Fun and Audio on Arduino
- Havin' Some Problems with Beaglebone
- Installing icestorm on a mac
- Xbox Controller BeagleBone
- Queues
- Goddamn You H-Bridge
- Internet Learns
- Routers and Switches
- Peltier Coolers and Thermal Circuits
- Monads are f'ed up
- AWS and Computing Clusters and MPI
- The Particle Photon: A Cloud Enabled Arduino
- Green's Functions: Functions Are Vectors
- A Haskell is Good?
- A Start on Green's Functions
- Javascript Test
- Getting Wordpress to Work