Papers › Generalised Transportability via Causal Abstractions

Generalised Transportability via Causal Abstractions

16 Aug 2026arXiv:2608.15645added by Syntology

Yorgos Felekis, Paris Giampouras, Fabio Massimo Zennaro, Theodoros Damoulas

Title, abstract, authors and date from arXiv's metadata (CC0); this paper is not in the Papers with Code archive (frozen 2025-07-28).

Transporting a causal conclusion from a source study population to a target one is a fundamental problem in causal inference. The theory of transportability provides a criterion for when this is possible: given experimental data from the source and observational data from the target, it determines whether a target query is identifiable and does so completely; i.e. if the query can be transported, the criterion finds the exact formula. However, it works one query at a time and returns an expression rather than the value itself. It is also silent in two practically important regimes: when the query is not transportable and when no target data exist at all. To tackle both, we take a model-level perspective grounded in Causal Abstraction theory. Source and target share variables, graph, and interventions, differing only at a known set of mechanisms, which makes transportability a special case of same-level abstraction. Thus, instead of asking whether one query transports, we ask whether a single map aligns the source and target across their interventional behaviour. We characterise when such a map exists in both the Markovian and semi-Markovian settings; when it does, every target query transports at once. Our main contribution lies in the approximate case. When no exact map exists, the best approximate one still yields certified query intervals, recasting abstraction error as a quantitative notion of approximate transportability. We formulate model-level transport as distributionally robust optimisation over mechanism and environment perturbations of the unseen target and derive certificates for both challenging regimes: bounds for non-transportable queries, and guarantees under target-agnostic settings. We evaluate our framework on synthetic Markovian and semi-Markovian benchmarks and a real ecological dataset, and we show that the certified intervals bracket the true interventional query.

PaperPDFCode Syntology ran

In Syntology For agents, Syntology's MCP tool lists every function and class Syntology harvested from this paper and whether it ran (how to connect): get_harvested_code_for_paper(arxiv_id="2608.15645")

Code

Syntology Ran 30 of 33 code samples harvested from 1 repository linked to this paper; 3 have no recorded run. Of those that ran: 9 ran · honoured contract; 2 ran · violated contract; 4 ran · our draft was wrong; 7 ran · fixture could not drive it; 8 ran with no contract checked.

By repository: found in paper text by Syntology: 33 samples from 1 repository, 30 ran. The run record, sample by sample. “Ran” means executed on a synthesized input, not that the code is correct or reproduces the paper.

yfelekis/traca found in paper text by Syntology report

Reachability, where shown, is from one Syntology probe window (2026-09-16 to 2026-09-18); repositories not probed show nothing. GitHub stars are not tracked.

Code Syntology ran Syntology

33 samples harvested; 30 ran; 9 honoured the contract we drafted; 3 have no recorded run. Read from Syntology's graph 2026-09-24; that is when this build read the record, not when the samples ran.

9ran · honoured contract
2ran · violated contract
4ran · our draft was wrong
7ran · fixture could not drive it
8ran
3unverified

Licence: 33 of the 33 samples are pointer only, meaning Syntology does not serve that copy's text. This page shows no code text for any sample; each one links to its file in the repository.

Harvested from yfelekis/traca. “Ran” means the sample executed on a synthesized input. It does not mean the output is correct, and nothing here reproduces the paper's results. “Honoured” and “violated” refer to a contract Syntology drafted from the code itself; “our draft was wrong” and “fixture could not drive it” are failures of Syntology's instrument, not of the code.

Each sample ends with its code_sha256, Syntology's identity for that exact code. An agent fetches the stored sample with Syntology's MCP tool get_code(code_sha256="…") (how to connect); click an identity to copy that call.

Repository labels, per sample. official repository: The archive marks this repository official for the paper. named in the paper: The archive records that the paper mentions this repository; it is not marked official. community (archive-listed): In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper. found in paper text by Syntology: Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted. community: Not in the archive's code links for this paper; a community repository Syntology harvested. Samples from a repository marked official are listed first. Licence labels name the repository's licence as recorded at harvest. “Pointer only” means Syntology does not serve that copy's text, for one of four reasons: no licence file was found; the licence was not identified; the licence is recorded as permissive but that copy's record is not marked cleared; or the licence is outside the permissive list Syntology serves text under (MIT, Apache-2.0, BSD and similar). Some licences outside that list permit redistribution, such as WTFPL, and GPL-3.0 under its conditions; they are simply not on the list. Hover a licence label for the reason. File links open the file on GitHub at the default branch, which may have changed since the harvest.

