The minor M / X \ Y of M is given by contracting X and deleting Y from M. The resulting matroid is independent of the order in which deletion and contraction is done. If X (or Y) is a set (of indices in M.groundSet), then X is identified with the sublist of elements of M with indices in X: cf. groundSet for more on this package-wide convention.
i1 : M = matroid random(ZZ^3,ZZ^6) o1 = a matroid of rank 3 on 6 elements o1 : Matroid |
i2 : M_*
o2 = {| 8 |, | 7 |, | 3 |, | 8 |, | 8 |, | 3 |}
| 1 | | 8 | | 7 | | 5 | | 5 | | 6 |
| 3 | | 3 | | 8 | | 7 | | 2 | | 3 |
o2 : List
|
i3 : M.groundSet
o3 = set {0, 1, 2, 3, 4, 5}
o3 : Set
|
i4 : (X, Y) = (set{3}, set{0,1})
o4 = (set {3}, set {0, 1})
o4 : Sequence
|
i5 : (X1, Y1) = (M_X, M_Y)
o5 = ({| 8 |}, {| 8 |, | 7 |})
| 5 | | 1 | | 8 |
| 7 | | 3 | | 3 |
o5 : Sequence
|
i6 : N = minor(M, X, Y) o6 = a matroid of rank 2 on 3 elements o6 : Matroid |
i7 : peek N
o7 = Matroid{bases => {set {0, 1}, set {0, 2}, set {1, 2}}}
cache => CacheTable{...2...}
groundSet => set {0, 1, 2}
rank => 2
|
i8 : N == minor(M, X1, Y1) o8 = true |
Note that there is potential ambiguity for the second argument - namely, whether or not Y is treated with respect to the ground set of M or M / X (which are different). This method assumes that the indices of Y (and X) are taken with respect to the ground set of M.
If one already has the indices Y0 of Y in M / X (or the indices X0 of X in M \ Y), one can simply use the notation M / X \ Y0 (or (M \ Y) / X0). Thus this method serves purely as a convenience, to save the user the (trivial) task of computing Y0 from Y.
If X and Y are not disjoint, then an error is thrown (thus one should subtract X from Y beforehand).
i9 : M5 = matroid completeGraph 5 o9 = a matroid of rank 4 on 10 elements o9 : Matroid |
i10 : M5.groundSet
o10 = set {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
o10 : Set
|
i11 : N = minor(M5, set{8}, set{3,4,9})
o11 = a matroid of rank 3 on 6 elements
o11 : Matroid
|
i12 : areIsomorphic(N, matroid completeGraph 4) o12 = true |
i13 : N == (M5 \ set{3,4,9}) / set{6} -- after deleting 3,4 (and 9), index 8 -> 6
o13 = true
|
i14 : N == M5 / set{8} \ set{3,4,8} -- after contracting 8, index 9 -> 8
o14 = true
|
i15 : (try minor(M5, set{8}, set{3,4,8,9})) === null
o15 = true
|
i16 : minor(M5, set{8}, set{3,4,8,9} - set{8})
o16 = a matroid of rank 3 on 6 elements
o16 : Matroid
|
The object minor is a method function.