While analyzing a wide set of systems, it is useful to identify similarities
between these systems and generalize them so that these commonalities can be
studied in an abstract way. Studying these system-agnostic abstractions allows
us to form a set of general properties that applies to all systems that
implement