Rendering Diagrams¶
Starting from version 0.3.0, rzk supports rendering of topes, types, and terms as diagrams.
This is a literate rzk file:
To enable rendering, set the option "render" to "svg" or "latex" (to disable, use "none"):
#set-option "render" = "svg" -- enable rendering in SVG
#set-option "render" = "latex" -- enable rendering in LaTeX
#set-option "render" = "none" -- disable rendering
Rendering is completely automatic, and works in the following situations:
- Mapping from a shape (including curried mappings), up to 3 dimensions, only in products of
2cubes; - Type of mapping from a shape (including curried mappings), up to 3 dimensions, only in products of
2cubes. - Mappings from a shape that is a section of an existing shape.
The rendering assigns the following colors:
- purple is assigned for parameters (context) variables;
- blue is used for fillings for types (e.g. for
homandhom2); - red is used for terms (e.g.
Segal-comp-witness); - orange is used for shapes in the tope layer;
- grey is used for discarded parts of a (larger) mapping (e.g. when extracting a diagonal/face from a larger shape).
The SVG pictures can be inserted directly into .md files before a corresponding rzk code block. At the bottom of a markdown file, you might want to add stylization, e.g.:
<style>
.rzk-render {
transition: transform 0.2s; /* Animation */
}
.rzk-render:hover {
transform: scale(
1.5
); /* (150% zoom - Note: if the zoom is too large, it will go outside of the viewport) */
}
</style>
<!-- Definitions for the SVG images above -->
<svg width="0" height="0">
<defs>
<style data-bx-fonts="Noto Serif">
@import url(https://fonts.googleapis.com/css2?family=Noto+Serif&display=swap);
</style>
<marker
id="arrow"
viewBox="0 0 10 10"
refX="5"
refY="5"
markerWidth="5"
markerHeight="5"
orient="auto-start-reverse"
>
<path d="M 0 2 L 5 5 L 0 8 z" stroke="purple" fill="purple" />
</marker>
</defs>
<style>
text,
textPath {
font-family: Noto Serif;
font-size: 28px;
dominant-baseline: middle;
text-anchor: middle;
}
</style>
</svg>
Examples¶
Visualising Simplicial Topes¶
Topes are visualised with orange color:
-- 2-simplex
#define Δ²
: ( 2 × 2) → TOPE
:= \ (t , s) → s ≤ t
Boundary of a tope:
-- boundary of a 2-simplex
#define ∂Δ²
: Δ² → TOPE
:= \ (t , s) → s ≡ 0₂ ∨ t ≡ 1₂ ∨ s ≡ t
The busiest tope diagram involves the entire 3D cube:
-- 3-dim cube
#define 2³
: ( 2 × 2 × 2) → TOPE
:= \ _ → TOP
-- 3-simplex
#define Δ³
: ( 2 × 2 × 2) → TOPE
:= \ ((t1 , t2) , t3) → t3 ≤ t2 ∧ t2 ≤ t1
Visualising Simplicial Types¶
Types are visualised with blue color. Recognised parameter part (e.g. fixed endpoints, edges, faces with clear labels) are visualised with purple color. When a type is constructed by taking a part of another shape, the rest of the larger shape is colored using gray color.
-- [RS17, Definition 5.1]
-- The type of arrows in A from x to y.
#define hom
( A : U) -- A type.
( x y : A) -- Two points in A.
: U -- (hom A x y) is a 1-simplex (an arrow)
:= (t : 2) → A [ -- in A where
t ≡ 0₂ ↦ x , -- * the left endpoint is exactly x
t ≡ 1₂ ↦ y -- * the right endpoint is exactly y
]
-- [RS17, Definition 5.2]
-- the type of commutative triangles in A
#define hom2
( A : U) -- A type.
( x y z : A) -- Three points in A.
( f : hom A x y) -- An arrow in A from x to y.
( g : hom A y z) -- An arrow in A from y to z.
( h : hom A x z) -- An arrow in A from x to z.
: U -- (hom2 A x y z f g h) is a 2-simplex (triangle)
:= ((t1 , t2) : Δ²) → A [ -- in A where
t2 ≡ 0₂ ↦ f t1 , -- * the top edge is exactly f,
t1 ≡ 1₂ ↦ g t2 , -- * the right edge is exactly g, and
t2 ≡ t1 ↦ h t2 -- * the diagonal is exactly h
]
Visualising Terms of Simplicial Types¶
Terms (with non-trivial labels) are visualised with red color (you can see a detailed label on hover). Recognised parameter part (e.g. fixed endpoints, edges, faces with clear labels) are visualised with purple color. When a term is constructed by taking a part of another shape, the rest of the larger shape is colored using gray color.
We can visualise terms that fill a shape:
#define square
( A : U)
( x y z : A)
( f : hom A x y)
( g : hom A y z)
( h : hom A x z)
( a : Σ (h' : hom A x z) , hom2 A x y z f g h')
: ( 2 × 2) → A
:= \ (t , s) → recOR(s ≤ t ↦ second a (t , s) , t ≤ s ↦ second a (s , t))
If a term is extracted as a part of a larger shape, generally, the whole shape will be shown (in gray):
#define face
( A : U)
( x y z : A)
( f : hom A x y)
( a : Σ (g : hom A y z)
, ( ( ( t1 , t2) , t3) : 2 × 2 × 2 | t3 ≤ t1 ∨ t2 ≤ t1)
→ A [ t1 ≡ 0₂ ↦ f t2
, t1 ≡ 1₂ ↦ g t3 ])
: Δ² → A
:= \ (t , s) → second a ((t , t) , s)