Consider a rewrite of an emergency dispatch engine. The legacy service and its replacement receive the same incident, resource and priority records. Engineers replay one hundred thousand historical cases. Every recommended assignment matches. The dashboards are green, the migration board hears the word “equivalent”, and the old service is scheduled for retirement.

Now alter one property. A responder accepts an assignment, the incident is cancelled, and a new incident arrives before the responder reaches the first location. The legacy service represents cancellation as a state transition that revokes the assignment before reassignment. The rewrite stores cancellation as a note attached to the incident. It recommends the same resource for the new incident, but the earlier authority remains live in a downstream queue. The visible recommendation matches while the permitted world state does not.

The replay established agreement on a sampled set of outputs. It did not establish that assignment, cancellation, revocation and reassignment compose in the same way. The hidden assumption was that the observed cases exhausted the structure relevant to release. A structural claim becomes useful only when it says what can be transported through a mapping without changing the decision-relevant relations.

The bridge that replay cannot finish

The tempting intuition is simple. If two systems return the same answer often enough, perhaps they are the same system written differently. That intuition is sound only when the tested answers determine every relation that matters. Usually they do not. A finite benchmark observes selected inputs, selected outputs and a chosen time horizon. It leaves internal branching, untested interventions, authority changes and information loss outside the frame.

Suppose a source system has states a, b and c, while a target has states x, y and z. A mapping F tells us which target state represents each source state. A proof then asks whether relevant source relations survive after applying F. Without that mapping, “the systems are similar” is not wrong so much as unevaluable. There is no specified object on which a proof obligation can land.

Figure 1The proof bridge and its seven load-bearing spans
A bridge between a source structure and a target structure with seven labelled spans The spans are signature, mapping, preservation, reflection, reconstruction, scope and break conditions. Missing spans cause the bridge to stop before the target. Source structure Target structure 1signature 2mapping 3preserve 4reflect 5return 6scope 7break A missing reverse test or reconstruction witness leaves a gap, even when replay succeeds.
Decision rule: a structural-equivalence claim must carry all seven spans. Preservation can support a one-way transport result, but the bridge reaches equivalence only when reflection or matched behaviour, an appropriate return witness, scope and break conditions are explicit. Practitioner synthesis developed for this paper.

The word “equivalent” hides several grades of claim. A lexical resemblance might generate a question. Output agreement can support a regression test. A homomorphism preserves selected operations in one direction. An embedding additionally prevents relevant distinctions from being collapsed. Bisimulation matches possible moves in both directions. Isomorphism or category equivalence supplies a suitable form of reconstruction. These are not ceremonial labels. Each grade licenses a different decision.

Figure 2Five grades of “the same” carry different proof burdens
The useful question is not which label sounds strongest. It is which proof form is sufficient for the intended decision. A compiler usually needs semantic preservation, not a literal inverse; a format migration may require lossless reconstruction. Conceptual synthesis from category theory, transition-system semantics and causal abstraction.
Figure 3Preservation can pass while reflection and reconstruction fail
A source path mapped to a target graph with a collapsed state A maps to X, while B and C both map to Y. Source edges map to target edges, but the mapping is not injective and cannot recover whether Y represented B or C. Source graph Target graph A B C X Y F(A)=X, F(B)=Y, F(C)=Y B and C collapse: no inverse can decide which one Y was.
Edge preservation answers a forward question: does every declared source edge remain an edge? Reflection asks the reverse question inside the mapped image. Injectivity and reconstruction ask whether distinctions can be recovered. Illustrative finite graph.
The argument in one pass
Chart · flow
flowchart LR
  A["The bridge that replay cannot<br/>finish"] --> B["Write down what must survive"]
  B --> C["Choose the right return ticket"]
  C --> D["Put the claim through a<br/>transport gate"]
  D -. "re-test" .-> A
  classDef first fill:#0a1424,stroke:#087A98,stroke-width:2px,color:#e6f3ff
  classDef step fill:#0a1424,stroke:#3f7da0,stroke-width:1px,color:#e6f3ff
  class A first
  class B,C,D step
A structural route through What a structural equivalence proof requires: from The bridge that replay cannot finish to Approve only the transport contract that…. Reading use: follow the relation, then return to the surrounding argument for evidence and limits.

Write down what must survive

