  The development of safety-critical systems requires the control of hazards
that can potentially cause harm. To this end, safety engineers rely during the
development phase on architectural solutions, called safety patterns, such as
safety monitors, voters, and watchdogs. The goal of these patterns is to
control (identified) faults that can trigger hazards. Safety patterns can
control such faults by e.g., increasing the redundancy of the system.
Currently, the reasoning of which pattern to use at which part of the target
system to control which hazard is documented mostly in textual form or by means
of models, such as GSN-models, with limited support for automation. This paper
proposes the use of logic programming engines for the automated reasoning about
system safety. We propose a domain-specific language for embedded system safety
and specify as disjunctive logic programs reasoning principles used by safety
engineers to deploy safety patterns, e.g., when to use safety monitors, or
watchdogs. Our machinery enables two types of automated safety reasoning: (1)
identification of which hazards can be controlled and which ones cannot be
controlled by the existing safety patterns; and (2) automated recommendation of
which patterns could be used at which place of the system to control potential
hazards. Finally, we apply our machinery to two examples taken from the
automotive domain: an adaptive cruise control system and a battery management
system.
