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 | ||||
| bergamot: | ||||
|     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, | ||||
| @ -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 | ||||
| Bergamot, I will denote this with a play button. | ||||
| 
 | ||||
| {{< bergamot_preset name="intro-preset" prompt="type(TERM, ?t)" >}} | ||||
| 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" >}} | ||||
| {{< bergamot_exercise label="bergamot; sample exercise" preset="intro" id="exercise-2" >}} | ||||
| Try typing `1+1` into the input field! | ||||
| {{< /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 | ||||
| bergamot: | ||||
|     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 | ||||
| @ -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), | ||||
| 27 different ways of writing down substitutions were observed in the POPL conference alone. | ||||
| 
 | ||||
| {{< bergamot_preset name="notation-preset" prompt="type(TERM, ?t)" >}} | ||||
| TNumber @ type(lit(?n), number) <- num(?n); | ||||
| {{< /bergamot_preset >}} | ||||
| 
 | ||||
| {{< bergamot_exercise label="bergamot; tweaking notation" preset="notation-preset" id="exercise-1" >}} | ||||
| {{< bergamot_exercise label="bergamot; tweaking notation" preset="notation" id="exercise-1" >}} | ||||
| Bergamot, the interactive tool I've developed for doing exercises, supports | ||||
| customizing the notation for rules. Try changing the \(:\) symbol to | ||||
| 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}\). | ||||
| 
 | ||||
| {{< bergamot_preset name="string-preset" prompt="type(TERM, ?t)" query="\"hello\"+\"world\"">}} | ||||
| 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" >}} | ||||
| {{< bergamot_exercise label="bergamot; adding rules for strings" preset="string" id="exercise-2" >}} | ||||
| 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 | ||||
| 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) | ||||
| ain't bad, either. | ||||
| 
 | ||||
| {{< bergamot_preset name="conversion-preset" prompt="type(TERM, ?t)" >}} | ||||
| 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" >}} | ||||
| {{< bergamot_exercise label="advanced; a taste of conversions" preset="conversion" id="exercise-3" >}} | ||||
| 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 | ||||
| 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." | ||||
| bergamot: | ||||
|     render_presets: | ||||
|         default: "lc.bergamot" | ||||
|         default: "bergamot/rendering/lc.bergamot" | ||||
| --- | ||||
| 
 | ||||
| ### Inference Rules and the Study of Programming Languages | ||||
|  | ||||
| @ -1 +1 @@ | ||||
| Subproject commit dee7579b2956fda6ca64819fa7d08b2832a235a9 | ||||
| Subproject commit 3a281dfa8aff1ac87d33d8f5ffcfc0a931a9656a | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user