A proof begins by freezing two signatures. For present purposes, describe a source structure as 𝒮 = (OS, RS, ΩS, ≈S, IS). The target 𝒯 has corresponding components. The notation is only useful if each symbol names something concrete.

  • O contains the typed objects or states, such as incidents, resources, assignments and credentials.
  • R contains relations, such as “authorised for”, “precedes”, “depends on” or “can transition to”.
  • Ω contains operations and their composition, such as assign, cancel, merge, add or compile.
  • ≈ states what counts as equality or observational indistinguishability. Bitwise equality, equal traces and equal final balances are different contracts.
  • I names the admissible interventions or contexts under which the claim must continue to hold.

A mapping F translates source objects into target objects and, where required, source actions into target actions. For an n-ary operation op, the central preservation question is whether the two paths below meet.

F(opS(x₁,…,xₙ)) ≈T opT(F(x₁),…,F(xₙ)) Start with source inputs. Either perform the source operation and translate its result, or translate the inputs and perform the target operation. The declared target equality decides whether the paths agree.

Individual relations are not enough when the system can compose actions. Category theory makes this obligation explicit through identity and composition laws. Translating an identity action should behave like the identity action on the translated object. Translating a composite should agree with composing the translated actions:

F(idx) = idF(x)    and    F(g ∘ f) = F(g) ∘ F(f) The first law prevents translation from changing an object when the source does nothing. The second prevents order and intermediate state from being rewritten by translating each operation separately.

The dispatch case failed the second law. “Assign, then cancel” had the same final recommendation as “do nothing”, but it did not have the same authority history. Testing assign and cancel separately would still miss the defect if the target combined them through a stale queue. The proof obligation must range over the compositions that can occur in the real environment, including interruption, retry, rollback and concurrent update where those are permitted.

Figure 4A commuting square turns resemblance into a test
The square is not decoration. Each side is an executable route. A preservation test runs both routes under declared inputs and compares their results using the declared equality or error tolerance. Standard homomorphism and functorial reasoning, adapted as an engineering proof obligation.

Preservation is only half of a strong structural claim. For a binary relation R, preservation has the form RS(x,y) ⇒ RT(F(x),F(y)). Reflection reverses the implication for relations among mapped objects. If the target says two mapped states are adjacent, authorised or equal, reflection asks whether the corresponding source relation really held. Reflection blocks a target from inventing distinctions or permissions that the source did not license.

Different disciplines encode this reverse demand differently. A faithful functor prevents distinct morphisms from collapsing. A full functor ensures that every target morphism between mapped objects comes from a source morphism. A graph embedding preserves and reflects adjacency on its image. A bisimulation matches possible transitions in both directions. The shared mechanism is not the terminology. It is a reverse challenge to a forward story.

Figure 5Equivalence expands or contracts with the observation aperture
A narrow aperture can make systems equivalent for one task while a broader aperture separates them. The correct aperture follows the decision, not the convenience of the benchmark. Illustrative boundary analysis.

When the inverse is coherent rather than literal

Strict isomorphism asks for maps F and G whose two composites are literally the respective identity maps. Category equivalence relaxes this. It asks for functors in both directions and natural isomorphisms connecting GF and FG to the identity functors. Informally, translate and reconstruct, then show that the reconstructed object is coherently isomorphic to the original across every allowed morphism. It need not be the same token or representation.

A standard characterisation says that a functor is an equivalence when it is full, faithful and essentially surjective, subject to the usual set-theoretic assumptions for the converse construction. Fullness covers target morphisms between represented objects. Faithfulness prevents morphism collapse. Essential surjectivity says every target object is isomorphic to one in the image. Riehl’s treatment makes the crucial point visible: equivalence concerns preserved organisation, not objectwise equality [1]. Fong and Spivak show how this compositional viewpoint becomes a practical language across systems [2].

Naturality is the coherence check that stops the return map from being a collection of bespoke repairs. Imagine that each source object can be reconstructed from its target image, but the reconstruction chosen after one allowed transformation differs from the reconstruction chosen before it. Object by object, every case appears recoverable. Across the network of transformations, the choices contradict one another. A natural isomorphism requires the reconstruction to commute with those transformations, so the witness works as one system rather than as many unrelated lookup tables.

Even this strong formal result does not settle every interpretive question. Two categories may be equivalent after important physical, semantic or modal structure has been omitted from their objects and morphisms. Philosophers of scientific theories therefore distinguish several strengths of formal equivalence and debate which structure should count as interpretation-preserving [10] [11]. The proof can be impeccable inside a category that was too weak for the decision.

