Different types of methods:
- Folding: Aggregates multiple witnesses into a single, relaxed one (relaxed R1CS) outside of the circuit. Produces only one proof with all the witnesses, and usually a proof for the folding. (e.g. Nova, Supernova, Hypernova, Sangria, Protostar, Protogalaxy…)
- Aggregation: Aggregates several proofs into one proof. (e.g. SnarkPack, aPlonK…)
- Recursion: Proof-Carrying Data (PCD) or IVC; Given a proof, a state, and a transformation, computes a new proof.
- Folding combines witnesses whereas aPlonK combines commitments.
- Folding better than aPlonK (whose verifier requires for proofs to aggregate operation on ) or accumulation in general.
- Folding interesting when proving several instances of the same statement at the same time.
- If a verification function is too long or a proof is too large, one try to make a proof of a proof. For example, prove a STARK (with a non-constant proof and verification function) using Groth16 (3 group elements, verification function of 2 pairings).