Causal inference in Python
github.com
github.com
The broad idea in (a) is to start with a fully connected graph, and eliminate edges between nodes that can be tested as independent, or independent conditionally on other nodes. This gives you a non-directed graph which can be oriented by several methods (identifying V-structures, looking at residuals of regressions of X on Y vs Y on X).
The theory in (b) actually generalizes instrumental variables and lays out graphical configurations where you can measure the causal effect of a variable onto another variable, and how to compute that effect.
A great reference: https://www.amazon.com/Causality-Reasoning-Inference-Judea-P...
A nice introduction: https://www.youtube.com/watch?v=RPgvfSeQB8A
If you get a bunch of variables and relate them through linear equations where some cause others plus some error, then different patterns of causal relations imply different covariance matrices. Classically, people have used these covariance matrices to choose between possible causal models.
There are different approaches, but a common one in the behavioral sciences is to choose a few causal models to represent theories, and then perform model selection (like choosing between multiple regression models with different variables).
To answer your question, though, instrumental variables are a specific causal pattern in a model, but there can be other models, such as those with latent variables.