propositional 0.1.0-alpha.2

Propositional Logic
Documentation
#![allow(non_snake_case)]
#![doc = include_str!("../README.md")]

pub mod connectives;
pub mod core;
mod utils;

pub mod prelude {
    pub use crate::connectives::*;
    pub use crate::core::*;
}


#[cfg(test)]
pub mod examples {
    use super::prelude::*;

    #[test]
    fn rainy_day() {
        let rain = symbol!("it's raining");
        let cloud = symbol!("it's cloudy");

        let world = and!(
            implies!(rain, cloud),
            rain
        );

        println!("It is cloudy? {:?}", check(&world, &cloud));
        assert_eq!(Some(true), check(&world, &cloud));
    }

    #[test]
    fn harry_visit() {
        let rain = symbol!("It is raining.");
        let hagrid = symbol!("Harry visited Hagrid.");
        let dumbledore = symbol!("Harry visited Dumbledore.");

        let knowledge = and!(
            implies!(not!(rain), hagrid),
            or!(hagrid, dumbledore),
            not!(and!(hagrid, dumbledore)),
            dumbledore
        );

        println!("{}", knowledge);

        println!("It is raining? {:?}", check(&knowledge, &rain));
        assert_eq!(Some(true), check(&knowledge, &rain));
    }

}