DeepSpec / InteractionTrees

A Library for Representing Recursive and Impure Programs in Coq
MIT License
198 stars 50 forks source link

Unary logic #213

Closed YaZko closed 2 years ago

YaZko commented 2 years ago

Hey everyone,

This bit of theory comes from our Vellvm project, and has hence been co-authored with @Chobbes, @euisuny and @Zdancewic . It's been long due cleaning up things and porting it to the itree library.

We define in the PR a unary program logic defined as the diagonal of eutt. We prove the elementary structural theory, as well as proof rules w.r.t. basic logical connectors, bind and iter.

The main result we derive is a stronger cut rule than [eutt_clo_bind]: one can leverage any functional fact about the involved computations, as captured by eutt_post_bind and eutt_post_bind_eq. Note that in all generality, these should be combined with the generalization from PR#211

I stored this file in Eq, let me know if anyone thinks there's a better place. More generally, any complaints or requests before merge are welcome!

Best, Yannick