v0.1
A language for defining types based on fully decomposed RM
Index
- Part I: Foundations
- 1 Introduction to Predica
- 2 Entity Types as Logical Sorts
- 3 Cardinality Constraints and 1NF
- 4 Supplier-and-Parts Database
- 5 Nesting the Relational Model
- 6 Cardinality
- 7 Identity
- 8 Boolean-valued Attributes
- 9 Types
- 10 Database Values and Consistency
- 11 Closed World Assumption
- 12 Relvar versus attribute predicates
- 13 Metadata annotations
- 14 Pushing relationships down into the entities
- 15 The Information Principle
- 16 The Atomicity Paradox
- 17 The First Great Blunder
- 18 Design Principles and Features
- 19 Benefits of a Decomposition into Domains with Unary Predicates
- 20 Related Work
- Part II: Path Expressions
- 21 Example Schema
- 22 Navigation
- 23 Path Tails
- 24 Filters
- 25 Tuple Construction
- 26 Renaming with as
- 27 This
- 28 Calculated Attributes
- 29 Let Bindings
- 30 Splat
- 31 Folds
- 32 Universal Navigation
- 33 Path Operations
- 34 Alternatives
- 35 Conditionals
- 36 Lists
- 37 Groups
- 38 Type Checking Path Expressions
- Part III: Constraints
- 39 Constraint Forms
- 40 Firearm Purchase Example
- 41 Construction Project Example
- 42 Cardinality Constraint Patterns
- 43 Student Enrolment Courses Example
- 44 Using Predica to define legality
- Part IV: Types
- 45 Types
- 46 Built-in Types
- 47 Structural types
- 48 Type expressions
- 49 Type Aliases
- 50 Equality Between Types
- 51 Expression literals and constructors
- 52 Static vs dynamic typing
- 53 Isomorphisms
- 54 Objects
- Part V: Nominal Types
- 55 Value Types
- 56 Entity Types
- 57 Keys
- 58 Enumerated Types
- 59 Variant types
- 60 Quotient types
- 61 Attributes
- 62 Parameterised Attributes
- 63 Derived Attributes
- 64 Embedding
- 65 Generics
- 66 Ordering
- 67 Constraints
- 68 Theorems
- Part VI: Subtypes
- 69 Type graph
- 70 Necessarily disjoint and non-disjoint
- 71 Abstract types
- 72 Subtypes of abstract types
- 73 Subtypes of concrete types
- 74 Comparable Types
- 75 Union types
- Part VII: Query
- 76 Constants
- 77 Functions
- 78 Function Overload Resolution
- 79 Example: Head-Tail List Functions
- 80 Query Examples
- 81 Filter Conditions
- 82 Inverse relationships
- 83 Views
- 84 Responsive Applications without async/await
- 85 Folds
- 86 Lists
- 87 Group Aggregation
- Part VIII: Relations
- 88 Relations as Extensions
- 89 Notation and Surface Syntax
- 90 Headings, Domains, and Universe
- 91 Projection and Result Shape
- 92 Supplier Relation Examples
- 93 Relational Model Correspondence
- 94 Supplier/Parts Translation
- 95 Materialised Accessors
- 96 Implementation Notes
- Part IX: Updates
- 97 Transactions
- 98 Read-only Models over Weakly Constrained Data
- 99 Program Variables as Locations
- 100 Uninitialised Locations
- 101 Parameter Access and Ownership
- 102 Comparison with Rust
- 103 Variable Updates
- 104 Constraint-Violating Updates
- 105 Control Flow
- 106 Unreachable
- 107 Runtime Failures and Exceptions
- 108 Procedures and Effects
- 109 Entity Creation and Base Updates
- 110 Block-Bodied Functions
- 111 Path Expression Updates
- Part X: Components
- 112 Introduction to components
- 113 Component Manifest
- 114 Namespaces
- 115 Using Declarations
- 116 Name Resolution
- 117 Schema evolution
- 118 Standard Library
- Part XI: Normalisation
- 119 1NF
- 120 2NF
- 121 3NF
- 122 BCNF
- 123 4NF
- 124 5NF
- 125 6NF
- 126 DKNF
- 127 Misplaced Facts
- Part XII: Examples
- 128 Geometry Example
- 129 Event Sourcing
- 130 Box of objects
- Part XIII: Syntax
- 131 Lexical Grammar
- 132 Syntactic Grammar
- 133 Source Files and Declarations
- 134 Statement Grammar
- 135 Expression Grammar
- 136 Type Definition Grammar
- Part XIV: Semantics
- 137 Frames
- 138 Frame Display Forms
- 139 Frame Construction and Closure
- 140 Frame Relabelling and Merge
- 141 Horizontal Frame Operations
- 142 Vertical Frame Operations
- 143 Frame Negation, Protected Comprehensions, and Unary Frames
- 144 Denotation Type Conventions
- 145 Denotation Terms
- 146 Denotation Precedence
- 147 Attribute Cardinality Constraints and Denotation
- 148 Denotation Environment
- 149 Denotation of Scalar Terms and Attribute Navigation
- 150 Denotation of Tuples, Filtering, and Composition
- 151 Denotation of Path Operations and Alternatives
- 152 Denotation of Conditionals, Negation, Folds, and Cardinality
- 153 Denotation of Absence, This, Splat, Let, and Constraints
- 154 Predicates Induced by Variants and Enums
- 155 Denotation Examples
- 156 Examples of correspondence between Predica and logic
- 157 Denotation of Predica Locations
- Part XV: Implementation
- 158 Data representation
- 159 Persistent Object Store
- 160 Snapshot Isolation
- 161 CEDA MVCC Storage
- 162 Implementing the Genealogy Example
- 163 Implementing a Triangulated Mesh
- 164 Annotator
- 165 Optimisation
- 166 Physical independence
- 167 Chunk size
- 168 Query Optimisation
- 169 Reference Implementation