Causation is defined recursively: event e is the cause of condition φ in context c iff e is the only sufficient cause of φ in c, and removing e from c either removes φ from c or results in some other event causing φ. A logical language is then defined, in which it is possible to represent and reason about actual and counterfactual events in evolving partial contexts. Axiomatic theories of events and causation are given, and a formal pragmatics is defined, making it possible to reason formally about particular cases. By way of illustration, examples involving preemption and trumping preemption are given.