There is no built in function to do this, but it's not too difficult to program for a discrete set of values:
To build it up, I'd first make a function that gives every possible union and intersection of the values of a set:
everyPossibleUnion[set_] := Union@Map[Union @@ # &, Subsets[set, {1, Infinity}]]
everyPossibleIntersection[set_] := Union@Map[Intersection @@ # &, Subsets[set, {1, Infinity}]]
From there you can make a function which tests if a set is a topology by basically stating the definition:
mySet = {1, 2, 3, 4}
TopologyQ[pset_] :=
SubsetQ[pset, {{}, mySet}] &&
SubsetQ[pset, everyPossibleUnion[pset]] &&
SubsetQ[pset, everyPossibleIntersection[pset]]
I think I've done this right. It seems to work okay.
indiscreteTopology = {{}, mySet}
TopologyQ[indiscreteTopology]
True
discreteTopology = Subsets@mySet;
TopologyQ[discreteTopology]
True
exTopology = {{}, {2}, {1, 2}, {2, 3}, {1, 2, 3}, {1, 2, 3, 4}};
TopologyQ[exTopology]
True
notATopology = {{}, {1, 2}, {2, 3}, {1, 2, 3, 4}}
TopologyQ[notATopology]
False