#include "dldsl_defines.hh"
.decl TypeKind(id:number, name:symbol)
#define T(NAME, STR, ...) TypeKind(autoinc(), STR):-true.
DLDSL_TYPES(T)
#undef T
.decl OpKind(id:number, name:symbol, mn:number, mx:number)
#define T(NAME, STR, MN, MX, ...) OpKind(autoinc(), STR, MN, MX):-true.
DLDSL_OP_KIND(T)
#undef T
.decl Type(name:symbol, kind:number, alias:symbol, builtin_name:symbol)
.decl Rel(name:symbol)
.decl RelAlias(name:symbol, alias:symbol)
.decl Field(rel:symbol, index:number, name:symbol, type:symbol)
.decl TermExpr(id:number, rel:symbol)
.decl OpExpr(id:number, type:symbol, op:number)
.decl ExprConst(id:number, index:number, type:symbol, value:symbol)
.decl ExprVar(id:number, index:number, name:symbol)
.decl ExprExpr(id:number, index:number, expr:number)
.decl Rule(id:number, conc_expr:number)
.decl RulePrem(id:number, expr_id:number)
.decl RuleVar(id:number, name:symbol, type:symbol)