apply Nat.fold_hom Prod.fst _ _ _ (x,1)
case h
α : Type
inst✝¹ : (n : Nat) → OfNat α n
inst✝ : UInt α
x : α
n : Nat
hn : Nat.log2RU (length α) = n
⊢ Nat.fold (fun i x => (x &&& ~~~bitmask (OfNat.ofNat i)) + (x &&& bitmask (OfNat.ofNat i)) >>> (1 <<< OfNat.ofNat i)) n
      x =
    (Nat.fold
        (fun i x =>
          match x with
          | (x, snd) =>
            ((x &&& ~~~bitmask (OfNat.ofNat i)) + (x &&& bitmask (OfNat.ofNat i)) >>> (1 <<< OfNat.ofNat i),
              1 <<< OfNat.ofNat (i + 1)))
        n (x, 1)).fst
case h
α : Type
inst✝¹ : (n : Nat) → OfNat α n
inst✝ : UInt α
x : α
n : Nat
hn : Nat.log2RU (length α) = n
⊢ ∀ (i : Nat) (a : α × α),
    i < n →
      (a.fst &&& ~~~bitmask (OfNat.ofNat i)) + (a.fst &&& bitmask (OfNat.ofNat i)) >>> (1 <<< OfNat.ofNat i) =
        (match a with
          | (x, snd) =>
            ((x &&& ~~~bitmask (OfNat.ofNat i)) + (x &&& bitmask (OfNat.ofNat i)) >>> (1 <<< OfNat.ofNat i),
              1 <<< OfNat.ofNat (i + 1))).fst