# kinds                                                               -*- sh -*-
#
# For documentation on this file format, please refer to
# src/theory/builtin/kinds.
#

theory THEORY_UF ::cvc5::internal::theory::uf::TheoryUF "theory/uf/theory_uf.h"
typechecker "theory/uf/theory_uf_type_rules.h"

properties stable-infinite parametric
properties check ppStaticLearn presolve

rewriter ::cvc5::internal::theory::uf::TheoryUfRewriter "theory/uf/theory_uf_rewriter.h"
parameterized APPLY_UF VARIABLE 1: "application of an uninterpreted function; first parameter is the function, remaining ones are parameters to that function"

typerule APPLY_UF ::cvc5::internal::theory::uf::UfTypeRule

operator FUNCTION_TYPE 2: "a function type"
cardinality FUNCTION_TYPE \
    "::cvc5::internal::theory::uf::FunctionProperties::computeCardinality(%TYPE%)" \
    "theory/uf/theory_uf_type_rules.h"
well-founded FUNCTION_TYPE \
    "::cvc5::internal::theory::uf::FunctionProperties::isWellFounded(%TYPE%)" \
    "::cvc5::internal::theory::uf::FunctionProperties::mkGroundTerm(%TYPE%)" \
    "theory/uf/theory_uf_type_rules.h"
enumerator FUNCTION_TYPE \
    ::cvc5::internal::theory::uf::FunctionEnumerator \
    "theory/uf/type_enumerator.h"

operator LAMBDA 2 "a lambda expression; first parameter is a BOUND_VAR_LIST, second is lambda body"

typerule LAMBDA ::cvc5::internal::theory::uf::LambdaTypeRule

variable BOOLEAN_TERM_VARIABLE "Boolean term variable"

# lambda expressions that are isomorphic to array constants can be considered constants
construle LAMBDA ::cvc5::internal::theory::uf::LambdaTypeRule

operator HO_APPLY 2 "higher-order (partial) function application"
typerule HO_APPLY ::cvc5::internal::theory::uf::HoApplyTypeRule

constant CARDINALITY_CONSTRAINT_OP \
  class \
  CardinalityConstraint \
  ::cvc5::internal::CardinalityConstraintHashFunction \
  "expr/cardinality_constraint.h" \
  "the empty set constant; payload is an instance of the cvc5::internal::CardinalityConstraint class"
parameterized CARDINALITY_CONSTRAINT CARDINALITY_CONSTRAINT_OP 0 "a fixed upper bound on the cardinality of an uninterpreted sort"

typerule CARDINALITY_CONSTRAINT_OP ::cvc5::internal::theory::uf::CardinalityConstraintOpTypeRule
typerule CARDINALITY_CONSTRAINT ::cvc5::internal::theory::uf::CardinalityConstraintTypeRule

constant COMBINED_CARDINALITY_CONSTRAINT_OP \
  class \
  CombinedCardinalityConstraint \
  ::cvc5::internal::CombinedCardinalityConstraintHashFunction \
  "expr/cardinality_constraint.h" \
  "the empty set constant; payload is an instance of the cvc5::internal::CombinedCardinalityConstraint class"
parameterized COMBINED_CARDINALITY_CONSTRAINT COMBINED_CARDINALITY_CONSTRAINT_OP 0 "a fixed upper bound on the sum of cardinalities of uninterpreted sorts"

typerule COMBINED_CARDINALITY_CONSTRAINT_OP ::cvc5::internal::theory::uf::CombinedCardinalityConstraintOpTypeRule
typerule COMBINED_CARDINALITY_CONSTRAINT ::cvc5::internal::theory::uf::CombinedCardinalityConstraintTypeRule

endtheory
