If Gevulot was implemented as an application on some other layer one, it would inherit the cost structure and performance characteristics of the underlying chain, which in turn would make it impossible to compete with centralized provers.
Gevulot also cannot practically be implemented as a layer two, because it does not have a simple abstracted instruction set. In order for Gevulot to support things like multi-threading and GPU, which are a necessity for performant proving, the instruction set becomes practically unverifiable.
Gevulot could in theory be implemented as some kind of optimistic layer one, where verification was not re-executed by default and, for example, was only done when a challenge was submitted. However, these types of structures necessarily have significantly slower finality and create additional complexity for the system.
How does Gevulot ensure that provers act honestly?