Substrate and system#
Everything IIT computes starts from a substrate: a set of units and a complete description of how they influence one another. This page covers the substrate and the candidate system drawn from it, and the two postulates they enforce — existence and intrinsicality.
The substrate is a causal model#
A substrate \(U = \{U_1, U_2, \ldots, U_n\}\) is \(n\) interacting units with a finite state space \(\Omega_U\). Its cause–effect power is captured entirely by its transition probability function — the probability of each next state \(\bar{u}\) given each current state \(u\) (Albantakis et al., 2023, Eq. 1):
Because a substrate’s units are assumed conditionally independent given the previous state, this factorizes over units (Eq. 2):
This factorization is the causal-model assumption the whole framework rests on; see conditional independence for what it means and how PyPhi enforces it.
In PyPhi a substrate is a Substrate. The worked example is the paper’s
three-unit logistic network:
import pyphi
pyphi.config.progress_bars = False
substrate = pyphi.examples.iit4_2023_fig1a_substrate()
substrate
| Units | A, B, C |
|---|---|
| State space | binary |
| A | B | C | |
|---|---|---|---|
| A | 1 | 1 | 1 |
| B | 1 | 1 | · |
| C | · | 1 | 1 |
| state | A | B | C |
|---|---|---|---|
| (0,0,0) | 0.119203 | 0.768525 | 0.167982 |
| (1,0,0) | 0.026597 | 0.998887 | 0.5 |
| (0,1,0) | 0.973403 | 0.401312 | 0.167982 |
| (1,1,0) | 0.880797 | 0.994514 | 0.5 |
| (0,0,1) | 0.119203 | 0.0054863 | 0.5 |
| (1,0,1) | 0.026597 | 0.598688 | 0.832018 |
| (0,1,1) | 0.973403 | 0.00111254 | 0.5 |
| (1,1,1) | 0.880797 | 0.231475 | 0.832018 |
The repr shows the transition probability matrix (TPM) \(\mathcal{T}_U\) in state-by-node form: one row per current state, one column per unit, giving the probability that each unit turns on at the next step. The connectivity matrix records which units influence which — the causal wiring that the TPM quantifies:
substrate.cm # cm[i, j] == 1 means unit i is an input to unit j
array([[1, 1, 1],
[1, 1, 0],
[0, 1, 1]])
To build a substrate of your own from a matrix, weights, or unit functions, see Build a substrate.
The transition probabilities are the substrate’s cause–effect power: the units take and make a difference. This is the existence postulate, IIT’s operational starting point — to exist is to have cause–effect power (Albantakis et al., 2023).
A system is an intrinsic point of view#
The units we analyze are usually an open subset \(S \subseteq U\) of a larger substrate. The intrinsicality postulate requires that a system’s cause–effect power be assessed from its own perspective: the remaining units \(W = U \setminus S\) are background conditions: they do not count as part of the system and contribute no cause–effect power of their own. PyPhi enforces this by causally marginalizing the background units conditional on the current state: for effects they are held at their current state, and for causes their possible past states are weighted by their probability given the current state (Albantakis et al., 2023, Eqs. 3–4 and Fig 1B).
A System is a candidate subset of a substrate in a definite state. The worked
example’s candidate is the pair \(\{A, B\}\), so unit \(C\) is background:
system = pyphi.System(substrate, (0, 1, 1), node_indices=(0, 1))
system
| Units | A, B |
|---|---|
| State | A=0, B=1 |
| Substrate | 3 units |
| Background | C=1 |
| A | B | |
|---|---|---|
| A | 1 | 1 |
| B | 1 | 1 |
| state | A | B |
|---|---|---|
| (0,0) | 0.119203 | 0.436089 |
| (1,0) | 0.026597 | 0.824531 |
| (0,1) | 0.973403 | 0.226956 |
| (1,1) | 0.880797 | 0.662078 |
| state | A | B |
|---|---|---|
| (0,0) | 0.119203 | 0.0054863 |
| (1,0) | 0.026597 | 0.598688 |
| (0,1) | 0.973403 | 0.00111254 |
| (1,1) | 0.880797 | 0.231475 |
Here node_indices selects the subset \(S = \{A, B\}\); the remaining unit \(C\)
is causally marginalized, so the analysis sees \(A\) and \(B\) from their own
intrinsic perspective: \(C\) is held at its current state for effects, and its
past states are weighted by their probability given the current state for
causes.
From the system’s intrinsic point of view, IIT derives a cause marginal and an effect marginal by marginalizing the background — and, on the cause side, applying Bayes’ rule. They describe how the system’s own units constrain each other’s past and future. The two are not symmetric objects: the effect side is a factored transition matrix, while the cause side is a mapping of per-unit cause factors, as their types show:
type(system.cause_marginal).__name__, type(system.effect_marginal).__name__
('CauseMarginals', 'FactoredTPM')
These are the objects the next steps operate on. With the substrate fixed as a causal model and the system fixed as an intrinsic point of view, the following page asks whether the system is irreducible, and by how much: its system integrated information, \(\varphi_s\).