module Relation:sig
..end
Functions to manipulate Relation expressions
val is_relation : Expr.expr -> bool
Indicates whether the term is of a relation sort.
val is_store : Expr.expr -> bool
Indicates whether the term is an relation store
Insert a record into a relation.
The function takes n+1
arguments, where the first argument is the relation and the remaining n
elements
correspond to the n
columns of the relation.
val is_empty : Expr.expr -> bool
Indicates whether the term is an empty relation
val is_is_empty : Expr.expr -> bool
Indicates whether the term is a test for the emptiness of a relation
val is_join : Expr.expr -> bool
Indicates whether the term is a relational join
val is_union : Expr.expr -> bool
Indicates whether the term is the union or convex hull of two relations. The function takes two arguments.
val is_widen : Expr.expr -> bool
Indicates whether the term is the widening of two relations The function takes two arguments.
val is_project : Expr.expr -> bool
Indicates whether the term is a projection of columns (provided as numbers in the parameters). The function takes one argument.
val is_filter : Expr.expr -> bool
Indicates whether the term is a relation filter
Filter (restrict) a relation with respect to a predicate. The first argument is a relation. The second argument is a predicate with free de-Bruijn indices corresponding to the columns of the relation. So the first column in the relation has index 0.
val is_negation_filter : Expr.expr -> bool
Indicates whether the term is an intersection of a relation with the negation of another.
Intersect the first relation with respect to negation of the second relation (the function takes two arguments). Logically, the specification can be described by a function
target = filter_by_negation(pos, neg, columns)
where columns are pairs c1, d1, .., cN, dN of columns from pos and neg, such that target are elements in ( x : expr ) in pos, such that there is no y in neg that agrees with ( x : expr ) on the columns c1, d1, .., cN, dN.
val is_rename : Expr.expr -> bool
Indicates whether the term is the renaming of a column in a relation
The function takes one argument. The parameters contain the renaming as a cycle.
val is_complement : Expr.expr -> bool
Indicates whether the term is the complement of a relation
val is_select : Expr.expr -> bool
Indicates whether the term is a relational select
Check if a record is an element of the relation.
The function takes n+1
arguments, where the first argument is a relation,
and the remaining n
arguments correspond to a record.
val is_clone : Expr.expr -> bool
Indicates whether the term is a relational clone (copy)
Create a fresh copy (clone) of a relation.
The function is logically the identity, but
in the context of a register machine allows
for terms of kind Relation.is_union
to perform destructive updates to the first argument.
val get_arity : Sort.sort -> int
The arity of the relation sort.
val get_column_sorts : Sort.sort -> Sort.sort list
The sorts of the columns of the relation sort.