induction n1; intuition; simpl in *.
rewrite shiftOut_0.
econstructor.
econstructor.
econstructor.
intuition.
trivial.
destruct s; simpl in *.
discriminate.
case_eq (shiftOut s (n1 + n2)); intuition.
rewrite H0 in H.
destruct p.
inversion H; clear H; subst.
edestruct IHn1.
eauto.
destruct H.
destruct H.
intuition.
rewrite H1.
econstructor.
econstructor.
econstructor.
intuition.
eauto.
simpl.
rewrite H3.
trivial.
rewrite H0 in H.
discriminate.
Qed.

(* Specifications: *)
Theorem shiftOut_plus_None :
forall n1 n2 s,
shiftOut s (n1 + n2) = None ->
shiftOut s n1 = None \/
(exists x s', shiftOut s n1 = Some (x, s') /\
shiftOut s' n2 = None).
Theorem shiftOut_plus_None :
forall n1 n2 s,
shiftOut s (n1 + n2) = None ->
shiftOut s n1 = None \/
(exists x s', shiftOut s n1 = Some (x, s') /\
shiftOut s' n2 = None).