### Yihong Zhang (张轶泓)

**Undergrad at the University of Washington**

`$(firstname[0])$(lastname[0])489@cs.washington.edu`

### About me

I’m an undergrad studying Computer Science at UW Seattle. I'm broadly interested in the theories and applications of programming languages.

Resume (outdated) | Coursework | Blog | GitHub### Preprints

**Faster and Worst-Case Optimal E-matching via Reduction to Conjunctive Queries**(Acceptted by PLDI 2021 SRC)

Yihong Zhang

[pdf]**GeCo: Quality Counterfactual Explanations in Real Time**(To appear at VLDB 2021)

Maximilian Schleich, Zixuan Geng, Yihong Zhang, Dan Suciu

[arxiv] [src]

### Graduate course projects

**A Staged Datalog Compiler using Lightweight Modular Staging**

In this project, I build a staged Datalog compiler using Lightweight Modular Staging (LMS). Experiments show that it achieves up to 10x speedup compared to Souffle Datalog tool. [report] [src]**Combining Statistical Top-down Deductions and Bottom-up Enumerations for Programming by Example**

In this project, I add support for enumerative search to MaxFlash for PBE solving. The enumerated programs are used to directly solve the synthesis problem and guide the witness functions during probabilistic deductions. This is an attempt to unify enumerative search, deductive search, and stochastic search into a framework for program synthesis. Experiments on the SyGuS benchmarks shows mixed (aka negative) results. [report] [src]**Cornelius: Killing equivalent and redundant mutants with E-graph**

with Ben Kushigian, Ishan Chatterjee, and Gabrielle Strandquist. We propose to utilize E-graph to eliminate equivalent and redundant mutants for mutation testing. This addresses the phase-ordering problem faced by Trivial Compiler Equivalence (TCE), a known technique for eliminating equivalent mutants. Experiments on a pure Java subset show that it discovers much more equivalent and redundant mutants than TCE in less time. [report] [src]**Sager: A Demonic Graph Synthesizer for Worst-Case Performance**

with Mike He. We propose to use symbolic evaluations to synthesize input instances that determine the worst-case complexity of a given algorithm. We build a prototype implementation with Rosette and show that it makes Shortest-Path Faster Algorithm (SPFA) and its several variants asymptotically worse. [src]

### Programming for fun

**Hatafun:**Embedding the type system of Datafun (ICFP 2016) in Haskell.**2TBF:**A proof-of-concept compiler from (our favorite) Pascal to an extension of brainfuck lang with two tapes.