-
Notifications
You must be signed in to change notification settings - Fork 3
Add a preface establishing proposal and scope #342
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
jonaprieto
wants to merge
10
commits into
main
Choose a base branch
from
preface
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+238
−0
Open
Changes from 3 commits
Commits
Show all changes
10 commits
Select commit
Hold shift + click to select a range
8ad8166
First version
jonaprieto 5180094
fix minor typos
jonaprieto 3985ba2
Fix issues detected by pre-commit
566cec0
Fix some typos
AHartNtkn b37b1c8
Corrections based on prior conversations
AHartNtkn 1aa882d
Fix issues detected by pre-commit
0012041
Merge branch 'main' into preface
jonaprieto 9662bac
Merge branch 'main' into preface
jonaprieto dcf0e55
Merge branch 'main' into preface
jonaprieto 15d0869
Merge branch 'main' into preface
jonaprieto File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,242 @@ | ||
| --- | ||
| icon: material/home | ||
| description: A work-in-progress specification for the Anoma protocol. | ||
| social: | ||
| cards: false | ||
| tags: | ||
| - preface | ||
| search: | ||
| exclude: true | ||
| --- | ||
|
|
||
| # Preface | ||
|
|
||
| <!--ᚦ | ||
| «I have made the single sentence 'This documentation website is a work-in-progress' | ||
| a whole "manifesto" by accident» | ||
| -->The Anoma protocol specification is being developed as part of Anoma. | ||
| Figuratively speaking, | ||
| it is the blueprint of Anoma, | ||
| but then, how can the blueprint be part of the whole? | ||
| In first approximation, | ||
| we are spiraling up, | ||
| bootstrapping from what started out as | ||
| a write-up of the idea of Anoma for a wider audience | ||
| and a prototype implementation loosely based on ... ideas written up. | ||
| Less prosaic, | ||
| we can make sense of specification as part of the whole | ||
| if we consider that | ||
| future iterations of the existing code base will be | ||
| influenced by the current specification, | ||
| and—vice versa—issues discovered while implementing Anoma, | ||
| based on the current specs, | ||
| provide feed-back for future specifications. | ||
| In summary, | ||
|
|
||
| > _Anoma, as a whole, is in constant flux._ | ||
|
|
||
| We fully embrace the dynamic and open nature of Anoma. | ||
| We thus offer an unmasked view of | ||
| the evolution of the Anoma protocol specification, | ||
| also referred to as _Anoma specs,_ | ||
| the document you are reading right now and here. | ||
|
|
||
| We believe that accepting the principle of constant change | ||
| is a simple and honest approach to make sure that | ||
| there always will be potential for improvement. | ||
| To make this work, | ||
| we need to cope with the various stages of the evolution. | ||
| Thus, | ||
| we use [semantic versioning](https://semver.org/) to facilitate meaningful interactions, | ||
| be it questions on the forums, | ||
| PRs on the github repository, | ||
| or other ways of collaboration. | ||
|
|
||
| !!! info "Constant improvement in three bullets" | ||
|
|
||
| - Everything in this documentation may be subject to change. | ||
| This is an indispensable prerequisite of Anoma as a system | ||
| to adapt to changes in its environment.<!--ᚦ | ||
| «I should write up a piece on systems of systems»--> | ||
|
|
||
| - The Anoma protocol specification is versioned to keep track of changes. | ||
| Thus, | ||
| if you want to ask a question, add a comment, or suggest improvements, | ||
| it is _indispensable_ to reference the **exact version** of the Anoma specs. | ||
| Please look at the website title or the footer of pages for | ||
| the version of the document—or | ||
| come back here to check whether we have new ways to indicate the version. | ||
| Should you want to reference the frequently changing | ||
| [`main` branch](https://github.com/anoma/nspec), | ||
| please provide a commit hash in place of a version number. | ||
|
|
||
| - The Anoma protocol specification is written in English language. | ||
| However, | ||
| we also embed code snippets, | ||
| written in [juvix](https://juvix.org/). | ||
| The purpose of these code snippets is described [below](#use-of-juvix). | ||
| In short, | ||
| all of Anoma specs should be informative | ||
| without reference to the code. | ||
|
|
||
| !!! note "" | ||
|
|
||
| _Please let us know if the English language descriptions or not precise enough!_ | ||
|
|
||
| ### Purpose and scope | ||
|
|
||
| Anoma specs describe the [[Protocol Architecture|protocol architecture]]. | ||
| In other words, | ||
| it provides a blueprint for how components of Anoma protocol instances | ||
| may interact to provide functionality. | ||
| Thus, | ||
| Anoma specs describe what any correct implementation | ||
| _has to_ provide and | ||
| _may provide._ | ||
| Anoma specs focus on the rules of the protocol, | ||
| not on any particular implementation | ||
| (even if we are concurrently working on an [implementation](https://github.com/anoma/anoma)). | ||
| How Anoma specs should relate to implementations—in general and in particular—is described | ||
| [below](#specification-natural-language-formal-languages-and-beyond). | ||
|
|
||
| ## Development, evolution, and growth | ||
|
|
||
| Besides iterations and improvements of the existing specification, | ||
| new components will be added to the Anoma specs. | ||
| Roughly, | ||
| the table of contents will strictly grow, | ||
| not only in depth (detail), but also in length (encompass). | ||
AHartNtkn marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| Whether and how ongoing research is to be incorporated into the Anoma specs is | ||
| being discussed on the [research forums](https://research.anoma.net/). | ||
| This is yet another facet of the principle of | ||
| constant evolution of Anoma's concepts and requirements. | ||
|
|
||
| ## Specification: natural language, formal languages, and beyond | ||
|
|
||
| Let us recap what specifications are about, in general—<!-- | ||
| -->not only about software specifications—<!-- | ||
| -->to better understand what Anoma specs aim to provide. | ||
|
|
||
| !!! quote "Specification [@Nissanke1999]" | ||
|
|
||
| A specification primarily states what is required [for a task], | ||
| providing minimal or no details about how the task should be accomplished. | ||
|
|
||
| This goal, i.e., capturing the requirements and essential structure, | ||
| can be achieved using English language. | ||
| However, | ||
| we are sometimes underestimating natural language's flexibility | ||
| to change meanings depending on the context, | ||
| which can catch us off guard. | ||
| We want to avoid any such haphazard ambiguities, | ||
| and thus, | ||
| in Anoma specs, | ||
| we use [formal languages](https://en.wikipedia.org/wiki/Formal_language), | ||
| as used and studied by logicians, mathematicians, and computer scientists. | ||
|
|
||
| !!! quote "Mathematical expression of specifications" | ||
|
|
||
| A formal specification is, in addition, | ||
| a mathematical expression of what is required (a computational task) | ||
| which may be subjected to mathematical scrutiny (reasoning or proof). | ||
|
|
||
| Thus, | ||
| the main point of writing formal specification is additional precision, | ||
| which is often described as mathematical rigour.[^1] | ||
|
|
||
| In summary, | ||
| Anoma specs use formal languages to complement natural language | ||
| and our list of requests is growing a second element: | ||
|
|
||
| - _Please let us know if the English language descriptions or not precise enough!_ | ||
|
|
||
| - _Please let us know if the formal specification does not match the English language descriptions!_ | ||
|
|
||
| !!! todo "List and respond to requirements" | ||
|
|
||
| We aim to list and address the functional requirements first, followed by the non-functional requirements. | ||
|
|
||
| !!! todo "specs and implementation in detail" | ||
|
|
||
| ### Mathematical rigour, also for the implementation | ||
|
|
||
| At some point in the future, | ||
| we may want to make sure that some given implementation matches the protocol, | ||
| i.e., demonstrate that an implementation is _correct_; | ||
| in short, | ||
| we want to _verify_ the implementation.[^2] | ||
| There is a large variety of methods, | ||
| which often are summarized as _[formal methods](https://en.wikipedia.org/wiki/Formal_methods),_ | ||
| which we may want to apply, now or in the future. | ||
| Note that formal _specification_ is of interest in and of itself: | ||
| it forces one to resolve any natural language ambiguities, | ||
| and in this way, | ||
| we also catch issues that tend to "hide" in natural language. | ||
|
|
||
| In summary, | ||
| most concepts in the Anoma specs are intended to have formal counterparts | ||
| in what we *currently* call _idealized Anoma_ (v0.3-ish). | ||
| Anoma specs takes a page out of the proverbial book of formal methods, | ||
| but first and foremost, | ||
| the purpose of complementing English language prose with Juvix code and formal languages | ||
| is mathematical rigour in the Anoma specs. | ||
|
|
||
| ## Use of Juvix | ||
|
|
||
| Throughout the Anoma specs, | ||
| we embed code snippets, | ||
| written in [Juvix](https://juvix.org/). | ||
| While Juvix is still in its infancy, | ||
| compared to established languages like Coq, | ||
| Isabelle/HOL, Agda or Lean, | ||
| it serves our needs surprising well. | ||
| Let us highlight some aspects. | ||
|
|
||
|
|
||
| - A modern functional programming language with powerful features including | ||
| inductive types, pattern matching, and type classes for expressing | ||
| computational concepts clearly and concisely. For details, see the | ||
| [Essential Juvix](https://docs.juvix.org/0.6.9/tutorials/essential.html) | ||
| tutorial. | ||
|
|
||
| - Support for hypertext documentation, including features such as clickable | ||
| references for easy code navigation. | ||
|
|
||
| - An easy embedding into Lean4, which we use whenever Juvix's type system restrictions | ||
| call for a more expressive language. | ||
|
|
||
| - Built-in support for literate programming, enabling us to seamlessly blend | ||
| type definitions and function definitions with natural language explanations through | ||
| code snippets. This also provides robust type-checking capabilities for all | ||
| code snippets via [Juvix Markdown support](https://docs.juvix.org/), | ||
| ensuring that expressions are well-formed and type-safe. | ||
|
|
||
| ## Prerequisites | ||
|
|
||
| The Anoma specs should be self-contained, ideally, | ||
| but this is rather a promise than a true statement. | ||
| For example, | ||
| almost certainly there are number technical terms that have become second nature to the authors that should be listed as pre-requisites, | ||
| but are not (yet). | ||
| Thus, | ||
| please reach out, | ||
| if you find that we use a term or concept that should at least be referenced | ||
| if not recapped in a footnote or note. | ||
| In particular, | ||
| we want the Anoma specs to grow into a source of information | ||
| for at least the following professionals: | ||
|
|
||
| - Protocol designers and architects | ||
| - Implementation teams | ||
| - Verification experts | ||
| - External auditors | ||
|
|
||
| Eventually, we want to reach the Anoma community at large. | ||
| So, | ||
| don't hesitate to join the discussion [Anoma](https://research.anoma.net/)! | ||
|
|
||
| [^1]: Interestingly, Leslie Lamport goes as far as speaking of "writing math" | ||
| instead of "formally specifying".<!--citation https://duckduckgo.com/?t=ffab&q=lamport+paxos+or+how+to+win+turing+award&iax=videos&ia=videos&iai=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3Dtw3gsBms-f8#--> | ||
|
|
||
| [^2]: Recall that this only makes sense for, | ||
| a specific version of the Anoma specs. | ||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.