(****************************************************************)

Definition full_adder_sum (a b c : bool) :=
  half_adder_sum (half_adder_sum a b) c.Definition full_adder_carry (a b c : bool) :=
  half_adder_carry a b || half_adder_carry (half_adder_sum a b) c.

Theorem full_adder_ok : forall a b c : bool, bool_to_nat (full_adder_sum a b c) + (bool_to_nat (full_adder_carry a b c) + bool_to_nat (full_adder_carry a b c)) = bool_to_nat a + bool_to_nat b + bool_to_nat c.