Choose the right return ticket

“Show the inverse” is good discipline, but not every valid transport needs a strict inverse. Optimising compilers erase names and rearrange instructions. Causal abstractions intentionally compress microstates. Simulations may guarantee that every source move has an acceptable target move without promising the reverse. The proof must therefore name the return ticket it actually offers.

Proof forms and the decisions they can support
Proof formCore obligationUseful forDoes not automatically give
Strict isomorphismTwo-sided inverse on the declared structureLossless renaming, reversible format changeRelevance of the chosen structure
Category equivalenceQuasi-inverse with coherent natural isomorphismsDifferent presentations of the same compositional organisationIdentity of underlying ontology
BisimulationEvery labelled move is matched in both directionsBehavioural equivalence of transition systemsSame internal representation
Simulation or refinementMoves or traces are preserved in the required directionCompiler correctness, implementation refinementReversibility or target completeness
Exact causal abstractionState and intervention maps commute with causal responseRelating mechanism levels under interventionUniqueness of the abstraction
Approximate transportDeclared discrepancy remains within a bound on a declared domainNoisy, continuous or statistical systemsExact laws outside the measured regime
Figure 6Trace equality can hide different branching structure
Two labelled transition systems with the same completed traces but different branching time Process P chooses a branch before select and then has only tea or coffee available. Process Q selects first and then retains both options. A dotted attempted bisimulation relation fails after select. Process P: commitment before select Process Q: commitment after select p₀ pᵀ pᶜ tea coffee q₀ q₁ tea coffee hidden τhidden τ select; teaselect; coffee selectteacoffee No relation can make q₁ match both one-option states of P in both directions.
Completed traces agree, but the systems are not bisimilar because their post-select possibilities differ. An environment that can intervene between actions exposes the hidden commitment. Classic process-algebra pattern, shown here as an illustrative transition system.

Causal structure requires intervention transport

Observational agreement is especially weak when the claim concerns cause. Imagine two binary models that always produce X = Y. In Model A, X causes Y. In Model B, Y causes X. Passive observations cannot distinguish them. Set X to zero while holding the mechanism for Y fixed. Model A propagates the change to Y; Model B need not.

Figure 7A causal mapping must commute under intervention, not only observation
Exact causal transformations require a state map and an intervention map whose outcomes agree across levels. The lower cards show why passive fit cannot substitute for this commuting requirement. Illustrative causal models informed by exact-transformation accounts [3] [4].

Work on causal model abstraction formalises this demand. Exact transformations relate low-level and high-level state spaces while translating allowed interventions. Applying a low-level intervention and then abstracting its outcome should agree with applying the translated high-level intervention directly [3] [4]. Later treatments relax exactness by adding an explicit metric and error measure rather than quietly replacing equality with “close enough” [5]. Mechanistic-interpretability work has adapted these ideas to interchange interventions on representations [6].

Approximation introduces three obligations that exact diagrams can hide. The discrepancy metric must represent the decision. The domain or distribution must state where the bound applies. The map class must be restricted enough that success is informative. A zero training error from an arbitrarily expressive translator may say more about the translator than either system.

ε = supz∈D dT(F(LS(z)), LT(F(z))) D is the declared domain, L is the law or operation being transported, d is a target discrepancy tied to the decision, and ε is the worst declared error. Replacing the supremum with an expectation changes the guarantee.
Figure 8An expressive post-hoc map can hide poor transport beyond the fitted cases
Illustrative chart of mapping flexibility against in-sample and held-out transport error In-sample error falls as map flexibility rises, while held-out intervention error first falls and then rises. The admissible region favours a predeclared constrained map rather than an unconstrained post-hoc fit. 00.20.40.60.81.0 rigidpredeclaredflexibleunconstrained Mapping flexibility Transport error admissible region fitted-case errorheld-out intervention error
The numbers are synthetic. The shape expresses a testable risk: flexibility can lower fitted-case error while weakening transport to held-out interventions. A meaningful proof therefore declares the map class before seeing all outcomes and reports both fit and transfer. Illustrative chart; no empirical measurements are claimed.
How the claim changes under pressure
Chart · state
stateDiagram-v2
  [*] --> Claim
  state "Keep every tested answer,<br/>replace the mechanism" as Claim
  state "Keep both systems fixed,<br/>change what counts as equal" as Test
  state "When the inverse is coherent<br/>rather than literal" as Revision
  Claim --> Test: expose mechanism
  Test --> Decision: evidence survives
  Test --> Revision: rival survives
  Revision --> Claim: narrow or rebuild
  Decision --> [*]
