Skip to main content

family/
family.rs

1//! Family reasoning with composition and reflexive-transitive closure.
2
3use relmath::{BinaryRelation, UnaryRelation};
4
5fn main() {
6    let parent = BinaryRelation::from_pairs([
7        ("Ada", "Bob"),
8        ("Ada", "Cara"),
9        ("Bob", "Dana"),
10        ("Cara", "Eli"),
11        ("Dana", "Finn"),
12    ]);
13
14    let people = UnaryRelation::from_values(["Ada", "Bob", "Cara", "Dana", "Eli", "Finn"]);
15    let grandparent = parent.compose(&parent);
16    let ancestor = parent.reflexive_transitive_closure(&people);
17
18    let ada = UnaryRelation::singleton("Ada");
19    let reachable_from_ada = ancestor.image(&ada);
20
21    assert!(grandparent.contains(&"Ada", &"Dana"));
22    assert!(grandparent.contains(&"Ada", &"Eli"));
23    assert!(reachable_from_ada.contains(&"Finn"));
24
25    println!("grandparent pairs: {:?}", grandparent.to_vec());
26    println!(
27        "people reachable from Ada: {:?}",
28        reachable_from_ada.to_vec()
29    );
30}