Module Smyth.Uneval

val minimal_uneval : bool Stdlib.ref

Whether or not unevaluation should proceed in the "minimal" mode. Minimal mode uses U-Case-Guess and not U-Case; non-minimal mode does the opposite.

val check : Lang.hole_ctx -> Lang.datatype_ctx -> Lang.hole_filling -> Lang.exp -> Lang.worlds -> Lang.constraints Nondet.t

Live bidirectional example checking.

val uneval : Lang.hole_ctx -> Lang.datatype_ctx -> Lang.hole_filling -> Lang.res -> Lang.example -> Lang.constraints Nondet.t

Live unevaluation.

val simplify_assertions : Lang.hole_ctx -> Lang.datatype_ctx -> Lang.resumption_assertions -> Lang.constraints Nondet.t

Assertion simplification, as defined in Figure 7 of the ICFP 2020 paper.