The revision loop begins with Keep every tested answer, replace the… and keeps counterexamples inside the reasoning path. Reading use: follow the relation, then return to the surrounding argument for evidence and limits.

Put the claim through a transport gate

The practical contribution of this paper is a Structural Transport Contract. It converts a broad equivalence claim into eight fields that can fail independently. The contract is deliberately stricter than a comparison narrative and weaker than demanding one universal notion of sameness.

  1. Decision. Name the action the result will support: replace, compile, compare, abstract, reuse or infer.
  2. Signatures. List source and target object types, relations, operations, observations and interventions.
  3. Admissible map. Declare how mappings may be constructed and what complexity or regularity they must obey.
  4. Preservation. Specify every forward law that must commute.
  5. Reflection and coverage. State which target relations must come from the source and how much of the target must be represented.
  6. Return witness. Supply a strict inverse, coherent quasi-inverse, bisimulation relation, simulation relation or reconstruction bound.
  7. Validation. Include held-out compositions, interventions, rival mappings and explicit error thresholds.
  8. Break and permission. Publish the first known counterexample, the scope boundary and the exact inference the proof permits.

Locate the failure instead of averaging it away

A failed gate should report where the bridge broke. Four locations recur across mathematical, computational and cross-domain comparisons. They should remain separate because each calls for a different repair.

Vocabulary failure occurs before a functional test can begin. A source type, relation or operation has no declared target counterpart. A phenomenological account may distinguish an experienced horizon from an attended object, while the proposed machine description contains only token positions and weights. Inventing a shared label does not supply the missing target object. The honest result is an untranslated commitment and, perhaps, a design question.

Functional failure occurs when named counterparts do not respond alike under the relevant intervention. Two systems may both contain something called “memory”, yet one is an immutable training parameter and the other is writable episodic state. Resetting, updating or withholding the candidate components reveals different roles. The repair is to narrow the relation, change the target, or abandon the correspondence.

Structural failure occurs when local correspondences exist but their relations or compositions do not commute. Each role may map to a capability, each state to a state and each action to an API call, while revoke-after-approve, fork-then-merge or concurrent update behaves differently. This is the characteristic failure of attractive box-to-box diagrams. The repair is a law-level intervention, not better labels.

Ontological residue remains when the formal structure transports successfully but the source makes a further claim about what the structure is. A mathematical model of report, reflexivity or temporal integration can be instantiated in several substrates. That does not by itself decide whether any instance is conscious, biological, intentional in the phenomenological sense, or metaphysically fundamental. The proof should preserve the residue as an explicit non-inference rather than smuggling it through a shared diagram.

These failures can coexist, but they should not be blended into one confidence score. A score of 0.72 cannot tell a reader whether the missing piece is a term, an operation, a composition law or an ontological bridge. The location of failure is part of the result because it determines the next experiment.

Figure 9A configured-system mapping fails at the authority boundary, not the recommendation
The configured example separates proposal from authority. Matching the recommended action is insufficient when the target grants broader data access or composes revocation differently. Worked scenario; no client deployment or operating result is claimed.

Executable lab: the finite-structure mapping gate

The browser tool below audits finite typed relational structures. Each structure declares object identifiers, object types and named binary relations. The map assigns every source object to a target object. The gate checks totality, target membership, type preservation, injectivity, surjectivity, relation-signature agreement, preservation and reflection.

Figure 10Evidence required by each verdict in the executable gate
The verdict rises only when independent checks pass. The gate refuses to infer equivalence from a high aggregate score. It returns counterexamples so the failed law can be repaired or the claim lowered. Practitioner synthesis; implemented below.

Run the Structural Transport Gate

Choose a preset or edit the JSON. Relations are named arrays of ordered object pairs. The audit runs locally in the browser and can export a machine-readable receipt.

JSON: name, objects and relations
JSON: name, objects and relations
JSON object: each source identifier maps to one target identifier

No mapping assessed yet

Load a preset or provide three valid JSON documents, then run the gate.

