summaryrefslogtreecommitdiff
path: root/src/theory/uf/kinds
blob: efad8beb9d06594b02e87d2bd1bbbb8508e39e79 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# kinds                                                               -*- sh -*-
#
# For documentation on this file format, please refer to
# src/theory/builtin/kinds.
#

theory THEORY_UF ::CVC4::theory::uf::TheoryUF "theory/uf/theory_uf.h"
typechecker "theory/uf/theory_uf_type_rules.h"
instantiator ::CVC4::theory::uf::InstantiatorTheoryUf "theory/uf/theory_uf_instantiator.h"

properties stable-infinite parametric
properties check propagate ppStaticLearn presolve

rewriter ::CVC4::theory::uf::TheoryUfRewriter "theory/uf/theory_uf_rewriter.h"
parameterized APPLY_UF VARIABLE 1: "uninterpreted function application"

typerule APPLY_UF ::CVC4::theory::uf::UfTypeRule

operator CARDINALITY_CONSTRAINT 2 "cardinality constraint"
typerule CARDINALITY_CONSTRAINT ::CVC4::theory::uf::CardinalityConstraintTypeRule

#
# For compact function models
# There are three cases for FUNCTION_MODEL nodes:
# (1) The node has two children, the first being of kind FUNCTION_CASE_SPLIT.  The second child specifies a default value.
# (2) The node has one child of kind FUNCTION_CASE_SPLIT.
# (3) The node has one child, it's default value.
# 
# Semantics of FUNCTION_MODEL kind-ed nodes.  The value of n applied to arguments args is
#
# getValueFM( n, args, 0 ), where:
# 
# Node getValueFM( n, args, argIndex )
# if n.getKind()!=FUNCTION_MODEL
#   return n;
# else if (1)
#   val = getValueFCS( n[0], args, argIndex );
#   if !val.isNull()
#     return val;
#   else 
#     return getValueFM( n[1], args, argIndex+1 );
# else if (2)
#   return getValueFCS( n[0], args, argIndex );
# else if (3)
#   return getValueFM( n[0], args, argIndex+1 );
# 
# Node getValueFCS( n, args, argIndex ) :
#   //n.getKind()==FUNCTION_CASE_SPLIT
#   //n[j].getKind()==FUNCTION_CASE for all 0<=j<n.getNumChildren()
#   if( args[argIndex]=n[i][0] for some i)  
#     return getValueFM( n[i][1], args, argIndex+1 );
#   else
#     return null;
#

operator FUNCTION_MODEL 1:2 "function model"
typerule FUNCTION_MODEL ::CVC4::theory::uf::FunctionModelTypeRule

operator FUNCTION_CASE_SPLIT 1: "function case split"
typerule FUNCTION_CASE_SPLIT ::CVC4::theory::uf::FunctionCaseSplitTypeRule

operator FUNCTION_CASE 2 "function case"
typerule FUNCTION_CASE ::CVC4::theory::uf::FunctionCaseTypeRule

endtheory
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback