git @ Cat's Eye Technologies Burro / 17fdd9d
Some edits, in-progress, to the README. Chris Pressey 2 years ago
1 changed file(s) with 19 addition(s) and 15 deletion(s). Raw diff Collapse all Expand all
11 =====
22
33 This is the reference distribution for Burro, a formal programming language
4 whose denoted programs form a group under concatenation of their program texts.
4 whose programs form a group (in a particular sense described below). For
5 every Burro program text, there exists an "annihilator" program text which,
6 when concatenated to the original program text, forms a "no-op" program.
57
68 For the definition of the Burro language version 1.0, which was the
79 first attempt to do this but does not actually succeed in forming a group,
810 see the file [`doc/burro-1.0.md`](doc/burro-1.0.md).
911
10 For the definition of the Burro language version 2.0, which does indeed
11 form a group, see the Literate Haskell file
12 For the definition of the Burro language version 2.0, whose program do
13 indeed form a group, see the Literate Haskell file
1214 [`Language/Burro/Definition.lhs`](src/Language/Burro/) in the
13 `src` directory. This also serves as a reference implementation of
14 the language, and includes a sketch of a proof that Burro is Turing-complete.
15 `src` directory. This definition also serves as a reference implementation
16 of the language.
1517
1618 The sense in which Burro programs form a group
1719 ----------------------------------------------
1820
19 The language version 1.0 and 2.0 documents don't do a great job of explaining
20 what is meant by the set of Burro programs forming a group — 1.0 tries
21 to explain by defining a new concept, a "group over an equivalence relation",
22 and 2.0 just carries on with the idea without elucidating it. This new
23 concept is not necessary and I'll try to briefly provide a more conventional
24 description here.
21 The documentation efforts for versions 1.0 and 2.0 of Burro don't do a
22 really good job of explaining what is meant by the set of Burro programs
23 "forming a group". Burro 1.0 tries to explain it by defining a new concept,
24 a "group over an equivalence relation", and 2.0 just carries on with that idea
25 without elucidating it. This new concept is not necessary, however, and I'll
26 try to briefly provide a more conventional explication here.
2527
2628 Let B be the set of syntactically valid Burro program texts (hereinafter
2729 simply "program texts"). B is defined by an inductive definition, so can be
2931
3032 Every program text _t_ represents some Burro program, which we will denote by
3133 ⟦_t_⟧. But because we typically ignore some operational aspects of execution,
32 multiple program texts can represent the same program. For example,
33 `+-` and `-+` represent the same program.
34 for every program, there may be multiple program texts that represent it.
35 For example, `+-` and `-+` represent the same program.
3436
3537 In other words, ⟦⟧ is not injective. It is a homomorphism between B and the
36 set of Burro programs, and as such it induces an equivalence relation. If,
37 for program texts _s_ and _t_, ⟦_s_⟧ = ⟦_t_⟧, we say _s_ ~ _t_.
38 set of Burro programs, and as such it induces an equivalence relation.
39 For any program texts _s_ and _t_, if ⟦_s_⟧ = ⟦_t_⟧, we say _s_ ~ _t_.
3840
3941 We can take the quotient of B by this equivalence relation to obtain the
4042 algebraic structure B/\~. This is the set of all Burro programs representable
4143 by B, which is by definition the set of all Burro programs.
44
45 - - - -
4246
4347 However, in [`Language/Burro/Definition.lhs`](src/Language/Burro/)
4448 we go on to show that B/\~ is not