topologyR 0.3.0

generate_alexandrov_topology() accepts any digraph and says which case it got

Up to 0.2.0 the reachability propagation assumed – without checking – that every edge goes from a lower to a higher vertex index, which is what directed visibility graphs produce but not what the signature promised. On any other input it returned a valid-looking and wrong topology, silently: a directed cycle, or a DAG whose vertices arrive in a different order, both produced upsets computed from incomplete reachability. Measured before the repair, 145 of 300 random digraphs with feedback came back wrong, and the reversed chain 3 -> 2 -> 1 – an acyclic input – came back wrong too.

The construction is now correct for every directed graph, in three regimes reported by the result itself:

Three new result fields declare what happened: input_index_ordered, input_acyclic, and collapsed_classes (the non-trivial strongly connected components – classes the topology cannot tell apart; a finding about the system, not an error). A new argument expect = c("any", "index_ordered_dag") lets a caller whose semantics require the strict visibility contract get an error instead of a generalization: with "index_ordered_dag" the old precondition is verified in O(m) and a violating edge is named in the error message.

The gate batteries run three independent referents: stored 0.2.0 goldens (bit identity on regime 1), a pure-R Warshall closure (permuted DAGs and cyclic digraphs – where the tests also demonstrate the raw 0.2.0 motor disagreeing with the truth), and hand-built condensations.

bitopology_invariants() no longer reports irreversibility_base

The field was the normalized asymmetry of the forward and backward base sizes – and it is identically zero by a theorem of the construction, for every digraph, not only for visibility graphs: the two base families are the intents and extents of the formal context of the visibility relation, and the Galois connection makes them equinumerous (Ganter & Wille 1999; the duality is Birkhoff’s). An identically null index does not measure, and its presence invited reading it, so it was removed rather than kept as a decoy. The two base sizes remain reported – each is informative on its own – and the theorem, with its proof sketch and the one exception (truncated closures, flagged by base_complete = FALSE), is documented on the manual page. A property test over random digraphs keeps the theorem in the suite as a regression watch on the engine.

irreversibility_components stays, documented as the coarse count-comparison it is.

The Alexandrov branch is documented as constant on visibility graphs

In any visibility graph consecutive observations see each other, so reachability is the total order and the Alexandrov topology is the same chain of upsets for every series: alexandrov_base_size = n, alexandrov_components = 1, and the resolution-gain fields reduce to base_size - n. The manual pages of generate_bitopology() and bitopology_invariants() now say so, and say where the branch is genuinely informative (general digraphs). Callers that consume only the Nada side can pass alexandrov = FALSE. A property test asserts the chain on random series for both graph types.

mirror server hosted at Truenetwork, Russian Federation.