1use 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}