relmath-rs 0.7.0

Relation-first mathematics and scientific computing in Rust.
Documentation
//! Additive semiring foundations for relation-style annotation semantics.

use relmath::annotated::{BooleanSemiring, Semiring};

fn reachable_via_two_hop_or_direct(
    direct: BooleanSemiring,
    first_leg: BooleanSemiring,
    second_leg: BooleanSemiring,
) -> BooleanSemiring {
    direct.add(&first_leg.mul(&second_leg))
}

fn main() {
    let direct = BooleanSemiring::FALSE;
    let first_leg = BooleanSemiring::TRUE;
    let second_leg = BooleanSemiring::TRUE;

    let reachable = reachable_via_two_hop_or_direct(direct, first_leg, second_leg);

    assert_eq!(reachable, BooleanSemiring::TRUE);
    assert!(reachable.is_one());
    assert!(!reachable.is_zero());
    assert!(bool::from(reachable));
    assert_eq!(BooleanSemiring::zero(), BooleanSemiring::FALSE);
    assert_eq!(BooleanSemiring::one(), BooleanSemiring::TRUE);

    println!(
        "reachable after direct-or-two-hop combination: {}",
        bool::from(reachable)
    );
}