∀ {α : Type u_1} [inst : Lean.Meta.Grind.HasAnchor α] (es : Array α) (numDigits : ℕ),
  Lean.Meta.Grind.getNumDigitsForAnchors.go✝ es numDigits =
    (if 4 * numDigits < 64 then
        have shift := 64 - 4 * numDigits;
        have found := ∅;
        do
        let r ←
          forIn es ⟨none, found⟩ fun e r =>
              have r := r.snd;
              have found := r;
              have a := Lean.Meta.Grind.HasAnchor.getAnchor e;
              have a' := a >>> shift.toUInt64;
              if found.contains a' = true then do
                let __do_lift ← Lean.Meta.Grind.getNumDigitsForAnchors.go✝¹ es (numDigits + 1)
                pure (ForInStep.done ⟨some __do_lift, found⟩)
              else
                have found := found.insert a';
                do
                pure PUnit.unit
                pure (ForInStep.yield ⟨none, found⟩)
        have found : Std.HashSet UInt64 := r.snd
        have __do_jp : PUnit.{1} → Id ℕ := fun y => pure numDigits
        match r.fst with
          | none => do
            let y ← pure PUnit.unit
            __do_jp y
          | some a => pure a
      else pure numDigits).run