(* paired_odd_r b w == w = [b1 ~b1 b2 ~b2 ... bn ~bn ~b] *)
Definition paired_odd_r (b : bool) (w : word) := paired (append w (single b)).(* paired_rot b w == w = [b b2 ~b2 ... bn ~bn ~b] *)
Inductive paired_rot : bool -> word -> Prop :=
  | paired_rot_empty : forall b : bool, paired_rot b empty
  | paired_rot_bit :
      forall (b : bool) (w : word),
      paired_odd_r b w -> paired_rot b (bit b w).(* paired_rot b w == w = [b b2 ~b2 ... bn ~bn ~b] *)
Inductive paired_rot : bool -> word -> Prop :=
  | paired_rot_empty : forall b : bool, paired_rot b empty
  | paired_rot_bit :
      forall (b : bool) (w : word),
      paired_odd_r b w -> paired_rot b (bit b w).(* paired_rot b w == w = [b b2 ~b2 ... bn ~bn ~b] *)
Inductive paired_rot : bool -> word -> Prop :=
  | paired_rot_empty : forall b : bool, paired_rot b empty
  | paired_rot_bit :
      forall (b : bool) (w : word),
      paired_odd_r b w -> paired_rot b (bit b w).

(* Specifications: *)
Lemma paired_odd_r_from_rot : forall (w : word) (b : bool), paired_rot b w -> paired_odd_r b (bit (negb b) w).