Does the zk-SNARK implemented in libsnark meet the definition of Commit-and-prove SNARKs? What commitment strategy does he use?