SCM.ID.Assumptions

Structural assumptions used by SCM identification results, including monotone Boolean mechanisms and finite Boolean-chain example models.

Monotonicity 15 core · 10 supporting This file defines monotonicity as a restriction on a structural equation itself. ★ monotoneBoolSCM_satisfies★ antitoneBoolSCM_violates

Structural Monotonicity Assumptions

This file defines monotonicity as a restriction on a structural equation itself. The predicate fixes an observed child and one of its parents, then requires the child's structural function to be nondecreasing in that parent coordinate while all other parent coordinates are held fixed.

The file also contains a two-node Boolean SCM used as a sanity check: one model satisfies the structural restriction and one model violates it. These witnesses show that the predicate is a genuine constraint on structFun, not a vacuous edge label.

def MonotoneMechanism reviewed
Causalean.SCM.Assumptions

For a finite population of nodes with measurable ordered value spaces, a child node, a parent node, and a structural causal model, the monotone-mechanism condition holds precisely when the child is observed, the parent is a parent of that child, and for every two parent-value assignments that agree at all other parent coordinates and are ordered at the designated parent coordinate, the child's structural-function value is ordered in the same direction.

Definition (Lean source)
N :
Type u_1
N → Type u_2
shared
∀ n, Preorder (Ω n)
child parent :
M :
SCM N Ω
MonotoneMechanism child parent M :
Prop
∃ hchild : child ∈ M.observed,
∃ hparent : parent ∈ M.dag.parents child,
∀ x y : ∀ w : {w // w ∈ M.dag.parents child},
swigΩ Ω w.val, x ⟨parent, hparent⟩
≤ y ⟨parent, hparent⟩ → (∀ w, w.val ≠ parent → x w = y w) → M.structFun ⟨child, hchild⟩ x ≤ M.structFun ⟨child, hchild⟩ y
Causalean.SCM.Assumptions.MonotoneMechanism · Causalean/SCM/ID/Assumptions/Monotonicity.lean:38 · uses SCM , SWIGNode
inductive BoolChainNode reviewed
Causalean.SCM.Assumptions

The Boolean-chain node type consists of the treatment node and the outcome node.

Definition (Lean source)
BoolChainNode :
Type
d :
y :
deriving DecidableEq, Repr
Causalean.SCM.Assumptions.BoolChainNode · Causalean/SCM/ID/Assumptions/Monotonicity.lean:61
def edge reviewed
Causalean.SCM.Assumptions.BoolChainNode

The Boolean-chain edge relation holds for the ordered pair consisting of treatment dd and outcome yy, and holds for no other ordered pair of Boolean-chain nodes.

Definition (Lean source)
edge :
clause 1
| d, y => True
clause 2
| _, _ => False
Causalean.SCM.Assumptions.BoolChainNode.edge · Causalean/SCM/ID/Assumptions/Monotonicity.lean:79 · uses BoolChainNode
def topo reviewed
Causalean.SCM.Assumptions.BoolChainNode

The Boolean-chain topological ranking assigns rank zero to treatment dd and rank one to outcome yy.

Definition (Lean source)
topo :
clause 1
| d => 0
clause 2
| y => 1
Causalean.SCM.Assumptions.BoolChainNode.topo · Causalean/SCM/ID/Assumptions/Monotonicity.lean:94 · uses BoolChainNode
def dag reviewed
Causalean.SCM.Assumptions.BoolChainNode

The Boolean-chain directed acyclic graph is the two-node graph whose only directed edge is from treatment dd to outcome yy.

Definition (Lean source)
clause 1
clause 2
decEdge := edgeDecidable
clause 3
acyclic := DAG.acyclic_of_topoOrder topo_lt
def boolChainSWIG reviewed
Causalean.SCM.Assumptions

The Boolean-chain single-world intervention graph has random observed treatment dd and outcome yy, no fixed nodes, and no unobserved nodes, with the Boolean-chain directed graph.

Definition (Lean source)
boolChainSWIG :
clause 1
dag := initialSWIG BoolChainNode.dag
clause 2
fixed := ∅
clause 3
observed := {SWIGNode.random d, SWIGNode.random y}
clause 4
unobserved := ∅
clause 5
fixed_is_fixed := by intro s hs; simp at hs
clause 6
observed_is_random := by intro v hv simp only [Finset.mem_insert, mem_singleton] at hv rcases hv with rfl | rfl <;> exact ⟨_, rfl⟩
clause 7
unobserved_is_random := by intro u hu; simp at hu
clause 8
obs_unobs_disjoint := by rw [Finset.disjoint_right] intro x hx simp at hx
clause 9
dag_edges_classified := by decide
clause 10
fixed_image_in_observed := by intro s hs; simp at hs
clause 11
fixed_are_roots := by intro s hs; simp at hs
clause 12
unobs_are_roots := by intro u hu; simp at hu
clause 13
fixed_outside_fixed_isolated := by intro n _ cases n <;> exact ⟨by decide, by decide⟩
clause 14
all_children_in_observed := by decide
def boolChainΩ reviewed
Causalean.SCM.Assumptions

The Boolean-chain value-space assignment gives both treatment dd and outcome yy the two-point Boolean value space.

Definition (Lean source)
boolChainΩ :
BoolChainNode → Type
fun _ => Bool
Causalean.SCM.Assumptions.boolChainΩ · Causalean/SCM/ID/Assumptions/Monotonicity.lean:146 · uses BoolChainNode
def boolChainDParent reviewed
Causalean.SCM.Assumptions

The designated Boolean-chain outcome-parent coordinate is the random treatment node dd, the sole parent of the random outcome node yy.

Definition (Lean source)
boolChainDParent :
{w // w ∈ boolChainSWIG.dag.parents (SWIGNode.random y)}
⟨SWIGNode.random d, by decide⟩
def copyStructFun reviewed
Causalean.SCM.Assumptions

For an observed node of the Boolean-chain graph, the Boolean copying structural equation returns false at treatment dd and, at outcome yy, returns the value assigned to the treatment-parent coordinate.

Definition (Lean source)
v :
{v // v ∈ boolChainSWIG.observed}
copyStructFun v :
(∀ w : {w // w ∈ boolChainSWIG.dag.parents v.val}, swigΩ boolChainΩ w.val) → swigΩ boolChainΩ v.val
by rcases v with ⟨n, hn⟩ cases n with | random n
=> cases n with | d => exact fun _ => false | y => exact fun parents => parents boolChainDParent | fixed n => cases n <;> simp [boolChainSWIG] at hn
def flipStructFun reviewed
Causalean.SCM.Assumptions

For an observed node of the Boolean-chain graph, the Boolean reversing structural equation returns false at treatment dd and, at outcome yy, returns the Boolean negation of the value assigned to the treatment-parent coordinate.

Definition (Lean source)
v :
{v // v ∈ boolChainSWIG.observed}
flipStructFun v :
(∀ w : {w // w ∈ boolChainSWIG.dag.parents v.val}, swigΩ boolChainΩ w.val) → swigΩ boolChainΩ v.val
by rcases v with ⟨n, hn⟩ cases n with | random n
=> cases n with | d => exact fun _ => false | y => exact fun parents => !parents boolChainDParent | fixed n => cases n <;> simp [boolChainSWIG] at hn
def monotoneBoolSCM reviewed
Causalean.SCM.Assumptions

The monotone Boolean structural causal model is the Boolean-chain model with no fixed or latent nodes, nonparametric edge labels, and the copying structural equation.

Definition (Lean source)
monotoneBoolSCM :
clause 1
toSWIGGraph := boolChainSWIG
clause 2
edgeTypes := EdgeTypeAssignment.allNonparametric boolChainSWIG.dag
clause 3
iota_valueSpace := by intro s exact (notMem_empty s.val s.property).elim
clause 4
structFun := copyStructFun
clause 5
structFun_measurable := copyStructFun_measurable
clause 6
latentDist := fun u => (notMem_empty u.val u.property).elim
clause 7
isProbability_latent := by intro u exact (notMem_empty u.val u.property).elim
def antitoneBoolSCM reviewed
Causalean.SCM.Assumptions

The antitone Boolean structural causal model is the Boolean-chain model with no fixed or latent nodes, nonparametric edge labels, and the reversing structural equation.

Definition (Lean source)
antitoneBoolSCM :
clause 1
toSWIGGraph := boolChainSWIG
clause 2
edgeTypes := EdgeTypeAssignment.allNonparametric boolChainSWIG.dag
clause 3
iota_valueSpace := by intro s exact (notMem_empty s.val s.property).elim
clause 4
structFun := flipStructFun
clause 5
structFun_measurable := flipStructFun_measurable
clause 6
latentDist := fun u => (notMem_empty u.val u.property).elim
clause 7
isProbability_latent := by intro u exact (notMem_empty u.val u.property).elim
def boolParentAssignment reviewed
Causalean.SCM.Assumptions

For a Boolean value, the Boolean-chain outcome-parent assignment assigns that value to the designated treatment-parent coordinate and false to every other parent coordinate.

Definition (Lean source)
b :
w :
{w // w ∈ boolChainSWIG.dag.parents (SWIGNode.random y)}
boolParentAssignment b w :
by intro w rcases w with ⟨n, _⟩ cases n with | random n
=> cases n with | d => exact b | y => exact false | fixed n => cases n <;> exact false
theorem monotoneBoolSCM_satisfies reviewed
Causalean.SCM.Assumptions

The copying Boolean structural causal model satisfies monotonicity of the outcome mechanism in the designated parent coordinate.

Formal statement
MonotoneMechanism (Ω := boolChainΩ) (SWIGNode.random y) (SWIGNode.random d) monotoneBoolSCM
Proof (Lean source)
theorem monotoneBoolSCM_satisfies : MonotoneMechanism (Ω := boolChainΩ) (SWIGNode.random y) (SWIGNode.random d) monotoneBoolSCM := by refine ⟨by simp [monotoneBoolSCM, boolChainSWIG], boolChainDParent.property, ?_⟩ intro x y hxy _ exact hxy
theorem antitoneBoolSCM_violates reviewed
Causalean.SCM.Assumptions

The reversing Boolean structural causal model violates monotonicity of the outcome mechanism in the designated parent coordinate.

Formal statement
¬ MonotoneMechanism (Ω := boolChainΩ) (SWIGNode.random y) (SWIGNode.random d) antitoneBoolSCM
Proof (Lean source)
theorem antitoneBoolSCM_violates : ¬ MonotoneMechanism (Ω := boolChainΩ) (SWIGNode.random y) (SWIGNode.random d) antitoneBoolSCM := by intro hmono rcases hmono with ⟨hchild, hparent, hmono⟩ have hle : boolParentAssignment false ⟨SWIGNode.random d, hparent⟩ ≤ boolParentAssignment true ⟨SWIGNode.random d, hparent⟩ := by change false ≤ true decide have hsame : ∀ w, w.val ≠ SWIGNode.random d → boolParentAssignment false w = boolParentAssignment true w := by intro w hw rcases w with ⟨n, hn⟩ cases n with | random n => cases n with | d => simp at hw | y => rfl | fixed n => cases n <;> rfl have hbad := hmono (boolParentAssignment false) (boolParentAssignment true) hle hsame change not (boolParentAssignment false boolChainDParent) ≤ not (boolParentAssignment true boolChainDParent) at hbad simp only [boolParentAssignment_boolChainDParent] at hbad cases hbad rfl
10 supporting declarations (lemmas, instances)