pub fn eventually_when<'fml, A, B: 'fml>(
    mut proj: impl FnMut(&A) -> Option<B> + Send + Sync + 'fml,
    mut body: impl FnMut(B) -> Formula<'fml, A> + Send + Sync + 'fml,
) -> Formula<'fml, A> {
    eventually(examine(move |x: &A| {
        if let Some(b) = proj(x) {
            body(b)
        } else {
            bottom("condition not yet met")
        }
    }))
}
/// Enforces a property on some point a given projection returns a [Some]
Enforces a property on some point a given projection returns a [Some]
Enforces a property on some point a given projection returns a [ Some ]
pub fn eventually_when<'fml, A, B: 'fml>(
    mut proj: impl FnMut(&A) -> Option<B> + Send + Sync + 'fml,
    mut body: impl FnMut(B) -> Formula<'fml, A> + Send + Sync + 'fml,
) -> Formula<'fml, A> {
    eventually(examine(move |x: &A| {
        if let Some(b) = proj(x) {
            body(b)
        } else {
            bottom("condition not yet met")
        }
    }))
}
pub fn eventually_when < ' fml , A , B : ' fml > ( mut proj : impl FnMut ( & A ) -> Option < B > + Send + Sync + ' fml , mut body : impl FnMut ( B ) -> Formula < ' fml , A > + Send + Sync + ' fml , ) -> Formula < ' fml , A > { eventually ( examine ( move | x : & A | { if let Some ( b ) = proj ( x ) { body ( b ) } else { bottom ( " " ) } } ) ) }
Enforces a property on some point a given projection returns a [Some]
Enforces a property on some point a given projection returns a [ Some ]
proj
impl FnMut(&A) -> Option<B> + Send + Sync + 'fml
body
impl FnMut(B) -> Formula<'fml, A> + Send + Sync + 'fml
proj
impl FnMut(&A) -> Option<B> + Send + Sync + 'fml
body
impl FnMut(B) -> Formula<'fml, A> + Send + Sync + 'fml