I'm interested in solving scheduling problems in Z3, which require things like:
- There are multiple classes: C1, C2, C3...
- and multiple students: S1, S2, S3...
- each student needs to be in exactly one class
- each class needs to have no more than K students
I think of these as sets, but they could be thought of as associations, 2-adic functions (isin(student, class), 1-adic functions (class1(student), student1(class)), bitvectors, arrays...
What is the simplest, easiest way to model these in Z3 and solve problems about them?