Formally, a generic ethical system can be seen as a function (or relation) that takes as inputs a set of ordered pairs, each consisting of a possible action (means) and an expected outcome (ends). The system outputs a recommended action, or generates a well ordered set of actions.

Exceptions:

  1. Some ethical systems ignore half of each ordered pair, postulating that the ends justifies the means (eg: Utilitarianism) or the means justifies the ends (eg: Virtue Theory). In a low information environment, these systems will be more likely to function than those that require the full ordered pair.
  2. All ethical functions that evaluate the relation between two <action, outcome> pairs can return equality as well as an ordering. In some cases this may suggest that the ethical system is not appropriate for evaluating the two alternatives.

In order to code an ethical system, one must do two things:

  1. Devise a method to make possible actions and expected outcomes objective and machine readable.
  2. Create a decision procedure for all possible sets of <action, outcome> comparisons.

In addition, an ethical being should be able to generate their own expected outcome from all possible actions. (It must be stressed than this is not part of an ethical system but another function of the ethical being running that system.)