bool MerkleVerifier::verifyProofs(const hash_matrix &proofs){ bool valid = true; unsigned i = 0; do { vector<hashDirect> ith = proofs[i]; valid = checkProof(ith); i++; } while(valid && i < proofs.size()); return valid; }
void ProofGraph::handleProof( ) { #ifndef OPTIMIZE checkProof(); cleanProofGraph(); checkProof(); #endif if( produceProof() ) { //Print original proof ofstream dotty( "proof.dot" ); printProofAsDotty( dotty ); if( reduceProof() > 0 ) { //Reduce proof transfProof(); //Print reduced proof ofstream dottyred( "proof_reduced.dot" ); printProofAsDotty( dottyred ); } } else if ( produceInterpolants() > 0 ) { //Make sense to transform proof only if there are AB-mixed predicates if (!lightVars.empty()) { transfProof(); //Print reordered proof ofstream dottyre( "proof_reordered.dot" ); printProofAsDotty( dottyre ); } } }
vec<long>& Proof::save(cchar* prooffilename) { /* assert(!fp.null()); // Switch to read mode: fp.setMode(READ); fp.seek(0); // Copy file: File out(filename, "wox"); if (out.null()) return false; while (!fp.eof()) out.putChar(fp.getChar()); // Restore write (proof-logging) mode: fp.seek(0, SEEK_END); fp.setMode(WRITE);*/ return checkProof((char * )prooffilename); }
void ProofGraph::transfProof( ) { // Time left for transformation double leftTime = cpuTime( ); size_t size=0; int numnodes=0; int numedges=0; int numleaves=0; int numvars=0; double avgdeg=0; int dia=0; int maxclasize=0; double avgclasize=0; int unsatcoredim=0; int numunary=0; double avgnumresunary=0; double avgnumres=0; int maxnumres=0; double varnumres=0; double varclasize=0; if ( verbose() ) { getGraphInfo( ); size = graph.size( ); numnodes=num_nodes; numedges=num_edges; numleaves=num_leaves; numvars=numVars; avgdeg=(double)numedges / (double)numnodes; dia=diameter; maxclasize=max_cla_size; avgclasize=av_cla_size; unsatcoredim=dim_unsat_core; numunary=num_unary; avgnumresunary=avg_num_res_unary; avgnumres=avg_num_res; maxnumres=max_num_res; varnumres=var_num_res; varclasize=var_cla_size; } double time=0; if( produceProof() ) { if ( reduceProof() > 0 ) { time = doIt( leftTime ); } } else if( produceInterpolants() > 0 ) { //No need to transform proof if no AB-mixed predicate is present! assert(!lightVars.empty()); if ( reorderPivots() > 0) time = doIt( leftTime ); else { opensmt_error( "Cannot produce interpolants because of AB-mixed predicates. Please enable pivot reordering in config file" ); } } #ifndef OPTIMIZE checkProof(); cleanProofGraph( ); checkProof(); #endif if ( verbose() > 0 ) { getGraphInfo( ); double perc_nodes=(((double)num_nodes-(double)numnodes)/(double)numnodes)*100; double perc_edges=(((double)num_edges-(double)numedges)/(double)numedges)*100; double perc_leaves=(((double)num_leaves-(double)numleaves)/(double)numleaves)*100; double perc_unsatcore=(((double)dim_unsat_core-(double)unsatcoredim)/(double)unsatcoredim)*100; cerr << "#" << endl; cerr << "# ------------------------------------" << endl; cerr << "# PROOF GRAPH TRASFORMATION STATISTICS " << endl; cerr << "# ------------------------------------" << endl; cerr << "# Structural properties" << endl; cerr << "# ---------------------" << endl; cerr << "# Light variables............: "; fprintf( stderr, "%-10ld\n", lightVars.size( ) ); cerr << "# Nominal num proof variables: "; fprintf( stderr, "%-10ld\n", numVarsLimit ); cerr << "# Actual num proof variables.: "; fprintf( stderr, "%-10d %-10d\n", numvars, numVars ); cerr << "# Nodes......................: "; fprintf( stderr, "%-10d %-10d\n", numnodes, num_nodes ); cerr << "# Nodes variation............: "; fprintf( stderr, "%-9.2f %%\n", perc_nodes ); cerr << "# Leaves.....................: "; fprintf( stderr, "%-10d %-10d\n", numleaves, num_leaves ); cerr << "# Leaves variation...........: "; fprintf( stderr, "%-9.2f %%\n", perc_leaves ); cerr << "# Unsat core.................: "; fprintf( stderr, "%-10d %-10d\n", unsatcoredim, dim_unsat_core ); cerr << "# Unsat core variation.......: "; fprintf( stderr, "%-9.2f %%\n", perc_unsatcore ); cerr << "# Edges......................: "; fprintf( stderr, "%-10d %-10d\n", numedges, num_edges ); cerr << "# Edges variation............: "; fprintf( stderr, "%-9.2f %%\n", perc_edges ); cerr << "# Graph vector size..........: "; fprintf( stderr, "%-10ld %-10ld\n", size, graph.size( ) ); cerr << "# Average degree.............: "; fprintf( stderr, "%-10.2f %-10.2f\n", avgdeg, (double)num_edges / (double)num_nodes ); cerr << "# Diameter...................: "; fprintf( stderr, "%-10d %-10d\n", dia, diameter ); cerr << "# Unary clauses..............: "; fprintf( stderr, "%-10d %-10d\n", numunary, num_unary ); cerr << "# Max clause size............: "; fprintf( stderr, "%-10d %-10d\n", maxclasize, max_cla_size ); cerr << "# Average clause size........: "; fprintf( stderr, "%-10.2f %-10.2f\n", avgclasize, av_cla_size ); cerr << "# Variance clause size.......: "; fprintf( stderr, "%-10.2f %-10.2f\n", varclasize, var_cla_size ); cerr << "# Max num res................: "; fprintf( stderr, "%-10d %-10d\n", maxnumres, max_num_res ); cerr << "# Average num res............: "; fprintf( stderr, "%-10.2f %-10.2f\n", avgnumres, avg_num_res ); cerr << "# Avg num res unary clauses..: "; fprintf( stderr, "%-10.2f %-10.2f\n", avgnumresunary, avg_num_res_unary ); cerr << "# Variance num res...........: "; fprintf( stderr, "%-10.2f %-10.2f\n", varnumres, var_num_res ); cerr << "# -------------------------" << endl; cerr << "# Transformation statistics" << endl; cerr << "# -------------------------" << endl; cerr << "# Graph building time........: " << building_time << " s" << endl; cerr << "# Transformation time........: " << time << " s" << endl; cerr << "# Duplications...............: " << num_dup << endl; cerr << "# Node additions due to A1...: " << num_node_add_A1 << endl; cerr << "# ---------------------------" << endl; cerr << "# Rules application statistics" << endl; cerr << "# ---------------------------" << endl; cerr << "# A1.........................: " << A1 << endl; cerr << "# A1 undo....................: " << A1Undo << endl; cerr << "# A1 to B....................: " << A1B << endl; cerr << "# A2.........................: " << A2 << endl; cerr << "# A2 to B....................: " << A2B << endl; cerr << "# A2 unary...................: " << A2U << endl; cerr << "# B1.........................: " << B1 << endl; cerr << "# B2.........................: " << B2 << endl; cerr << "# B2 killer..................: " << B2K << endl; cerr << "# B3.........................: " << B3 << endl; cerr << "# ---------------------------" << endl; } }