# Zero-Knowledge Proofs & zkVMs

Zero-knowledge proofs (ZKPs) and zero-knowledge virtual machines (zkVMs) are an essential part of our verifiable computing strategy. They allow us to prove that a computation was performed correctly without revealing the actual computation or its inputs.

## How Zero-Knowledge Proofs Work

At the core of most ZKPs is a process called arithmetization. This involves translating a program’s computation into a series of mathematical equations typically over finite fields or polynomial rings. The prover can then show that these equations are satisfied, without revealing the actual inputs or intermediate values.

The details of this transformation depend on the specific ZK proof system (e.g., SNARKs or STARKs) and the cryptographic primitives it relies on.

## What Makes zkVMs Different?

A zkVM is a special kind of ZK system that runs entire programs inside a virtual machine. Unlike traditional ZK systems, which require manual arithmetization, zkVMs automate that step. They accept programs written in high-level languages and compile them down to arithmetic circuits internally.

This abstraction makes it much easier to verify real-world programs in a zero-knowledge context even if those programs weren’t originally built with verifiability in mind.

## Why zkVMs Matter to Proof of Proof

zkVMs play a critical role in the Proof of Proof framework for two main reasons:

1. **Working with existing high-level languages**: Many of the formal systems we use weren’t designed with zero-knowledge in mind. They're implemented in high-level languages and frameworks like K. zkVMs offer a way to integrate these systems into zero-knowledge workflows without major rewrites.
2. **Shared goals and architecture**: Like zkVMs, our Proof of Proof system focuses on verifying arbitrary programs in arbitrary languages. Both systems aim to turn computation into verifiable proofs. That means techniques and optimizations from zkVMs often apply directly to what we’re building.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.fast.xyz/proof-of-proof-archived/core-technologies/zero-knowledge-proofs-and-zkvms.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
