# Soma System Design

**Soma Front-End**: The proof system for the Soma VM is built for a RISC-V-like CPU. This allows developers to write programs in programming languages like C or Rust and compile them to the appropriate assembly, thereby generating proofs for the correct computation of their code. This encourages developers to build on Arithmic, as there is a comfortable learning curve for the developers.

**Soma Back-End:** The Soma VM has three components: a) CPU instructions, b) 32-word registers, where each word comprises 32 bits, and c) a word-addressable memory. Soma uses lookups to prove the validity of the results corresponding to most CPU operations, and a very small number of constraints to check other relevant parameters corresponding to the execution of 1 cycle in the CPU. The consistency of reads and writes into memory is proved using an offline memory-checking procedure.

**Soma System Architecture**: The Arithmic Network employs a parallel recursive architecture explained in Section 1. All proofs in this parallel recursive architecture are computed over fields of characteristic two. Computing proofs over such fields allows us to employ a dedicated precompile for Keccak hashes that massively accelerates the proof system using linear time provers and a parallel recursive architecture. Although computing proofs over fields of characteristic two is very lucrative in terms of proving time, the proof complexity and the verifier complexity are considerable. Consequently, the verifier of such a proof system cannot be executed within a smart contract. To this end, the proof computed by the root node of the binary tree in the recursive architecture is further validated inside a Soma VM program whose proof is computed over BN-254 Scalar. We remark that pairing-based commitment schemes over BN-254 scalar enable proof systems with constant time verifier and proof complexity, and hence such a verifier can be efficiently executed at L1. The execution length of this VM program is immense. Consequently, we break it into shards of provable length and prove its execution using an Incrementally Verifiable Computation (IVC) based proof system.
