I think the issue here is that you are trying to project a discontinuous functional into a continuous function space (see this discussion for instance [my bad at choosing a CG space of order 1]).
Depending on what you want, you can define V1
as a Discontinuous space and then project or try the following as proposed in the above link I shared:
v = TestFunction(V1)
lhs = assemble(inner(Constant(1.0),v)*dx)
rhs = assemble(inner(Check,v)*dx)
f2 = Function(V1)
as_backend_type(f2.vector())\
.vec().pointwiseDivide(as_backend_type(rhs).vec(),
as_backend_type(lhs).vec())
print(f2.vector().get_local())