Datalog.Programtype program = {rules : Rule.Rules.t Predicate.PredMap.t;edb : ASPred.PredIds.t;edb_facts : Predicate.FactSet.t Predicate.PredMap.t;idb : ASPred.PredIds.t;pred_table : ASPred.PredIdTable.table;const_table : Datalog_AbstractSyntax.ConstGen.Table.table;rule_id_gen : UtilsLib.IdGenerator.IntIdGen.t;abstract_rules : ASRule.Rules.t;}val empty : programval make_program : ASProg.program -> programval temp_facts :
Rule.rule ->
Rule.FactArray.row Predicate.PredMap.t ->
Rule.FactArray.row Predicate.PredMap.t ->
Rule.FactArray.row Predicate.PredMap.t ->
Rule.FactArray.row Predicate.PredMap.t ->
((ASPred.predicate * Predicate.FactSet.elt list) -> Rule.rule -> 'a -> 'a) ->
'a ->
ASPred.PredIdTable.table ->
Datalog_AbstractSyntax.ConstGen.Table.table ->
'aval p_semantics_for_predicate :
Predicate.PredMap.key ->
program ->
Rule.FactArray.row Predicate.PredMap.t ->
Rule.FactArray.row Predicate.PredMap.t ->
Rule.FactArray.row Predicate.PredMap.t ->
Rule.FactArray.row Predicate.PredMap.t ->
Predicate.PremiseSet.t Predicate.PredicateMap.t ->
Predicate.FactSet.t * Predicate.PremiseSet.t Predicate.PredicateMap.tval seminaive :
program ->
Rule.FactArray.row Predicate.PredMap.t
* Predicate.PremiseSet.t Predicate.PredicateMap.tval to_abstract : program -> ASProg.programval extend : program -> ASProg.modifier -> programval add_e_facts :
program ->
(ASRule.rule list
* Datalog_AbstractSyntax.ConstGen.Table.table
* UtilsLib.IdGenerator.IntIdGen.t) ->
programadd_rule i r p adds a ASRule.rule to a Datalog.Program with the assumption that it will not change the nature of any predicate (that is making it change from extensional to intensional). If i is set to true, then the rule concerns an intensional predicate. If it is set to false then it concerns an extensional predicate and the rhs of the rule should be empty.
val add_rule : intensional:bool -> ASRule.rule -> program -> programval remove_rule : int -> ASPred.pred_id -> program -> programremove_rule id pred_id p returns the program p from which the rule with id id has been removed. It is assumed that the head of this rule is the predicate symbol of id pred_id.
IMPORTANT: This function only deals with rules introducing intensional predicate, because it is used when a constant is given several interpretations in a lexicon.
get_fresh_rule_id prog returns a pair (i,prog') where i is a frech rule identifier and prog' only differs from prog by stating this rule identifier is now available
val get_fresh_cst_id :
string ->
program ->
Datalog_AbstractSyntax.ConstGen.id * programget_fresh_cst_id name prog returns a pair (id,prog') where id is constant identifier associated to name and prog' only differs from prog by stating this identifier is now available and is associated with name.
val add_pred_sym : string -> program -> ASPred.pred_id * programadd_pred_sym name p returns a pair (p_id,p') where p_id is a predicate id for the predicate symbol name and p' is p with recording the relation between name and p_id. If name is already a predicate symbol of p, then p_id is its id and p' is p. p' differs from p only with the association between name and p_id.
val build_forest :
?query:Datalog_AbstractSyntax.AbstractSyntax.Predicate.predicate ->
Predicate.PremiseSet.t Predicate.PredicateMap.t ->
program ->
int Containers.SharedForest.SharedForest.forest listval pp_edb : Stdlib.Format.formatter -> program -> unit