ColumnBudget yfelekis/traca/traca/optim.py found in paper text by Syntology ran · metamorphic tier: deterministic no licence file found · pointer only · 088a509fd985e03d · report
ConstructiveClass yfelekis/traca/traca/optim.py found in paper text by Syntology ran · metamorphic tier: deterministic no licence file found · pointer only · 5ddaa6fa041a0a88 · report
EntrywiseBox yfelekis/traca/traca/optim.py found in paper text by Syntology ran · metamorphic tier: deterministic no licence file found · pointer only · 7a473e4a4e07be9f · report
FrobeniusBall yfelekis/traca/traca/optim.py found in paper text by Syntology ran · metamorphic tier: deterministic no licence file found · pointer only · 2562efe9857057f1 · report
GelbrichBall yfelekis/traca/traca/optim.py found in paper text by Syntology ran · metamorphic tier: deterministic no licence file found · pointer only · 7d14c9ea4a2c889b · report
OptResult yfelekis/traca/traca/optim.py found in paper text by Syntology ran · metamorphic tier: deterministic no licence file found · pointer only · 5f84cd342e9e9b9e · report
OptimConfig yfelekis/traca/traca/optim.py found in paper text by Syntology ran · metamorphic tier: deterministic no licence file found · pointer only · b7c99b6d3e5d42d8 · report
RowBudget yfelekis/traca/traca/optim.py found in paper text by Syntology ran · metamorphic tier: deterministic no licence file found · pointer only · 2375ef36cd24f5fc · report
_apply_shift_mask yfelekis/traca/traca/optim.py found in paper text by Syntology ran · fixture could not drive it no licence file found · pointer only · d4ad9b6ab8563ee9 · report
_build_propagators yfelekis/traca/traca/optim.py found in paper text by Syntology ran · honoured contract no licence file found · pointer only · 1eb725ff497be42c · report
_check_converged yfelekis/traca/traca/optim.py found in paper text by Syntology ran · fixture could not drive it fingerprinted no licence file found · pointer only · cb1ac0a98ddc0c39 · report
_cov_prox_update yfelekis/traca/traca/optim.py found in paper text by Syntology ran · fixture could not drive it fingerprinted no licence file found · pointer only · 8a00d1cc5d175f87 · report
_enumerate_box_corners yfelekis/traca/traca/optim.py found in paper text by Syntology ran · honoured contract no licence file found · pointer only · fbfd00c48f76250c · report
_interventional_exo_target yfelekis/traca/traca/optim.py found in paper text by Syntology ran · fixture could not drive it no licence file found · pointer only · 6fd8e5f7d346464a · report
_pi_inv yfelekis/traca/traca/optim.py found in paper text by Syntology ran · honoured contract fingerprinted no licence file found · pointer only · a5f1af5983651f07 · report
_pushed_cov yfelekis/traca/traca/optim.py found in paper text by Syntology ran · violated contract fingerprinted no licence file found · pointer only · 4582fb9ec4182319 · report
_pushed_mean yfelekis/traca/traca/optim.py found in paper text by Syntology ran · violated contract fingerprinted no licence file found · pointer only · aae728fc0c0203d4 · report
_resolve_pairs yfelekis/traca/traca/optim.py found in paper text by Syntology ran · our draft was wrong no licence file found · pointer only · 51e37fd5886114c8 · report
_target_gaussian yfelekis/traca/traca/optim.py found in paper text by Syntology ran · honoured contract fingerprinted no licence file found · pointer only · 418840e7e34590ab · report
_to_observed yfelekis/traca/traca/optim.py found in paper text by Syntology ran · honoured contract fingerprinted no licence file found · pointer only · fb13a1e0d05ce94d · report
as_rng yfelekis/traca/traca/optim.py found in paper text by Syntology ran · our draft was wrong no licence file found · pointer only · b27bc6f6d8aa4d24 · report
bundle_exo_means yfelekis/traca/traca/optim.py found in paper text by Syntology ran · honoured contract no licence file found · pointer only · ab8d1f32123c6aad · report
bures_sqrt yfelekis/traca/traca/optim.py found in paper text by Syntology ran · honoured contract fingerprinted no licence file found · pointer only · c5cb793dc33fe3f2 · report
gating_matrix yfelekis/traca/traca/optim.py found in paper text by Syntology ran · our draft was wrong no licence file found · pointer only · 610e8e4c9ad8f608 · report
gelbrich_distance yfelekis/traca/traca/optim.py found in paper text by Syntology ran · our draft was wrong no licence file found · pointer only · e068402c89ad410c · report
interventional_exo_mean yfelekis/traca/traca/optim.py found in paper text by Syntology ran · fixture could not drive it no licence file found · pointer only · 2feb62b1bfcd90f6 · report
numerical_gradient yfelekis/traca/traca/optim.py found in paper text by Syntology ran · fixture could not drive it no licence file found · pointer only · 8f9ba7b31c2d4ce8 · report
perturbed_propagator yfelekis/traca/traca/optim.py found in paper text by Syntology ran · honoured contract no licence file found · pointer only · c9af62f8a8268663 · report
project_l1 yfelekis/traca/traca/optim.py found in paper text by Syntology ran · fixture could not drive it fingerprinted no licence file found · pointer only · 97ba326835df44c4 · report
resolve_districts yfelekis/traca/traca/optim.py found in paper text by Syntology ran · honoured contract fingerprinted no licence file found · pointer only · 0c2f3bd2b5f846ac · report
GaussianLoss yfelekis/traca/traca/optim.py found in paper text by Syntology unverified no licence file found · pointer only · 4c1c08254ede7a25 · report
_restrict_loss_gaussian yfelekis/traca/traca/optim.py found in paper text by Syntology unverified no licence file found · pointer only · 86eb9fae9e007486 · report
fit_gaussian yfelekis/traca/traca/optim.py found in paper text by Syntology unverified no licence file found · pointer only · 42a7b6d212f1f70e · report

Results from the paper

The Papers with Code archive ends with its 2025-07-28 snapshot. This paper's arXiv identifier, 2608.15645, was issued in August 2026, after that date, so the archive has no leaderboard rows for it.

Report a problem or propose a change · a person checks every report against the paper or source before anything changes; decisions are listed on /corrections