An (abstract) n-polyflag is a non-empty set S, whose elements are called flags, with n unary operations on S, called adjacency operations. For a number 0 ≤ k < n and a flag x in S, the result of the k'th operation is a flag, denoted x⟨k⟩ and called k-adjacent to x. (The angle brackets are a reminder of the dyad/diamond structure in a polytope's Hasse diagram.) A polyflag has these properties:
- Involution: For any flag x and any rank k, we have x⟨k⟩⟨k⟩ = x.
- Commutativity: For any flag x and any non-adjacent ranks j and k (meaning |j - k| > 1), we have x⟨j⟩⟨k⟩ = x⟨k⟩⟨j⟩.
- Connectedness: For any flags x and y, there exists a (finite) sequence of ranks k1, k2, ... , km, such that x⟨k1⟩⟨k2⟩...⟨km⟩ = y.
A polyflag is orientable when any loop has an even length. That is, if x⟨k1⟩⟨k2⟩...⟨km⟩ = x, then m must be an even number.
Otherwise the polyflag is non-orientable.
A j-face is all flags reachable from one flag by avoiding rank j moves. In other words, for a flag x, the j-face containing x is the set of all flags of the form x⟨k1⟩⟨k2⟩...⟨km⟩, where all ranks k1, k2, ... , km are not equal to j.
Two faces are incident when they share a flag.
A polyflag is separable when, for any flag x, the adjacent flag x⟨j⟩ is in a separate j-face. In other words, if all ranks k1, k2, ... , km are not equal to j, then x⟨k1⟩⟨k2⟩...⟨km⟩ ≠ x⟨j⟩.
Otherwise the polyflag is inseparable.
If you convert a polytope to a polyflag in the obvious way (define flags in terms of faces), and convert the polyflag to a polytope according to the above (define faces in terms of flags), then the result is isomorphic to the original polytope.
(Here's an old revision of Wikipedia's abstract polytope page. It has some useful information which was later removed; particularly the part about "strong flag-connectedness" is helpful in proving my claim here. Mapping a face to a flag to a set of flags doesn't depend on which flag is chosen.)
Every polytope is a polyflag. But not every polyflag is a polytope.