Bring in more theme updates
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
This commit is contained in:
parent
3e46ff8be6
commit
324fa948e6
|
@ -6,7 +6,12 @@ series: "Everything I Know About Types"
|
||||||
draft: true
|
draft: true
|
||||||
bergamot:
|
bergamot:
|
||||||
render_presets:
|
render_presets:
|
||||||
default: "lc.bergamot"
|
default: "bergamot/rendering/lc.bergamot"
|
||||||
|
presets:
|
||||||
|
intro:
|
||||||
|
prompt: "type(TERM, ?t)"
|
||||||
|
query: ""
|
||||||
|
file: "intro.bergamot"
|
||||||
---
|
---
|
||||||
|
|
||||||
I am in love with types and type systems. They are, quite probably,
|
I am in love with types and type systems. They are, quite probably,
|
||||||
|
@ -171,12 +176,6 @@ to the tool than to type theory itself; I will denote these exercises as such wh
|
||||||
possible. Also, whenever the context of the exercise can be loaded into
|
possible. Also, whenever the context of the exercise can be loaded into
|
||||||
Bergamot, I will denote this with a play button.
|
Bergamot, I will denote this with a play button.
|
||||||
|
|
||||||
{{< bergamot_preset name="intro-preset" prompt="type(TERM, ?t)" >}}
|
{{< bergamot_exercise label="bergamot; sample exercise" preset="intro" id="exercise-2" >}}
|
||||||
TNumber @ type(lit(?n), number) <- num(?n);
|
|
||||||
TPlusI @ type(plus(?e_1, ?e_2), number) <-
|
|
||||||
type(?e_1, number), type(?e_2, number);
|
|
||||||
{{< /bergamot_preset >}}
|
|
||||||
|
|
||||||
{{< bergamot_exercise label="bergamot; sample exercise" preset="intro-preset" id="exercise-2" >}}
|
|
||||||
Try typing `1+1` into the input field!
|
Try typing `1+1` into the input field!
|
||||||
{{< /bergamot_exercise >}}
|
{{< /bergamot_exercise >}}
|
3
content/blog/00_types_intro/intro.bergamot
Normal file
3
content/blog/00_types_intro/intro.bergamot
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
TNumber @ type(lit(?n), number) <- num(?n);
|
||||||
|
TPlusI @ type(plus(?e_1, ?e_2), number) <-
|
||||||
|
type(?e_1, number), type(?e_2, number);
|
19
content/blog/01_types_basics/conversion.bergamot
Normal file
19
content/blog/01_types_basics/conversion.bergamot
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
section "Conversion rules" {
|
||||||
|
ConvertsIS @ converts(integer, string) <-;
|
||||||
|
ConvertsIF @ converts(integer, float) <-;
|
||||||
|
ConvertsFS @ converts(float, string) <-;
|
||||||
|
}
|
||||||
|
|
||||||
|
section "Rules for literals" {
|
||||||
|
TInt @ type(lit(?n), integer) <- int(?n);
|
||||||
|
TFloat @ type(lit(?f), float) <- float(?f);
|
||||||
|
TString @ type(lit(?s), string) <- str(?s);
|
||||||
|
}
|
||||||
|
|
||||||
|
section "" {
|
||||||
|
TPlusInt @ type(plus(?e_1, ?e_2), integer) <- type(?e_1, integer), type(?e_2, integer);
|
||||||
|
TPlusFloat @ type(plus(?e_1, ?e_2), float) <- type(?e_1, float), type(?e_2, float);
|
||||||
|
TPlusString @ type(plus(?e_1, ?e_2), string) <- type(?e_1, string), type(?e_2, string);
|
||||||
|
}
|
||||||
|
|
||||||
|
TConverts @ type(?e, ?tau_2) <- type(?e, ?tau_1), converts(?tau_1, ?tau_2);
|
|
@ -6,7 +6,21 @@ series: "Everything I Know About Types"
|
||||||
draft: true
|
draft: true
|
||||||
bergamot:
|
bergamot:
|
||||||
render_presets:
|
render_presets:
|
||||||
default: "lc.bergamot"
|
default: "bergamot/rendering/lc.bergamot"
|
||||||
|
presets:
|
||||||
|
notation:
|
||||||
|
prompt: "type(TERM, ?t)"
|
||||||
|
query: ""
|
||||||
|
file: "notation.bergamot"
|
||||||
|
string:
|
||||||
|
prompt: "type(TERM, ?t)"
|
||||||
|
query: "\"hello\"+\"world\""
|
||||||
|
file: "string.bergamot"
|
||||||
|
conversion:
|
||||||
|
prompt: "type(TERM, ?t)"
|
||||||
|
query: ""
|
||||||
|
file: "conversion.bergamot"
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
It's finally time to start looking at types. As I mentioned, I want
|
It's finally time to start looking at types. As I mentioned, I want
|
||||||
|
@ -114,11 +128,7 @@ Another consequence of this is that not everyone agrees on notation; according
|
||||||
to [this paper](https://labs.oracle.com/pls/apex/f?p=LABS:0::APPLICATION_PROCESS%3DGETDOC_INLINE:::DOC_ID:959),
|
to [this paper](https://labs.oracle.com/pls/apex/f?p=LABS:0::APPLICATION_PROCESS%3DGETDOC_INLINE:::DOC_ID:959),
|
||||||
27 different ways of writing down substitutions were observed in the POPL conference alone.
|
27 different ways of writing down substitutions were observed in the POPL conference alone.
|
||||||
|
|
||||||
{{< bergamot_preset name="notation-preset" prompt="type(TERM, ?t)" >}}
|
{{< bergamot_exercise label="bergamot; tweaking notation" preset="notation" id="exercise-1" >}}
|
||||||
TNumber @ type(lit(?n), number) <- num(?n);
|
|
||||||
{{< /bergamot_preset >}}
|
|
||||||
|
|
||||||
{{< bergamot_exercise label="bergamot; tweaking notation" preset="notation-preset" id="exercise-1" >}}
|
|
||||||
Bergamot, the interactive tool I've developed for doing exercises, supports
|
Bergamot, the interactive tool I've developed for doing exercises, supports
|
||||||
customizing the notation for rules. Try changing the \(:\) symbol to
|
customizing the notation for rules. Try changing the \(:\) symbol to
|
||||||
the \(\sim\) symbol (denoted in latex as `\sim`).
|
the \(\sim\) symbol (denoted in latex as `\sim`).
|
||||||
|
@ -317,13 +327,7 @@ This rule is read as follows:
|
||||||
|
|
||||||
> If \(e_1\) and \(e_2\) have type \(\text{string}\), then \(e_1+e_2\) has type \(\text{string}\).
|
> If \(e_1\) and \(e_2\) have type \(\text{string}\), then \(e_1+e_2\) has type \(\text{string}\).
|
||||||
|
|
||||||
{{< bergamot_preset name="string-preset" prompt="type(TERM, ?t)" query="\"hello\"+\"world\"">}}
|
{{< bergamot_exercise label="bergamot; adding rules for strings" preset="string" id="exercise-2" >}}
|
||||||
TNumber @ type(lit(?n), number) <- num(?n);
|
|
||||||
TPlusI @ type(plus(?e_1, ?e_2), number) <-
|
|
||||||
type(?e_1, number), type(?e_2, number);
|
|
||||||
{{< /bergamot_preset >}}
|
|
||||||
|
|
||||||
{{< bergamot_exercise label="bergamot; adding rules for strings" preset="string-preset" id="exercise-2" >}}
|
|
||||||
Try writing the Bergamot rules that correspond to the inference rule for strings
|
Try writing the Bergamot rules that correspond to the inference rule for strings
|
||||||
above. I've provided the rules for numbers; the rules for strings should be quite
|
above. I've provided the rules for numbers; the rules for strings should be quite
|
||||||
similar.
|
similar.
|
||||||
|
@ -384,29 +388,7 @@ from the conversion rules. Chapter 15 of _Types and Programming Languages_
|
||||||
by Benjamin Pierce is a nice explanation, but the [Wikipedia page](https://en.wikipedia.org/wiki/Subtyping)
|
by Benjamin Pierce is a nice explanation, but the [Wikipedia page](https://en.wikipedia.org/wiki/Subtyping)
|
||||||
ain't bad, either.
|
ain't bad, either.
|
||||||
|
|
||||||
{{< bergamot_preset name="conversion-preset" prompt="type(TERM, ?t)" >}}
|
{{< bergamot_exercise label="advanced; a taste of conversions" preset="conversion" id="exercise-3" >}}
|
||||||
section "Conversion rules" {
|
|
||||||
ConvertsIS @ converts(integer, string) <-;
|
|
||||||
ConvertsIF @ converts(integer, float) <-;
|
|
||||||
ConvertsFS @ converts(float, string) <-;
|
|
||||||
}
|
|
||||||
|
|
||||||
section "Rules for literals" {
|
|
||||||
TInt @ type(lit(?n), integer) <- int(?n);
|
|
||||||
TFloat @ type(lit(?f), float) <- float(?f);
|
|
||||||
TString @ type(lit(?s), string) <- str(?s);
|
|
||||||
}
|
|
||||||
|
|
||||||
section "" {
|
|
||||||
TPlusInt @ type(plus(?e_1, ?e_2), integer) <- type(?e_1, integer), type(?e_2, integer);
|
|
||||||
TPlusFloat @ type(plus(?e_1, ?e_2), float) <- type(?e_1, float), type(?e_2, float);
|
|
||||||
TPlusString @ type(plus(?e_1, ?e_2), string) <- type(?e_1, string), type(?e_2, string);
|
|
||||||
}
|
|
||||||
|
|
||||||
TConverts @ type(?e, ?tau_2) <- type(?e, ?tau_1), converts(?tau_1, ?tau_2);
|
|
||||||
{{< /bergamot_preset >}}
|
|
||||||
|
|
||||||
{{< bergamot_exercise label="advanced; a taste of conversions" preset="conversion-preset" id="exercise-3" >}}
|
|
||||||
This exercise is simply an early taste of formalizing conversions, which
|
This exercise is simply an early taste of formalizing conversions, which
|
||||||
allow users to (for example) write numbers where the language expects strings, with the
|
allow users to (for example) write numbers where the language expects strings, with the
|
||||||
understanding that the number will be automatically turned into a string.
|
understanding that the number will be automatically turned into a string.
|
1
content/blog/01_types_basics/notation.bergamot
Normal file
1
content/blog/01_types_basics/notation.bergamot
Normal file
|
@ -0,0 +1 @@
|
||||||
|
TNumber @ type(lit(?n), number) <- num(?n);
|
3
content/blog/01_types_basics/string.bergamot
Normal file
3
content/blog/01_types_basics/string.bergamot
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
TNumber @ type(lit(?n), number) <- num(?n);
|
||||||
|
TPlusI @ type(plus(?e_1, ?e_2), number) <-
|
||||||
|
type(?e_1, number), type(?e_2, number);
|
|
@ -5,7 +5,7 @@ tags: ["Project", "Programming Languages"]
|
||||||
description: "In this post, I show off Bergamot, a tiny logic programming language and an idea for teaching inference rules."
|
description: "In this post, I show off Bergamot, a tiny logic programming language and an idea for teaching inference rules."
|
||||||
bergamot:
|
bergamot:
|
||||||
render_presets:
|
render_presets:
|
||||||
default: "lc.bergamot"
|
default: "bergamot/rendering/lc.bergamot"
|
||||||
---
|
---
|
||||||
|
|
||||||
### Inference Rules and the Study of Programming Languages
|
### Inference Rules and the Study of Programming Languages
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit dee7579b2956fda6ca64819fa7d08b2832a235a9
|
Subproject commit 3a281dfa8aff1ac87d33d8f5ffcfc0a931a9656a
|
Loading…
Reference in New Issue
Block a user