{"size": 2313, "ext": "scrbl", "max_stars_repo_path": "scribblings/abstract-multi-domain.scrbl", "max_stars_repo_name": "v-for-vincent/racket-control-compiler", "max_stars_repo_stars_event_min_datetime": "2017-06-03T19:55:16.000Z", "max_stars_repo_stars_event_max_datetime": "2017-06-03T19:55:16.000Z", "max_issues_repo_path": "scribblings/abstract-multi-domain.scrbl", "max_issues_repo_name": "v-nys/cclp", "max_issues_repo_issues_event_min_datetime": "2017-04-11T08:13:36.000Z", "max_issues_repo_issues_event_max_datetime": "2018-04-18T13:16:06.000Z", "max_forks_repo_path": "scribblings/abstract-multi-domain.scrbl", "max_forks_repo_name": "v-for-vincent/racket-control-compiler", "max_forks_repo_forks_event_min_datetime": null, "max_forks_repo_forks_event_max_datetime": null}
{"max_stars_count": 1, "max_issues_count": 58, "max_forks_count": null, "avg_line_length": 74.6129032258, "max_line_length": 782, "alphanum_fraction": 0.7829658452}
#lang scribble/manual
@(require
   (for-label
    racket/base
    cclp/abstract-multi-domain)
   scribble/extract
   scriblib/bibtex
   scriblib/footnote)

@; this has to come before any defmodules or they show up wrong, oddly
@title{Abstract domain, including multi}

@; this is needed to get hyperlinks for the different struct id's
@defmodule[cclp/abstract-multi-domain]

@(define-bibtex-cite @(path->string (simplify-path (build-path (syntax-source #'here) "../bibliography.bib"))) ~cite citet generate-bibliography)

The abstract-multi domain module encodes the elements described in Definition 20 in @citet["nys2017abstract"]. Several predicate functions are provided, e.g. to check whether a particular value is in the abstract-multi domain or some subdomain thereof. Some inspection functions are also provided for convenient access.

@section{Caveats}
@subsection{Parameterized namings}
Note that @racket[abstract-atom*], @racket[abstract-function*], @racket[a*] and @racket[g*] are separate constructors here. That is, parameterized namings (see Definition 18 in @citet["nys2017abstract"]) of domain elements are encoded using different struct types than their non-parameterized counterparts.

@subsection{Extra information in the @racket[multi] struct type}
At the time of writing, the @racket[multi] struct type contains an accessor which is not mentioned in @citet["nys2017abstract"], i.e. @racket[multi-ascending?]. The field accessed by this function indicates whether the represented abstract conjunction consists of conjunctions which, roughly, increase in length on the right (if @racket[multi-ascending?] returns @racket[#t]) or on the left (if @racket[multi-ascending?] returns @racket[#f]). For more details, see the description of the genealogical graph. @note{This description has not actually been written yet.} The field may still be removed in the future, as it is not actually a property of the abstraction itself, but an extra piece of information which helps to correctly apply the abstraction and which could be inferred.

Also, the @racket[init], @racket[consecutive] and @racket[final] structs may appear redundant. This is, in fact, true. They will be removed in a future version of the code.

@section{API}
@(include-extracted cclp/abstract-multi-domain)
@(generate-bibliography)