We present a formalization and computational implementation of the second
formulation of Kant's categorical imperative. This ethical principle requires
an agent to never treat someone merely as a means but always also as an end.
Here we interpret this principle in terms of how persons are causally affected
by actions. We introduce Kantian causal agency models in which moral patients,
actions, goals, and causal influence are represented, and we show how to
formalize several readings of Kant's categorical imperative that correspond to
Kant's concept of strict and wide duties towards oneself and others. Stricter
versions handle cases where an action directly causally affects oneself or
others, whereas the wide version maximizes the number of persons being treated
as an end. We discuss limitations of our formalization by pointing to one of
Kant's cases that the machinery cannot handle in a satisfying way