==================================
MODEL: adder.smv, sat_adder.xml
AUTHOR: Marco Bozzano
==================================

A very simple model of a six-bit adder.


MODEL
=====

The "bit" module models a component which takes an input variable
representing the value of a bit, and simply copies it to an output
variable.  The "adder" module takes in input the outputs of six bit
module instances, and computes their sum (modulo two).  Finally, the
"main" module defines the overall system, by instantiating an adder
and six different bit components, whose inputs are random Boolean
variables.

FAILURE MODES
=============

- corrupted_bit
  type = "inverted"
  nusmv_node = bit.output
  description: a corrupted input bit

- power failure
  type = "stuck_at_0"
  nusmv_node = adder.output
  description: power failure stucks the output of the adder to zero

- short circuit
  type = "stuck_at_1"
  nusmv_node = adder.output
  description: short circuit stucks the output of the adder to one

FAILURE SETS
============

- fs-bit1-bit2
  type = simultaneous
  components = bit1.output_FailureMode = inverted,
               bit2.output_FailureMode = inverted
  description = this FS models a simultaneous failure of bit1 and bit2

- fs-bit2-bit3
  type = simultaneous
  components = bit2.output_FailureMode = inverted,
               bit3.output_FailureMode = inverted
  description = this FS models a simultaneous failure of bit2 and bit3

SAFETY REQUIREMENTS
===================

- CTL property
  formula = "AG ((random1 = 0 & random2 = 0 & random3 = 0 & random4 = 0 &
    random5 = 0 & random6 = 0 & adder.output != 0) ->
    (bit1.output_FailureMode = inverted | bit2.output_FailureMode = inverted |
     bit3.output_FailureMode = inverted | bit4.output_FailureMode = inverted |
     bit5.output_FailureMode = inverted | bit6.output_FailureMode = inverted))"
  description: If "0+0+0+0+0+0 is not equal to 0", then one of the inputs is
    corrupted. This property may be false (e.g., in case of a short circuit)

- CTL property
  formula = "AG ((random1 = 0 & random2 = 0 & random3 = 0 & random4 = 0 &
    random5 = 0 & random6 = 0 & adder.output != 0) ->
    (adder.output_FailureMode != stuck_at_0))"
  description: If "0+0+0+0+0+0 is not equal to 0", then power has not failed.
    This property holds

- PROP formula for FAULT TREE generation
  formula: "random1 = 0 & random2 = 0 & random3 = 0 & random4 = 0 &
    random5 = 0 & random6 = 0 & adder.output != 0"
  description: We want to instigate events causing the sum 0+0+0+0+0+0 to be
    different from 0