Independent checks

  • Awaiting input
How to interpret the executable result

A positive isomorphism result permits interchangeability only for formulas built from the declared finite object types and binary relations. An embedding result permits faithful representation inside the target image. A homomorphism result permits one-way relation transport but not recovery. A negative result identifies a counterexample to the proposed map; it does not prove that no better map exists. The gate cannot establish shared ontology, consciousness, historical influence or equivalence of unlisted operations.

Python reference implementation and explicit invariants

The reference checker uses the same finite-relational semantics as the browser lab. Its invariants are: every source object is mapped; each image exists and has the same declared type; every source relation tuple maps to a target tuple; reflection is tested only when the map is injective; and isomorphism additionally requires surjectivity and matching relation names.

Python 3.11+ · standard library
from __future__ import annotations

from dataclasses import dataclass
from typing import Mapping, Sequence

Pair = tuple[str, str]


@dataclass(frozen=True)
class FiniteStructure:
    name: str
    objects: Mapping[str, str]
    relations: Mapping[str, frozenset[Pair]]


@dataclass(frozen=True)
class Audit:
    verdict: str
    checks: Mapping[str, bool]
    counterexamples: tuple[str, ...]


def audit_mapping(
    source: FiniteStructure,
    target: FiniteStructure,
    mapping: Mapping[str, str],
) -> Audit:
    errors: list[str] = []
    source_ids = set(source.objects)
    target_ids = set(target.objects)

    total = source_ids <= set(mapping)
    images_exist = all(mapping.get(s) in target_ids for s in source_ids)
    typed = total and images_exist and all(
        source.objects[s] == target.objects[mapping[s]] for s in source_ids
    )

    image_values = [mapping[s] for s in source_ids if s in mapping]
    injective = len(image_values) == len(set(image_values)) == len(source_ids)
    surjective = set(image_values) == target_ids
    same_signature = set(source.relations) == set(target.relations)

    preservation = total and images_exist
    for relation, pairs in source.relations.items():
        target_pairs = target.relations.get(relation, frozenset())
        for left, right in pairs:
            mapped = (mapping.get(left), mapping.get(right))
            if mapped not in target_pairs:
                preservation = False
                errors.append(f"{relation}: {left,right} maps to {mapped}, absent in target")

    reflection = injective and images_exist
    if reflection:
        inverse = {mapping[s]: s for s in source_ids}
        image = set(inverse)
        for relation, pairs in target.relations.items():
            source_pairs = source.relations.get(relation, frozenset())
            for left, right in pairs:
                if left in image and right in image:
                    preimage = (inverse[left], inverse[right])
                    if preimage not in source_pairs:
                        reflection = False
                        errors.append(f"{relation}: target {left,right} reflects to absent {preimage}")

    checks = {
        "total": total,
        "images_exist": images_exist,
        "type_preservation": typed,
        "injective": injective,
        "surjective": surjective,
        "same_relation_signature": same_signature,
        "relation_preservation": preservation,
        "relation_reflection": reflection,
    }

    if typed and preservation and reflection and injective and surjective and same_signature:
        verdict = "exact structural isomorphism"
    elif typed and preservation and reflection and injective:
        verdict = "structural embedding"
    elif typed and preservation:
        verdict = "relation-preserving homomorphism"
    else:
        verdict = "failed structural mapping"

    return Audit(verdict, checks, tuple(errors))

To apply the checker, instantiate both structures, convert each relation’s pair list to a frozenset, and call audit_mapping. A production extension should add n-ary operations, action maps, temporal traces, interventions, approximate metrics and a declared map-complexity budget rather than treating this toy signature as universal.

Where the gate should stop

The gate should not be applied as a universal metaphysics machine. A correct finite-structure proof can show that two typed relational presentations are isomorphic. It cannot establish that they are made of the same kind of thing, have the same causal powers outside the signature, realise the same experience, or arose from the same historical lineage. Those are separate claims with separate evidence.

Nor should every useful mapping be forced upward to equivalence. One-way simulation may be exactly right for an implementation. Approximate abstraction may be the honest result for a noisy biological system. A lexical analogy may be enough to generate an experiment. The discipline is to lower the noun when the proof is weaker, not to inflate the proof until it matches the noun.

