{coll : Type u} →
  {idx : Type v} →
    {elem : outParam (Type w)} →
      {valid : outParam (coll → idx → Prop)} →
        {P : Sort u_1} →
          {toGetElem : GetElem coll idx elem valid} →
            {getElem? : coll → idx → Option elem} →
              {getElem! : [Inhabited elem] → coll → idx → elem} →
                {toGetElem' : GetElem coll idx elem valid} →
                  {getElem?' : coll → idx → Option elem} →
                    {getElem!' : [Inhabited elem] → coll → idx → elem} →
                      { toGetElem := toGetElem, getElem? := getElem?, getElem! := getElem! } =
                          { toGetElem := toGetElem', getElem? := getElem?', getElem! := getElem!' } →
                        (toGetElem ≍ toGetElem' → getElem? ≍ getElem?' → getElem! ≍ getElem!' → P) → P