pub fn run(self) -> Result<SP1ProofWithPublicValues> {
        // Get the arguments.
        let Self { prover, mode, pk, stdin, mut context_builder, core_opts, recursion_opts, mock } =
            self;
        let opts = SP1ProverOpts { core_opts, recursion_opts };
        let context = context_builder.build();

        // Dump the program and stdin to files for debugging if `SP1_DUMP` is set.
        crate::utils::sp1_dump(&pk.elf, &stdin);

        // Run the prover.
        if mock {
            prover.mock_prove_impl(pk, &stdin, context, mode)
        } else {
            prover.prove_impl(pk, &stdin, opts, context, mode)
        }
    }
Run the prover with the built arguments.

# Details
This method will run the prover with the built arguments. If the prover fails to run, the
method will return an error.

# Example
```rust,no_run
use sp1_sdk::{include_elf, Prover, ProverClient, SP1Stdin};

let elf = &[1, 2, 3];
let stdin = SP1Stdin::new();

let client = ProverClient::builder().cpu().build();
let (pk, vk) = client.setup(elf);
let proof = client.prove(&pk, &stdin).run().unwrap();
```
crates/sdk/src/cpu/prove.rs