Conclusion
The evidence conversation
Chart · sequence
sequenceDiagram
  participant Q as Question
  participant M as Mechanism
  participant E as Evidence
  participant D as Decision
  Q->>M: The bridge that replay cannot finish
  M->>E: Keep every tested answer, replace the mechanism
  E-->>M: compare rival explanations
  E->>D: Approve only the transport contract that survives a break
  D-->>Q: revise scope or act
Question, mechanism, evidence and decision exchange the burdens developed in What a structural equivalence proof requires. Reading use: follow the relation, then return to the surrounding argument for evidence and limits.

Approve only the transport contract that survives a break

When a proposed bridge appears between a transformer and a cognitive theory, a biological measure and an artificial system, a legacy service and its rewrite, or two philosophical descriptions, stop asking whether the endpoints “are equivalent” in general. Ask which decision needs to cross.

If the decision is reversible format migration, demand a lossless reconstruction witness. If it is behavioural substitution, specify the observations and require matched transitions under adversarial contexts. If it is causal explanation, transport interventions. If it is a lossy abstraction, publish the metric, distribution, error and discarded distinctions. If it is only hypothesis generation, call it a correspondence and preserve the residue.

The practical rule

Do not approve a structural-equivalence claim until a reader can run both paths of every declared law, challenge the mapping in reverse, inspect the return witness, and point to the first condition under which the claim stops. The proof is not the impressive diagram. It is the transport contract that survives an attempted break.

This changes the release decision from “the outputs look the same” to “the decision-relevant structure is preserved under the interventions we may actually perform”. It changes comparative research from “these vocabularies resemble one another” to “this named relation survives this map, while these commitments do not transfer”. Most proposed equivalences will become narrower. That is progress. A bounded result can be tested, reused and revised; an unbounded resemblance can only be repeated.

Glossary

Admissible map
A mapping allowed by predeclared constraints such as type, continuity, simplicity, locality or interpretability.
Bisimulation
A relation between transition systems in which each labelled move on either side can be matched by the other.
Category equivalence
Functors in both directions whose composites are naturally isomorphic to the identity functors.
Homomorphism
A map that preserves named operations or relations in the forward direction.
Reflection
The reverse test that target relations among mapped objects correspond to source relations rather than being introduced by the mapping.
Signature
The declared types, relations, operations, equality notion and interventions that define what structure is under discussion.
Structural Transport Contract
The eight-field proof receipt proposed here for tying a mapping claim to a decision, tests, reconstruction and break conditions.

References

  1. Riehl, E. (2016). Category Theory in Context. Aurora: Dover. Author-hosted edition. Full text.
  2. Fong, B., & Spivak, D. I. (2019). An Invitation to Applied Category Theory: Seven Sketches in Compositionality. Cambridge University Press. Open preprint.
  3. Rubenstein, P. K., Weichwald, S., Bongers, S., Mooij, J. M., Janzing, D., Grosse-Wentrup, M., & Schölkopf, B. (2017). Causal consistency of structural equation models. Proceedings of UAI. Open preprint.
  4. Beckers, S., & Halpern, J. Y. (2019). Abstracting causal models. Proceedings of AAAI. Open preprint.
  5. Beckers, S., Eberhardt, F., & Halpern, J. Y. (2020). Approximate causal abstractions. Proceedings of UAI. Open preprint.
  6. Geiger, A., Ibeling, D., Zur, A., Chaudhary, M., Chauhan, S., Huang, J., Arora, A., Wu, Z., Goodman, N., Potts, C., & Icard, T. (2025). Causal abstraction: A theoretical foundation for mechanistic interpretability. Journal of Machine Learning Research, 26(83), 1–64. Journal article.
  7. Sutter, D., Minder, J., Hofmann, T., & Pimentel, T. (2025). The non-linear representation dilemma: Is causal abstraction enough for mechanistic interpretability? Preprint. Open preprint.
  8. Leroy, X. (2009). A formally verified compiler back-end. Journal of Automated Reasoning, 43, 363–446. .
  9. van der Schaft, A. J. (2004). Equivalence of dynamical systems by bisimulation. IEEE Transactions on Automatic Control, 49, 2160–2172. .
  10. Barrett, T. W., & Halvorson, H. (2016). Morita equivalence. The Review of Symbolic Logic, 9, 556–582. Open preprint.
  11. Weatherall, J. O. (2018). Theoretical equivalence in physics. Philosophy Compass, 14. Open preprint.