<aside> 💡 How can instances overwrite a previous or conflicting witness declaration? When can you declare witnesses before?
</aside>
Two phases:
Modern circuit languages do both phases in the background, so developer does not have to worry about writing two pieces of code and instead just writing one that will be used in both phases
Setup phase
After derived circuit, it can be executed in prover phase
The assignment is then interpreted as constructive proof for a knowledge claim in the proof system (R1CS, PLONK, QAP)
<aside> 💡 What is purpose of a circuit compiler?
It does all the work for these two phases: setup and prover. Generates a graphical circuit representation, then generates valid assignment by executing in that circuit, then interpret it for a specified proof system.
Can the setup and prover phase be agnostic with any proof system? Like can the graphical representation be flexible for any proving system?
</aside>
Braincompiling