示例#1
0
//
// Execute a script in which there is only
// one check-sat. We can use specialized
// functions, such as preprocessing, to
// improve performance
//
int OpenSMTContext::executeStatic( )
{
  assert( init );
  //assert( config.incremental == 0 );
  //
  // Hack for SMT-COMP 2010 for retrieving formula
  //
  for ( size_t i = 0 ; i < command_list.size( ) ; i ++ )
  {
    Command & c = command_list[ i ];
    if ( c.command == ASSERT )
      Assert( c.enode );
    else if ( c.command == CHECK_SAT )
    {
      // Reduced check for computing interpolants
#ifdef PRODUCE_PROOF
      if ( config.produce_inter != 0 )
	staticCheckSATInterp( );
      else
#endif
      {
	staticCheckSAT( );
        ostream & out = config.getRegularOut( );
        if ( state == l_Undef )
            out << "unknown" << endl;
        else if ( state == l_False )
            out << "unsat" << endl;
        else
            out << "sat" << endl;
      }
    }
    else if ( c.command == EXIT )
      Exit( );
    else if ( c.command == GET_PROOF )
      GetProof( );
    else if ( c.command == GET_INTERPOLANTS )
      GetInterpolants( );
    else
      opensmt_error( "command not supported (yet)" );
  }

  return 0;
}
示例#2
0
//
// Execute a generic SMTLIB2 script
//
int OpenSMTContext::executeIncremental( )
{
  assert( init );
  assert( config.incremental == 1 );

  // Initialize theory solvers
  egraph.initializeTheorySolvers( &solver );

  lbool status = l_Undef;

  for ( size_t i = 0 ; i < command_list.size( ) ;  ++ i )
  {
    Command & c = command_list[ i ];

    // Commands blocked with assert( false ) are issued from parser directly
    switch( c.command )
    {
      case SET_LOGIC:
	assert( false );
	break;
      case SET_OPTION:
	assert( false );
	break;
      case SET_INFO:
	assert( false );
	break;
      case DECLARE_SORT:
	DeclareSort( c.str, c.num );
	break;
      case DEFINE_SORT:
	opensmt_error( "construct define-sort not yet supported" );
	break;
      case DECLARE_FUN:
	DeclareFun( c.str, c.sort_arg, c.sort_ret );
	break;
      case DEFINE_FUN:
	opensmt_error( "construct define-fun not yet supported" );
	break;
      case PUSH:
	Push( );
	break;
      case POP:
	Pop( );
	break;
      case ASSERT:
	Assert( c.enode );
	break;
      case CHECK_SAT:
	status = CheckSAT( );
	break;
      case GET_ASSERTIONS:
	opensmt_error( "construct get-assertions not yet supported" );
	break;
      case GET_PROOF:
	GetProof( );
	break;
      case GET_INTERPOLANTS:
	GetInterpolants( );
	break;
      case GET_UNSAT_CORE:
	opensmt_error( "construct get-unsat-core not yet supported" );
	break;
      case GET_VALUE:
	opensmt_error( "construct get-value not yet supported" );
	break;
      case GET_ASSIGNMENT:
	opensmt_error( "construct get-assignment not yet supported" );
	break;
      case GET_OPTION:
	opensmt_error( "construct get-option not yet supported" );
	break;
      case GET_INFO:
	opensmt_error( "construct get-info not yet supported" );
	break;
      case EXIT:
	Exit( );
	break;
      default:
	opensmt_error( "case not handled" );
    }
  }

  return 0;
}
示例#3
0
int GetProof_C(int64_t go_proof_source, char* server_ip, size_t server_ip_sz, char* hostname, size_t hostname_sz, char* server_config, size_t server_config_sz, int quic_version, char* chlo_hash, size_t chlo_hash_len, int ecdsa_ok, char **out_signature, size_t *out_signature_sz) {
    return GetProof(go_proof_source, server_ip, server_ip_sz, hostname, hostname_sz, server_config, server_config_sz, quic_version, chlo_hash, chlo_hash_len, ecdsa_ok, out_signature, out_signature_sz);
}