Skip to content

Latest commit

 

History

History
9 lines (5 loc) · 1.62 KB

README.md

File metadata and controls

9 lines (5 loc) · 1.62 KB

Regular Expression Derivatives

Build Status

Formalization of regular expression derivatives in Coq. A good reference with the basic definitions and a matcher based on derivatives comes from Matt Might. This formalization was inspired by Nate Foster's presentation from OPLSS 2016 (page 69), but only the terms "observation map" and "continuation map" come from that reference, the rest is fairly universal.

In this development we define regular expressions, give them a denotation as a predicate over strings, define a continuation map over the syntax as well as a much simpler, denotational derivative, and then prove that for all regexes, the denotation of the continuation map of the syntatic derivative is the derivative of the denotation of the regex (continuation_map_denotes_derivative).

A nice side-effect is an easy, verified regex matcher: recurse over the string, take the appropriate derivatives, and match iff the resulting regex matching the empty language! We even do a bit better by checking if any intermediate derivative is empty, returning a negative match early. In practice for efficiency it is also useful to simplify the intermediate regexes. To see this approach really carried out fully, see Unified Decision Procedures for Regular Expression Equivalence.