∀ (α α' : Type u_1),
  α = α' →
    ∀ (motive : List α → Sort u_2) (motive' : List α' → Sort u_2),
      motive ≍ motive' →
        ∀ (nil : motive []) (nil' : motive' []),
          nil ≍ nil' →
            ∀ (singleton : (a : α) → motive [a]) (singleton' : (a : α') → motive' [a]),
              singleton ≍ singleton' →
                ∀ (cons_append : (a : α) → (l : List α) → (b : α) → motive l → motive (a :: (l ++ [b])))
                  (cons_append' : (a : α') → (l : List α') → (b : α') → motive' l → motive' (a :: (l ++ [b]))),
                  cons_append ≍ cons_append' →
                    ∀ (l : List α) (l' : List α'),
                      l ≍ l' →
                        List.bidirectionalRec nil singleton cons_append l ≍
                          List.bidirectionalRec nil' singleton' cons_append' l'