rzk-0.8.0: test/typecheck/cases/happy-tope-high-dim-cubes.rzk
#lang rzk-1
-- Directed ``2``-cube products up to dimension 5, chain-inequality "simplices" Δ⁴/Δ⁵,
-- `shape-prod` over 4D×2D and 5D×1D, simple boundary-style disjunctions on Δ⁴/Δ⁵,
-- and shape-indexed functions (exercises `TopeLEQT`, `TopeAndT`, `TopeOrT`,
-- nested pairs, and `localTope` on high-dimensional guards).
#define u : U := Unit -> Unit
#define Δ¹
: 2 → TOPE
:= \ t → TOP
#define Δ²
: ( 2 × 2) → TOPE
:= \ (t , s) → s <= t
#define Δ⁴
: ( 2 × 2 × 2 × 2) → TOPE
:= \ (((t1 , t2) , t3) , t4) → t4 <= t3 /\ t3 <= t2 /\ t2 <= t1
#define Δ⁵
: ( 2 × 2 × 2 × 2 × 2) → TOPE
:= \ ((((t1 , t2) , t3) , t4) , t5) → t5 <= t4 /\ t4 <= t3 /\ t3 <= t2 /\ t2 <= t1
#define Δ⁵-cap
: ( 2 × 2 × 2 × 2 × 2) → TOPE
:= \ ((((t1 , t2) , t3) , t4) , t5) → (t5 <= t4 /\ t4 <= t3 /\ t3 <= t2 /\ t2 <= t1) /\ (t5 === 0_2)
#define shape-prod
( I J : CUBE)
( ψ : I → TOPE)
( χ : J → TOPE)
: ( I × J) → TOPE
:= \ (t , s) → ψ t /\ χ s
#define Δ⁴×Δ²
: ( ( 2 × 2 × 2 × 2) × (2 × 2)) → TOPE
:= shape-prod (2 * 2 * 2 * 2) (2 * 2) Δ⁴ Δ²
#define Δ⁵×Δ¹
: ( ( 2 × 2 × 2 × 2 × 2) × 2) → TOPE
:= shape-prod (2 * 2 * 2 * 2 * 2) 2 Δ⁵ Δ¹
#define ∂Δ⁴-simple
: Δ⁴ → TOPE
:= \ (((t1 , t2) , t3) , t4) → (t1 === 0_2 \/ t1 === 1_2) \/ (t4 === 0_2 \/ t4 === 1_2)
#define ∂Δ⁵-simple
: Δ⁵ → TOPE
:= \ ((((t1 , t2) , t3) , t4) , t5) → (t1 === 0_2 \/ t1 === 1_2) \/ (t5 === 0_2 \/ t5 === 1_2)
#define on4 (q : 2 * 2 * 2 * 2 | Δ⁴ q) : U
:= u
#define on5 (p : 2 * 2 * 2 * 2 * 2 | Δ⁵ p) : U
:= u
#define on5cap (p : 2 * 2 * 2 * 2 * 2 | Δ⁵-cap p) : U
:= u