∀ {m : Type u_3} {R : Type v} [inst : CommRing R] [inst_1 : DecidableEq m] [inst_2 : Fintype m] (M : Matrix m m R)
  (p : m → Prop) [inst_3 : DecidablePred p],
  (∀ (i : m), ¬p i → ∀ (j : m), p j → M i j = 0) →
    M.det = (M.toSquareBlockProp p).det * (M.toSquareBlockProp fun i => ¬p i).det