The closure of a subset S of a matroid (E, B) is the set cl(S) := \{x $\in$ E : rank(S) = rank(S $\cup$ \{x\}) \}. The closure operator 2^E -> 2^E, S $\mapsto$ cl(S), completely determines the matroid (indeed, the maximal proper closed sets - i.e. hyperplanes - already determine the matroid).
i1 : M = matroid({a,b,c,d},{{a,b},{a,c}}) o1 = a matroid of rank 2 on 4 elements o1 : Matroid |
i2 : for s in subsets M_* do print(toString s | " has closure " | toString closure_M s) {} has closure {3} {a} has closure {0, 3} {b} has closure {1, 2, 3} {a, b} has closure {0, 1, 2, 3} {c} has closure {1, 2, 3} {a, c} has closure {0, 1, 2, 3} {b, c} has closure {1, 2, 3} {a, b, c} has closure {0, 1, 2, 3} {d} has closure {3} {a, d} has closure {0, 3} {b, d} has closure {1, 2, 3} {a, b, d} has closure {0, 1, 2, 3} {c, d} has closure {1, 2, 3} {a, c, d} has closure {0, 1, 2, 3} {b, c, d} has closure {1, 2, 3} {a, b, c, d} has closure {0, 1, 2, 3} |
i3 : F = flats M o3 = {set {3}, set {0, 3}, set {1, 2, 3}, set {0, 1, 2, 3}} o3 : List |
i4 : all(F, f -> closure_M f === f) o4 = true |
The object closure is a method function.