anchor.diff:  === Semantics
   
   Provide a description of the expected semantics of the new feature(s).
  +Use subheadings to structure the content.
   
  -*_Example:_* +
  -_STARTS WITH_
  +_Examples are shown below in sections 3.3.1–3.3.3:_
   
  -_Using `lhs STARTS WITH rhs` requires both `lhs` and `rhs` to be strings. This new expression evaluates to true if `lhs` textually starts with `rhs`. Otherwise, it is false._
  +==== STARTS WITH
   
  -_ENDS WITH_
  +Using `lhs STARTS WITH rhs` requires both `lhs` and `rhs` to be strings. This new expression evaluates to true if `lhs` textually starts with `rhs`. Otherwise, it is false.
   
  -_Using `lhs ENDS WITH rhs` requires both `lhs` and `rhs` to be strings. This new expression evaluates to true if `lhs` textually ends with `rhs`. Otherwise, it is false._
  +==== ENDS WITH
   
  -_CONTAINS_
  +Using `lhs ENDS WITH rhs` requires both `lhs` and `rhs` to be strings. This new expression evaluates to true if `lhs` textually ends with `rhs`. Otherwise, it is false.
   
  -_Using `lhs CONTAINS rhs` requires both `lhs` and `rhs` to be strings. This new expression evaluates to true if `lhs` textually contains `rhs`. Otherwise, it is false._
  +==== CONTAINS
   
  -_If any argument to `STARTS WITH`, `ENDS WITH`, or `CONTAINS` is NULL, then the result of evaluating the whole predicate is NULL._
  +Using `lhs CONTAINS rhs` requires both `lhs` and `rhs` to be strings.
  +This new expression evaluates to true if `lhs` textually contains `rhs`.
  +Otherwise, it is false.
   
  -_It is a type error to use `STARTS WITH`, `ENDS WITH`, or `CONTAINS` with a value that is not a string._
  +If any argument to `STARTS WITH`, `ENDS WITH`, or `CONTAINS` is `NULL`, then the result of evaluating the whole predicate is `NULL`.
  +
  +It is a type error to use `STARTS WITH`, `ENDS WITH`, or `CONTAINS` with a value that is not a string.
   
   === Interaction with existing features
   
  -Detail any interactions which need to be considered.
  +Provide details on any interactions that need to be considered.
   
   === Alternatives
   
  
positive.code: 
  == Caveats to this proposal
  
  List any caveats here. These may include omissions, reasons for non-conformance with other features and so on.
  
  == Appendix
  
  
negative.code: = CIP<CCYY>-<MM>-<DD> - <The title of the CIP>
  :numbered:
  :toc:
  :toc-placement: macro
  :source-highlighter: codemirror
  
  *Author:* <Author name> <Author email>
  
  [IMPORTANT]
  .Guidelines
  ====
  * Please use this template as a guide.
    To aid clarity and give an idea of what the pertinent section denotes, some headings have example text.
  
  * The file naming convention is _CIP<CCYY>-<MM>-<DD>-short-title-words.adoc_.
  
  * Label the pull request for the CIP with the correct Cypher vocabulary(ies).
  
  * The CIP may only consider Cypher language features.
    This means the CIP must make no mention of Neo4j.
  
  * Format Cypher and EBNF for readability.
  
  * Write one sentence per line.
  ====
  
  [abstract]
  .Abstract
  --
  This is a high-level summary of the aim and description of the CIP.
  --
  
  toc::[]
  
  
  == Motivation
  
  