use bellman::groth16::PreparedVerifyingKey;
use bellman::Circuit;
use bellman::ConstraintSystem;
use bellman::SynthesisError;
use bls12_381::Bls12;
use std::cell::RefCell;
use std::rc::Rc;
//use std::collections::HashMap;
use fnv::FnvHashMap;
use itertools::Itertools;
use crate::env;
use crate::env::{env_bind, Env};
use crate::types::MalErr::{ErrMalVal, ErrString};
use crate::types::MalVal::{Atom, Bool, Func, Hash, Int, List, MalFunc, Nil, Str, Sym, Vector};
use bls12_381::Scalar;
use sapvi::{BlsStringConversion, ConstraintInstruction};
#[derive(Debug, Clone)]
pub struct Allocation {
pub symbol: String,
pub value: Scalar,
}
#[derive(Debug, Clone)]
pub struct EnforceAllocation {
pub left: Vec<(String, String)>,
pub right: Vec<(String, String)>,
pub output: Vec<(String, String)>,
}
#[derive(Debug, Clone)]
pub struct LispCircuit {
pub params: Vec