Class: ADSL::Parser::ASTExists

Inherits:
ASTNode show all
Defined in:
lib/adsl/parser/ast_nodes.rb

Instance Method Summary collapse

Methods inherited from ASTNode

#==, #adsl_ast, #adsl_ast_size, #block_replace, #dup, #hash, is_formula?, is_objset?, is_statement?, node_type, #objset_has_side_effects?, #optimize, #preorder_traverse

Methods included from Verification::FormulaGenerators

#[], #and, #binary_op, #binary_op_with_any_number_of_params, #equiv, #exists, #false, #forall, #handle_quantifier, #implies, #in_formula_builder, #not, #or, #true

Methods included from Verification::Utils

#classname_for_classname, #infer_classname_from_varname, #t

Instance Method Details

#to_adslObject



1256
1257
1258
1259
# File 'lib/adsl/parser/ast_nodes.rb', line 1256

def to_adsl
  v = @vars.map{ |var, objset| "#{ var.text } in #{ objset.to_adsl }" }.join ", " 
  "exists(#{v}: #{ @subformula.to_adsl })"
end

#typecheck_and_resolve(context) ⇒ Object



1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
# File 'lib/adsl/parser/ast_nodes.rb', line 1238

def typecheck_and_resolve(context)
  context.in_stack_frame do
    vars = []
    objsets = []
    @vars.each do |var_node, objset_node|
      objset = objset_node.typecheck_and_resolve context
      
      var = ADSL::DS::DSVariable.new :name => var_node.text, :type => objset.type
      context.define_var var, var_node

      vars << var
      objsets << objset
    end
    subformula = @subformula.nil? ? nil : @subformula.typecheck_and_resolve(context)
    return ADSL::DS::DSExists.new :vars => vars, :objsets => objsets, :subformula => subformula
  end
end