typeside TyJava = literal { external_types string -> "java.lang.String" nat -> "java.lang.Integer" external_parsers string -> "x => x" nat -> "parseInt" external_functions plus : nat,nat -> nat = "(x, y) => x + y" } schema SJava = literal : TyJava { entities Employee Department foreign_keys manager : Employee -> Employee worksIn : Employee -> Department secretary : Department -> Employee path_equations Employee.manager.worksIn = Employee.worksIn Department.secretary.worksIn = Department Employee.manager.manager = Employee.manager attributes first last : Employee -> string age : Employee -> nat cummulative_age: Employee -> nat name : Department -> string observation_equations forall e. cummulative_age(e) = plus(age(e), age(manager(e))) options prover_simplify_max = 64 } instance IJava = literal : SJava { generators a b c : Employee m s : Department equations first(a) = Al first(b) = Bob last(b) = Bo first(c) = Carl name(m) = Math name(s) = CS age(a) = age(c) manager(a) = b manager(b) = b manager(c) = c worksIn(a) = m worksIn(b) = m worksIn(c) = s secretary(s) = c secretary(m) = b secretary(worksIn(a)) = manager(a) worksIn(a) = worksIn(manager(a)) age(a) = "2" age(manager(a)) = "1" options prover_simplify_max = 64 } #basic query syntax query Q = simple : SJava { from e:Employee where e.first = Al attributes deptName -> e.worksIn.name options simple_query_entity = Z prover_simplify_max = 64 } instance J = eval Q IJava ################################################## #demonstrates 'interpret as instance' option. which interprets the instance as a model, #similar to JDBC / CSV import. This behavior can be useful when writing down an #instance that is already saturated and for which one wants to check the schema constraints, #rather than impose them schema SS = literal : empty { entities Person foreign_keys mother father : Person -> Person path_equations Person.mother = Person.father } #works; sets b = c. instance I1 = literal : SS { generators a b c : Person equations a.mother = b a.father = c b.mother = b b.father = b c.mother = c c.father = c #fails because b != c. This is 'algebra' semantics #options #interpret_as_algebra = true } ################################/ typeside Ty = literal { types string nat constants Al Akin Bob Bo Carl Cork Dan Dunn Math CS : string zero : nat functions succ : nat -> nat plus : nat, nat -> nat equations forall x. plus(zero, x) = x forall x, y. plus(succ(x),y) = succ(plus(x,y)) options prover = completion } schema S = literal : Ty { entities Employee Department foreign_keys manager : Employee -> Employee worksIn : Employee -> Department secretary : Department -> Employee path_equations Employee.manager.worksIn = Employee.worksIn Department.secretary.worksIn = Department attributes first last : Employee -> string age : Employee -> nat cummulative_age: Employee -> nat name : Department -> string observation_equations forall e. cummulative_age(e) = plus(age(e), age(manager(e))) options prover = completion } instance I = literal : S { generators a b c : Employee m s : Department equations first(a) = Al first(b) = Bob last(b) = Bo first(c) = Carl name(m) = Math name(s) = CS age(a) = age(c) manager(a) = b manager(b) = b manager(c) = c worksIn(a) = m worksIn(b) = m worksIn(c) = s secretary(s) = c secretary(m) = b secretary(worksIn(a)) = manager(a) worksIn(a) = worksIn(manager(a)) age(a) = zero.succ.succ age(manager(a)) = zero.succ options prover = completion second_prover = completion completion_precedence = "cummulative_age zero a b c m s Al Akin Bob Bo Carl Cork Dan Dunn Math CS first last name age manager worksIn secretary succ plus" }Keywords:

instance_literal

typeside_literal

schema_literal

simple

eval

Options:

prover

second_prover

completion_precedence

simple_query_entity

prover_simplify_max

ID | father | mother |
---|---|---|

0 | 1 | 1 |

1 | 1 | 1 |

ID | name | secretary |
---|---|---|

0 | Math | 3 |

1 | CS | 4 |

ID | first | last | age | cummulative_age | manager | worksIn |
---|---|---|---|---|---|---|

2 | Al | ?0 | 2 | 3 | 3 | 0 |

3 | Bob | Bo | 1 | 2 | 3 | 0 |

4 | Carl | ?1 | 2 | 4 | 4 | 1 |

ID | deptName |
---|---|

0 | Math |

ID | name | secretary |
---|---|---|

0 | Math | 3 |

1 | CS | 4 |

ID | first | last | age | cummulative_age | manager | worksIn |
---|---|---|---|---|---|---|

2 | Al | ?0 | succ(succ(zero)) | (succ(succ(zero)) plus succ(zero)) | 3 | 0 |

3 | Bob | Bo | succ(zero) | (succ(zero) plus succ(zero)) | 3 | 0 |

4 | Carl | ?1 | succ(succ(zero)) | (succ(succ(zero)) plus succ(succ(zero))) | 4 | 1 |