Skip to content

tchajed/regex-derivative

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

About

Regex derivatives in Coq

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published