/// The `liveness` function combines sufficient and necessary conditions to
/// create the basic expression of a liveness condition. Because the inner
/// necessary condition is re-created for every matching sufficient outer
/// condition, we restrict here to the use of non-mutable closures to avoid
/// the confusion caused by having multiple instances of the copied closure
/// evaluated (potentially) for every new element considered.
The `liveness` function combines sufficient and necessary conditions to
create the basic expression of a liveness condition. Because the inner
necessary condition is re-created for every matching sufficient outer
condition, we restrict here to the use of non-mutable closures to avoid
the confusion caused by having multiple instances of the copied closure
evaluated (potentially) for every new element considered.
The ` liveness ` function combines sufficient and necessary conditions to create the basic expression of a liveness condition . Because the inner necessary condition is re - created for every matching sufficient outer condition we restrict here to the use of non - mutable closures to avoid the confusion caused by having multiple instances of the copied closure evaluated ( potentially ) for every new element considered .
pub fn liveness<'fml, A, B: Send + Sync + Copy + 'fml>(
    proj: impl Fn(&A) -> Option<B> + Send + Sync + Copy + 'fml,
    body: impl Fn(B, B) -> Formula<'fml, A> + Send + Sync + Copy + 'fml,
) -> Formula<'fml, A> {
    always_when(proj, move |x| {
        next(eventually_when(proj, move |y| body(x, y)))
    })
}
pub fn liveness < ' fml , A , B : Send + Sync + Copy + ' fml > ( proj : impl Fn ( & A ) -> Option < B > + Send + Sync + Copy + ' fml , body : impl Fn ( B , B ) -> Formula < ' fml , A > + Send + Sync + Copy + ' fml , ) -> Formula < ' fml , A > { always_when ( proj , move | x | { next ( eventually_when ( proj , move | y | body ( x , y ) ) ) } ) }
The `liveness` function combines sufficient and necessary conditions to
create the basic expression of a liveness condition.
The ` liveness ` function combines sufficient and necessary conditions to create the basic expression of a liveness condition .
proj
impl Fn(&A) -> Option<B> + Send + Sync + Copy + 'fml
body
impl Fn(B, B) -> Formula<'fml, A> + Send + Sync + Copy + 'fml