July 02, 2026
Fault trees are a widely used as effective risk models for complex systems, answering the question what can go wrong?, especially through minimal cut set analysis. We study fault trees from the perspective of Halpern & Pearl’s theory of actual causality. This allows us to use fault trees to answer the question why has it gone wrong?, which is fundamental to failure diagnostics. We give a complete classification of each of the different notions of actual causality in terms of the fault tree’s graph structure and logical structure, and show how minimal cut sets give rise to actual causes. Furthermore, we discuss the complexity of computing causality in fault trees, and develop algorithms to do so.
The visdeurbel (“fish doorbell”) is a citizen-science initiative designed to support migrating fish as they pass through the waterways of Utrecht, a major Dutch city [1], [2]. An underwater camera provides a live stream of fish in front of the lock. The lock operator can be alerted in two ways. Public observers may ring the virtual doorbell when they see fish, or the operator can watch the camera feed directly. The system aids fish migration and raises public awareness of ecology. This example illustrates how different components and failures (electric, public and operator failures) contribute to a system-level failure (the lock failing to open).
Fault trees (FTs) are a structured, hierarchical model to analyse failure propagation in complex systems [3], [4]. FTs enable a top-down, deductive approach to failure analysis, breaking down system failures into combinations of component failures using logical gates (e.g., AND, OR). In FT-terminology, the inputs of such a gate are often called the immediate causes of the higher-level cause labeled by the gate [5]. Widely used in safety-critical industries such as aerospace [6], nuclear energy [7], and cybersecurity [8], FTs enable structured reasoning about system reliability, risk assessment, and failure propagation. They serve as a powerful design tool, helping engineers identify weak points and prioritise mitigation strategies. An FT for the “fish doorbell” is given in Fig. 1.
As a risk model, FTs are primarily used to analyze potential failures: what can go wrong? This is done via minimal cut set (MCS) analysis: an MCS is a set of basic failure events that need to happen simultaneously in order for the system to fail. After finding a FT’s MCSs, these are then analyzed in terms of size, likelihood, and common causes to determine the system’s overall reliability.
Actual causality in the Halpern-Pearl framework. Causality, on the other hand, asks the question why has it gone wrong? after the fact. In computer science, the framework of actual causality (AC) by Halpern and Pearl [9] has been especially popular. In AC, a system is modeled as a causal model: a directed acyclic graph of variables, with functions describing each variable in terms of its input. The system’s context is given by values of the initial variables. Within such a system one can perform interventions using do-calculus [10] to forcibly set certain variables. This allows one to go beyond correlations and define causal relationships based on counterfactuals, describing what would have happened if some conditions were different. This has been applied successfully to problems such as fault localization [11], debugging [12], and failure reasoning [13].
Incident analysis and FTs. While FTs are mostly used to prevent failures through risk assessment, they are also an important tool in incident analysis or diagnostics: when a system fails, understand what has happened and why, to prevent its recurrence. A formal framework of causality would be an important asset towards systematic incident analysis. While the use of FTs in diagnoses has been well-studied with systematic methods [14]–[17], a systematic application of actual causality to fault trees is missing from the current literature. So far, the connection between AC and FTs has been limited to generating FTs from trace data [18], and translating attack trees (\(\approx\)FTs for cybersecurity) to causal models, without investigating their actual causes [19].
Contributions. Our main contribution is to apply the AC framework to FTs. We consider the most common type of FTs, namely static, coherent FTs. These can be phrased as directed acyclic graphs of Boolean variables, that are functions of their inputs via their role as AND/OR-gates. Thus FTs can directly be studied from an AC perspective. This by itself is not surprising, but the fact that all functions are Boolean and non-decreasing leads to a deeper understanding than would be possible in regular causal models.
First, it gives us concise classifications of AC. For the three main causality definitions in the AC literature [20] (original: AC-o, updated: AC-u, modified: AC-m), we classify the actual causes of event failure in FTs, given a context, allowing for a straightforward causal analysis of FTs (Thms. 5, 6 & 7). These classifications do not only take into account the Boolean nature of FTs, but also their graph structure. By contrast, FT analysis typically only considers the underlying Boolean functions. This leads to the surprising fact that equivalent FTs can behave differently as causal models. From an AC perspective, this is a feature rather than a bug: in AC, intermediate gates are not just dummy variables, but represent real-world events or subsystems that can be targets for interventions. For FTs, AC-o, AC-u, AC-m form a spectrum for defining causality, from a larger emphasis on the graph structure to a complete emphasis on the Boolean nature. As AC-m looks only at the Boolean nature of the FT, the relation between AC-m and MCSs is stronger. In fact, our results allow us to classify MCSs in terms of AC-m (Cor. 1).
Second, we look at the relation between minimal cut sets and AC-o and AC-u. As MCSs are potential pathways to failure, and AC are events that contributed to failure in a specific scenario, we cannot expect them to be the same. In fact, MCSs are typically large in robust systems to prevent a single-point-of-failure, but ACs are typically small: in fact, it is known for AC-o, and we show for AC-u, that actual causes are only singletons. Nevertheless, there is a clear relation between MCSs and AC. We show that if we take an MCSs as context, then all of its elements are ACs (Thm. 8). Furthermore, for AC-o and AC-u, in a given context, we show that every element of every MCS that has happened, is an AC (Thm. 9). If the FT is a (graph-theoretic) tree rather than a DAG, or if it is in disjunctive normal form, then the converse also holds.
Third, we determine the hardness of determining causes (Thm.10), showing that this is less complex than the general case for AC-u and AC-m, and leverage our classification of actual causality in fault trees to develop algorithms that find all causes for AC-o and AC-m (Sec. 9). Generalizing these algorithms to AC-u does not lead to an appreciable (theoretical) speedup over naïve algorithms; we leave the development of fast algorithms for AC-u to future work.
In a directed graph \((V,E)\), a root or sink is a vertex without outgoing edges; a leaf (source) is a vertex without ingoing edges. The inputs of a vertex \(v\) are its predecessors: \({\it Inp}(v) = \{w \in V \mid (w,v) \in E\}\).
A FT is a systematic, graphical tool for analyzing why systems fail. FT analysis proceeds by breaking down the system-level failure into its causes, and these causes into subcauses, until the root causes are found. These are called basic events (BEs), represented by the leaves of the tree; see Fig. 1. Higher-level failures are connected using an AND-gate when all subcauses must occur for the failure to propagate, or by an OR-gate when a single subcause is sufficient. Formally, a FT is a directed acyclic graph, whose non-leaf nodes are labeled with AND- and OR-gates.
Definition 1. A FT* is a triple \(T = (V,E,\gamma)\), where \((V,E)\) is a directed acyclic graph with a unique root \({\it Root}_{T}\), and \(\gamma\colon V \rightarrow \{\mathtt{BE},\mathtt{OR},\mathtt{AND}\}\) satisfies \(\gamma(v) = \mathtt{BE}\) iff \(v\) is a source.*
The FT is called tree-shaped if the graph \((V,E)\) is a (directed) tree, i.e., no vertex has two successors. In other cases, we call it DAG-shaped. The nodes of a FT are usually called events: the root \({\it Root}_T\) of the tree is called the top level event, the leaves are the basic events and all other nodes are intermediate events. We write \(\operatorname{BE}_{T} = \{v \in V \mid \gamma(v) = \mathtt{BE}\}\) for the set of basic events. We omit the subscript if \(T\) is clear from the context.
The FT in Fig. 1 features three basic events electricity fails (\(\mathsf{EF}\)), public fails (\(\mathsf{PF}\)) and operator fails (\(\mathsf{OF}\)), one intermediate event alert fails (\(\mathsf{AF}\)), and the top event lock fails (\(\mathsf{LF}\)).
A status vector indicates for each basic event its status, i.e., whether that BE has failed. Write \(\mathbb{B}:= \{0,1\}\); a status vector for \(T\) is a \(\vec{u} \in \mathbb{B}^{\operatorname{BE}_{}}\), where \(u_v=1\) indicates that BE \(v\) has failed and \(u_v=0\) that \(v\) is operational. We often identify a status vector with its set of basic events: Given a set \(C\subseteq \operatorname{BE}_{}\), its status vector \({\vec{u}}^C\) is given by \(u^C_{v}=1\) for \(v\in C\) and \(u^C_v=0\) for \(v\not\in C\). Given a \(b \in \mathbb{B}\), we write \(\vec{u}[v\leftarrow b]\) for the vector that equals \(\vec{u}\), except that it sets \(v\) to \(b\): \((\vec{u}[v\leftarrow b])_v=b\) and \((\vec{u}[v\leftarrow b])_{v'}=(\vec{u})_{v'}\) for \(v\neq v'\).
The semantics of a FT is defined by its structure function. Given a status vector \(\vec{u}\) and a node \(v\), \({\Phi}_{T}(\vec{u},v)\) indicates whether the node \(v\) fails on status vector \(\vec{u}\).
Definition 2. The structure function* of a FT \(T\) is a function \({\Phi}_{T}\colon\mathbb{B}^{\operatorname{BE}_{T}}\times V \rightarrow \mathbb{B}\) defined recursively as \[\begin{align} {\Phi}_{T}(\vec{u},v) = \begin{cases} \vec{u}_v & \textrm{ if \gamma(v) = \mathtt{BE}}\\ \bigvee_{w \in {\it Inp}(v)} {\Phi}_{T}(\vec{u},w) & \textrm{ if \gamma(v) = \mathtt{OR}}\\ \bigwedge_{w \in {\it Inp}(v)} {\Phi}_{T}(\vec{u},w) & \textrm{ if \gamma(v) = \mathtt{AND}} \end{cases} \end{align}\] We abbreviate \({\Phi}_{T}(\vec{u}) = {\Phi}_{T}(\vec{u}, {\it Root}_T)\) and \({\Phi}_{T}(C,v) = {\Phi}_{T}({\vec{u}}^C,v)\) for a set of basic events \(C\). Two FTs \(T\) and \(T'\) are equivalent if they have the same structure function, i.e. \({\Phi}_{T}(\vec{u},v) = {\Phi}_{T'}(\vec{u},v)\) for all \(\vec{u},v\).*
The structure function of the FT in Fig. 1 is given by \(\Phi(\vec{u}) = u_{\mathsf{EF}} \vee (u_{\mathsf{PF}} \wedge u_{\mathsf{OF}})\). In particular, \({\Phi}_{}(0,1,0)=0\) and \({\Phi}_{}(1,1,0)=1\), also written as \({\Phi}_{}(\{\mathsf{PF}\})=0\) and \({\Phi}_{}(\{\mathsf{EF},\mathsf{PF}\})=1\).
A cut set is a set of basic events that causes the top event to fail; a cut set is minimal if no proper subset is a cut set. Minimal cut sets are a key tool in FT analysis, as they constitute a minimal cause for the FT to fail.
Definition 3. A cut set* is a subset \(C \subseteq \operatorname{BE}_{T}\) such that \({\Phi}_{T}(C,{\it Root}) = 1\). A minimal cut set (MCS) furthermore satisfies \({\Phi}_{T}(C',{\it Root}) = 0\) for all \(C' \subset C\).*
The following are cut sets of the FT in Fig. 1; The first two sets are MCSs. \[\{\sf EF\}~~~~ \{{\sf PF}, {\sf OF}\}~~~~ \{\sf EF, {\sf PF}\}~~~~\{\sf EF, {\sf OF}\}~~~~\{\sf EF, {\sf PF}, {\sf OF}\}\]
Since (standard) FTs do not contain any negations, they are coherent: a cut set remains a cut set if we add more elements, because a failed system remains failed if more failures occur. Formally, the structure function is monotonous: if \(C\subset C'\), then \({\Phi}_{}(C,v)\leq {\Phi}_{}(C',v)\) for all events \(v\).
A BE \(e\) is critical for a status vector if flipping its value from \(0\) to \(1\) causes the system to transition from non-failure to failure.
Definition 4. Basic event \(e\) is critical* for status vector \(\vec{u}\) if \({\Phi}_{}(\vec{u}) = 0\) and \({\Phi}_{}(\vec{u}[e\leftarrow 1]) = 1.\) A basic event \(e\) is relevant if there is a vector in which \(e\) is critical. Otherwise, it is irrelevant.*
A basic event \(e\) is irrelevant iff the structure function is constant in \(u_{e}\) iff \(e\) is not an element of any MCS.
In FT analysis, each MCS is seen as a potential root cause. All elements of a given MCS are seen as causes, since we need each of them to occur for a top level failure.
Halpern and Pearl [9] define actual causality (AC) in terms of Causal Models (CMs), composed of variables and their corresponding values. The dependencies between variables are expressed through structural equations encoding the system’s behavior. We first recap CMs and associated concepts as in [9].
A causal model is defined based on a signature \({S}\) consisting of a pair \(( {\mathsf{U}^{\textrm{c}}}, {\mathsf{U}^{{\textrm{i}} }})\), where \({\mathsf{U}^{\textrm{c}}}\) is a set of exogenous variables, \({\mathsf{U}^{{\textrm{i}} }}\) a set of endogenous variables. For notational convenience, we assume all variables to be Boolean.
Intuitively, exogenous variables represent a context (\(\mathsf{U}^{\textrm{c}}\)), or external factors: conditions outside the model’s control that influence the system, but are not explained by the model itself. Endogenous variables are the internal variables (\(\mathsf{U}^{{\textrm{i}} }\)) of the model. Take the fish doorbell example of the introduction. For instance, we let \({\sf B_{EF}}\in \mathsf{U}^{\textrm{c}}\) (“Electricity Failure”) denote an exogenous variable representing the external failure of supply of electrical power. Its value determines the endogenous variable \(\sf EF\in \mathsf{U}^{{\textrm{i}} }\), which captures the availability of electricity. Thus, \({\sf B_{EF}}\) serves as the contextual factor governing the state of \(\sf EF\), and may be thought of as reflecting the environment’s provision (or interruption) of power.
The values of endogenous variables \(X \in \mathsf{U}^{{\textrm{i}} }\) are determined by structural equations \(F_X\), based on the exogenous and other endogenous variables.
Definition 5. A causal model* over a signature \({S} = ( {\mathsf{U}^{\textrm{c}}}, {\mathsf{U}^{{\textrm{i}} }})\) is a tuple \(M = ( {S}, {F})\), where \({F}\) assigns to each endogenous variable \(X \in {\mathsf{U}^{{\textrm{i}} }}\) a function \[F_X\colon \mathbb{B}^{\mathsf{U}^{\textrm{c}}}\times\mathbb{B}^{\mathsf{U}^{{\textrm{i}} }\setminus\{X\}}\rightarrow\mathbb{B}.\]*
Each \(F_X\) captures how the value of \(X\) is determined by the other variables in \({\mathsf{U}^{\textrm{c}}} \cup {\mathsf{U}^{{\textrm{i}} }}\). The functions \(F_X\) define a so-called set of structural equations; causal models are also referred to as structural equation models (SEMs).
Example 1 (CM “fish doorbell”). The CM for the “fish doorbell” scenario captures how an electrical supply failure or an alerting failure can enable a failure of the lock. The set of endogenous variables are the same events present in Fig. 1: \(\mathsf{U}^{{\textrm{i}} }= \{\mathsf{EF},\mathsf{PF},\mathsf{OF},\mathsf{AF},\mathsf{LF}\}\). We further introduce \({\sf B_{EF}}\in \mathsf{U}^{\textrm{c}}\), representing the external supply of electrical power, which affects \(\sf EF\). \({\sf B_{PF}}\in \mathsf{U}^{\textrm{c}}\) corresponds to the level of public engagement (whether there are enough online observers to notice fish) which influences \({\sf PF}\). Furthermore, \({\sf B_{OF}}\in \mathsf{U}^{\textrm{c}}\), representing the operator’s availability, determines \({\sf OF}\). The corresponding CM \(M_{{\sf doorbell}}\) and its structural equations follow the fault tree’s gate logic and are given by: \[\begin{align} \sf EF= {\sf B_{EF}}\quad \quad {\sf PF}= {\sf B_{PF}}\quad \quad {\sf OF}= {\sf B_{OF}}\quad \quad {\sf AF}= {\sf PF}\land {\sf OF}\quad \quad \sf LF= \sf EF\lor {\sf AF}\nonumber \end{align}\]
A CM induces a causal network: a directed edge from a variable \(Y \in \mathsf{U}^{{\textrm{i}} }\cup \mathsf{U}^{\textrm{c}}\) to a variable \(X \in \mathsf{U}^{{\textrm{i}} }\)
exists whenever the value of \(F_X\) depends on the value of \(Y\). Exogenous variables in \(\mathsf{U}^{\textrm{c}}\) have no incoming edges as they are the ‘inputs’ of the network. AC [9] is typically restricted to acyclic causal networks, ensuring that, for a given context, the structural equations have a unique solution.
Causal networks provide an intuitive and informative means of understanding the causal pathways within a CM. The causal network corresponding to Example 1 is provided in Fig. 3.
Given a signature \(S = ({\mathsf{U}^{\textrm{c}}}, {\mathsf{U}^{{\textrm{i}} }})\), an expression \(X = x\), where \(X \in {\mathsf{U}^{{\textrm{i}} }}\) and \(x \in \mathbb{B}\), is referred to as a primitive event. A basic causal formula has the structure \([Y_1 \leftarrow y_1, \ldots, Y_k \leftarrow y_k] \varphi\), where \(\varphi\) is a Boolean combination of primitive events, and each \(Y_i \in \mathsf{U}^{{\textrm{i}} }\) is a distinct endogenous variable. This formula is abbreviated as \([\vec{Y} \leftarrow \vec{y}] \varphi\) and, intuitively, it states that \(\varphi\) holds when \(Y_i\) is set to \(y_i\).
A context refers to an assignment \(\vec{u}\) of values to all exogenous variables in \({\mathsf{U}^{\textrm{c}}}\). We denote by \((M, \vec{u})\) the CM \(M\) under the specific assignment \(\vec{u}\) for \(\mathsf{U}^{\textrm{c}}\). An intervention modifies a CM \(M = ({S}, {F})\) by fixing an endogenous1 variable \(X \in \mathsf{U}^{{\textrm{i}} }\) to a particular value \(x\). Interventions are considered as external effects on the system, not governed by the structural equations. The result is a new model, written \(M_{X \leftarrow x}\), which is identical to \(M\) except that the structural equation \(F_X\) is replaced with the constant assignment \(X = x\). When applying multiple interventions, such as \(X_1 \leftarrow x_1, \ldots, X_n \leftarrow x_n\), we write \(\vec{X} \leftarrow \vec{x}\) and denote the modified model by \(M_{\vec{X} \leftarrow \vec{x}}\).
We write \((M, \vec{u}) \models \varphi\) to indicate that the causal formula \(\varphi\) holds in the CM \(M\) under context \(\vec{u}\). The satisfaction relation \(\models\) is defined inductively. Specifically, \((M, \vec{u}) \models X = x\) iff the variable \(X\) takes the value \(x\) in the unique solution to the structural equations of \(M\) under context \(\vec{u}\). Uniqueness is guaranteed since [9] considers acyclic models. Conjunctions and negations are interpreted in the standard logical way. Furthermore, \((M, \vec{u}) \models [\vec{Y} \leftarrow \vec{y}] \varphi\) holds iff \((M_{\vec{Y} \leftarrow \vec{y}}, \vec{u}) \models \varphi\). Potential actual causes are of the form \(X_1 = x_1 \land \cdots \land X_k = x_k\), with \(X_i \in \mathsf{U}^{{\textrm{i}} }\), which can be abbreviated as \(\vec{X} = \vec{x}\).
Example 2 (CM reasoning). Consider again the CM \(M_{{\sf doorbell}}\) in Example 1. A context \(\vec{u}\) sets the exogenous variables. Assume \(\vec{u}\) sets \({\sf B_{EF}}= 0\), \({\sf B_{PF}}= 1\) and \({\sf B_{OF}}= 0\): the public is not engaged, electricity is available and the operator is available. Setting endogenous variables (e.g., \({\sf AF}\leftarrow 1\)) corresponds to interventions that override those variables. The following hold: \[\begin{align} (M_{\sf doorbell}, {\vec{u}}) &\models {\sf LF} = 0, & (M_{\sf doorbell}, {\vec{u}}) &\models {{\sf AF}} = \wedge {\sf EF} = 0,\\ (M_{\sf doorbell}, {\vec{u}}) &\models [{\sf AF}\leftarrow 1]({\sf LF} = 1). \end{align}\] In the last equation, the intervention \([{\sf AF}\leftarrow 1]\) changes the behavior of the lock from a non-failing one (\({\sf LF} = 0\)) to a failing one (\({\sf LF} = 1\)).
Following the examples above, we embed FTs in CMs as follows.
Definition 6. Let \(T = (V,E,\gamma)\) be a FT. Its CM \(M_T\) is given by:
For the signature \(S=(\mathsf{U}^{\textrm{c}},\mathsf{U}^{{\textrm{i}} })\), we associate to each FT node \(v\) an endogenous variable \(X_v\), i.e., we set \(\mathsf{U}^{{\textrm{i}} }= \{X_v \mid v\in V\}\). Further, we associate to each basic event \(e\) an exogenous variable \(Y_e\), i.e., \(\mathsf{U}^{\textrm{c}}= \{ Y_e \mid e\in \mathtt{BE}\}\).
The equations of \(M_T\) follow the FT logic: \[\begin{align} X_v = Y_v &\quad \textrm{ if \gamma(v) = \mathtt{BE}}, & \quad \quad \quad \quad \\ X_v = \bigvee_{w \in {\it Inp}(v)} X_w &\quad \textrm{ if \gamma(v) = \mathtt{OR}},\\ X_v = \bigwedge_{w \in {\it Inp}(v)} X_w &\quad\textrm{ if \gamma(v) = \mathtt{AND}}. \end{align}\]
As basic events appear twice in \(M_T\), we could have taken \(\mathsf{U}^{\textrm{c}}=\varnothing\). However, by considering basic events as endogenous variables, each context in \(M_T\) corresponds to a status vector in \(T\). Further, we note that FT analysts are merely interested in causal reasoning about failure of the top event, i.e., \(X_{{\it Root}} = 1\).
Example 3 (CM from FT.). The CM associated to the lock failure FT in Fig. 4 is given by: \[\begin{align} \mathsf{U}^{\textrm{c}}&= \{Y_{\sf EF}, Y_{{\sf PF}}, Y_{{\sf OF}}\} & X_{\sf EF} &= Y_{\sf EF} & X_{{\sf AF}} &= X_{{\sf PF}} \land X_{{\sf OF}}\\ \mathsf{U}^{{\textrm{i}} }&= \{X_{\sf EF}, X_{{\sf PF}}, X_{{\sf OF}}, X_{{\sf AF}}, X_{\sf LF}\} & X_{{\sf OF}} &= Y_{{\sf OF}} & X_{\sf LF} &= X_{\sf EF} \lor X_{{\sf AF}} \\ && X_{{\sf PF}} &= Y_{{\sf PF}} \end{align}\]
This construction guarantees that, given a FT status vector \(\vec{u}\), each variable in the CM gets assigned the correct value, i.e., the value given by the structure function applied to \(\vec{u}\). In other words, the structure function is the unique solution to the CM equations.
Lemma 1. Let \(T\) be a FT and \(M_T\) be the CM associated to \(T\). Then for all FT nodes \(v\) and all context \(\vec{u}\) we have: \((M_T,\vec{u})\models X_v = {\Phi}_{T}(\vec{u},v).\)
The following result phrases the coherency of FTs in terms of CMs. Intuitively, it states that setting a variable \(X \leftarrow 0\) can only decrease the value of other variables, and setting \(X \leftarrow 1\) can only increase the value of other variables. Its proof is straightforward induction.
Theorem 1. Let \(T\) be a FT and let \(M_T\) be its associated CM. Then for any context \(\vec{u}\), and for any two variables \(X,Y \in \mathsf{U}^{{\textrm{i}} }\) we have:
\((M_T,\vec{u}) \models Y = 0\) implies \((M_T,\vec{u}) \models [X \leftarrow 0]Y = 0\);
\((M_T,\vec{u}) \models [X \leftarrow 1]Y = 0\) implies \((M_T,\vec{u}) \models Y = 0\);
\((M_T,\vec{u}) \models Y = 1\) implies \((M_T,\vec{u}) \models [X \leftarrow 1]Y = 1\);
\((M_T,\vec{u}) \models [X \leftarrow 0]Y = 1\) implies \((M_T,\vec{u}) \models Y = 1\).
Several notions of Halpern and Pearl’s actual causality (AC) have been defined over time. In what follows, we present the original AC-o definition from [9], followed by two refinements: the updated AC-u and the modified AC-m definitions. All three versions are included in Definition 2.2.1 of [20].
Each definition of actual causality consists of three conditions, typically referred to as \({\boldsymbol{AC1}}\), \({\boldsymbol{AC2}}\), and \({\boldsymbol{AC3}}\) that must hold for a conjunction of primitive events \(\vec{X} = \vec{x}\) to be an actual cause for the effect \(\varphi\) in a causal model \(M\) under the context \(\vec{u}\). Intuitively, \({\boldsymbol{AC1}}\) states that both the cause \(\vec{X} = \vec{x}\) and the effect \(\varphi\) hold for \(M\) in context \(\vec{u}\). Note that \({\boldsymbol{AC2}}\) uses a partition \((\vec{Z}, \vec{W})\) of the endogenous variables \(\mathsf{U}^{{\textrm{i}} }\). \({\boldsymbol{AC2}}(a^o)\) represents the counterfactual test under contingency \(\vec{W}\): if the cause were absent, the effect should also disappear, assuming the interventions in \(\vec{W}\) that modify \(M\). Contingencies are particularly useful when causes are redundant, as they allow testing whether the counterfactual still holds after disabling one potential cause. This isolates the causal contribution of each factor: \(\vec{X} = \vec{x}\) becomes pivotal under \(\vec{W}\). The variables in \(\vec{Z}\) can be viewed as constituting the causal path to \(\varphi\) [20]: intuitively, intervening on some variable in \(\vec{X}\) propagates changes through variables in \(\vec{Z}\), ultimately altering the value of \(\varphi\). Interventions in \(\vec{W}\) may indirectly modify the values of variables in \(\vec{Z}\). According to \({\boldsymbol{AC2}}(b^0)\), these changes must leave \(\varphi\) unaffected, even when certain variables in \(\vec{Z}\) are held at their original values. \({\boldsymbol{AC2}}(b^0)\) corresponds to a sufficiency condition. Finally, \({\boldsymbol{AC3}}\) expresses minimality.
Definition 7 (H&P Actual Causality: AC-o). A conjunction of primitive events \(\vec{X} = \vec{x}\) over a vector of internal variables \(\vec{X}\) is an actual cause* of \(\varphi\) in \(({M},\vec{u})\) if the following three conditions hold:*
\(({M},\vec{u})\models (\vec{X} = \vec{x})\) and \(({M},\vec{u})\models \varphi\).
There exists a partition \((\vec{Z}, \vec{W})\) of \(\mathsf{U}^{{\textrm{i}} }\) with \(\vec{X} \subseteq \vec{Z}\), and a setting \(\vec{w}\) of the variables in \(W\) such that both of the following conditions hold:
(\(a^o\)) There exists a setting \(\vec{x}'\) of the variables in \(\vec{X}\) such that
\(({M},\vec{u})\models[\vec{X} \leftarrow \vec{x}', \vec{W} \leftarrow \vec{w}]\neg \varphi\);
(\(b^o\)) If \(\vec{z}^*\) is such that \(({M}, \vec{u}) \models \vec{Z} = \vec{z}^*\), then for all subsets \(\vec{Z}'\) of \(\vec{Z} - \vec{X}\), we have
\(({M},\vec{u})\models[\vec{X}\leftarrow \vec{x}, \vec{W} \leftarrow \vec{w}, \vec{Z}'\leftarrow \vec{z}^*]\varphi\).
\(\vec{X}\) is minimal: no proper subset of \(\vec{X}\) satisfies conditions AC1 and AC2.
Without loss of generality, in our examples, the endogenous variables \((\in \mathsf{U}^{{\textrm{i}} })\) occurring in \(\varphi\) are excluded from \(Z\).
Example 4 (AC-o causes). Consider \(M^-_{\sf doorbell}\); a variation of \(M_{\sf doorbell}\), without the variable \({\sf AF}\), but encoding the same behavior of lock failure, defined as (see Fig. 5): \[\begin{align} \sf EF&= {\sf B_{EF}}; & {\sf PF}&= {\sf B_{PF}}; & {\sf OF}&= {\sf B_{OF}}; & \sf LF&= \sf EF\lor ({\sf PF}\land {\sf OF}). \label{eq:doorbellcm-} \end{align}\qquad{(1)}\] Assume the context \(\vec{u} = (1,1,0)\), i.e., it sets \({\sf B_{EF}}= 1\), \({\sf B_{PF}}= 1\) and \({\sf B_{OF}}= 0\). We will show that \({\sf PF}= 1\) (public’s alert failure) is an actual cause of the effect \(\varphi\) defined as \(\sf LF= 1\) (lock failure) in \((M^-_{\sf doorbell}, \vec{u})\).
\({\boldsymbol{AC1}}\) requires that both the cause \(\vec{X} = \vec{x}\) and the effect \(\varphi\) hold in the actual world \(\vec{u}\). \({\boldsymbol{AC1}}\) is satisfied, as: \[\begin{align} \label{eq:ACO-AC1} (M^-_{\sf doorbell}, \vec{u}) &\models {\sf PF}= 1,\\ (M^-_{\sf doorbell}, \vec{u}) &\models \sf LF= 1. \nonumber \end{align}\tag{1}\]
\({\boldsymbol{AC2}}(a^o)\) corresponds to a necessity condition. Namely, setting the causal variables \(\vec{X}\) to different values \(\vec{x}'\) changes the satisfiability of \(\varphi\) from true to false. \({\boldsymbol{AC2}}(a^o)\) is sometimes referred to as the counterfactual test and \(W\) as the contingent variables.
In \((M^-_{\sf doorbell}, \vec{u})\), consider \(\vec{W} = \{\sf EF, {\sf OF}\}\) and the setting \(\{\sf EF\leftarrow 0\) and \({\sf OF}\leftarrow 1\}\) (i.e., \(\vec{w} = (0,1)\)). In this setting, the value of \({\sf PF}\) is pivotal: Let \(x'\) be the setting \({\sf PF}\leftarrow 0\) (i.e., \(\vec{x}' = (0)\)). Then \({{\boldsymbol{AC2}}(a^o)}\) and \({{\boldsymbol{AC2}}(b^o)}\) hold (note \(Z' = \varnothing\)): \[\label{eq:ACO-AC2a} (M^-_{\sf doorbell}, \vec{u}) \models [{\sf PF}\leftarrow 0, \sf EF\leftarrow 0, {\sf OF}\leftarrow 1] (\sf LF= 0)\tag{2}\] While \[\label{eq:ACO-AC2b} (M^-_{\sf doorbell}, \vec{u}) \models [{\sf PF}\leftarrow 1, \sf EF\leftarrow 0, {\sf OF}\leftarrow 1](\sf LF= 1)\tag{3}\]
\({\boldsymbol{AC2}}(b^o)\) corresponds to a sufficiency condition. It guarantees that it is \(\vec{X} \leftarrow \vec{x}\) (acting through the directed paths involving the variables in \(\vec{Z}\)) that is genuinely responsible for \(\varphi\).
\({\boldsymbol{AC3}}\) is a minimality condition that ensures the identified set of causal variables \(\vec{X}\) is the smallest set witnessing \(\varphi\) in \((M^-_{\sf doorbell}, \vec{u})\). \({\boldsymbol{AC3}}\) trivially holds in our example, as the singleton set \(\{{\sf PF}\}\) satisfies AC1-AC2. Hence, also based on (1 ), (2 ) and (3 ), it follows that \({\sf PF}= 1\) is an actual cause of \(\sf LF= 1\).
Now consider the CM \(M_{{\sf doorbell}}\) from Example 1, which includes the additional variable \({\sf AF}= {\sf PF}\land {\sf OF}\) (see Fig. 3). \(M_{{\sf doorbell}}\) and \(M^-_{{\sf doorbell}}\) are logically equivalent. However, in \(M_{{\sf doorbell}}\), \({\sf PF}= 1\) is not an actual cause of \(\sf LF= 1\) in the given context \(\vec{u} = (1,1,0)\). The reason is that changing \({\sf PF}\) from 0 to 1 in setting \(\vec{W}\) is no longer pivotal. There are two cases to consider: If \({{\sf AF}} \in \vec{W}\), then \(\sf LF\) will take the value of \({\sf AF}\), irrespective of \({\sf PF}\). (In fact, \({\sf AF}=0\) is an actual cause for \(\sf LF= 0\)). Otherwise, if \({\sf AF}\in \vec{Z}\), with \({\sf AF}= 0\) in the actual world, \({\boldsymbol{AC2}}(b)^0\) again fails. The choice of variables (what is treated as primitive and what is derived) crucially affects what qualifies as actual cause.
Interestingly, actual causes under AC-o are always singletons.
Theorem 2. **[20]* If \(\vec{X} = \vec{x}\) is an actual cause of \(\varphi\) in \((M,\vec{u})\) according to Definition 7), then \(|\vec{X}| = 1\).*
In the CM \(M^-_{\sf doorbell}\) of Example 4, \({\sf PF}\) is identified as a cause of \(\sf LF\). However, this may be regarded as a partial form of causality, since it results in a lock failure (\(\sf LF= 1\)) only in conjunction with an operator failure (\({\sf OF}= 1\)) that did not occur. To better capture such cases, a so-called updated actual causality AC-u was proposed in [20]. AC-u redefines \({\boldsymbol{AC2}}(b^o)\) in Definition 7 to:
\({\boldsymbol{AC2}}(b^u)\) For all subsets \(\vec{W}' \subseteq \vec{W}\) and \(\vec{Z}' \subseteq \vec{Z}-\vec{X}\), we have
\[\label{eq:ACU}
({M}, \vec{u}) \models [ \vec{X} \leftarrow \vec{x}, \vec{W}' \leftarrow \vec{w}, \vec{Z}' \leftarrow \vec{z}^* ]\varphi\tag{4}\] where \(\vec{z}^*\) denotes the actual values of the variables in \(\vec{Z}'\).
Example 5 (AC-u Causes). According to AC-u, \({\sf PF}= 1\) is no longer a cause of \(\sf LF= 1\) in \(M^-_{\sf doorbell}\) (?? ). Recall that for the counterfactual test to hold, we need to consider \({\sf EF} \in \vec{W}\). Furthermore, the original value of \({\sf OF}\) is \(0\). This leads to the violation of (4 ) when taking \(\vec{Z}' = \varnothing\) and \(\vec{W}' = \{\sf EF\}\), since \((M^-_{\sf doorbell},\vec{u}) \models [{\sf PF}\leftarrow 1, \sf EF\leftarrow 0](\sf LF= 0)\).
Unlike AC-o, AC-u allows for multiple element causes [20]. It also subsumes AC-o:
Theorem 3. [20]* If \(X = x\) is part of an actual cause of \(\varphi\) in \(({M},\vec{u})\) according to the updated definition AC-u, then \(X = x\) is an actual cause according to the original definition AC-o**.*
To make the definition of causality more straightforward, a simplified form of AC2 was proposed [20]. The
corresponding notion of causality is referred to as the modified actual causality AC-m. The core idea is to restrict attention to variable assignments that correspond to the actual situation we are analysing. Rather than
considering hypothetical values for the contingency variables in \({\vec{W}}\), the modified definition only looks at the specific values these variables take in the considered context \(\vec{u}\). An important consequence of this simplification is that it makes \({\boldsymbol{AC2}}(b^o)\) and \({{\boldsymbol{AC2}}}(b^u)\) subsumed by the
modified AC2\(^m\) below, whenever \(\vec{W}\) is held at its actual values. As a result, there is no longer a need for these additional conditions, since the only
contingencies we need to consider are those that align with the actual context. Hence, in the modified definition AC-m, condition AC2 simply becomes:
AC2\(^m\) There is a set \(\vec{W} \subseteq \mathsf{U}^{{\textrm{i}} }\) and a setting \(\vec{x}'\) of the variables in \(\vec{X}\) such that \[\label{eq:ACM}
({M}, \vec{u}) \models [\vec{X} \leftarrow \vec{x}', \, \vec{W} \leftarrow \vec{w}^*] \lnot \varphi\tag{5}\] with \(\vec{w}^*\) the values of the variables in \(\vec{W}\)
in the actual context.
Note that AC-m subsumes both AC-o and AC-u:
Theorem 4. **[20]* The following hold:*
If \(X = x\) is part of an actual cause of \(\varphi\) in \(({M},\vec{u})\) according to the modified definition AC-m, then \(X = x\) is an actual cause according to the original definition AC-o.
If \(X = x\) is part of an actual cause of \(\varphi\) in \(({M},\vec{u})\) according to the modified definition AC-m, then \(X = x\) is an actual cause according to the updated definition AC-u.
The complexity of computing ACs for each of the definitions AC-o, AC-u and AC-m is analysed in [20], [21]. The results show that computing AC is hard; e.g., AC-o is NP-complete in binary models (where all variables are binary). In binary models, SAT solving has been used to compute AC-m [22].
Our main results are the classifications of AC-o, AC-u, and AC-m for FTs: Given a FT \(T\) and a context \(\vec{u}\) for its causal model \(M_T\) (so \(\vec{u}\) is a status vector), we give necessary and sufficient conditions for any \(\vec{X} = \vec{x}\) to be an actual cause for \(X_{{\it Root}} = 1\). We only consider \(X_{{\it Root}} = 1\) because our results transfer to any variable \(X_v = 1\) by considering the sub-FT rooted at \(v\); and we are more interested in what causes failure than in what causes non-failure. The results for \(X_{{\it Root}} = 0\) can be obtained by applying our results to the dual FT [23].
The classification of AC-o for FTs is as follows:
Theorem 5 (Classification of AC-o for FTs). Let \(T\) be a FT, let \(M_T\) be its causal model, and let \(\vec{u}\) be a context. Let \(\vec{X}\) be a set of variables in \(M_T\), and let \(\vec{x}\) be a possible value for \(\vec{X}\). Then \(\vec{X} = \vec{x}\) satisfies AC-o for \(X_{{\it Root}}=1\) iff:
There exists a node \(v \in V\) such that \(\vec{X} = \{X_v\}\), and \(\vec{x} = 1\);
There is a path \(v = v_0,\ldots,v_n = {\it Root}\) in the directed graph \((V,E)\) such that:
\((M_T,\vec{u}) \models X_{v_i} = 1\) for all \(0 \leq i \leq n\),
For all \(i,j > 0\), if \({\it Inp}(v_i) \cap {\it Inp}(v_j) \neq \varnothing\), then \(\gamma(v_i) = \gamma(v_j)\).
Condition 1 requires that causes are singletons (by Theorem 2), and that only events \(X_v = 1\) can cause \(X_{{\it Root}} = 1\). The latter is a consequence of Theorem 1, by the lack of negation in FTs: an event \(X_v = 0\) will never cause a later variable to be equal to 1.
Example 6. Consider again the lock failure FT, with context \(\vec{u} = Y_{\mathsf{EF}}Y_{\mathsf{PF}}Y_{\mathsf{OF}} = (1,1,0)\). We picture this FT again as \(T_1\) in Fig. 6, with the resulting variable values inscribed in each gate. The unique path from \(\mathsf{EF}\) to the root \(\mathsf{LF}\) satisfies condition 2 from Theorem 5: all values are 1, and condition 2(b) holds because there are no shared inputs. It follows that \(X_{\mathsf{EF}} = 1\) is an actual cause for \(X_{\mathsf{LF}} = 1\) under AC-o. By contrast, \(X_{\mathsf{PF}} = 1\) does not satisfy AC-o for \(X_{\mathsf{LF}} = 1\), because the unique path \(\mathsf{PF} \rightarrow \mathsf{LF}\) contains a \(0\). FT \(T_2\) has the same structure function as \(T_1\); here, however, the unique path \(\mathsf{PF} \rightarrow \mathsf{LF}\) contains only 1s, so here \(X_{\mathsf{PF}} = 1\) does satisfy AC-o for \(X_{\mathsf{LF}} = 1\).
Example 6 points to an interesting property of causality in FTs. The two FTs of Fig. 6 have identical structure functions, hence identical minimal cut sets; thus in FT analysis they would be considered equivalent. However, under the context \(\vec{u} = (1,1,0)\) we see that \(X_{\mathsf{EF}}=1\) is a cause of system failure in one FT, but not in the other: Equivalent FTs may behave differently as causal models. From the causality perspective, this is a feature, not a bug: Endogenous variables in CMs are not simply functions of their inputs, but represent real-world events that can be interacted with independently of their inputs. For FTs, this may capture a form of the epistemic uncertainty that we might have modelled our system incorrectly: the possibility of an intervention setting an intermediate gate represents the possibility that an intermediate gate might fail despite its children not failing, because in modelling our system we missed a failure cause.
Theorem 5.2b is there to exclude some pathological cases.This condition does not hold, for excample, in \(T_1\) of Fig. 7: the path \(e_2 \rightarrow {\it Root}\) has two inputs that share the input \(e_1\), but have different labels. Therefore, \(X_{e_2} =1\) is not an actual cause (for AC-o) for \(X_{{\it Root}} = 1\). This is understood from the structure function \(X_{e_1} \vee (X_{e_1} \wedge X_{e_2}) \equiv X_{e_1}\). The BE \(e_2\) is irrelevant as it does not appear in the structure function; this is reflected by the fact that it cannot be an actual cause. Indeed, \(e_2\) does not satisfy Theorem 5.
Precisely because such a construction makes events irrelevant, one rarely sees paths in which AND-gates and OR-gates share children: Of the 54 real-world FTs in the benchmark of [24]–[26], only 10 have any such paths. Thus Theorem 5.2b is mathematically necessary, but plays a limited role in practice: Having a path \(v \rightarrow {\it Root}\) of only 1-valued nodes is often enough to imply AC-o. Note that it is also possible to construct FTs in which events that are irrelevant from the FT perspective can still be actual causes, such as in \(T_2\) of Fig. 7. The key here is again that changing the graph structure impacts how causality behaves, even if it leaves the structure function unchanged.
The classification of AC-u for FTs is similar to that of AC-o. As before, we only consider causes of \(X_{{\it Root}} = 1\). Unlike in general causal models [20], the result below states that AC-u in FTs only admits singleton causes.
Theorem 6 (Classication of AC-u for FTs). Let \(T\) be a FT, let \(M_T\) be its causal model, and let \(\vec{u}\) be a context. Let \(\vec{X}\) be a set of variables in \(M_T\), and let \(\vec{x}\) be a possible value for \(\vec{X}\). Then \(\vec{X} = \vec{x}\) satisfies AC-u for \(X_{{\it Root}}=1\) if and only if the following holds:
There exists a node \(v \in V\) such that \(\vec{X} = \{X_v\}\), and \(\vec{x} = 1\);
There is a path \(v = v_0,\ldots,v_n = {\it Root}\) in the directed graph \((V,E)\) such that:
\((M_T,\vec{u}) \models X_{v_i} = 1\) for all \(0 \leq i \leq n\),
For all \(i,j > 0\), if \({\it Inp}(v_i) \cap {\it Inp}(v_j) \neq \varnothing\), then \(\gamma(v_i) = \gamma(v_j)\).
\((M_T,\vec{u}) \models [\vec{D} \leftarrow \vec{0}]X_{{\it Root}}=1\), where \[\vec{D} = \bigcup_{i>0\colon \gamma(v_i) = \mathtt{OR}}({\it Inp}(v_i)\setminus\{v_{i-1}\}).\]
Unlike in general causal models [20], Theorem 6 states that AC-u in FTs only admits singleton causes. Once again, the culprit is the coherency of Theorem 1: the difference between AC-o and AC-u is that eq. 4 must hold for all subsets \(\vec{W}' \subseteq \vec{W}\), rather than just \(\vec{W}\) itself. However, due to coherency, in FTs it turns out that it just has to hold for the worst-case \(\vec{W}'\) consisting only of those variables that have value \(0\) in \(\vec{w}\). The fact that eq. 4 only has to hold for one \(\vec{W}'\) aligns the definition of AC-u closer to AC-o, and this turns out to be sufficient for the proof of Theorem 2 to also hold for AC-u in FTs. Other than that, the difference between AC-o and AC-u for FTs lies in condition 2c.
Example 7. Consider the FT of Fig. 8 with context vector \(\vec{u} = Y_{\mathsf{EF}}Y_{\mathsf{PF}}Y_{\mathsf{OF}} = (1,1,0)\). Then \(X_{\mathsf{PF}} = 1\) satisfies Theorem 5, so \(X_{\mathsf{PF}} = 1\) is a cause of \(X_{\mathsf{LF}} = 1\) under AC-o. However, the path \(\mathsf{PF} \rightarrow {\it Root}\) does not satisfy Theorem 6.2c: if we set \(X_{\mathsf{EF}} = 0\) by intervention, \(X_{\mathsf{LF}}\) becomes \(0\). It follows that \(X_{\mathsf{PF}} = 1\) is not* an actual cause of \(X_{\mathsf{LF}} = 1\) under AC-u.*
Example 7 illustrates how AC-u brings causality in FTs closer to the structure function: Under AC-u, this FT now behaves identically to the FT of Fig. 4 to which it is equivalent. However, it is still possible for two equivalent FTs to behave differently under AC-u: in \(T_1\) of Fig. 7 with \(\vec{u} = (1,1)\), the event \(X_{e_2} = 1\) is not a cause of \(X_{{\it Root}} = 1\), but it is a cause in the equivalent FT \(T_2\).
For AC-m, we get the following classification. Interestingly, it looks completely different to those of AC-o and AC-u. The most striking difference is that it does not refer to the graphical structure of the FT; instead AC-m can be characterised purely in terms of the structure function.
We only consider causes that consist of BEs. This is for notational convenience; one can always consider non-BE causes by changing these nodes into BEs and removing their inputs.
Theorem 7 (Classication of AC-m for FTs). Let \(T\) be a FT, let \(M_T\) be its causal model, and let \(\vec{u}\) be a context. Let \(\vec{X}\) be a set of variables in \(M_T\), and let \(\vec{x}\) be a possible value for \(\vec{X}\). Suppose the variables in \(\vec{X}\) represent a set \(C \subseteq V\) such that \(C \subseteq \operatorname{BE}_{T}\). Then \(\vec{X} = \vec{x}\) satisfies AC-m for \(X_{{\it Root}} = 1\) if and only if the following are satisfied:
\((M_T,\vec{u}) \models X_{{\it Root}}= 1\);
\(\vec{x} = \vec{1}\), and \(u_v = 1\) for all \(v \in C\);
If \(D = \{v \in \operatorname{BE}_{T} \mid u_v = 1\}\), then \({\Phi}_{T}(D \setminus C,{\it Root}) = 0\);
\(C\) is minimal w.r.t. property 3.
Example 8. Consider again the “fish doorbell” FT in Fig. 4, with \(\vec{u} = Y_{\mathsf{EF}}Y_{\mathsf{PF}}Y_{\mathsf{OF}} = (1,1,1)\); this corresponds to the set of BEs \(D = \{\mathsf{EF},\mathsf{PF},\mathsf{OF}\}\). Consider \(\vec{X} = (Y_{\mathsf{PF}},Y_{\mathsf{OF}})\) and \(\vec{x} = (1,1)\); thus \(\vec{X}\) corresponds to the set of BEs \(C = \{\mathsf{PF},\mathsf{OF}\}\). Clearly, \(\vec{X} = \vec{x}\) satisfies conditions 1,2 of Theorem 7. Furthermore, \({\Phi}_{T}(D\setminus C,{\it Root}) = {\Phi}_{T}(\{\mathsf{EF}\},{\it Root}) = 0\), so 3 is satisfied. Finally, one can check that taking \(C = \{\mathsf{PF}\}\) or \(C = \{\mathsf{OF}\}\) does not satisfy 3, so 4 is satisfied as well. Hence \(\vec{X} = \vec{x}\) is an actual cause of \(X_{\mathsf{AF}} = 1\) under AC-m.
The fact that AC-m so closely reflects the structure function also allows us to classify MCSs in terms of AC-m:
Corollary 1. Let \(T\) be an FT and lets \(M_T\) be its causal model. A subset \(D \subseteq \operatorname{BE}_{T}\) is an MCS iff the following hold:
\({\Phi}_{T}(D,{\it Root}) = 1\);
The only variable sets in the causal model \(M_T\), under context \(\vec{u}^D\), that satisfy AC-m for \(X_{{\it Root}} = 1\) are singletons.
It may be striking that our classification of actual causality in FTs of Theorems 5, 6 & 7 has nothing to do with MCSs, as these are understood to be potential causes of system failures. In this section, we show that being part of an MCS is a necessary, but generally not sufficient, condition for being an actual cause.
First, we consider FTs without a given context \(\vec{u}\). In this setting, the pertinent question is whether it is possible for a BE to ever be an actual cause. It turns out that being a relevant BE is a sufficient condition; for AC-m it is also necessary. Recall that a BE \(v\) is relevant if it is part of some MCS, or equivalently, if the structure function is non-constant in \(X_v\).
Theorem 8. Let \(T\) be a FT, and let \(v\) be a basic event.
If there is an MCS \(D\) such that \(v \in D\), then \(\vec{u}^D\) is a context under which \(X_v = 1\) satisfies AC-o, AC-u, and AC-m for \(X_{{\it Root}} = 1\).
If there exists a context under which \(X_v = 1\) satisfies AC-m for \(X_{{\it Root}} = 1\), then \(v\) is relevant.
Theorem 8.2 does not hold for AC-o and AC-u: In \(T_2\) of Fig. 7 \(e_2\) is not relevant, but it satisfies AC-o and AC-u for \(\vec{u} = (1,1)\).
Now we consider FTs with a given context \(\vec{u} = \vec{u}^D\). The question is now to what extent MCS \(C\) that have happened, i.e. that satisfy \(C \subseteq D\), give rise to actual causes. For AC-m, this does not have a neat description: in fact, Theorem 7.3 states that AC-m is best expressed in terms of maximal sets of events that still result in nonfailure, rather than minimal sets of events that result in failure. For AC-o and AC-u, however, we find that for every MCS \(C \subseteq D\), every \(v \in C\) is an actual cause of top event failure. This sufficient condition is not necessary: In \(T_2\) of Fig. 6, \(D = \{\mathsf{EF},\mathsf{OF}\}\), and \(\mathsf{OF}\) is not part of any MCS present in \(C\); however, \(X_{\mathsf{OF}} = 1\) still satisfies AC-o for \(X_{{\it Root}} = 1\). To state when the condition is necessary, we recap the definition of FTs in disjunctive normal form (DNF). A DNF FT consists of a top OR-gate, a second layer of AND-gates, and a third layer of BEs; the ANDs represent its MCSs.
Definition 8. An FT \(T\) is of disjunctive normal form (DNF)* if:*
\(\gamma({\it Root}_T) = \mathtt{OR}\)
\(\gamma(v) = \mathtt{AND}\) for \(v \in {\it Inp}({\it Root}_T)\)
\(\gamma(w) = \mathtt{BE}\) for all \(w \in \bigcup_{v \in {\it Inp}({\it Root}_T)} {\it Inp}(v)\)
For each \(v \neq v' \in {\it Inp}({\it Root}_T)\), one has \({\it Inp}(v) \not \subseteq {\it Inp}(v')\).
We then get the following result:
Theorem 9. Let \(T\) be a FT, and let \(\vec{u}\) be a context of \(M_T\). Let \(v\) be a BE. Consider the following statements:
\(\{v \in \operatorname{BE}_{T} \mid u_v = 1\}\) contains an MCS containing \(v\);
\(X_v = 1\) satisfies AC-u for \(X_{{\it Root}} = 1\);
\(X_v = 1\) satisfies AC-o for \(X_{{\it Root}} = 1\).
Then 1 implies 2, and 2 implies 3. If \(T\) is tree-shaped or if \(T\) is of disjunctive normal form, then all three are equivalent.
Determining whether something is a cause in binary models in general is NP-complete for AC-o/AC-m [20] and so-called \(\textrm{D}_2^{\textrm{P}}\)-complete (worse than NPC) for AC-u [21]. For FTs, we show that this is less complex for AC-u and AC-m:
Given a FT \(T\), a status vector \(\vec{u}\), an event \(w\), and set of events \(\vec{X}\), determine if \(\vec{X} = \vec{1}\) is actual cause of \(X_w = 1\) under AC-o/AC-u/AC-m.
Theorem 10. Problem [prob:dec] NP-complete for AC-o and AC-u, and solvable in polynomial time for AC-m.
A full computational study, where these complexity results are accompanied by algorithms that scale well in practice, is left for future work.
In previous sections we discussed how actual causes in FTs are characterized mathematically. In this section, we discuss how these characterizations can be used algorithmically: we describe algorithms for finding actual causes under AC-o, AC-u, and AC-m.
Using Theorem 5, we can construct a naive algorithm that answer whether \(X_v =1\) satisfies AC-o for \(X_{{\it Root}} = 1\), by first checking whether \((M_T,\vec{u}) \models (X_v = 1) \wedge (X_{{\it Root}} = 1)\), and then considering all paths \(v \rightarrow {\it Root}\) and checking whether one of them satisfies properties (2a) and (2b). The fundamental issue with this approach is that the number of paths between two vertices in a DAG with \(n\) vertices is \(\mathcal{O}(2^n)\), hence this approach scales badly for large \(T\). Theorem 10 shows that deciding AC-o in FTs is NP-complete, hence worst-case exponential behaviour is likely to be unavoidable; nevertheless, we can improve on this naive approach.
More precisely, one may note that the impediment for a path to show AC-o is the presence of an AND-gate and an OR-gate on it with a shared child. As we discuss in Section 6.1, this typically leads to irrelevant BEs in the FT, and for this reason such pairs of gates rarely occur in real-world FTs. Therefore, it makes sense to find the set of such forbidden pairs, i.e., the set \[\mathcal{F}(T) = \left\{(h,l) \in V^2 \;\middle|\;\substack{\exists \text{ path } l \rightarrow h \textrm{ and } \gamma(l) \neq \gamma(h)\\ \textrm{and } {\it Inp}(h) \cap {\it Inp}(l) \neq \varnothing}\right\}.\] Note that each forbidden pair consists of a ‘high’ element \(h\) closer to \({\it Root}\), and a ‘low’ element \(l\) (see Fig. 10).
The set \(\mathcal{F}(T)\) can be used as follows. If one were just interested in nodes \(v\) that have a path \(v \rightarrow {\it Root}\) containing only 1s, a simple algorithm would suffice: starting from a set \(Q = \{{\it Root}\}\) of vertices from which \({\it Root}\) can be reached, we keep adding to \(Q\) vertices that evaluate to 1 under \(\vec{u}\) and that have an edge into \(Q\), until no more vertices can be added. This finds all relevant vertices in linear time.
For our problem, we only want such vertices whose paths to \({\it Root}\) do not contain two elements of a forbidden pair. That means that instead of storing binary information at each vertex (part of \(Q\) yes/no), we must store which ‘high’ elements we have encountered so far, to signal that we cannot add the corresponding ‘low’ elements. Since every node can have multiple paths to the root containing different high elements, we need to store a set of sets of high elements at each vertex.
This idea is the basis for Algorithm 9, which finds all vertices \(v\) such that \(X_v = 1\) satisfies AC-o for \(X_{{\it Root}} = 1\). Since we only care about nodes that evaluate to 1, we formalize this as the positive part of \(T\) (line 1 of Algorithm 9):
Definition 9. Let \(T\) be a FT, and let \(\vec{u}\) a status vector of \(T\). Then the positive part of \(T\) under \(\vec{u}\)* is the sub-FT \(P_{T,\vec{u}}\) of \(T\) of all \(v\) such that \({\Phi}_{T}(\vec{u},v) = 1\).*
Of course, if \(X_{{\it Root}} = 0\), then \(X_{{\it Root}} = 1\) cannot have any cause as it is not true (line 3). Otherwise, we will define, for each node \(v\), a set of sets of high elements \(\mathcal{S}(v)\), where \(H \in \mathcal{S}(v)\) means that there is a path \(v \rightarrow {\it Root}\) which contains precisely the high elements in \(H\), and none of their corresponding low elements. Thus, we initialize \(\mathcal{S}({\it Root})\) as either \(\{\{{\it Root}\}\}\) or \(\{\varnothing\}\), depending on whether \({\it Root}\) is itself a high element in a forbidden pair or not (lines 5-9). Each other \(\mathcal{S}(v)\) is initialized as \(\varnothing\) (line 11), since we have not found a path to \({\it Root}\) yet.
Next, we address nodes one by one, starting at \({\it Root}\) and working our way down (line 10). At \(v\), we look at all \(H\) in all \(\mathcal{S}(w)\). If \(v\) is not the low element of any high element in \(H\) (line 14), then we add either \(H\) or \(H \cup \{v\}\) to \(\mathcal{S}(v)\), depending on whether \(v\) is a high element itself or not (lines 15-19).
At the end, we return the set of inputs of all vertices \(w\) with \(\mathcal{S}(w) \neq \varnothing\). This is because if \(v \in {\it Inp}(w)\) with \(\mathcal{S}(v) = \varnothing\) and \(\mathcal{S}(w) \neq \varnothing\), this means that \(v\) is a low element corresponding to a high element in every set in \(\mathcal{S}(w)\). However, by Theorem 5, the first element of a path is allowed to be part of a forbidden pair.
Essentially, this algorithm visits every edge once, so for fixed \(k = |\mathcal{F}(P_{T,\vec{u}})|\) the complexity is \(\mathcal{O}(|E|)\) (see Remark [rmk:ptu] for why we use \(\mathcal{F}(P_{T,\vec{u}})\) rather than \(\mathcal{F}(T)\) here and in Algorithm 9). The information transmitted over each edge is an element of \(\mathcal{S}(w) \in \mathcal{P}(\mathcal{P}(\mathcal{F}(P_{T,\vec{u}})))\), which has size \(\leq 2^k\) (\(\mathcal{P}\) stands for powerset).
To find all forbidden pairs, we have to look at each of the \(\mathcal{O}(|E|^2)\) pair of edges to see whether they have the same source and their targets have different gate types, and to see whether there is a path between one of the targets and the other (\(\mathcal{O}(|V|)\) steps per pair). As a result, we get the following theorem:
Theorem 11. Let \(k = |\mathcal{F}(P_{T,\vec{u}})|\). Algorithm 9 finds all actual causes of \(X_{{\it Root}} = 1\) with time complexity \(\mathcal{O}(|E|^2|V| + 2^k|E|)\).
In Algorithm 9, we could use \(\mathcal{F}(T)\) rather than \(\mathcal{F}(P_{T,\vec{u}})\), provided that we add some checks to see whether nodes evaluate to 1. Using \(\mathcal{F}(P_{T,\vec{u}})\) works as well: The only relevant forbidden pairs (i.e., those that could potentially be part of a path proving AC-o) are of the form \((h,l)\) with both \(h\) and \(l\) evaluating to 1. Since one of these is an AND-gate, this means that their shared child must also evaluate to 1; thus \((h,l) \in \mathcal{F}(P_{T,\vec{u}})\). In other words, it is enough to just consider the forbidden pair of \(P_{T,\vec{u}}\) in Algorithm 9; we chose to use this to not clutter the algorithm with checks for evaluation to 1. With regards to complexity, we have \[|\mathcal{F}(T)| = |\mathcal{F}(P_{T,\vec{1}})| = \max_{\vec{u}} |\mathcal{F}(P_{T,\vec{u}})|,\] so using \(P_{T,\vec{u}}\) could lead to better performance if \(\vec{u}\) has fewer elements that evaluate to 1.
Example 9. We consider the FT of Fig. 10, and apply Algorithm 9. First, only \(c,e\) evaluate to 0, so \(P_{T,\vec{u}} = T-\{c,e\}\) and we no longer consider these nodes. Removing these BEs does not change the set of forbidden pairs, so \(\mathcal{F}(P_{T,\vec{u}}) = \{(i,g),(j,h)\}\). Next, we compute \(\mathcal{S}(v)\) top-down, for each \(v\):
Since \({\it Root}= k\) is not in a forbidden pair: \(\mathcal{S}(k) = \{\varnothing\}\).
At \(i\), we only consider \(H = \varnothing\) in line 13. This does not contain any pairs of which \(i\) is the low element (line 14). However, \(i\) is itself a high element (line 15), so we get \(\mathcal{S}(i) = \{\{i\}\}\).
At \(g\), we only consider \(H = \{i\}\). Since \((i,g) \in \mathcal{F}(P_{T,\vec{u}})\), we do not add this \(H\) to \(\mathcal{S}(g)\), and \(\mathcal{S}(g) = \varnothing\).
At \(a\), there are no \(H\) to consider, so \(\mathcal{S}(a) = \varnothing\).
Analogously we get \(\mathcal{S}(j) = \{\{j\}\}\) and \(\mathcal{S}(h) = \mathcal{S}(d) = \varnothing\).
At \(f\), we consider \(H = \{i\}\) and \(H = \{j\}\). The node \(f\) is not a low element corresponding to these high elements, and \(f\) is not a high element itself, so \(\mathcal{S}(f) = \{\{i\},\{j\}\}\). We also get \(\mathcal{S}(b) = \{\{i\},\{j\}\}\).
Finally, the actual causes are \(k\) and inputs of nodes with nonzero \(\mathcal{S}\): \(i,j,g,h,f,b\).
Unfortunately, an approach such as Algorithm 9 appears not to work: by Theorem 6, we also need to be able to set the children of all OR-gates on the path to 0 without affecting \({\it Root}\). Thus, at every node we cannot just store a set of sets of high elements; instead, we need a set of sets of [high elements and OR-gates]. Thus the stored information is exponential in \(|V|\). At that rate, one might as well just check all paths, of which there are also \(\mathcal{O}(2^{|V|})\) many. Including some polynomial factors to account for the checks that need to be done at each path, this leads to the following, somewhat unsatisfying, conclusion:
Theorem 12. There exists an algorithm that finds all causes of \(X_{{\it Root}} = 1\) under AC-u in time complexity \(\mathcal{O}(2^{|V|}|V|^2|E|^2)\).
Finding a more efficient algorithm to compute AC-u, that circumvents the need to enumerate all paths, is left for future work.
As in Section 6.3, we only look at causes consisting of basic events, mostly for notational convenience. Theorem 10 was concerned with checking whether a given set of variables is a cause; now our task is to find all actual causes. this brings its own complications, since we are now looking for sets of events rather than just single events. At the same time, the fact that the problem is now purely about Boolean functions, rather than the graph structure, allows us to make use of existing methods for fault trees. In order to explain this, we first introduce the notion of minimal path sets, which are minimal sets of basic events whose nonfailure ensures continued system functioning:
Definition 10. Let \(T\) be a FT. A path set* is a set of basic events \(C \subseteq \operatorname{BE}_{T}\) such that \({\Phi}_{T}(\operatorname{BE}_{T}\setminus C,{\it Root}) = 0\). A minimal path set (MPS) furthermore satisfies \({\Phi}_{T}(\operatorname{BE}_{T}\setminus C,{\it Root}) = 1\) for all \(C' \subset C\).*
MPS is the dual notion of MCS: the MPSs of \(T\) are precisely the MCSs of the dual FT \(\check{T}\) obtained by exchanging all AND-gates into OR-gates and vice versa (see Fig. 11). With this terminology and the notion of the positive part \(P_{T,\vec{u}}\), the following follows directly from Theorem 7:
Lemma 2. Let \(T\) be a FT, and let \(\vec{u}\) be a status vector of \(T\). Let \(\vec{X}\) be a set of variables in \(M_T\), corresponding to a set of BEs \(C \subseteq \operatorname{BE}_{T}\), and let \(\vec{x}\) be a possible value for \(\vec{X}\). Then \(\vec{X} = \vec{x}\) satisfies AC-m for \(X_{{\it Root}} = 1\) if and only if the following are satisfied:
\((M_T,\vec{u}) \models X_{{\it Root}}= 1\);
\(\vec{x} = \vec{1}\), and \(u_v = 1\) for all \(v \in C\);
\(C\) is a minimal path set in \(P_{T,\vec{u}}\).
Thus, finding all actual causes of \(X_{{\it Root}} = 1\) comes down to finding all MPS of \(P_{T,\vec{u}}\), which in turn comes down on finding all MCSs of \(\check{P}_{T,\vec{u}}\). Finding all MCSs is a core problem in FT analysis; an overview of existing approaches is given in [3]. These are typically worst-case exponential in the size of the FT, and differ in how well they perform on ‘typical’ FTs.
Theorem 13. There exists an algorithm that finds all actual causes consisting of BEs of \(X_{{\it Root}} = 1\) with time complexity \(\mathcal{O}(2^{|\operatorname{BE}_{T}|}|E|)\).
Example 10. Consider the FT \(T\) from Fig. 11, which is \(T_2\) of Fig. 6, with the context \(\vec{u} = (1,0,1)\). Since \(X_{\mathsf{LF}} = 1\), we can look for causes for this event. We get its positive part \(P_{T,\vec{u}}\) by removing its 0-valued nodes, which is just \(\mathsf{EF}\). To find the minimal path sets of this FT, we consider its dual \(\hat{P}_{T,\vec{u}}\). This has structure function \(X_{\mathsf{PF}} \vee X_{\mathsf{OF}}\), so its MCSs are \(\{\mathsf{PF}\}\) and \(\{\mathsf{OF}\}\). These are then also the MPSs of \(P_{T,\vec{u}}\). We conclude that under this context, \(X_{\mathsf{PF}} = 1\) and \(X_{\mathsf{OF}} = 1\) are the actual causes under AC-m of \(X_{\mathsf{LF}} = 1\).
Causal reasoning has gained significant traction in recent years, particularly in fields such as artificial intelligence, science, and engineering. Many approaches build on counterfactual notions of causality inspired by Lewis [27]. As in [27], determining whether \(A\) caused \(B\), involves evaluating a hypothetical scenario in which \(A\) did not occur and observing whether \(B\) would still take place. However, this counterfactual approach is often too weak to capture causality in robust systems where multiple failures are needed to cause system failure.
To address this issue, Halpern and Pearl introduced a more nuanced framework [9] based on structural models and Boolean equations. These, along with a set of formal conditions (commonly referred to as the AC conditions), characterise a cause of an outcome. This AC definition was later refined to account for richer causal scenarios [20]. These are particularly relevant to our investigation into the relationship between AC and causality in FTs.
Various other contributions build on AC to define liability frameworks for assessing responsibility, blame [28], and harm [29]. Frameworks such as [30], for instance, illustrate how AC can naturally be extended to address probabilistic causation as well. The work in [10] formalises interventions (and counterfactuals) based on the so-called do-operator. This captures interventions by modifying the structural model: it overrides specific functional dependencies with fixed values, while leaving the remainder of the model unaffected.
Beyond the philosophical community, AC has been connected in various ways to models of computation in more technical fields. In [31]–[33], for instance, the AC framework is applied to transition systems and trace-based models used to represent concurrent system behaviour. The work in [34] follows AC to define the causes responsible for the specification failure observed in counterexample traces. In [35], the authors propose an AC-inspired notion of causality in configurable systems, to determine those features (e.g., execution time) that cause a given undesired system behaviour. In [36], the do-operator [10] is used to define counterfactual-based tests for systems modeled as Bayesian Networks (BNs). This helped with speeding up the selection of the next diagnostic step in the root cause analysis of such systems. Moreover, BNs generalise FTs and can also be interpreted as structural causal models. However, computing conditional probabilities for formulas involving interventions, in the style of AC, presents significant challenges. Recent work, such as [37], explores a range of assumptions to enable the estimation of probabilities for interventional formulas in BNs.
In [19], causal models are extracted from attack trees [38] to support causal inference. While that work focuses on translating attack trees to CMs, we go beyond that by giving a full characterisation of AC as in [20] within FTs, and investigating the relation between AC and minimal cut sets, the main “causal” tool of FT analysis. An AC-based approach to extracting FTs encoding system failures was proposed in [18]. These trees are, in essence, a more compact way of encoding a set of counterexample traces witnessing the violation of a specification. In [18], such traces are considered causal based on an adoption of AC to the setting of state-based systems.
This paper offers a systematic study of fault trees from the perspective of the Halpern-Pearl framework of actual causality. We translate FTs to causal models, and classify actual causes in these models under the AC-o, AC-u and AC-m definitions. This shows how in FTs, causality arises as a combination of their Boolean nature and their graph structure. Using the different definitions, introduced in AC to capture multi-element causes (AC-u) and to simplify assessments (AC-m), gives us degrees to emphasize the role of the graph structure, and deepens our understanding of system failures.
We also study the relation between minimal cut sets and causality: MCSs are not causes, but being an element of an MCS is a sufficient condition for being a cause. Because of the role of the graph structure, it is only a necessary condition when the FT satisfies specific assumptions.
Our results lay the groundwork for integrating causal techniques like interventions and counterfactuals into FT analysis, enhancing diagnosis and explanation within a unified framework for reliability and failure analysis.
Our study opens several promising research directions. As an immediate next step, we will explore algorithmic methods for computing actual causes in FTs, focusing on the complexity of AC-o, AC-u and AC-m in practical cases. Second, a natural extension is to integrate probabilistic reasoning. Since Bayesian Networks generalise FTs and link closely to CMs, we aim to investigate how probabilistic fault analysis can benefit from our causality-based approach. Finally, our work paves the way for design-time causality analysis. Moving beyond post hoc diagnosis, we plan to explore how causality and responsibility can guide design decisions to reduce failures.
In this appendix we prove the mathematical results of this paper. Before moving to the proofs proper, we reformulate causal models as graph causal models, the notation of which will be more suited for the mathematical proofs.
For proving our results, it will be convenient to reformulate the definition of CM, as intricate mathematical reasoning can be tricky in the notation proposed in the main text. For example, for two variables \(X\) and \(Y\) the statement \(X=Y\) could mean that \(X\) and \(Y\) have the same value; that \(F_X(Y) = Y\); or that \(X\) and \(Y\) are the same element of the set \(\mathsf{U}^{{\textrm{i}} }\cup \mathsf{U}^{\textrm{c}}\). We therefore give a new definition which takes the underlying graph as the primordial object.
Definition 11. A graph causal model* is a tuple \(G = (\mathsf{V}^{{\textrm{c}}},\mathsf{V}^{{\textrm{i}}},\mathsf{E},\mathcal{R},F)\) consisting of:*
Two disjoint sets \(\mathsf{V}^{{\textrm{c}}}\) and \(\mathsf{V}^{{\textrm{i}}}\), whose union is denoted \(\mathsf{V}\);
A set \(\mathsf{E}\subset \mathsf{V}\times \mathsf{V}\) such that \((\mathsf{V},\mathsf{E})\) is a directed acyclic graph, and every node in \(\mathsf{V}^{{\textrm{c}}}\) is a source;
A set \(\mathcal{R}(v)\) for each \(v \in \mathsf{V}\);
A function \(F_v\colon \prod_{w \in {\it Inp}(v)}\mathcal{R}(w) \rightarrow \mathcal{R}(v)\) for each \(v \in \mathsf{V}^{{\textrm{i}}}\).
Each \(v \in \mathsf{V}\) is to be thought of as corresponding to a variable \(X_v\), which takes values in \(\mathcal{R}(v)\) (in the main text, we take \(\mathcal{R}(v) = \mathbb{B}\) throughout; we call such models binary graph causal models). The tuple of variables corresponding to a subset \(W \subseteq \mathsf{V}\) is denoted \(X_W\), which takes values of the form \(\mathcal{R}(W) := \prod_{w \in W} \mathcal{R}(w)\). Thus \(X_W = x_W\) denotes the fact that for each \(w \in W\), the variable \(X_w\) takes the value \(x_w\). Thus a context is an element \(\vec{u} \in \mathcal{R}(\mathsf{V}^{{\textrm{c}}})\) (for consistency with the main text, we keep contexts as \(\vec{u}\); its coefficients are written \(u_v\)).
To a graph causal model we associate a causal model as follows:
Definition 12. Let \(G = (\mathsf{V}^{{\textrm{c}}},\mathsf{V}^{{\textrm{i}}},\mathsf{E},\mathcal{R},F)\) be a binary graph causal model. Then its associated causal model \(M_G = (\mathsf{U}^{\textrm{c}},\mathsf{U}^{{\textrm{i}} },F)\) is defined as follows: \[\begin{align} \mathsf{U}^{\textrm{c}}&= \{X_v \mid v \in \mathsf{V}^{{\textrm{c}}}\},\\ \mathsf{U}^{{\textrm{i}} }&= \{X_v \mid v \in \mathsf{V}^{{\textrm{i}}}\},\\ F_{X_v}(\vec{Y}) &= F_v(X_{{\it Inp}(v)}), \end{align}\] where \(\vec{Y}\) are all variables in \(\mathsf{U}^{\textrm{c}}\cup \mathsf{U}^{{\textrm{i}} }\setminus \{X_v\}\).
The transformation from graph causal models to causal models allows us to define the entire causality machinery on the level of graph causal models. For instance, if \(G = (\mathsf{V}^{{\textrm{c}}},\mathsf{V}^{{\textrm{i}}},\mathsf{E},\mathcal{R},F)\) is a graph causal model, \(W \subseteq \mathsf{V}^{{\textrm{i}}}\) is a set of internal nodes and \(x_W \in \mathcal{R}(W)\), then we define the intervention \(G_{X_W \leftarrow x_w}\) to be the graph causal model \(({\mathsf{V}^{{\textrm{i}}}}',{\mathsf{V}^{{\textrm{c}}}}',\mathsf{E}',\mathcal{R}',F')\) defined as \[\begin{align} {\mathsf{V}^{{\textrm{i}}}}' &= \mathsf{V}^{{\textrm{i}}},\\ {\mathsf{V}^{{\textrm{c}}}}' &= \mathsf{V}^{{\textrm{c}}},\\ \mathsf{E}' &= \mathsf{E}\setminus (\mathsf{V}\times W),\\ \mathcal{R}'(v) &= \mathcal{R}(v) \textrm{ for all v \in \mathsf{V}},\\ F'_v &\equiv x_v \textrm{ if v \in W,}\\ F'_v &= F_v \textrm{ otherwise.} \end{align}\] It is straightforward to check that this is the same as intervention on causal models:
Lemma 3. Let \(G = (\mathsf{V}^{{\textrm{c}}},\mathsf{V}^{{\textrm{i}}},\mathsf{E},\mathcal{R},F)\) be a binary graph causal model, let \(W \subseteq \mathsf{V}^{{\textrm{i}}}\) and let \(x_w \in \mathcal{R}(W) = \mathbb{B}^W\). Then \(M_{G_{X_W \leftarrow x_w}} = (M_G)_{X_W \leftarrow x_w}\). 0◻
Furthermore, it will be convenient to express \((M,\vec{u}) \models \varphi\) as a structure function, which we define as follows:
Definition 13. Let \(G = (\mathsf{V}^{{\textrm{c}}},\mathsf{V}^{{\textrm{i}}},\mathsf{E},\mathcal{R},F)\) be a graph causal model, and let \(\vec{u} \in \mathcal{R}(\mathsf{V}^{{\textrm{c}}})\). Then for each \(v \in \mathsf{V}\), define a value \({\Phi}_{G}(\vec{u},v) \in \mathcal{R}(v)\) recursively as follows:
If \(v \in \mathsf{V}^{{\textrm{c}}}\), then \({\Phi}_{G}(\vec{u},v) = u_v\);
If \(v \in \mathsf{V}^{{\textrm{i}}}\), then let \(x_w = {\Phi}_{G}(\vec{u},w)\) for all \(w \in {\it Inp}(v)\). Then define \({\Phi}_{G}(\vec{u},v) = F_v(x_{{\it Inp}(v)})\).
Because \((\mathsf{V},\mathsf{E})\) is a directed acyclic graph, this defines each \({\Phi}_{G}(\vec{u},v)\) uniquely. Intuitively, \({\Phi}_{G}(\vec{u},v)\) is the value \(X_v\) obtains in the causal model \(M_G\) under context \(\vec{u}\):
Lemma 4. Let \(G = (\mathsf{V}^{{\textrm{c}}},\mathsf{V}^{{\textrm{i}}},\mathsf{E},\mathcal{R},F)\) be a binary graph causal model. Then for all \(v \in V\) and all \(\vec{u} \in \mathcal{R}(\mathsf{V}^{{\textrm{c}}}) = \mathbb{B}^{\mathsf{V}^{{\textrm{c}}}}\) we have \((M_G,\vec{u}) \models X_v = {\Phi}_{G}(\vec{u},v)\). 0◻
We write \({\Phi}_{G}(\vec{u},v)[X_W \leftarrow x_W]\) for \({\Phi}_{G[X_W \leftarrow x_w]}(\vec{u},v)\). By Lemmas 3 and 4, we have (in a somewhat confusing notation) \[(M_G,\vec{u}) \models [X_W \leftarrow x_w]\Big(X_v = {\Phi}_{G}(\vec{u},v)[X_W\leftarrow x_w]\Big).\]
If \(T = (V,E,\gamma)\) is a FT, then we define the associated graph causal model \(G_T = (\mathsf{V}^{{\textrm{c}}},\mathsf{V}^{{\textrm{i}}},\mathsf{E},\mathcal{R},F)\) as \[\begin{align} \mathsf{V}^{{\textrm{c}}}&= \{\tilde{v} \mid v \in \operatorname{BE}_{}\} \textrm{ is a disjoint copy of \operatorname{BE}_{}},\\ \mathsf{V}^{{\textrm{i}}}&= V,\\ \mathsf{E}&= E \cup \{(\tilde{v},v) \mid v \in \operatorname{BE}_{}\},\\ \mathcal{R}(v) &= \mathbb{B}\textrm{ for all v \in \mathsf{V}^{{\textrm{i}}}},\\ F_v &= \begin{cases} X_{\tilde{v}}, & \textrm{ if \gamma(v) = \mathtt{BE}},\\ \bigvee_{w \in {\it Inp}(v)} X_{w}, & \textrm{ if \gamma(v) = \mathtt{OR}},\\ \bigwedge_{w \in {\it Inp}(v)} X_{w}, & \textrm{ if \gamma(v) = \mathtt{AND}}. \end{cases} \end{align}\]
This is related to the causal model of a FT as follows:
Lemma 5. Let \(T\) be a FT. Then \(M_T = M_{G_T}\), once we identify \(Y_v\) and \(X_{\tilde{v}}\) for each BE \(v\).
In this notation, we get a more straightforward version of theorem 1:
Theorem 14. Let \(T\) be a FT, let \(G_T\) be its graph causal model, let \(\vec{u} \in \mathbb{B}^{\mathsf{V}^{{\textrm{c}}}}\) be a context, and let \(v,w \in \mathsf{V}^{{\textrm{i}}}\). Then \[{\Phi}_{G_T}(\vec{u},v)[X_w \leftarrow 0] \leq {\Phi}_{G_T}(\vec{u},v) \leq {\Phi}_{G_T}(\vec{u},v)[X_w \leftarrow 1].\]
Proof. Since all \(F_v\) are nondecreasing, a straightforward proof by induction on \(z\) shows that the function \[\begin{align} \mathbb{B}&\rightarrow \mathbb{B}\\ x &\mapsto {\Phi}_{G_T}(\vec{u},v)[X_w \leftarrow x] \end{align}\] is nondecreasing in \(x\). This fact, together with the fact that \({\Phi}_{G_T}(\vec{u},v)[X_w \leftarrow {\Phi}_{G_T}(\vec{u},v)] = {\Phi}_{G_T}(\vec{u},v)\), proves the theorem. ◻
Theorem 1. Statements 1 and 4 are a direct consequence of the first inequality of Theorem 14, and statements 2 and 3 follow from the second inequality. ◻
We define AC-o, AC-u and AC-m for graph causal models; these are the exact counterparts of the definitions in Section 5.1.
Definition 14. Let \(G\) be a graph causal model, and let \(\vec{u}\) be a context. Let \(C\subseteq \mathsf{V}^{{\textrm{i}}}\) be nonempty, let \(x_C \in \mathcal{R}(C)\), let \(v \in \mathsf{V}^{{\textrm{i}}}\) and let \(x_v \in \mathcal{R}(v)\).
\(X_C = x_C\) is said to satisfy AC-o for \(X_v = x_v\) if the following hold:
\({\Phi}_{G}(\vec{u},w) = x_w\) for all \(w \in C \cup \{v\}\).
There exists a partition \(\mathsf{V}^{{\textrm{i}}}= Z \sqcup W\) such that \(C \subseteq Z\), and values \(y_W \in \mathcal{R}(W)\) and \(y_C \in R(C)\), such that:
\({\Phi}_{G}(\vec{u},v)[X_C \leftarrow y_C,X_W \leftarrow y_W] \neq x_v\);
For any \(z \in Z\), let \(x_z^* = {\Phi}_{G}(\vec{u},z)\). Then \[{\Phi}_{G}(\vec{u},v)[X_{Z'}\leftarrow x^*_{Z'},X_W \leftarrow y_W] = x_v\] for all \(C \subseteq Z' \subseteq Z\).
The set \(C\) is minimal with respect to the first two properties.
\(X_C = x_C\) is said to satisfy AC-u for \(X_v = x_v\) if the following hold:
\({\Phi}_{G}(\vec{u},w) = x_w\) for all \(w \in C \cup \{v\}\).
There exists a partition \(\mathsf{V}^{{\textrm{i}}}= Z \sqcup W\) such that \(C \subseteq Z\), and values \(y_W \in \mathcal{R}(W)\) and \(y_C \in \mathcal{R}(C)\), such that:
\({\Phi}_{G}(\vec{u},v)[X_C \leftarrow y_C,X_W \leftarrow y_W] \neq x_v\);
For any \(z \in Z\), let \(x_z^* = {\Phi}_{G}(\vec{u},z)\). Then \[{\Phi}_{G}(\vec{u},v)[X_{Z'}\leftarrow x^*_{Z'},X_{W'} \leftarrow y_{W'}] = x_v\] for all \(C \subseteq Z' \subseteq Z\) and \(W' \subseteq W\).
The set \(C\) is minimal with respect to the first two properties.
\(X_C = x_C\) is said to satisfy AC-m for \(X_v = x_v\) iff the following hold:
\({\Phi}_{G}(\vec{u},w) = x_w\) for all \(w \in C \cup \{v\}\).
For any \(w \in \mathsf{V}^{{\textrm{i}}}\), let \(x_w^* = {\Phi}_{G}(\vec{u},w)\). Then there exists a subset \(W \subseteq \mathsf{V}^{{\textrm{i}}}\) and \(y_C \in \mathcal{R}(C)\) such that \[{\Phi}_{G}(\vec{u},v)[X_C\leftarrow y_C,X_W\leftarrow x_W^*] \neq x_v.\]
The set \(C\) is minimal with respect to the first two properties.
It is straightforward to check that these are precisely the analoga of AC on causal models:
Lemma 6. Let \(G\) be a binary graph causal model, let \(v\) be an internal node of \(G\), and let \(C\) be a set of internal nodes; let \(x_C \in \mathcal{R}(C) = \mathbb{B}^C\) and let \(x_v \in \mathcal{R}(v) = \mathbb{B}\). Then \(X_C = x_C\) satisfies AC-o, AC-u or AC-m for \(X_v = x_v\) in \(G\) if and only if it does so in \(M_G\).
Likewise, the following result can be proven completely analogously to Theorem 2 (see [20]):
If \(X_C = x_C\) satisfies AC-o for \(X_v = x_v\), then \(|C| = 1\).
Before we fully classify AC-o for FTs, we first prove an auxiliary lemma that simplifies Definition 14.1. It relies mainly on Theorem 14; in light of Proposition [prop:singleton], we only consider singleton causes. We also only consider causes for \(X_{{\it Root}} = 1\) in order to streamline our statements.
Lemma 7. Let \(G\) be the graph causal model of a fault tree, and let \(\vec{u}\) be a context. Let \(c,v \in \mathsf{V}\) and let \(x_c \in \mathbb{B}\). Then \(X_c = x_c\) satisfies AC-o for \(X_v = 1\) iff the following hold:
\({\Phi}_{G}(\vec{u},c) = x_c = 1\).
There exists a partition \(\mathsf{V}= Z \sqcup W\) such that \(C \subseteq Z\) and such that:
\({\Phi}_{G}(\vec{u},v)[X_c \leftarrow 0,X_W \leftarrow y_W] = 0\);
Let \(Z' = \{z \in Z \mid \Phi_{G}(\vec{u},z) = 0\}\) (so \(c \notin Z')\). Then \[{\Phi}_{G}(\vec{u},v)[X_c \leftarrow 1,X_{Z'}\leftarrow \vec{0},X_W \leftarrow y_W] = 1.\]
Proof. Suppose \(c,x_c\) satisfy Definition 14. By monotonicity, \({\Phi}_{G}(\vec{u},v)[X_c \leftarrow 1,X_W \leftarrow y_W] \geq {\Phi}_{G}(\vec{u},v)[X_W \leftarrow y_W] = 1\), so \(y_c = 0\); hence \(x_c\) must be 1 as it cannot be equal to \(y_c\); this shows 1 of Lemma 7. Similarly, \({\Phi}_{G}(\vec{u},v)[X_c \leftarrow 0,X_W \leftarrow y_W]\) cannot be equal to \(x_v = 1\), so it must be \(0\). This shows 2a of Lemma 7. Finally, 2b is a special case of 2b of Definition 14.
Now suppose \(c,x_c\) satisfy the conditions of Lemma 7. Then condition 3 of Definition 14 is automatically satisfied, and conditions 1 and 2a follow from conditions 1 and 2a of the lemma. For condition 2b, let \(Z'' \subseteq Z\) be any subset containing \(c\), and for \(i \in \mathbb{B}\), define \(Z''_i = \{z \in Z''\mid\Phi_{G}(\vec{u},z) = i\}\). Then \(c \in Z''_1\) and \(Z''_0 \subseteq Z'\), so \[\begin{align} 1 &= {\Phi}_{G}(\vec{u},v)[X_c \leftarrow 1,X_{Z'}\leftarrow \vec{0},X_W \leftarrow y_W] \\ &\leq {\Phi}_{G}(\vec{u},v)[X_{Z''_1} \leftarrow \vec{1},X_{Z'}\leftarrow \vec{0},X_W \leftarrow y_W] \\ &\leq {\Phi}_{G}(\vec{u},v)[X_{Z''_1} \leftarrow \vec{1},X_{Z''_0}\leftarrow \vec{0},X_W \leftarrow y_W] \\ &= {\Phi}_{G}(\vec{u},v)[X_{Z''} \leftarrow x_{Z''}^*,X_W \leftarrow y_W], \end{align}\] which shows 2b. ◻
We use this lemma to prove the following analogon of Theorem 5 for graph causal models:
Theorem 15. Let \(T = (V,E,\gamma)\) be a FT, and let \(\vec{u}\) be a context of the graph causal model \(G_T\). Let \(v \in V\). Then \(X_v = 1\) satisfies AC-o for \(X_{{\it Root}} = 1\) if and only if there is a path \(v = v_0,\ldots,v_n = {\it Root}\) in the directed graph \((V,E)\) such that:
\({\Phi}_{G_T}(\vec{u},v_i) = 1\) for all \(0 \leq i \leq n\).
For all \(i,j>0\), if \({\it Inp}(v_i) \cap {\it Inp}(v_j) \neq \varnothing\), then \(\gamma(v_i) = \gamma(v_j)\).
Proof. First, suppose that such a path exists. Clearly the first condition of Lemma 7 is satisfied. For the second condition, we take \(W = \bigcup_{i>0}({\it Inp}(v_i)\setminus\{v_{i-1}\})\), and \(Z\) the remaining variables. For \(w \in W\), we let \(y_w = 0\) if \(w \in {\it Inp}(v_i)\) for some \(v_i\) with \(\gamma(v_i) = \mathtt{OR}\) and \(i > 0\), and we let \(y_w = 1\) if \(w \in {\it Inp}(v_i)\) for some \(v_i\) with \(\gamma(v_i) = \mathtt{AND}\) and \(i > 0\). By assumption 2 these two will never be true simultaneously.
Going bottom-up, it is clear that \[{\Phi}_{G_T}(\vec{u},v_i)[X_v \leftarrow 0, X_W \leftarrow y_W] = 0.\] for all \(i\); in particular \({\Phi}_{G_T}(\vec{u},{\it Root})[X_v \leftarrow 0, X_W \leftarrow y_W] = 0\); hence we satisfy 2a. Condition 2b follows from the fact that by construction, \(Z' \cap (\{v_1,\ldots,v_r\}) = \varnothing\) (where \(Z'\) is as in Lemma 7), and from the fact that we again show bottom-up that \[{\Phi}_{G_T}(\vec{u},v_i)[X_v \leftarrow 1, X_W \leftarrow y_W] = 1.\]
Now suppose that \(X_v = 1\) is an actual cause. Suppose that \(v = {\it Root}\). By Definition 14.1, \({\Phi}_{G_T}(\vec{u},v) = 1\), so the path \(v = p_0 = {\it Root}\) satisfies our conditions.
Now suppose that \({\it Root}\neq v\). Assume \(\gamma({\it Root}) = \mathtt{OR}\), and fix the \(W\) and \(y_W\) of condition 2 of Lemma 7. Each \(w \in W \cap {\it Inp}({\it Root})\) has to satisfy \(y_w = 0\) to ensure \({\Phi}_{G_T}(\vec{u},{\it Root})[X_v \leftarrow y_v,X_W \leftarrow y_W] = 0\). Furthermore, let \[K = \{z \in Z \cap {\it Inp}({\it Root}) \mid {\Phi}_{G_T}(\vec{u},z) = 1\}.\] By condition 2b we have \(K \neq \varnothing\). For each \(k \in K\), we have \({\Phi}_{G_T}(\vec{u},k)[X_v \leftarrow 0, X_W \leftarrow y_W] = 0\), for otherwise condition 2a is not satisfied. Let \(Z'\) be as in Lemma 7. If \({\Phi}_{G_T}(\vec{u},k)[X_v \leftarrow 1, X_{Z'} \leftarrow \vec{0}, X_W \leftarrow y_W] = 0\) for all \(k \in K\), then also \({\Phi}_{G_T}(\vec{u},{\it Root})[X_v \leftarrow 1, X_{Z'} \leftarrow \vec{0}, X_W \leftarrow y_W] = 0\), which contradicts condition 2b of Lemma 7. We conclude that there exists a \(k \in K\) such that \[\begin{align} {\Phi}_{G_T}(\vec{u},k)[X_v \leftarrow 1, X_{Z'} \leftarrow \vec{0}, X_W \leftarrow y_W] &= 1. \label{eq:pf1} \end{align}\tag{6}\] The set \(K\) is partially ordered, with \(k \preceq k'\) if there exists a directed path from \(k\) to \(k'\). Now choose \(k \in K\) such that 6 is satisfied and \(k\) is minimal w.r.t. \(\preceq\). Let \(J = {\it Inp}({\it Root}) \setminus \{k\}\), and let \(W' = W \cup J\), \(y_j = 0\) for all \(j \in J\). Then by Theorem 14, \[\begin{align} {\Phi}_{G_T}(\vec{u},k)[X_v \leftarrow 0, X_{W'} \leftarrow y_{W'}] \leq {\Phi}_{G_T}(\vec{u},k)[X_v \leftarrow 0, X_{W} \leftarrow y_{W}] = 0, \label{eq:pf2} \end{align}\tag{7}\] so \({\Phi}_{G_T}(\vec{u},{\it Root})[X_v \leftarrow 0, X_{W'} \leftarrow y_{W'}] = 0\). Furthermore, if \(j \in J\) is an (indirect) predecessor of \(k\), then \({\Phi}_{\mathcal{M}}(\vec{u},j)[X_L \leftarrow y_L,X_W \leftarrow y_W] = 0\) by the fact that we chose \(k\) minimal. Hence enforcing \(X_j \leftarrow 0\) does not change the value of \(k\), i.e., \[\begin{align} {\Phi}_{G_T}(\vec{u},k)[X_{Z'} \leftarrow y_{Z'},X_{W'} \leftarrow y_{W'}] = {\Phi}_{G_T}(\vec{u},k)[X_{Z'} \leftarrow y_{Z'},X_{W} \leftarrow y_{W}] &= 1. \label{eq:pf3} \end{align}\tag{8}\] It follows that \({\Phi}_{G_T}(\vec{u},{\it Root})[X_{Z'} \leftarrow y_{Z'},X_{W'} \leftarrow y_{W'}] = 1\). Thus we conclude that \(W'\) and \(y_{W'}\) satisfy condition 2 of Definition 14, so we extend \(W\) to \(W'\) without loss of generality. Then Equations 7 and 8 show that \(X_v = 1\) is an actual cause for \(X_k = 1\), taking \(W'\) and \(y_{W'}\).
If \(\gamma({\it Root}) = \mathtt{AND}\), a similar argument, with \(y_j = 1\) for all \(j \in J\), similarly extends \(W\) and finds an input \(k\) of \({\it Root}\) such that \(X_v = 1\) is an actual cause of \(k = 1\). Furthermore, every \(k\) we find has \(v\) as an ancestor, otherwise setting \(X_v\) would not change its value. We can now repeat the argument, replacing \({\it Root}\) by \(k\), and continue doing so until we reach a \(v\). Enumerating the path bottom-up we get our \(v_0,\ldots,v_n\). By how we choose each \(k\), each variable on the path satisfies \({\Phi}_{G_T}(\vec{u},v_i) = 1\). Finally, suppose that \(v_i,v_j\) with \(\gamma(v_i) \neq \gamma(v_j)\) share an input. Since we set all non-path inputs of the path to \(0\) for OR-gates and to \(1\) for AND-gates, the shared input must be a \(v_t\) with \(v_t \preceq v_i, v_j\). However, this contradicts the fact that each \(k\) is chosen minimally with respect to \(\preceq\). We conclude that our path satisfies the conditions of the Theorem. ◻
Theorem 6 can be phrased in the language of graph causal models as follows:
Theorem 16. Let \(T = (V,E,\gamma)\) be a FT, and let \(\vec{u}\) be a context of the graph causal model \(G_T\). Let \(v \in V\). Then \(X_v = 1\) satisfies AC-o for \(X_{{\it Root}} = 1\) if and only if there is a path \(v = v_0,\ldots,v_n = {\it Root}\) in the directed graph \((V,E)\) such that:
\({\Phi}_{G_T}(\vec{u},v_i) = 1\) for all \(0 \leq i \leq n\).
For all \(i,j>0\), if \({\it Inp}(v_i) \cap {\it Inp}(v_j) \neq \varnothing\), then \(\gamma(v_i) = \gamma(v_j)\).
Let \(D = \bigcup_{i\colon \gamma(v_i) = \mathtt{OR}}({\it Inp}(v_i)\setminus\{v_{i-1}\})\). Then \({\Phi}_{G_T}(\vec{u},v_i)[X_D \leftarrow \vec{0}] = 1\).
The proof of Theorem 16 is to a large extent analogous to that of Theorem 15; we need two extra ingredients. The first is that AC-u only admits singleton causes:
Theorem 17. Let \(G\) be a graph causal model derived from a FT, let \(\vec{u}\) be a context, and let \(X_C = x_C\) be an actual cause of \(X_v = x_v\) under AC-u. Then \(|C| = 1\).
Proof. First, if \(c \in C\), we may replace \(c\) with a BE, with context value \({\Phi}_{G}(\vec{u},c)\). This does not affect AC-u, so without loss of generality \(C \subseteq \operatorname{BE}_{}\). We also assume \(x_v = 1\); the case that \(x_v = 0\) is completely analogous.
Next, suppose that there is a \(c\) such that \(x_c = y_c\). In that case, let \(C' = C \setminus \{c\}\); then since \(c\) is a basic event, both conditions (b)i. and (b)ii. of Definition 14 are unaffected by replacing \(C\) by \(C'\). Hence \(C\) is not minimal, and \(x_c \neq y_c\) in every actual cause.
Now, suppose that there is a \(c\) such that \(x_c = 0\), \(y_c = 1\). Let \(C = C' \setminus \{c\}\). Then \[{\Phi}_{G}(\vec{u},v)[X_{C'}\leftarrow x_{C'}, X_W \leftarrow x_W] \leq {\Phi}_{G}(\vec{u},v)[X_{C'}\leftarrow x_{C'},x_C \leftarrow 1, X_W \leftarrow x_W] = 0,\] and for all \(C' \subseteq Z' \subseteq Z\) and \(W' \subseteq W\), \[{\Phi}_{G}(\vec{u},v)[X_{Z'}\leftarrow x^*_{Z'}, X_W \leftarrow x_W] \leq {\Phi}_{G}(\vec{u},v)[X_{Z'}\leftarrow x^*_{Z'},x_C \leftarrow 0, X_W \leftarrow x_W] = 1.\] We conclude that \(C'\) satisfies Condition (b)i+ii. as well, so \(C\) is not minimal. Hence, we can conclude that \(x_C = \vec{1}\) and \(y_{C} = \vec{0}\).
Let \(W_0 = \{w \in W \mid y_w = 0\}\) and define \(W_1\) likewise. Define the function \(g\colon \mathbb{B}^C \rightarrow \mathbb{B}\) by \[g(z_C) = \Phi_G(\vec{u},v)[X_C \leftarrow z_C,X_{W_0} \leftarrow \vec{0}].\] By the above, \(g(\vec{1}) = 1\), and \[\begin{align} g(\vec{0}) &= {\Phi}_{G}(\vec{u},v)[X_C \leftarrow y_C,X_{W_0}\leftarrow \vec{0}]\\ &\leq {\Phi}_{G}(\vec{u},v)[X_C \leftarrow y_C,X_{W_0}\leftarrow \vec{0},W_1 \leftarrow \vec{1}]\\ &= {\Phi}_{G}(\vec{u},v)[X_C \leftarrow y_C,X_W \leftarrow W]\\ &= 0. \end{align}\]
Furthermore, by Theorem 14, \(g\) is nondecreasing. Thus, there exists a \(c \in C\) and a \(z_C \in \mathbb{B}^C\) with \(z_c = 0\) such that \(g(z_C) = 0\) and \(g(\hat{z}_C) = 1\), where \(\hat{z}_{c} = 1\) and \(\hat{z}_{c'} = z_{c'}\) for all \(c' \neq c\). We claim that \(X_c = 1\) satisfies AC2. We take the partitioning \(V = Z' \sqcup W'\), with \(Z' = (Z \setminus C) \cup \{c\} \cup W_1\) and \(W' = W_0 \cup C \setminus \{c\}\) and \[y'_w = \begin{cases} 0, \textrm{ if w \in W_0},\\ z_w, \textrm{ if w \in C\setminus \{c\}.} \end{cases}\] For (b)i., note that \[\begin{align} {\Phi}_{G}(\vec{u},v)[X_c \leftarrow 0, X_{W'} \leftarrow y'_{W'}] &= {\Phi}_{G}(\vec{u},v)[X_C \leftarrow z_C,X_{W_0}\leftarrow y_{W_0}]\\ &= g(z_C)\\ &= 0. \end{align}\] For (b)ii., first observe that \[\begin{align} {\Phi}_{G}(\vec{u},v)[X_{c}\leftarrow x^*_{c},X_{W'} \leftarrow y'_{W'}] &= {\Phi}_{G}(\vec{u},v)[X_C \leftarrow \hat{z}_C,X_{W_0} \leftarrow y_{W_0}]\\ &= g(\hat{z}_C)\\ &= 1. \end{align}\] To get to the general statement of 2b, we should be able to remove the setting of variables corresponding to elements of \(W_0\) and \(C \setminus \{c\}\), and add the setting of variables corresponding to elements of \(Z\), without affecting the outcome. Elements of \(W_0\) are currently set to 0, so removing them will not decrease the outcome. Elements of \(w \in C \setminus \{c\}\) are basic events with \(u_w = 1\), which is the value they will take when not set. By monotonicity, removing them will not decrease the outcome. Finally, consider elements of \(w \in Z\). Because the reasoning above can also be applied to \(w\) instead of \(v\), we have \[{\Phi}_{G}(\vec{u},w)[X_c \leftarrow x_c^*,X_{W''} \leftarrow y_{W''}] \leq x^*_w.\] Thus setting \(X_w\) to \(x_w^*\) will not decrease the outcome. This proves 2b. ◻
The second ingredient is the following analogon to Lem 7. The proof is completely analogous, so we omit it.
Lemma 8. Let \(G\) be a graph causal model of a fault tree, and let \(\vec{u}\) be a context. Let \(c,v \in V\), and let \(x_v \in \mathbb{B}\). Then \(X_c = x_c\) is an updated actual cause of \(X_v = 1\) iff the following hold:
\({\Phi}_{G}(\vec{u},c) = x_c = 1\).
There exists a partition \(V = Z \sqcup W\) such that \(C \subseteq Z\), and values \(y_W \in \mathbb{B}^W\) such that:
\({\Phi}_{G}(\vec{u},v)[X_c \leftarrow 0,X_W \leftarrow y_W] = 0\);
Let \(Z' = \{z \in Z \mid {\Phi}_{G}(\vec{u},z) = 0\}\) and \(W' = \{w \in W \mid y_w = 0\}\). Then \[{\Phi}_{G}(\vec{u},v)[X_c \leftarrow 1, X_{Z'}\leftarrow \vec{0},X_{W'} \leftarrow \vec{0}] = 1.\]
Theorem 16 is now proven completely analogous to Theorem 15.
In the graph causal model terminology, Theorem 7 becomes the following:
Theorem 18. Let \(T\) be a FT, let \(G_T\) be its graph causal model, and let \(\vec{u}\) be a context. Let \(C\) be a set of events, and let \(x_C \in \mathbb{B}^C\). Then \(X_C = x_C\) is an actual cause under AC-m for \(X_{{\it Root}} = 1\) if and only if the following are satisfied:
\({\Phi}_{T}(\vec{u},{\it Root}) = 1\);
\(x_C = \vec{1}\), and \(u_v = 1\) for all \(v \in C\);
If \(D = \{v \in V \mid u_v = 1\}\), then \({\Phi}_{T}(D \setminus C,{\it Root}) = 0\);
\(C\) is minimal w.r.t. property 3.
Proof. If \(C\) satisfies these conditions, then taking \(W = \varnothing\) shows that \(C\) satisfies Definition 14.3. Conversely, suppose that \(X_{C} = x_C\) satisfies AC-m for \(X{{\it Root}} = 1\). 14.3(a) implies 18.1, and 14.3(c) implies 18.4. Furthermore, all \(v \in C\) with \(x_v = 0\) can be removed by monotonicity, hence 18.2 holds. Finally, by monotonicity we have \[{\Phi}_{G}(\vec{u},w)[X_C \leftarrow \vec{0}] \leq {\Phi}_{G}(\vec{u},w)\] for all \(w \in V\); hence \[{\Phi}_{G_T}(\vec{u},w)[X_C \leftarrow \vec{0}] \leq {\Phi}_{G_T}(\vec{u},w)[X_C \leftarrow \vec{0},X_{W} \leftarrow x_W^*]\] for all \(w \in V\). In particular, we get \({\Phi}_{G_T}(\vec{u},{\it Root})[X_C \leftarrow \vec{0}] = 0\), which we translate back to the FT level as \({\Phi}_{T}(D\setminus C,{\it Root}) = 0\). ◻
In terms of graph causal models, Theorem 8 can be rephrased as follows:
Theorem 19. Let \(T\) be a FT, and let \(v\) be a basic event.
If there is an MCS \(D\) such that \(v \in D\), then \(\vec{u}^D\) is a context of \(G_T\) under which \(X_v = 1\) satisfies AC-o, AC-u, and AC-m for \(X_{{\it Root}} = 1\).
If there exists a context under which \(X_v = 1\) satisfies AC-m for \(X_{{\it Root}} = 1\), then \(v\) is relevant.
Proof.
\({\Phi}_{G_T}(\vec{u}^D,v) = {\Phi}_{G_T}(\vec{u}^D,{\it Root}) = 1\) by definition, so we satisfy Definition 14.1(a). As for 1(b), take \(W = \varnothing\). Since \(D\) is a minimal cut set we get \({\Phi}_{G_T}(\vec{u}^D,{\it Root})[X_v \leftarrow 0] = 0\). Furthermore, since \(W\) is empty, setting variables in \(Z\) to their actual value does nothing, so \({\Phi}_{G_T}(\vec{u}^D,{\it Root})[Z' \leftarrow \vec{0}] = {\Phi}_{G_T}(\vec{u},{\it Root}) = 1\), so we also satisfy 1(b); this proves AC-o, and AC-u is proven analogously. It is easy to see that this same \(\vec{u}^D\) satisfies Theorem 18, which proves AC-m.
Suppose that there exists a \(D \subseteq \operatorname{BE}_{T}\) such that \(X_c = 1\) satisfies AC-m for \(X_{{\it Root}} = 1\) under context \(\vec{u}^D\). By Theorem 18.1, \(D\) is a cut set. If we take \(D\) to be minimal, then \(D\) is a minimal cut set, hence \(c\) is relevant as \(c \in D\).
◻
In terms of graph causal models, Theorem 9 can be rephrased as follows:
Theorem 20.
Let \(T\) be a FT, and let \(\vec{u}\) be a context of \(G_T\). Let \(v\) be a BE. Consider the following two statements:
\(\{v \in \operatorname{BE}_{T} \mid u_v = 1\}\) contains an MCS containing \(v\);
\(X_v = 1\) satisfies AC-u for \(X_{{\it Root}} = 1\);
\(X_v = 1\) satisfies AC-o for \(X_{{\it Root}} = 1\).
Then 1 implies 2, and 2 implies 3. If \(T\) is tree-shaped or if \(T\) is of disjunctive normal form, then all three are equivalent.
Proof. Note that \(2 \Rightarrow 3\) is immediate by Lemma 6 and Theorem 4; we first prove \(1 \Rightarrow 2\). As before, we only need to show that condition (b) of Definition 14.2 holds. For this, consider an MCS \(C\) as in the theorem. Now let \(W = \operatorname{BE}_{} \setminus \{v\}\), with \(y_w = 1\) if and only if \(y \in C\). Since \(C\) is a minimal cut set, we have \[{\Phi}_{G_T}(\vec{u},{\it Root})[X_v \leftarrow 0, X_W \leftarrow y_W] = 0.\] Furthermore, since \({\Phi}_{G_T}(\vec{u},v) = 1\), we get \[{\Phi}_{G_T}(\vec{u},{\it Root})[X_W \leftarrow y_W] = 1.\] For any BE \(w\) we have \[{\Phi}_{G_T}(\vec{u},w)[X_W \leftarrow y_W] \leq u_w.\] By monotonicity, it follows via induction that \[{\Phi}_{G_T}(\vec{u},k)[X_W \leftarrow y_W] \leq {\Phi}_{G_T}(\vec{u},k)\] for all \(k \in V\). In particular \({\Phi}_{G_T}(\vec{u},z)[X_W \leftarrow y_W] \leq y_z^*\) for all \(z \in Z\). By monotonicity, this means that forcibly setting \(X_z \leftarrow x_z^*\) has no impact on the fact that \({\Phi}_{G_T}(\vec{u},{\it Root})[X_W \leftarrow y_W] = 1\). Furthermore, since \(C\) happens in \(\vec{u}\), we have \(y_w \leq {\Phi}_{G_T}(\vec{u},w)\) for all \(w \in W\). In particular, not setting \(X_w \leftarrow y_w\) for some \(w\) does not affect \({\Phi}_{G_T}(\vec{u},{\it Root})[X_W \leftarrow y_W] = 1\) either. This proves condition (b).
For \(3 \Rightarrow 1\), we start with a tree-shaped FT. Suppose that \(X_v = 1\) satisfies AC-o for \(X_{{\it Root}} = 1\). By Theorem 15 the unique path from \(X_v\) to \(X_{{\it Root}}\) contains only value \(1\). We now create a new context \(\vec{u}'\), by defining, for each \(w \in V\), a value \(g(w) \in \mathbb{B}\) recursively from the root:
\(g({\it Root}) = 1\);
If \(g(w) = 0\) and \(\gamma(w) \neq \mathtt{BE}\), then \(g(w') = 0\) for all \(w' \in {\it Inp}(w)\);
If \(g(w) = 1\) and \(\gamma(w) = \mathtt{AND}\), then \(g(w') = 1\) for all \(w' \in {\it Inp}(w)\);
If \(g(w) = 1\) and \(\gamma(w) = \mathtt{OR}\), then arbitrarily choose one \(w' \in {\it Inp}(w)\), with the restriction that if \(w\) lies on the path from \(v\) to \({\it Root}\), then \(w'\) has to be the previous node on this path (compared to \(w\)). Then, set \(g(w') = 1\) and \(g(w'') = 0\) for all \(w'' \in {\it Inp}(w) \setminus \{w'\}\);
If \(\gamma(w) = \mathtt{BE}\), and \(w' \in U\) is the corresponding vertex, set \(u'_{w'}\) to \(g(w)\).
Since \(T\) is treelike, this defines each \(g(w)\) uniquely. Also, by induction bottom-up it is easily shown that \(g(w) = {\Phi}_{G_T}(\vec{u}',w)\) for all \(w\). In particular \({\Phi}_{G_T}(\vec{u}',{\it Root}) = 1\), so \(C = \{v \in \operatorname{BE}_{} \mid u'_v = 1\}\) is a cut set. Furthermore, it can be seen that \(g(v) = 1\), so \(v \in C\). It remains to show that \(C\) is minimal. To see this, note that by construction every \(w\) with \({\Phi}_{G_T}(\vec{u}',w) = 1\) has its minimal number of inputs sets to \(1\). Thus, if we remove one element \(w\) from \(C\) to get \(\vec{u}''\), it can be shown by induction that every node \(w'\) from the path from \(w\) to \({\it Root}\) satisfies \({\Phi}_{G_T}(\vec{u}'',w') = 0\). In particular, \({\Phi}_{G_T}(\vec{u}'',{\it Root}) = 0\). Since \(w\) was chosen arbitrary, this shows that \(C\) is an MCS.
We now turn towards a \(T\) in disjunctive normal form. Suppose that \(X_v = 1\) is an actual cause for \(X_{{\it Root}} = 1\). By Theorem 15 there exists a path from \(v\) to \({\it Root}\) on which all variables evaluate to \(1\). The middle node on this path represents an MCS containing \(v\), all of whose elements are set to 1 in \(\vec{u}\). ◻
We prove the statements for AC-o, AC-u and AC-m separately.
Theorem 21. Problem [prob:dec] is NP-complete for AC-o.
Proof. It is clearly in NP: By Theorem 5, a witness for \(X_v=1\) being a (singleton) actual cause for \(X_w = 1\) is a path from \(X \rightarrow Y\) with some properties that take only polynomial time to satisfy. By Theorem 2, there are no non-singleton causes.
To prove NP-hardness, we show that 3-SAT reduces to it. Consider a 3-SAT formula \(\varphi = g_1 \wedge \cdots \wedge g_n\), where each \(g_i = \ell_{i,1} \vee \ell_{i,2} \vee \ell_{i,3}\), and each \(\ell_{i,j} \in \{x_1,\ldots,x_m,\neg x_1,\ldots,\neg x_m\}\). We construct a FT \(T_{\varphi}\) consisting of
a BE \(e\);
For each variable \(x_k\), OR-gates \(t_k\) and \(f_k\), BEs \(a_k\) and \(b_k\), and edges \(a_k \rightarrow t_k\) and \(b_k \rightarrow f_k\);
edges \(e \rightarrow t_1\), \(e \rightarrow f_1\), and for each \(k < m\), edges \(t_k \rightarrow t_{k+1}\), \(t_k \rightarrow f_{k+1}\), \(f_k \rightarrow t_{k+1}\) and \(f_k \rightarrow f_{k+1}\);
For each clause \(g_i = \ell_{i,1} \vee \ell_{i,2} \vee \ell_{i,3}\):
An OR-gate \(v_i\);
An AND-gate \(w_{i,j}\) for each \(\ell_{i,j}\). If \(\ell_{i,j} = x_k\) for some \(k\), then there is an edge \(b_k \rightarrow w_{i,j}\); if \(\ell_{i,j} = \neg x_k\), then there is an edge \(a_k \rightarrow w_{i,j}\);
an OR-gate \(v_0\), and edges \(t_m \rightarrow v_0\) and \(f_m \rightarrow v_0\);
edges \(v_i \rightarrow w_{i+1,j}\) for each \(0 \leq i < n\) and \(j \leq 3\).
The root of this FT is \(v_n\). The resulting FT for \(\varphi = (x_1 \vee x_2 \vee \neg x_3) \wedge (\neg x_1 \vee x_2 \vee \neg x_3)\) is depicted in Fig. 12.
Now let the context \(\vec{u}\) be the constant vector \(1\). We claim that \(X_e = 1\) is a cause for \(X_{v_n} = 1\) if and only if \(\varphi\) is satisfiable. First, suppose that \(X_e = 1\) is a cause for \(X_{v_n} = 1\). The path \(\pi\) from \(e\) to \(v_n\) that shows causality must include either \(t_k\) or \(f_k\) for each \(k \leq m\), each \(v_i\), and one of the \(w_{i,j}\) for each \(i\). Given \(\pi\), we get a truth assignment given by \(x_k \mapsto 1\) iff \(t_k\) lies on \(\pi\). To show that this truth assignment satisfies \(\varphi\), take a clause \(g_i\), let \(w_{i,j}\) be the input of \(v_i\) on \(\pi\). If \(\ell_{i,j} = x_k\), then \(w_{i,j}\) has input \(b_k\). This means that \(f_k\) cannot lie on \(\pi\). Hence \(t_k\) does and \(x_k \mapsto 1\), and we conclude that \(g_i \mapsto 1\). The argument for \(\ell_{i,j} = \neg x_k\) is analogous. Since this holds for each \(i\), we conclude that \(\varphi \mapsto 1\) under this truth assignment.
If \(\varphi\) is satisfiable, then we can turn a truth assignment into a path \(\pi\) by having \(t_k\) lie on \(\pi\) if \(x_k \mapsto 1\), and having \(f_k\) lie in \(\pi\) if \(x_k \mapsto 0\). Furthermore, for each \(i\), choose an \(\ell_{i,j}\) that is satisfied, and have \(w_{i,j}\) lie on \(\pi\). By the same argument as above, this path avoids forbidden pairs (an AND-gate and an OR-gate that share a child), and shows that \(X_e = 1\) is a cause for \(X_{v_n} = 1\). ◻
Theorem 22. Problem [prob:dec] is NP-complete for AC-u.
Proof. It is clear that this problem is in NP: by Theorem 6, a witness is again a path (from a singleton cause by Theorem 6), and the required properties can again be checked in polynomial time.
For NP-hardness, we do the same construction as in the proof of Theorem 21. It suffices to show that for every path \(\pi\colon e \rightarrow v_n\), setting all children of all OR-gates on \(\pi\) to \(0\) (except those children that are on \(\pi\) themselves) does not change the value of any gate on \(\pi\). First, suppose that \(t_1\) is on \(\pi\). Setting \(X_{a_1} \rightarrow 0\) now means that all \(w_{i,j}\) for which \(\ell_{i,j} = \neg x_1\) are now also set to \(0\). However, as argued above, these gates may not be on \(\pi\) anyway, so this does not affect the values on \(\pi\). Furthermore, the only output of such a gate is \(v_i\). Since this is an OR-gate, and it still has a child on \(\pi\) (which still has value 1), this is not affected. Hence we can safely set \(X_{a_1} \rightarrow 0\) without affecting the gates on \(\pi\). Since this is the only non-path input of \(t_1\), we conclude that we can set all inputs of \(t_1\) to \(0\) without affecting the gates on \(\pi\). The same reasoning holds for \(f_1\).
For a \(t_i\) with \(i > 1\) on \(\pi\), we have the children \(a_i\), \(t_{i-1}\) and \(f_{i-1}\). For \(a_i\) the same reasoning as for \(a_1\) applies. Either \(t_{i-1}\) or \(t_{i+1}\) are on \(\pi\); if we set the other to \(0\), then this has no effects downstream (towards the root), since \(f_i\) still has an input with value \(1\). Hence again, setting the non-path children of \(t_i\) to \(0\) has no effect on the path. The same holds for \(f_i\).
Any \(v_i\) (which is always on \(\pi\)) has the property that it is the only output of all of its inputs. Therefore setting any of these inputs to \(0\) has no effects downstream, since \(v_i\) still has an input that still has value \(1\).
Overall, we conclude that setting all children of all OR-gates on \(\pi\) to \(0\), except those that are on \(\pi\) itself, has no impact on any of the gates on \(\pi\), and in particular not on \(v_n\). Hence any path that proves AC-o also proves AC-u and vice versa. Combined with the proof of Theorem 21, this now proves Theorem 22. ◻
Theorem 23. Problem [prob:dec] can be solved in polynomial time for AC-m.
Proof. Let \(T\) be the given FT. Let \(C\) be the set of FT nodes represented by \(\vec{X}\), and let \(T'\) be the FT obtained from \(T\) by:
Removing all vertices that are not in the sub-FT with root \(w\);
turning each node \(v\) in \(C\) into a BE, severing the connection to all its inputs, and setting \(u_v = 1\);
removing the nodes that no longer have a path to the root.
Then \(\vec{X} = \vec{1}\) is an actual cause of \(X_w = 1\) in \(T\) if and only if this is true in \(T'\). In \(T'\), we are in the situation of Theorem 7, so we just need to check that properties 1-4 of this Theorem are satisfied. Property 2 is automatically satisfied, and properties 1 and 3 just involve computing the structure function bottom-up (for two different inputs), which can be done in linear time. To check property 4, we need to check 1-3 for each set of the form \(C\setminus\{x\}\), of which there are only linearly many. We conclude that we can determine whether \(\vec{X} = \vec{1}\) is an actual cause of \(X_w = 1\) under AC-m in quadratic time. ◻
We first prove correctness. In Remark [rmk:ptu], it is argued that a path of 1s that avoids all forbidden pairs of \(P := P_{T,\vec{u}}\) also avoids all forbidden pairs of \(T\). Therefore, \(X_v = 1\) is an actual cause (under AC-o) for \(X_{{\it Root}} = 1\) in \(T\) if and only if it is so in \(P_{T,\vec{u}}\). Now let \[\mathcal{H} = \{h \mid (h,l) \in \mathcal{F}(P)\}\] be the set of all high elements of forbidden pairs in \(P\). A straightforward induction from \({\it Root}\) downwards shows that for all \(H \subseteq \mathcal{H}\), we have \[\begin{align} H \in \mathcal{S}(v) \Leftrightarrow& \exists \textrm{ path } \pi\colon v \rightarrow {\it Root}\textrm{ s.t. } \pi \cap \mathcal{H} = \varnothing\\ & \textrm{and \pi contains no low elements corresponding to H.} \end{align}\] This means that a path \(v \rightarrow {\it Root}\) not containing both elements of a forbidden pair exists iff \(\mathcal{S}(v) \neq \varnothing\). It is precisely the inputs of such \(v\) that have a path as in Theorem 5, which shows that line 24 of Algorithm 9 returns the set of all \(v\) for which \(X_v = 1\) satisfies AC-o for \(X_{{\it Root}} = 1\).
Let us now consider its complexity. Computing \(P_{T,\vec{u}}\) requires computing \({\Phi}_{T}(\vec{u},v)\) for all \(v\), which takes \(\mathcal{O}(|E|)\) time. To find \(\mathcal{F}(P)\), we check every pair of edges to see whether they connect a forbidden pair to its shared child. There are \(|E|^2\) pairs to check, and each check takes \(\mathcal{O}(|V|)\) time since we need to see whether the high and low element are hierarchically related. Finally, to compute \(\mathcal{S}(v)\) for each \(v\), we pass along an element of \(\mathcal{P}(\mathcal{P}(\mathcal{F}(P)))\) along each edge, and this takes \(\mathcal{O}(2^{k}|E|)\) time. We conclude that this procedure as a whole has time complexity \(\mathcal{O}(|E|^2|V|+2^k|E|)\).
We first compute \(P_{T,\vec{u}}\) (\(\mathcal{O}(|E|)\) time per Section 12.10), and we compute all its forbidden pairs (\(\mathcal{O}(|E|^2)\) time). To determine whether a given vertex \(v\) is an actual cause of \(X_{{\it Root}} = 1\) under AC-u, we first check whether \(v,{\it Root}\in P_{T,\vec{u}}\). Then, we enumerate all \(\mathcal{O}(2^{|V|})\) paths \(v \rightarrow {\it Root}\) in \(P_{T,\vec{u}}\). For each such path, we check whether setting all children of OR-gates to \(0\) changes the value of \(X_{{\it Root}}\) by recomputing \(P_{T,\vec{u}}\) (\(\mathcal{O}(|E|)\) time). Finally, we check if the path contains some forbidden pair (\(\mathcal{O}(|V|)\) time per pair for \(\mathcal{O}(|E|^2)\) pairs, so \(\mathcal{O}(|V||E|^2)\) time). Since we have to do this per path and per \(v\), the total computation time is
\[\mathcal{O}(|E|+|E|^2+2^{|V|}|V|(|E|+|V||E|^2|) = \mathcal{O}(2^{|V|}|V|^2|E|^2).\]
By Lemma 2, it suffices to construct \(\check{P}_{T,\vec{u}}\) (\(\mathcal{O}(|E|)\) time per Section 12.10): if this does not contain \({\it Root}\), then \(X_{{\it Root}} = 1\) has no causes. If it does, we need to find all minimal cut sets of \(\check{P}_{T,\vec{u}}\). The MICSUP algorithm [5] computes all MCSs bottom-up, by storing a set of sets of BEs at each node (for details see [39]). Thus at every node we have \(\mathcal{O}(2^{|\operatorname{BE}_{T}|})\) sets that are communicated upwards once over each edge, at which point they are combined; this takes \(\mathcal{O}(2^{|\operatorname{BE}_{T}|}|E|)\) time. Thus the total time complexity is \(\mathcal{O}(|E|+2^{|\operatorname{BE}_{T}|}|E|) = \mathcal{O}(2^{|\operatorname{BE}_{T}|}|E|)\).