Documentation
  • Introduction
  • Why Ampersand?
    • The Business Rules Manifesto and Ampersand
  • Tutorial
    • Example system: Enrollment
    • Conceptual Model: Enrollment
    • Your tool: RAP4
    • Making your first Ampersand script
  • Reactive programming
  • The language Ampersand
    • How to read syntax statements
    • Truth
    • Atoms
    • The CONCEPT statement
    • The RELATION statement
    • The MEANING statement
    • The PURPOSE statement
    • The CLASSIFY statement
    • The RULE statement
    • Terms
      • Semantics
      • Semantics in logic
        • Primitive terms
        • Boolean operators
        • Relational operators
        • Residual operators
      • Semantics in natural language
        • Primitive terms in natural language
        • Boolean operators in natural language
        • Relational operators in natural language
        • Residual operators in natural language
      • Semantics in sets
        • Primitive terms in set theory
        • Boolean operators in set theory
        • Relational operators in set theory
      • Semantics of terms, defined algebraically
        • Boolean operators in algebra
        • Relational operators in algebra
      • Semantics visualized
        • Semantics of boolean operators visualized
        • Semantics of relational operators visualized
        • Semantics of residuals visualized
    • Context
    • Module
    • Best Practices
    • Syntactical Conventions
      • The CONCEPT statement
      • The RELATION statement
      • The RULE statement
      • The CONTEXT statement
      • The INCLUDE statement
      • Explanation
      • Patterns
      • Population
        • Population in spreadsheets
      • The PURPOSE statement
      • The IDENT statement
      • The TABLE statement
      • Language support
    • The INCLUDE statement
    • Patterns
    • Services
      • Example: Client
      • Example: Login
      • Syntax and meaning
      • Explanation
      • Layout of user interfaces
        • Your own widgets (HTML and CSS)
      • CRUD
    • Population
      • Population in spreadsheets
    • The ENFORCE statement
    • The IDENT statement
    • The TABLE statement
    • Language support
    • Current date
    • The Preprocessor
    • Design considerations
  • Running the Ampersand compiler
    • Configuration
    • Commands (vs. 4.0.0 and later)
    • Options (up to vs. 3.17.4)
  • Architecture of an Ampersand Application
    • Backend framework
    • Hooks
    • Extensions
      • The ExecEngine
  • Deploying your Ampersand script
    • Compiler
    • Deploy your own web application on your laptop
    • Prototype multi-stage build
    • Prototype database
  • Reusing Available Modules
    • Modules
    • Security
    • SIAM (Sessions, Identity and Access Management) Module
  • Exercises
    • Delivery
    • VOG (in Dutch)
  • Installing Ampersand
    • Deploying your Prototype
    • Installing the tools manually
  • Modeling
    • Domain Driven Design
    • Data modeling
    • Legal modeling
    • Architecture modeling
    • Metamodeling
    • Limitations of Ampersand
  • Configuring your application
  • The Excel Importer
  • Plans
    • Current State
    • NoSQL storage
    • API documentation
    • OWL and RDFS input
    • Refactor the front-end
  • Research
Powered by GitBook
On this page
  • Relations
  • Identity
  • Complete relation
  • Other explanation
Export as PDF
  1. The language Ampersand
  2. Terms
  3. Semantics in logic

Primitive terms

PreviousSemantics in logicNextBoolean operators

Last updated 2 years ago

Relations

When a is used in a term, it stands for all pairs it contains at the moment it is evaluated. Those pairs (also referred to as the contents or population of the relation) can change over time as users add or delete pairs from it.

When a relation is used in a term, we can just use its name if that is unambiguous. For instance the name owner refers to RELATION owner[Person*Building] if that is the only relation the ampersand-compiler can link it to. In some cases, however the name alone is ambiguous. For example if there are two relations with the same name and different signatures. In such cases Ampersand will try to infer the type from the context. That however does not always succeed. In such cases, Ampersand generates an error message that asks you to remove the ambiguity by adding the correct type.

If a pair (a,b)(a,b)(a,b) is an element of a relation rrr, we write a r ba\ r\ ba r b. Alternatively we may write (a,b)∈r(a,b)\in r(a,b)∈r , since we know that rrr is a set.

Identity

For every concept CCC, the term I[C]I_{[C]}I[C]​ exists. It refers to the identity relation. It means that for every a∈Ca\in Ca∈C and b∈Cb\in Cb∈C we have:

a=b ⇔ a I[C] ba = b\ \Leftrightarrow\ a\ I_{[C]}\ ba=b ⇔ a I[C]​ b

The type of I[C]I_{[C]}I[C]​ is [C∗C][C*C][C∗C]. In Ampersand code you write I[C].

Complete relation

For every pair of concepts AAA and BBB the term V[A∗B]V_{[A*B]}V[A∗B]​ refers to the complete relation. For every a∈Aa\in Aa∈A and b∈Bb\in Bb∈B we have:

a V[A∗B] ba\ V_{[A*B]}\ ba V[A∗B]​ b

The type of V[A∗B]V_{[A*B]}V[A∗B]​ is [A∗B][A*B][A∗B]. In Ampersand code you write V[A*B].

Other explanation

Would you like a different explanation of the primitive terms? explains the primitive terms in terms of set theory. for the explanation of primitive terms in natural language.

relation
This page
Click here