Imports
/- Copyright (c) 2026 Terence Rokop. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Terence Rokop -/ module public import Geb.Mathlib.Data.PFunctor.Presheaf.W public import Mathlib.CategoryTheory.Category.Preorder public import Mathlib.Order.Fin.Basic public import Mathlib.Data.Fintype.Basic public import Mathlib.Tactic.NormNum

Prototype: the dependent-type universe as a presheaf over the walking arrow

Throwaway exploration, not upstream-eligible content. This is a Lean port of the IRCode/IRdecode example of the Idris-2 file src/LanguageDef/Test/PolyIndTypesTest.idr — the universe closed under dependent sums and dependent products — in the inductive-inductive (arrow) formulation of that file, on top of the presheaf inductive-inductive types of Geb.Mathlib.Data.PFunctor.Presheaf.W (the W-types of presheaf polynomial endofunctors), with the walking arrow as the underlying category.

The construction

The walking arrow is Fin 2 as a preorder (the unique non-identity morphism 0 ⟶ 1). A presheaf on it is a pair of types with a map, so the presheaf initial algebra of an endofunctor F : PresheafPFunctor (Fin 2) (Fin 2) is a pair of mutually-defined types together with a fibration — the presheaf inductive-inductive reading of an inductive-recursive definition: one fibre plays the role of the data type and the other the role of the decoding, with the restriction map as the decoder.

univPsh K is the endofunctor of the Idris example: the shapes are the constructors — the starting-type codes iota k (k : K), the dependent-sum code sigma, the dependent-product code pi, and the two term shapes termSigma, termPi — and the directions are their recursive fields: no fields for iota, the bound code for sigma/pi, and for the terms the code together with a payload. Every shape and direction is a finite type (the sigma/pi code directions are a point and the term directions are two points).

The W-type univW K := (univPsh K).W is a presheaf over the walking arrow: Codes := (univW K).obj ⟨0⟩ is the type of codes, Terms := (univW K).obj ⟨1⟩ the type of terms, and fib : Terms → Codes — the restriction map of the presheaf along 0 ⟶ 1 — the decoding of a term into its code. A term termSigma p d decodes to the sigma code at p, discarding the payload d; dually termPi p d decodes to the pi code at p. The fibre of fib over a code — the type of its terms — is therefore the payload type: over a sigma or pi code it is (isomorphic to) the codes themselves, and over a starting-type code it is empty.

Relationship to the Idris-2 formulation

The Idris-2 file defines the same universe twice: once by explicit induction-recursion (IRCode, IRdecode — the family formulation, which the Lean port Geb.Mathlib.Data.PFunctor.IndRec.Universes follows) and once inductively-inductively over arrows (IRCode', IRTerm, IRfib — the arrow formulation, a presheaf over the walking arrow, whose domain is the terms and whose codomain the codes). This module follows the arrow formulation. Two deviations are forced by the W-type machinery, and both are recorded here for the review this prototype is intended for:

    In the Idris-2 arrow formulation a code constructor carries its recursive data in its shape: IRCsigma' u v is a node whose constructor argument is the pair (u, v) with u : IRCode' and v : IRfib u → IRCode'. A W-type of a polynomial functor has a fixed shape type, so the data of a code cannot live in its shape; it lives in its children. Here the bound code u is a child, and the family v — a function, and so not a well-founded tree — is dropped, the term payload taking its place. The dependent-sum and dependent-product formers are consequently binary: sigma (u, v) with v : Fib u → Code is not representable; the code former at u is.

    In the Idris-2 formulation the terms' payloads are elements of the decodings, which may be arbitrary types. A W-type's children are trees, so a leaf payload cannot be carried; the payload here is itself a code.

Both deviations make the types smaller than the Idris-2 types: every code and term is a well-founded tree built from finite shapes and directions, and the decoding of a code — the fibre of fib — is a subtype of the terms, not an arbitrary type. What is preserved is the shape of the example: a universe generated by starting types, closed under dependent sums and products, whose terms decode to their codes by the walking-arrow fibration, obtained as the presheaf initial algebra rather than by explicit induction-recursion.

Main definitions

    waHom — the unique non-identity morphism 0 ⟶ 1 of the walking arrow.

    univShape / univDir / univR / univQ — the shapes (the constructor tags), directions (the recursive fields), the direction-input map, and the shape-output map of univPsh.

    univPsh — the presheaf polynomial endofunctor over the walking arrow.

    univW — its W-type, a presheaf over the walking arrow.

    Codes / Terms / fib — the two fibres and the fibration.

    univIota / univSigma / univPi — the code constructors.

    univTermSigma / univTermPi — the term constructors.

Main statements

    univShapeRestr_over — the restricted shape lies over the target index.

    univDirection_empty — every shape has no directions over 1; all recursion is over the code fibre.

    univPshLaws — the seven functor laws of univPsh; the whole construction is Classical.choice-free, depending only on propext and Quot.sound.

    The decoding theorems — fib (univTermSigma p d) = univSigma p and the fibre statement fib_eq_iff — go through the root-restriction wRestrTree of the presheaf W-type, whose computation is too deep for this prototype; they are deferred to the review below ("Decoding").

Tags

prototype, inductive-inductive, presheaf, walking arrow, W-type, universe, dependent sum, dependent product

@[expose] public sectionopen CategoryTheoryuniverse uKnamespace PresheafIRUniv

The unique non-identity morphism of the walking arrow (Fin 2 as a preorder), 0 ⟶ 1.

def waHom : (0 : Fin 2) (1 : Fin 2) := ULift.up (PLift.up (0 1 All goals completed! 🐙))

The presheaf endofunctor

The shapes of univPsh: the starting-type code iota k for each k : K, the dependent-sum code sigma, the dependent-product code pi, and the two term shapes termSigma, termPi.

inductive univShape (K : Type uK) : Type uK where | iota (k : K) | sigma | pi | termSigma | termPi

The directions of univPsh: none for iota; the bound code (a point) for sigma and pi; and the code-and-payload pair (two points) for the two term shapes.

def univDir (K : Type uK) : univShape K Type 0 | .iota _ => PEmpty | .sigma => PUnit | .pi => PUnit | .termSigma => PUnit PUnit | .termPi => PUnit PUnit

The direction-input map: every direction lies over the code fibre 0, so the recursion of the W-type runs through the codes.

def univR (K : Type uK) : (Σ a : univShape K, univDir K a) Fin 2 := fun _ => 0

The shape-output map: iota, sigma, and pi are codes (fibre 0); termSigma and termPi are terms (fibre 1).

def univQ (K : Type uK) : univShape K Fin 2 | .iota _ => 0 | .sigma => 0 | .pi => 0 | .termSigma => 1 | .termPi => 1

The slice polynomial functor underlying univPsh.

def univSlice (K : Type uK) : SlicePFunctor.{uK, 0, 0, 0} (Fin 2) (Fin 2) := { toPFunctor := univShape K, univDir K r := univR K q := univQ K }

Every shape has no directions over 1: all recursion is over the code fibre, which is what makes the W-type's hereditary naturality over the single non-identity morphism vacuous at every node.

theorem univDirection_empty (K : Type uK) (a : univShape K) : IsEmpty (SliceDomPFunctor.Direction (univSlice K).toSliceDomPFunctor a (1 : Fin 2)) := K:Type uKa:univShape KIsEmpty ((univSlice K).Direction a 1) exact IsEmpty.mk fun d => K:Type uKa:univShape Kd:(univSlice K).Direction a 1False K:Type uKa:univShape Kd:(univSlice K).Direction a 1h:(univSlice K).DirectionOver a 1 dFalse K:Type uKa:univShape Kd:(univSlice K).Direction a 1h:0 = 1False All goals completed! 🐙

The direction-restriction of univPsh: morphisms into 0 are identities, so the restriction is the identity on the directions over 0; there are no directions over 1 to restrict.

def univDirectionRestr (K : Type uK) (a : univShape K) (i i' : Fin 2) (_f : i' i) (d : SliceDomPFunctor.Direction (univSlice K).toSliceDomPFunctor a i) : SliceDomPFunctor.Direction (univSlice K).toSliceDomPFunctor a i' := K:Type uKa:univShape Ki:Fin 2i':Fin 2_f:i' id:(univSlice K).Direction a i(univSlice K).Direction a i' match i, i' with K:Type uKa:univShape Ki:Fin 2i':Fin 2_f:0 0d:(univSlice K).Direction a 0(univSlice K).Direction a 0 All goals completed! 🐙 K:Type uKa:univShape Ki:Fin 2i':Fin 2_f:1 0d:(univSlice K).Direction a 0(univSlice K).Direction a 1 K:Type uKa:univShape Ki:Fin 2i':Fin 2_f:1 0d:(univSlice K).Direction a 0False K:Type uKa:univShape Ki:Fin 2i':Fin 2_f:1 0d:(univSlice K).Direction a 0hle:1 0False All goals completed! 🐙 K:Type uKa:univShape Ki:Fin 2i':Fin 2_f:0 1d:(univSlice K).Direction a 1(univSlice K).Direction a 0 All goals completed! 🐙 K:Type uKa:univShape Ki:Fin 2i':Fin 2_f:1 1d:(univSlice K).Direction a 1(univSlice K).Direction a 1 All goals completed! 🐙

The shape-restriction of univPsh to a target index t: the code shapes are fixed, and the term shapes are sent to the code shape of the same former (termSigma to sigma, termPi to pi).

def univRestrShape (K : Type uK) (a : univShape K) (t : Fin 2) : univShape K := match a, t with | .termSigma, 0 => .sigma | .termPi, 0 => .pi | _, _ => a

The restricted shape lies over the target index.

theorem univShapeRestr_over (K : Type uK) (a : univShape K) (t : Fin 2) (ht : t univQ K a) : univQ K (univRestrShape K a t) = t := K:Type uKa:univShape Kt:Fin 2ht:t univQ K aunivQ K (univRestrShape K a t) = t cases a with K:Type uKt:Fin 2k:Kht:t univQ K (univShape.iota k)univQ K (univRestrShape K (univShape.iota k) t) = t K:Type uKt:Fin 2k:Kht:t 0univQ K (univRestrShape K (univShape.iota k) t) = t K:Type uKt:Fin 2k:Kht:t 0ht0:t = 0univQ K (univRestrShape K (univShape.iota k) t) = t K:Type uKk:Kht:0 0univQ K (univRestrShape K (univShape.iota k) 0) = 0 All goals completed! 🐙 K:Type uKt:Fin 2ht:t univQ K univShape.sigmaunivQ K (univRestrShape K univShape.sigma t) = t K:Type uKt:Fin 2ht:t 0univQ K (univRestrShape K univShape.sigma t) = t K:Type uKt:Fin 2ht:t 0ht0:t = 0univQ K (univRestrShape K univShape.sigma t) = t K:Type uKht:0 0univQ K (univRestrShape K univShape.sigma 0) = 0 All goals completed! 🐙 K:Type uKt:Fin 2ht:t univQ K univShape.piunivQ K (univRestrShape K univShape.pi t) = t K:Type uKt:Fin 2ht:t 0univQ K (univRestrShape K univShape.pi t) = t K:Type uKt:Fin 2ht:t 0ht0:t = 0univQ K (univRestrShape K univShape.pi t) = t K:Type uKht:0 0univQ K (univRestrShape K univShape.pi 0) = 0 All goals completed! 🐙 K:Type uKt:Fin 2ht:t univQ K univShape.termSigmaunivQ K (univRestrShape K univShape.termSigma t) = t K:Type uKt:Fin 2ht:t univQ K univShape.termSigma(match match univShape.termSigma, t with | univShape.termSigma, 0 => univShape.sigma | univShape.termPi, 0 => univShape.pi | x, x_1 => univShape.termSigma with | univShape.iota k => 0 | univShape.sigma => 0 | univShape.pi => 0 | univShape.termSigma => 1 | univShape.termPi => 1) = t K:Type uKt:Fin 2ht:t univQ K univShape.termSigmaht0:t = 0(match match univShape.termSigma, t with | univShape.termSigma, 0 => univShape.sigma | univShape.termPi, 0 => univShape.pi | x, x_1 => univShape.termSigma with | univShape.iota k => 0 | univShape.sigma => 0 | univShape.pi => 0 | univShape.termSigma => 1 | univShape.termPi => 1) = tK:Type uKt:Fin 2ht:t univQ K univShape.termSigmaht0:¬t = 0(match match univShape.termSigma, t with | univShape.termSigma, 0 => univShape.sigma | univShape.termPi, 0 => univShape.pi | x, x_1 => univShape.termSigma with | univShape.iota k => 0 | univShape.sigma => 0 | univShape.pi => 0 | univShape.termSigma => 1 | univShape.termPi => 1) = t K:Type uKt:Fin 2ht:t univQ K univShape.termSigmaht0:t = 0(match match univShape.termSigma, t with | univShape.termSigma, 0 => univShape.sigma | univShape.termPi, 0 => univShape.pi | x, x_1 => univShape.termSigma with | univShape.iota k => 0 | univShape.sigma => 0 | univShape.pi => 0 | univShape.termSigma => 1 | univShape.termPi => 1) = t K:Type uKht:0 univQ K univShape.termSigma(match match univShape.termSigma, 0 with | univShape.termSigma, 0 => univShape.sigma | univShape.termPi, 0 => univShape.pi | x, x_1 => univShape.termSigma with | univShape.iota k => 0 | univShape.sigma => 0 | univShape.pi => 0 | univShape.termSigma => 1 | univShape.termPi => 1) = 0 All goals completed! 🐙 K:Type uKt:Fin 2ht:t univQ K univShape.termSigmaht0:¬t = 0(match match univShape.termSigma, t with | univShape.termSigma, 0 => univShape.sigma | univShape.termPi, 0 => univShape.pi | x, x_1 => univShape.termSigma with | univShape.iota k => 0 | univShape.sigma => 0 | univShape.pi => 0 | univShape.termSigma => 1 | univShape.termPi => 1) = t K:Type uKt:Fin 2ht:t univQ K univShape.termSigmaht0:¬t = 0ht1:t = 1(match match univShape.termSigma, t with | univShape.termSigma, 0 => univShape.sigma | univShape.termPi, 0 => univShape.pi | x, x_1 => univShape.termSigma with | univShape.iota k => 0 | univShape.sigma => 0 | univShape.pi => 0 | univShape.termSigma => 1 | univShape.termPi => 1) = t K:Type uKht:1 univQ K univShape.termSigmaht0:¬1 = 0(match match univShape.termSigma, 1 with | univShape.termSigma, 0 => univShape.sigma | univShape.termPi, 0 => univShape.pi | x, x_1 => univShape.termSigma with | univShape.iota k => 0 | univShape.sigma => 0 | univShape.pi => 0 | univShape.termSigma => 1 | univShape.termPi => 1) = 1 All goals completed! 🐙 K:Type uKt:Fin 2ht:t univQ K univShape.termPiunivQ K (univRestrShape K univShape.termPi t) = t K:Type uKt:Fin 2ht:t univQ K univShape.termPi(match match univShape.termPi, t with | univShape.termSigma, 0 => univShape.sigma | univShape.termPi, 0 => univShape.pi | x, x_1 => univShape.termPi with | univShape.iota k => 0 | univShape.sigma => 0 | univShape.pi => 0 | univShape.termSigma => 1 | univShape.termPi => 1) = t K:Type uKt:Fin 2ht:t univQ K univShape.termPiht0:t = 0(match match univShape.termPi, t with | univShape.termSigma, 0 => univShape.sigma | univShape.termPi, 0 => univShape.pi | x, x_1 => univShape.termPi with | univShape.iota k => 0 | univShape.sigma => 0 | univShape.pi => 0 | univShape.termSigma => 1 | univShape.termPi => 1) = tK:Type uKt:Fin 2ht:t univQ K univShape.termPiht0:¬t = 0(match match univShape.termPi, t with | univShape.termSigma, 0 => univShape.sigma | univShape.termPi, 0 => univShape.pi | x, x_1 => univShape.termPi with | univShape.iota k => 0 | univShape.sigma => 0 | univShape.pi => 0 | univShape.termSigma => 1 | univShape.termPi => 1) = t K:Type uKt:Fin 2ht:t univQ K univShape.termPiht0:t = 0(match match univShape.termPi, t with | univShape.termSigma, 0 => univShape.sigma | univShape.termPi, 0 => univShape.pi | x, x_1 => univShape.termPi with | univShape.iota k => 0 | univShape.sigma => 0 | univShape.pi => 0 | univShape.termSigma => 1 | univShape.termPi => 1) = t K:Type uKht:0 univQ K univShape.termPi(match match univShape.termPi, 0 with | univShape.termSigma, 0 => univShape.sigma | univShape.termPi, 0 => univShape.pi | x, x_1 => univShape.termPi with | univShape.iota k => 0 | univShape.sigma => 0 | univShape.pi => 0 | univShape.termSigma => 1 | univShape.termPi => 1) = 0 All goals completed! 🐙 K:Type uKt:Fin 2ht:t univQ K univShape.termPiht0:¬t = 0(match match univShape.termPi, t with | univShape.termSigma, 0 => univShape.sigma | univShape.termPi, 0 => univShape.pi | x, x_1 => univShape.termPi with | univShape.iota k => 0 | univShape.sigma => 0 | univShape.pi => 0 | univShape.termSigma => 1 | univShape.termPi => 1) = t K:Type uKt:Fin 2ht:t univQ K univShape.termPiht0:¬t = 0ht1:t = 1(match match univShape.termPi, t with | univShape.termSigma, 0 => univShape.sigma | univShape.termPi, 0 => univShape.pi | x, x_1 => univShape.termPi with | univShape.iota k => 0 | univShape.sigma => 0 | univShape.pi => 0 | univShape.termSigma => 1 | univShape.termPi => 1) = t K:Type uKht:1 univQ K univShape.termPiht0:¬1 = 0(match match univShape.termPi, 1 with | univShape.termSigma, 0 => univShape.sigma | univShape.termPi, 0 => univShape.pi | x, x_1 => univShape.termPi with | univShape.iota k => 0 | univShape.sigma => 0 | univShape.pi => 0 | univShape.termSigma => 1 | univShape.termPi => 1) = 1 All goals completed! 🐙

The shape-restriction of univPsh.

def univShapeRestr (K : Type uK) j j' : Fin 2 (g : j' j) (s : SlicePFunctor.Shape (univSlice K) j) : SlicePFunctor.Shape (univSlice K) j' := univRestrShape K s.1 j', univShapeRestr_over K s.1 j' (K:Type uKj:Fin 2j':Fin 2g:j' js:(univSlice K).Shape jj' univQ K s K:Type uKj:Fin 2j':Fin 2g:j' js:(univSlice K).Shape jhs:univQ K s = jj' univQ K s K:Type uKj:Fin 2j':Fin 2g:j' js:(univSlice K).Shape jhs:univQ K s = jj' j All goals completed! 🐙)

The raw direction map of the reindexing: on the code shapes the identity, and on the term shapes the code component (Sum.inl) when restricting along 0 ⟶ 1, the identity otherwise.

def univReindexDir (K : Type uK) (a : univShape K) (t : Fin 2) : univDir K (univRestrShape K a t) univDir K a := match a, t with | .iota _, _ => fun b => PEmpty.elim b | .sigma, _ => fun b => b | .pi, _ => fun b => b | .termSigma, 0 => fun b => Sum.inl b | .termSigma, 1 => fun b => b | .termPi, 0 => fun b => Sum.inr b | .termPi, 1 => fun b => b

The arity reindexing of univPsh along a walking-arrow morphism.

def univReindex (K : Type uK) j j' : Fin 2 (g : j' j) (a : SlicePFunctor.Shape (univSlice K) j) i : Fin 2 (d : SliceDomPFunctor.Direction (univSlice K).toSliceDomPFunctor (univShapeRestr K g a).1 i) : SliceDomPFunctor.Direction (univSlice K).toSliceDomPFunctor a.1 i := K:Type uKj:Fin 2j':Fin 2g:j' ja:(univSlice K).Shape ji:Fin 2d:(univSlice K).Direction (↑(univShapeRestr K g a)) i(univSlice K).Direction (↑a) i match i with K:Type uKj:Fin 2j':Fin 2g:j' ja:(univSlice K).Shape ji:Fin 2d:(univSlice K).Direction (↑(univShapeRestr K g a)) 0(univSlice K).Direction (↑a) 0 All goals completed! 🐙 K:Type uKj:Fin 2j':Fin 2g:j' ja:(univSlice K).Shape ji:Fin 2d:(univSlice K).Direction (↑(univShapeRestr K g a)) 1(univSlice K).Direction (↑a) 1 All goals completed! 🐙

The operations of the presheaf polynomial endofunctor of the universe.

def univPshData (K : Type uK) : PresheafPFunctorData.{0, 0, uK, 0, 0, 0} (Fin 2) (Fin 2) := { toPFunctor := univShape K, univDir K r := univR K q := univQ K directionRestr := univDirectionRestr K shapeRestr := univShapeRestr K reindex := univReindex K }

The identity law for shapeRestr, as a standalone theorem.

theorem univShapeRestr_id_thm (K : Type uK) : (univPshData K).ShapeRestrId := K:Type uK(univPshData K).ShapeRestrId K:Type uKj:Fin 2(univPshData K).shapeRestr (𝟙 j) = id K:Type uKj:Fin 2s:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.Shape j(univPshData K).shapeRestr (𝟙 j) s = id s K:Type uKj:Fin 2s:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.Shape j((univPshData K).shapeRestr (𝟙 j) s) = (id s) K:Type uKj:Fin 2s:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.Shape junivRestrShape K (↑s) j = s K:Type uKj:Fin 2a:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.Aha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver j aunivRestrShape K (↑a, ha) j = a, ha cases a with K:Type uKj:Fin 2k:Kha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver j (univShape.iota k)univRestrShape K (↑univShape.iota k, ha) j = univShape.iota k, ha All goals completed! 🐙 K:Type uKj:Fin 2ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver j univShape.sigmaunivRestrShape K (↑univShape.sigma, ha) j = univShape.sigma, ha All goals completed! 🐙 K:Type uKj:Fin 2ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver j univShape.piunivRestrShape K (↑univShape.pi, ha) j = univShape.pi, ha All goals completed! 🐙 K:Type uKj:Fin 2ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver j univShape.termSigmaunivRestrShape K (↑univShape.termSigma, ha) j = univShape.termSigma, ha K:Type uKj:Fin 2ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver j univShape.termSigmahq:(univPshData K).q univShape.termSigma = junivRestrShape K (↑univShape.termSigma, ha) j = univShape.termSigma, ha K:Type uKj:Fin 2ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver j univShape.termSigmahq:(univPshData K).q univShape.termSigma = jhj:j = 1univRestrShape K (↑univShape.termSigma, ha) j = univShape.termSigma, ha K:Type uKha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1univRestrShape K (↑univShape.termSigma, ha) 1 = univShape.termSigma, ha All goals completed! 🐙 K:Type uKj:Fin 2ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver j univShape.termPiunivRestrShape K (↑univShape.termPi, ha) j = univShape.termPi, ha K:Type uKj:Fin 2ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver j univShape.termPihq:(univPshData K).q univShape.termPi = junivRestrShape K (↑univShape.termPi, ha) j = univShape.termPi, ha K:Type uKj:Fin 2ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver j univShape.termPihq:(univPshData K).q univShape.termPi = jhj:j = 1univRestrShape K (↑univShape.termPi, ha) j = univShape.termPi, ha K:Type uKha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1univRestrShape K (↑univShape.termPi, ha) 1 = univShape.termPi, ha All goals completed! 🐙

The composition law for shapeRestr, as a standalone theorem.

theorem univShapeRestr_comp_thm (K : Type uK) : (univPshData K).ShapeRestrComp := K:Type uK(univPshData K).ShapeRestrComp K:Type uKj:Fin 2j':Fin 2j'':Fin 2g:j' jh:j'' j'(univPshData K).shapeRestr (h g) = (univPshData K).shapeRestr h (univPshData K).shapeRestr g K:Type uKj:Fin 2j':Fin 2j'':Fin 2g:j' jh:j'' j's:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.Shape j(univPshData K).shapeRestr (h g) s = ((univPshData K).shapeRestr h (univPshData K).shapeRestr g) s K:Type uKj:Fin 2j':Fin 2j'':Fin 2g:j' jh:j'' j's:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.Shape j((univPshData K).shapeRestr (h g) s) = (((univPshData K).shapeRestr h (univPshData K).shapeRestr g) s) K:Type uKj:Fin 2j':Fin 2j'':Fin 2g:j' jh:j'' j's:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.Shape junivRestrShape K (↑s) j'' = univRestrShape K (univRestrShape K (↑s) j') j'' K:Type uKj:Fin 2j':Fin 2j'':Fin 2g:j' jh:j'' j'a:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.Aha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver j aunivRestrShape K (↑a, ha) j'' = univRestrShape K (univRestrShape K (↑a, ha) j') j'' cases a with K:Type uKj:Fin 2j':Fin 2j'':Fin 2g:j' jh:j'' j'k:Kha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver j (univShape.iota k)univRestrShape K (↑univShape.iota k, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.iota k, ha) j') j'' All goals completed! 🐙 K:Type uKj:Fin 2j':Fin 2j'':Fin 2g:j' jh:j'' j'ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver j univShape.sigmaunivRestrShape K (↑univShape.sigma, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.sigma, ha) j') j'' All goals completed! 🐙 K:Type uKj:Fin 2j':Fin 2j'':Fin 2g:j' jh:j'' j'ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver j univShape.piunivRestrShape K (↑univShape.pi, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.pi, ha) j') j'' All goals completed! 🐙 K:Type uKj:Fin 2j':Fin 2j'':Fin 2g:j' jh:j'' j'ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver j univShape.termSigmaunivRestrShape K (↑univShape.termSigma, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termSigma, ha) j') j'' K:Type uKj:Fin 2j':Fin 2j'':Fin 2g:j' jh:j'' j'ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver j univShape.termSigmahq:(univPshData K).q univShape.termSigma = junivRestrShape K (↑univShape.termSigma, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termSigma, ha) j') j'' K:Type uKj:Fin 2j':Fin 2j'':Fin 2g:j' jh:j'' j'ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver j univShape.termSigmahq:(univPshData K).q univShape.termSigma = jhj:j = 1univRestrShape K (↑univShape.termSigma, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termSigma, ha) j') j'' K:Type uKj':Fin 2j'':Fin 2h:j'' j'g:j' 1ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1univRestrShape K (↑univShape.termSigma, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termSigma, ha) j') j'' K:Type uKj':Fin 2j'':Fin 2h:j'' j'g:j' 1ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1hj':j' = 0univRestrShape K (↑univShape.termSigma, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termSigma, ha) j') j''K:Type uKj':Fin 2j'':Fin 2h:j'' j'g:j' 1ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1hj':¬j' = 0univRestrShape K (↑univShape.termSigma, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termSigma, ha) j') j'' K:Type uKj':Fin 2j'':Fin 2h:j'' j'g:j' 1ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1hj':j' = 0univRestrShape K (↑univShape.termSigma, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termSigma, ha) j') j'' K:Type uKj'':Fin 2ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1h:j'' 0g:0 1univRestrShape K (↑univShape.termSigma, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termSigma, ha) 0) j'' K:Type uKj'':Fin 2ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1h:j'' 0g:0 1hj'':j'' = 0univRestrShape K (↑univShape.termSigma, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termSigma, ha) 0) j''K:Type uKj'':Fin 2ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1h:j'' 0g:0 1hj'':¬j'' = 0univRestrShape K (↑univShape.termSigma, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termSigma, ha) 0) j'' K:Type uKj'':Fin 2ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1h:j'' 0g:0 1hj'':j'' = 0univRestrShape K (↑univShape.termSigma, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termSigma, ha) 0) j'' K:Type uKha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1g:0 1h:0 0univRestrShape K (↑univShape.termSigma, ha) 0 = univRestrShape K (univRestrShape K (↑univShape.termSigma, ha) 0) 0 All goals completed! 🐙 K:Type uKj'':Fin 2ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1h:j'' 0g:0 1hj'':¬j'' = 0univRestrShape K (↑univShape.termSigma, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termSigma, ha) 0) j'' K:Type uKj'':Fin 2ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1h:j'' 0g:0 1hj'':¬j'' = 0hj''1:j'' = 1univRestrShape K (↑univShape.termSigma, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termSigma, ha) 0) j'' K:Type uKha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1g:0 1h:1 0hj'':¬1 = 0univRestrShape K (↑univShape.termSigma, ha) 1 = univRestrShape K (univRestrShape K (↑univShape.termSigma, ha) 0) 1 K:Type uKha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1g:0 1h:1 0hj'':¬1 = 0False K:Type uKha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1g:0 1h:1 0hj'':¬1 = 0hle:1 0False All goals completed! 🐙 K:Type uKj':Fin 2j'':Fin 2h:j'' j'g:j' 1ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1hj':¬j' = 0univRestrShape K (↑univShape.termSigma, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termSigma, ha) j') j'' K:Type uKj':Fin 2j'':Fin 2h:j'' j'g:j' 1ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1hj':¬j' = 0hj'1:j' = 1univRestrShape K (↑univShape.termSigma, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termSigma, ha) j') j'' K:Type uKj'':Fin 2ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1h:j'' 1g:1 1hj':¬1 = 0univRestrShape K (↑univShape.termSigma, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termSigma, ha) 1) j'' K:Type uKj'':Fin 2ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1h:j'' 1g:1 1hj':¬1 = 0hj'':j'' = 0univRestrShape K (↑univShape.termSigma, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termSigma, ha) 1) j''K:Type uKj'':Fin 2ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1h:j'' 1g:1 1hj':¬1 = 0hj'':¬j'' = 0univRestrShape K (↑univShape.termSigma, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termSigma, ha) 1) j'' K:Type uKj'':Fin 2ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1h:j'' 1g:1 1hj':¬1 = 0hj'':j'' = 0univRestrShape K (↑univShape.termSigma, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termSigma, ha) 1) j'' K:Type uKha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1g:1 1hj':¬1 = 0h:0 1univRestrShape K (↑univShape.termSigma, ha) 0 = univRestrShape K (univRestrShape K (↑univShape.termSigma, ha) 1) 0 All goals completed! 🐙 K:Type uKj'':Fin 2ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1h:j'' 1g:1 1hj':¬1 = 0hj'':¬j'' = 0univRestrShape K (↑univShape.termSigma, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termSigma, ha) 1) j'' K:Type uKj'':Fin 2ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1h:j'' 1g:1 1hj':¬1 = 0hj'':¬j'' = 0hj''1:j'' = 1univRestrShape K (↑univShape.termSigma, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termSigma, ha) 1) j'' K:Type uKha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1g:1 1hj':¬1 = 0h:1 1hj'':¬1 = 0univRestrShape K (↑univShape.termSigma, ha) 1 = univRestrShape K (univRestrShape K (↑univShape.termSigma, ha) 1) 1 All goals completed! 🐙 K:Type uKj:Fin 2j':Fin 2j'':Fin 2g:j' jh:j'' j'ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver j univShape.termPiunivRestrShape K (↑univShape.termPi, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termPi, ha) j') j'' K:Type uKj:Fin 2j':Fin 2j'':Fin 2g:j' jh:j'' j'ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver j univShape.termPihq:(univPshData K).q univShape.termPi = junivRestrShape K (↑univShape.termPi, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termPi, ha) j') j'' K:Type uKj:Fin 2j':Fin 2j'':Fin 2g:j' jh:j'' j'ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver j univShape.termPihq:(univPshData K).q univShape.termPi = jhj:j = 1univRestrShape K (↑univShape.termPi, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termPi, ha) j') j'' K:Type uKj':Fin 2j'':Fin 2h:j'' j'g:j' 1ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1univRestrShape K (↑univShape.termPi, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termPi, ha) j') j'' K:Type uKj':Fin 2j'':Fin 2h:j'' j'g:j' 1ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1hj':j' = 0univRestrShape K (↑univShape.termPi, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termPi, ha) j') j''K:Type uKj':Fin 2j'':Fin 2h:j'' j'g:j' 1ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1hj':¬j' = 0univRestrShape K (↑univShape.termPi, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termPi, ha) j') j'' K:Type uKj':Fin 2j'':Fin 2h:j'' j'g:j' 1ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1hj':j' = 0univRestrShape K (↑univShape.termPi, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termPi, ha) j') j'' K:Type uKj'':Fin 2ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1h:j'' 0g:0 1univRestrShape K (↑univShape.termPi, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termPi, ha) 0) j'' K:Type uKj'':Fin 2ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1h:j'' 0g:0 1hj'':j'' = 0univRestrShape K (↑univShape.termPi, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termPi, ha) 0) j''K:Type uKj'':Fin 2ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1h:j'' 0g:0 1hj'':¬j'' = 0univRestrShape K (↑univShape.termPi, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termPi, ha) 0) j'' K:Type uKj'':Fin 2ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1h:j'' 0g:0 1hj'':j'' = 0univRestrShape K (↑univShape.termPi, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termPi, ha) 0) j'' K:Type uKha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1g:0 1h:0 0univRestrShape K (↑univShape.termPi, ha) 0 = univRestrShape K (univRestrShape K (↑univShape.termPi, ha) 0) 0 All goals completed! 🐙 K:Type uKj'':Fin 2ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1h:j'' 0g:0 1hj'':¬j'' = 0univRestrShape K (↑univShape.termPi, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termPi, ha) 0) j'' K:Type uKj'':Fin 2ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1h:j'' 0g:0 1hj'':¬j'' = 0hj''1:j'' = 1univRestrShape K (↑univShape.termPi, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termPi, ha) 0) j'' K:Type uKha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1g:0 1h:1 0hj'':¬1 = 0univRestrShape K (↑univShape.termPi, ha) 1 = univRestrShape K (univRestrShape K (↑univShape.termPi, ha) 0) 1 K:Type uKha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1g:0 1h:1 0hj'':¬1 = 0False K:Type uKha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1g:0 1h:1 0hj'':¬1 = 0hle:1 0False All goals completed! 🐙 K:Type uKj':Fin 2j'':Fin 2h:j'' j'g:j' 1ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1hj':¬j' = 0univRestrShape K (↑univShape.termPi, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termPi, ha) j') j'' K:Type uKj':Fin 2j'':Fin 2h:j'' j'g:j' 1ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1hj':¬j' = 0hj'1:j' = 1univRestrShape K (↑univShape.termPi, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termPi, ha) j') j'' K:Type uKj'':Fin 2ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1h:j'' 1g:1 1hj':¬1 = 0univRestrShape K (↑univShape.termPi, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termPi, ha) 1) j'' K:Type uKj'':Fin 2ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1h:j'' 1g:1 1hj':¬1 = 0hj'':j'' = 0univRestrShape K (↑univShape.termPi, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termPi, ha) 1) j''K:Type uKj'':Fin 2ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1h:j'' 1g:1 1hj':¬1 = 0hj'':¬j'' = 0univRestrShape K (↑univShape.termPi, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termPi, ha) 1) j'' K:Type uKj'':Fin 2ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1h:j'' 1g:1 1hj':¬1 = 0hj'':j'' = 0univRestrShape K (↑univShape.termPi, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termPi, ha) 1) j'' K:Type uKha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1g:1 1hj':¬1 = 0h:0 1univRestrShape K (↑univShape.termPi, ha) 0 = univRestrShape K (univRestrShape K (↑univShape.termPi, ha) 1) 0 All goals completed! 🐙 K:Type uKj'':Fin 2ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1h:j'' 1g:1 1hj':¬1 = 0hj'':¬j'' = 0univRestrShape K (↑univShape.termPi, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termPi, ha) 1) j'' K:Type uKj'':Fin 2ha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1h:j'' 1g:1 1hj':¬1 = 0hj'':¬j'' = 0hj''1:j'' = 1univRestrShape K (↑univShape.termPi, ha) j'' = univRestrShape K (univRestrShape K (↑univShape.termPi, ha) 1) j'' K:Type uKha:{ toSliceDomPFunctor := (univPshData K).toSliceDomPFunctor, q := (univPshData K).q }.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1g:1 1hj':¬1 = 0h:1 1hj'':¬1 = 0univRestrShape K (↑univShape.termPi, ha) 1 = univRestrShape K (univRestrShape K (↑univShape.termPi, ha) 1) 1 All goals completed! 🐙

Casting along an equality of a type with itself is the identity.

theorem cast_self.{u} {α : Sort u} (e : α = α) (a : α) : cast e a = a := α:Sort ue:α = αa:αcast e a = a α:Sort ua:αcast a = a All goals completed! 🐙

The seven functor laws of univPsh. The direction-side laws hold by the empty and identity cases of univDirectionRestr; the shape-side laws by the definition of univRestrShape; and the reindex laws by the definition of univReindexDir and the empty direction types.

theorem univPshLaws (K : Type uK) : (univPshData K).IsFunctorial := { directionRestr_id := K:Type uK(univPshData K).DirectionRestrId K:Type uKa:(univPshData K).Ai:Fin 2(univPshData K).directionRestr a (𝟙 i) = id K:Type uKa:(univPshData K).Ai:Fin 2d:(univPshData K).Direction a i(univPshData K).directionRestr a (𝟙 i) d = id d K:Type uKa:(univPshData K).Ai:Fin 2d:(univPshData K).Direction a ihi:i = 0(univPshData K).directionRestr a (𝟙 i) d = id dK:Type uKa:(univPshData K).Ai:Fin 2d:(univPshData K).Direction a ihi:¬i = 0(univPshData K).directionRestr a (𝟙 i) d = id d K:Type uKa:(univPshData K).Ai:Fin 2d:(univPshData K).Direction a ihi:i = 0(univPshData K).directionRestr a (𝟙 i) d = id d K:Type uKa:(univPshData K).Ad:(univPshData K).Direction a 0(univPshData K).directionRestr a (𝟙 0) d = id d All goals completed! 🐙 K:Type uKa:(univPshData K).Ai:Fin 2d:(univPshData K).Direction a ihi:¬i = 0(univPshData K).directionRestr a (𝟙 i) d = id d K:Type uKa:(univPshData K).Ai:Fin 2d:(univPshData K).Direction a ihi:¬i = 0hi1:i = 1(univPshData K).directionRestr a (𝟙 i) d = id d K:Type uKa:(univPshData K).Ad:(univPshData K).Direction a 1hi:¬1 = 0(univPshData K).directionRestr a (𝟙 1) d = id d All goals completed! 🐙 directionRestr_comp := K:Type uK(univPshData K).DirectionRestrComp K:Type uKa:(univPshData K).Ai:Fin 2i':Fin 2i'':Fin 2f:i' ig:i'' i'(univPshData K).directionRestr a (g f) = (univPshData K).directionRestr a g (univPshData K).directionRestr a f K:Type uKa:(univPshData K).Ai:Fin 2i':Fin 2i'':Fin 2f:i' ig:i'' i'd:(univPshData K).Direction a i(univPshData K).directionRestr a (g f) d = ((univPshData K).directionRestr a g (univPshData K).directionRestr a f) d K:Type uKa:(univPshData K).Ai:Fin 2i':Fin 2i'':Fin 2f:i' ig:i'' i'd:(univPshData K).Direction a ihi:i = 0(univPshData K).directionRestr a (g f) d = ((univPshData K).directionRestr a g (univPshData K).directionRestr a f) dK:Type uKa:(univPshData K).Ai:Fin 2i':Fin 2i'':Fin 2f:i' ig:i'' i'd:(univPshData K).Direction a ihi:¬i = 0(univPshData K).directionRestr a (g f) d = ((univPshData K).directionRestr a g (univPshData K).directionRestr a f) d K:Type uKa:(univPshData K).Ai:Fin 2i':Fin 2i'':Fin 2f:i' ig:i'' i'd:(univPshData K).Direction a ihi:i = 0(univPshData K).directionRestr a (g f) d = ((univPshData K).directionRestr a g (univPshData K).directionRestr a f) d K:Type uKa:(univPshData K).Ai':Fin 2i'':Fin 2g:i'' i'f:i' 0d:(univPshData K).Direction a 0(univPshData K).directionRestr a (g f) d = ((univPshData K).directionRestr a g (univPshData K).directionRestr a f) d K:Type uKa:(univPshData K).Ai':Fin 2i'':Fin 2g:i'' i'f:i' 0d:(univPshData K).Direction a 0hi':i' = 0(univPshData K).directionRestr a (g f) d = ((univPshData K).directionRestr a g (univPshData K).directionRestr a f) dK:Type uKa:(univPshData K).Ai':Fin 2i'':Fin 2g:i'' i'f:i' 0d:(univPshData K).Direction a 0hi':¬i' = 0(univPshData K).directionRestr a (g f) d = ((univPshData K).directionRestr a g (univPshData K).directionRestr a f) d K:Type uKa:(univPshData K).Ai':Fin 2i'':Fin 2g:i'' i'f:i' 0d:(univPshData K).Direction a 0hi':i' = 0(univPshData K).directionRestr a (g f) d = ((univPshData K).directionRestr a g (univPshData K).directionRestr a f) d K:Type uKa:(univPshData K).Ai'':Fin 2d:(univPshData K).Direction a 0g:i'' 0f:0 0(univPshData K).directionRestr a (g f) d = ((univPshData K).directionRestr a g (univPshData K).directionRestr a f) d K:Type uKa:(univPshData K).Ai'':Fin 2d:(univPshData K).Direction a 0g:i'' 0f:0 0hi'':i'' = 0(univPshData K).directionRestr a (g f) d = ((univPshData K).directionRestr a g (univPshData K).directionRestr a f) dK:Type uKa:(univPshData K).Ai'':Fin 2d:(univPshData K).Direction a 0g:i'' 0f:0 0hi'':¬i'' = 0(univPshData K).directionRestr a (g f) d = ((univPshData K).directionRestr a g (univPshData K).directionRestr a f) d K:Type uKa:(univPshData K).Ai'':Fin 2d:(univPshData K).Direction a 0g:i'' 0f:0 0hi'':i'' = 0(univPshData K).directionRestr a (g f) d = ((univPshData K).directionRestr a g (univPshData K).directionRestr a f) d K:Type uKa:(univPshData K).Ad:(univPshData K).Direction a 0f:0 0g:0 0(univPshData K).directionRestr a (g f) d = ((univPshData K).directionRestr a g (univPshData K).directionRestr a f) d All goals completed! 🐙 K:Type uKa:(univPshData K).Ai'':Fin 2d:(univPshData K).Direction a 0g:i'' 0f:0 0hi'':¬i'' = 0(univPshData K).directionRestr a (g f) d = ((univPshData K).directionRestr a g (univPshData K).directionRestr a f) d K:Type uKa:(univPshData K).Ai'':Fin 2d:(univPshData K).Direction a 0g:i'' 0f:0 0hi'':¬i'' = 0hi''1:i'' = 1(univPshData K).directionRestr a (g f) d = ((univPshData K).directionRestr a g (univPshData K).directionRestr a f) d K:Type uKa:(univPshData K).Ad:(univPshData K).Direction a 0f:0 0g:1 0hi'':¬1 = 0(univPshData K).directionRestr a (g f) d = ((univPshData K).directionRestr a g (univPshData K).directionRestr a f) d K:Type uKa:(univPshData K).Ad:(univPshData K).Direction a 0f:0 0g:1 0hi'':¬1 = 0False K:Type uKa:(univPshData K).Ad:(univPshData K).Direction a 0f:0 0g:1 0hi'':¬1 = 0hle:1 0False All goals completed! 🐙 K:Type uKa:(univPshData K).Ai':Fin 2i'':Fin 2g:i'' i'f:i' 0d:(univPshData K).Direction a 0hi':¬i' = 0(univPshData K).directionRestr a (g f) d = ((univPshData K).directionRestr a g (univPshData K).directionRestr a f) d K:Type uKa:(univPshData K).Ai':Fin 2i'':Fin 2g:i'' i'f:i' 0d:(univPshData K).Direction a 0hi':¬i' = 0hi'1:i' = 1(univPshData K).directionRestr a (g f) d = ((univPshData K).directionRestr a g (univPshData K).directionRestr a f) d K:Type uKa:(univPshData K).Ai'':Fin 2d:(univPshData K).Direction a 0g:i'' 1f:1 0hi':¬1 = 0(univPshData K).directionRestr a (g f) d = ((univPshData K).directionRestr a g (univPshData K).directionRestr a f) d K:Type uKa:(univPshData K).Ai'':Fin 2d:(univPshData K).Direction a 0g:i'' 1f:1 0hi':¬1 = 0False K:Type uKa:(univPshData K).Ai'':Fin 2d:(univPshData K).Direction a 0g:i'' 1f:1 0hi':¬1 = 0hle:1 0False All goals completed! 🐙 K:Type uKa:(univPshData K).Ai:Fin 2i':Fin 2i'':Fin 2f:i' ig:i'' i'd:(univPshData K).Direction a ihi:¬i = 0(univPshData K).directionRestr a (g f) d = ((univPshData K).directionRestr a g (univPshData K).directionRestr a f) d K:Type uKa:(univPshData K).Ai:Fin 2i':Fin 2i'':Fin 2f:i' ig:i'' i'd:(univPshData K).Direction a ihi:¬i = 0hi1:i = 1(univPshData K).directionRestr a (g f) d = ((univPshData K).directionRestr a g (univPshData K).directionRestr a f) d K:Type uKa:(univPshData K).Ai':Fin 2i'':Fin 2g:i'' i'f:i' 1d:(univPshData K).Direction a 1hi:¬1 = 0(univPshData K).directionRestr a (g f) d = ((univPshData K).directionRestr a g (univPshData K).directionRestr a f) d All goals completed! 🐙 shapeRestr_id := univShapeRestr_id_thm K shapeRestr_comp := univShapeRestr_comp_thm K reindex_naturality := K:Type uK(univPshData K).ReindexNaturality K:Type uKj:Fin 2j':Fin 2g:j' ja:(univPshData K).toSlicePFunctor.Shape ji:Fin 2i':Fin 2f:i' i(univPshData K).directionRestr (↑a) f (univPshData K).reindex g a = (univPshData K).reindex g a (univPshData K).directionRestr (↑((univPshData K).shapeRestr g a)) f K:Type uKj:Fin 2j':Fin 2g:j' ja:(univPshData K).toSlicePFunctor.Shape ji:Fin 2i':Fin 2f:i' id:(univPshData K).Direction (↑((univPshData K).shapeRestr g a)) i((univPshData K).directionRestr (↑a) f (univPshData K).reindex g a) d = ((univPshData K).reindex g a (univPshData K).directionRestr (↑((univPshData K).shapeRestr g a)) f) d K:Type uKj:Fin 2j':Fin 2g:j' ja:(univPshData K).toSlicePFunctor.Shape ji:Fin 2i':Fin 2f:i' id:(univPshData K).Direction (↑((univPshData K).shapeRestr g a)) ihi:i = 0((univPshData K).directionRestr (↑a) f (univPshData K).reindex g a) d = ((univPshData K).reindex g a (univPshData K).directionRestr (↑((univPshData K).shapeRestr g a)) f) dK:Type uKj:Fin 2j':Fin 2g:j' ja:(univPshData K).toSlicePFunctor.Shape ji:Fin 2i':Fin 2f:i' id:(univPshData K).Direction (↑((univPshData K).shapeRestr g a)) ihi:¬i = 0((univPshData K).directionRestr (↑a) f (univPshData K).reindex g a) d = ((univPshData K).reindex g a (univPshData K).directionRestr (↑((univPshData K).shapeRestr g a)) f) d K:Type uKj:Fin 2j':Fin 2g:j' ja:(univPshData K).toSlicePFunctor.Shape ji:Fin 2i':Fin 2f:i' id:(univPshData K).Direction (↑((univPshData K).shapeRestr g a)) ihi:i = 0((univPshData K).directionRestr (↑a) f (univPshData K).reindex g a) d = ((univPshData K).reindex g a (univPshData K).directionRestr (↑((univPshData K).shapeRestr g a)) f) d K:Type uKj:Fin 2j':Fin 2g:j' ja:(univPshData K).toSlicePFunctor.Shape ji':Fin 2f:i' 0d:(univPshData K).Direction (↑((univPshData K).shapeRestr g a)) 0((univPshData K).directionRestr (↑a) f (univPshData K).reindex g a) d = ((univPshData K).reindex g a (univPshData K).directionRestr (↑((univPshData K).shapeRestr g a)) f) d K:Type uKj:Fin 2j':Fin 2g:j' ja:(univPshData K).toSlicePFunctor.Shape ji':Fin 2f:i' 0d:(univPshData K).Direction (↑((univPshData K).shapeRestr g a)) 0hi':i' = 0((univPshData K).directionRestr (↑a) f (univPshData K).reindex g a) d = ((univPshData K).reindex g a (univPshData K).directionRestr (↑((univPshData K).shapeRestr g a)) f) dK:Type uKj:Fin 2j':Fin 2g:j' ja:(univPshData K).toSlicePFunctor.Shape ji':Fin 2f:i' 0d:(univPshData K).Direction (↑((univPshData K).shapeRestr g a)) 0hi':¬i' = 0((univPshData K).directionRestr (↑a) f (univPshData K).reindex g a) d = ((univPshData K).reindex g a (univPshData K).directionRestr (↑((univPshData K).shapeRestr g a)) f) d K:Type uKj:Fin 2j':Fin 2g:j' ja:(univPshData K).toSlicePFunctor.Shape ji':Fin 2f:i' 0d:(univPshData K).Direction (↑((univPshData K).shapeRestr g a)) 0hi':i' = 0((univPshData K).directionRestr (↑a) f (univPshData K).reindex g a) d = ((univPshData K).reindex g a (univPshData K).directionRestr (↑((univPshData K).shapeRestr g a)) f) d K:Type uKj:Fin 2j':Fin 2g:j' ja:(univPshData K).toSlicePFunctor.Shape jd:(univPshData K).Direction (↑((univPshData K).shapeRestr g a)) 0f:0 0((univPshData K).directionRestr (↑a) f (univPshData K).reindex g a) d = ((univPshData K).reindex g a (univPshData K).directionRestr (↑((univPshData K).shapeRestr g a)) f) d All goals completed! 🐙 K:Type uKj:Fin 2j':Fin 2g:j' ja:(univPshData K).toSlicePFunctor.Shape ji':Fin 2f:i' 0d:(univPshData K).Direction (↑((univPshData K).shapeRestr g a)) 0hi':¬i' = 0((univPshData K).directionRestr (↑a) f (univPshData K).reindex g a) d = ((univPshData K).reindex g a (univPshData K).directionRestr (↑((univPshData K).shapeRestr g a)) f) d K:Type uKj:Fin 2j':Fin 2g:j' ja:(univPshData K).toSlicePFunctor.Shape ji':Fin 2f:i' 0d:(univPshData K).Direction (↑((univPshData K).shapeRestr g a)) 0hi':¬i' = 0hi'1:i' = 1((univPshData K).directionRestr (↑a) f (univPshData K).reindex g a) d = ((univPshData K).reindex g a (univPshData K).directionRestr (↑((univPshData K).shapeRestr g a)) f) d K:Type uKj:Fin 2j':Fin 2g:j' ja:(univPshData K).toSlicePFunctor.Shape jd:(univPshData K).Direction (↑((univPshData K).shapeRestr g a)) 0f:1 0hi':¬1 = 0((univPshData K).directionRestr (↑a) f (univPshData K).reindex g a) d = ((univPshData K).reindex g a (univPshData K).directionRestr (↑((univPshData K).shapeRestr g a)) f) d K:Type uKj:Fin 2j':Fin 2g:j' ja:(univPshData K).toSlicePFunctor.Shape jd:(univPshData K).Direction (↑((univPshData K).shapeRestr g a)) 0f:1 0hi':¬1 = 0False K:Type uKj:Fin 2j':Fin 2g:j' ja:(univPshData K).toSlicePFunctor.Shape jd:(univPshData K).Direction (↑((univPshData K).shapeRestr g a)) 0f:1 0hi':¬1 = 0hle:1 0False All goals completed! 🐙 K:Type uKj:Fin 2j':Fin 2g:j' ja:(univPshData K).toSlicePFunctor.Shape ji:Fin 2i':Fin 2f:i' id:(univPshData K).Direction (↑((univPshData K).shapeRestr g a)) ihi:¬i = 0((univPshData K).directionRestr (↑a) f (univPshData K).reindex g a) d = ((univPshData K).reindex g a (univPshData K).directionRestr (↑((univPshData K).shapeRestr g a)) f) d K:Type uKj:Fin 2j':Fin 2g:j' ja:(univPshData K).toSlicePFunctor.Shape ji:Fin 2i':Fin 2f:i' id:(univPshData K).Direction (↑((univPshData K).shapeRestr g a)) ihi:¬i = 0hi1:i = 1((univPshData K).directionRestr (↑a) f (univPshData K).reindex g a) d = ((univPshData K).reindex g a (univPshData K).directionRestr (↑((univPshData K).shapeRestr g a)) f) d K:Type uKj:Fin 2j':Fin 2g:j' ja:(univPshData K).toSlicePFunctor.Shape ji':Fin 2f:i' 1d:(univPshData K).Direction (↑((univPshData K).shapeRestr g a)) 1hi:¬1 = 0((univPshData K).directionRestr (↑a) f (univPshData K).reindex g a) d = ((univPshData K).reindex g a (univPshData K).directionRestr (↑((univPshData K).shapeRestr g a)) f) d All goals completed! 🐙 reindex_id := K:Type uK(univPshData K).ReindexId K:Type uKj:Fin 2a:(univPshData K).toSlicePFunctor.Shape ji:Fin 2b:(univPshData K).Direction (↑((univPshData K).shapeRestr (𝟙 j) a)) i(univPshData K).reindex (𝟙 j) a b = cast b K:Type uKj:Fin 2a:(univPshData K).toSlicePFunctor.Shape ji:Fin 2b:(univPshData K).Direction (↑((univPshData K).shapeRestr (𝟙 j) a)) ihi:i = 0(univPshData K).reindex (𝟙 j) a b = cast bK:Type uKj:Fin 2a:(univPshData K).toSlicePFunctor.Shape ji:Fin 2b:(univPshData K).Direction (↑((univPshData K).shapeRestr (𝟙 j) a)) ihi:¬i = 0(univPshData K).reindex (𝟙 j) a b = cast b K:Type uKj:Fin 2a:(univPshData K).toSlicePFunctor.Shape ji:Fin 2b:(univPshData K).Direction (↑((univPshData K).shapeRestr (𝟙 j) a)) ihi:i = 0(univPshData K).reindex (𝟙 j) a b = cast b K:Type uKj:Fin 2a:(univPshData K).toSlicePFunctor.Shape jb:(univPshData K).Direction (↑((univPshData K).shapeRestr (𝟙 j) a)) 0(univPshData K).reindex (𝟙 j) a b = cast b K:Type uKj:Fin 2ashape:(univPshData K).toSlicePFunctor.Aha:(univPshData K).toSlicePFunctor.ShapeOver j ashapeb:(univPshData K).Direction (↑((univPshData K).shapeRestr (𝟙 j) ashape, ha)) 0(univPshData K).reindex (𝟙 j) ashape, ha b = cast b cases ashape with K:Type uKj:Fin 2k:Kha:(univPshData K).toSlicePFunctor.ShapeOver j (univShape.iota k)b:(univPshData K).Direction (↑((univPshData K).shapeRestr (𝟙 j) univShape.iota k, ha)) 0(univPshData K).reindex (𝟙 j) univShape.iota k, ha b = cast b All goals completed! 🐙 K:Type uKj:Fin 2ha:(univPshData K).toSlicePFunctor.ShapeOver j univShape.sigmab:(univPshData K).Direction (↑((univPshData K).shapeRestr (𝟙 j) univShape.sigma, ha)) 0(univPshData K).reindex (𝟙 j) univShape.sigma, ha b = cast b K:Type uKj:Fin 2ha:(univPshData K).toSlicePFunctor.ShapeOver j univShape.sigmab:(univPshData K).Direction (↑((univPshData K).shapeRestr (𝟙 j) univShape.sigma, ha)) 0hsub: (x y : (univSlice K).Direction (↑univShape.sigma, ha) 0), x = y(univPshData K).reindex (𝟙 j) univShape.sigma, ha b = cast b All goals completed! 🐙 K:Type uKj:Fin 2ha:(univPshData K).toSlicePFunctor.ShapeOver j univShape.pib:(univPshData K).Direction (↑((univPshData K).shapeRestr (𝟙 j) univShape.pi, ha)) 0(univPshData K).reindex (𝟙 j) univShape.pi, ha b = cast b K:Type uKj:Fin 2ha:(univPshData K).toSlicePFunctor.ShapeOver j univShape.pib:(univPshData K).Direction (↑((univPshData K).shapeRestr (𝟙 j) univShape.pi, ha)) 0hsub: (x y : (univSlice K).Direction (↑univShape.pi, ha) 0), x = y(univPshData K).reindex (𝟙 j) univShape.pi, ha b = cast b All goals completed! 🐙 K:Type uKj:Fin 2ha:(univPshData K).toSlicePFunctor.ShapeOver j univShape.termSigmab:(univPshData K).Direction (↑((univPshData K).shapeRestr (𝟙 j) univShape.termSigma, ha)) 0(univPshData K).reindex (𝟙 j) univShape.termSigma, ha b = cast b K:Type uKj:Fin 2ha:(univPshData K).toSlicePFunctor.ShapeOver j univShape.termSigmab:(univPshData K).Direction (↑((univPshData K).shapeRestr (𝟙 j) univShape.termSigma, ha)) 0hq:(univPshData K).q univShape.termSigma = j(univPshData K).reindex (𝟙 j) univShape.termSigma, ha b = cast b K:Type uKj:Fin 2ha:(univPshData K).toSlicePFunctor.ShapeOver j univShape.termSigmab:(univPshData K).Direction (↑((univPshData K).shapeRestr (𝟙 j) univShape.termSigma, ha)) 0hq:(univPshData K).q univShape.termSigma = jhj:j = 1(univPshData K).reindex (𝟙 j) univShape.termSigma, ha b = cast b K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmab:(univPshData K).Direction (↑((univPshData K).shapeRestr (𝟙 1) univShape.termSigma, ha)) 0hq:(univPshData K).q univShape.termSigma = 1(univPshData K).reindex (𝟙 1) univShape.termSigma, ha b = cast b K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmab:(univPshData K).Direction (↑((univPshData K).shapeRestr (𝟙 1) univShape.termSigma, ha)) 0hq:(univPshData K).q univShape.termSigma = 1e:(univSlice K).Direction (↑(univShapeRestr K (𝟙 1) univShape.termSigma, ha)) 0 = (univSlice K).Direction (↑univShape.termSigma, ha) 0(univPshData K).reindex (𝟙 1) univShape.termSigma, ha b = cast b K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmab:(univPshData K).Direction (↑((univPshData K).shapeRestr (𝟙 1) univShape.termSigma, ha)) 0hq:(univPshData K).q univShape.termSigma = 1(univPshData K).reindex (𝟙 1) univShape.termSigma, ha b = cast b K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmab:(univPshData K).Direction (↑((univPshData K).shapeRestr (𝟙 1) univShape.termSigma, ha)) 0hq:(univPshData K).q univShape.termSigma = 1((univPshData K).reindex (𝟙 1) univShape.termSigma, ha b) = (cast b) All goals completed! 🐙 K:Type uKj:Fin 2ha:(univPshData K).toSlicePFunctor.ShapeOver j univShape.termPib:(univPshData K).Direction (↑((univPshData K).shapeRestr (𝟙 j) univShape.termPi, ha)) 0(univPshData K).reindex (𝟙 j) univShape.termPi, ha b = cast b K:Type uKj:Fin 2ha:(univPshData K).toSlicePFunctor.ShapeOver j univShape.termPib:(univPshData K).Direction (↑((univPshData K).shapeRestr (𝟙 j) univShape.termPi, ha)) 0hq:(univPshData K).q univShape.termPi = j(univPshData K).reindex (𝟙 j) univShape.termPi, ha b = cast b K:Type uKj:Fin 2ha:(univPshData K).toSlicePFunctor.ShapeOver j univShape.termPib:(univPshData K).Direction (↑((univPshData K).shapeRestr (𝟙 j) univShape.termPi, ha)) 0hq:(univPshData K).q univShape.termPi = jhj:j = 1(univPshData K).reindex (𝟙 j) univShape.termPi, ha b = cast b K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPib:(univPshData K).Direction (↑((univPshData K).shapeRestr (𝟙 1) univShape.termPi, ha)) 0hq:(univPshData K).q univShape.termPi = 1(univPshData K).reindex (𝟙 1) univShape.termPi, ha b = cast b K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPib:(univPshData K).Direction (↑((univPshData K).shapeRestr (𝟙 1) univShape.termPi, ha)) 0hq:(univPshData K).q univShape.termPi = 1e:(univSlice K).Direction (↑(univShapeRestr K (𝟙 1) univShape.termPi, ha)) 0 = (univSlice K).Direction (↑univShape.termPi, ha) 0(univPshData K).reindex (𝟙 1) univShape.termPi, ha b = cast b K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPib:(univPshData K).Direction (↑((univPshData K).shapeRestr (𝟙 1) univShape.termPi, ha)) 0hq:(univPshData K).q univShape.termPi = 1(univPshData K).reindex (𝟙 1) univShape.termPi, ha b = cast b K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPib:(univPshData K).Direction (↑((univPshData K).shapeRestr (𝟙 1) univShape.termPi, ha)) 0hq:(univPshData K).q univShape.termPi = 1((univPshData K).reindex (𝟙 1) univShape.termPi, ha b) = (cast b) All goals completed! 🐙 K:Type uKj:Fin 2a:(univPshData K).toSlicePFunctor.Shape ji:Fin 2b:(univPshData K).Direction (↑((univPshData K).shapeRestr (𝟙 j) a)) ihi:¬i = 0(univPshData K).reindex (𝟙 j) a b = cast b K:Type uKj:Fin 2a:(univPshData K).toSlicePFunctor.Shape ji:Fin 2b:(univPshData K).Direction (↑((univPshData K).shapeRestr (𝟙 j) a)) ihi:¬i = 0hi1:i = 1(univPshData K).reindex (𝟙 j) a b = cast b K:Type uKj:Fin 2a:(univPshData K).toSlicePFunctor.Shape jb:(univPshData K).Direction (↑((univPshData K).shapeRestr (𝟙 j) a)) 1hi:¬1 = 0(univPshData K).reindex (𝟙 j) a b = cast b All goals completed! 🐙 reindex_comp := K:Type uK(univPshData K).ReindexComp K:Type uKj:Fin 2j':Fin 2j'':Fin 2g:j' jh:j'' j'a:(univPshData K).toSlicePFunctor.Shape ji:Fin 2b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) a)) i(univPshData K).reindex (h g) a b = (univPshData K).reindex g a ((univPshData K).reindex h ((univPshData K).shapeRestr g a) (cast b)) K:Type uKj:Fin 2j':Fin 2j'':Fin 2g:j' jh:j'' j'a:(univPshData K).toSlicePFunctor.Shape ji:Fin 2b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) a)) ihi:i = 0(univPshData K).reindex (h g) a b = (univPshData K).reindex g a ((univPshData K).reindex h ((univPshData K).shapeRestr g a) (cast b))K:Type uKj:Fin 2j':Fin 2j'':Fin 2g:j' jh:j'' j'a:(univPshData K).toSlicePFunctor.Shape ji:Fin 2b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) a)) ihi:¬i = 0(univPshData K).reindex (h g) a b = (univPshData K).reindex g a ((univPshData K).reindex h ((univPshData K).shapeRestr g a) (cast b)) K:Type uKj:Fin 2j':Fin 2j'':Fin 2g:j' jh:j'' j'a:(univPshData K).toSlicePFunctor.Shape ji:Fin 2b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) a)) ihi:i = 0(univPshData K).reindex (h g) a b = (univPshData K).reindex g a ((univPshData K).reindex h ((univPshData K).shapeRestr g a) (cast b)) K:Type uKj:Fin 2j':Fin 2j'':Fin 2g:j' jh:j'' j'a:(univPshData K).toSlicePFunctor.Shape jb:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) a)) 0(univPshData K).reindex (h g) a b = (univPshData K).reindex g a ((univPshData K).reindex h ((univPshData K).shapeRestr g a) (cast b)) K:Type uKj:Fin 2j':Fin 2j'':Fin 2g:j' jh:j'' j'ashape:(univPshData K).toSlicePFunctor.Aha:(univPshData K).toSlicePFunctor.ShapeOver j ashapeb:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) ashape, ha)) 0(univPshData K).reindex (h g) ashape, ha b = (univPshData K).reindex g ashape, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g ashape, ha) (cast b)) cases ashape with K:Type uKj:Fin 2j':Fin 2j'':Fin 2g:j' jh:j'' j'k:Kha:(univPshData K).toSlicePFunctor.ShapeOver j (univShape.iota k)b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.iota k, ha)) 0(univPshData K).reindex (h g) univShape.iota k, ha b = (univPshData K).reindex g univShape.iota k, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.iota k, ha) (cast b)) All goals completed! 🐙 K:Type uKj:Fin 2j':Fin 2j'':Fin 2g:j' jh:j'' j'ha:(univPshData K).toSlicePFunctor.ShapeOver j univShape.sigmab:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.sigma, ha)) 0(univPshData K).reindex (h g) univShape.sigma, ha b = (univPshData K).reindex g univShape.sigma, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.sigma, ha) (cast b)) K:Type uKj:Fin 2j':Fin 2j'':Fin 2g:j' jh:j'' j'ha:(univPshData K).toSlicePFunctor.ShapeOver j univShape.sigmab:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.sigma, ha)) 0hsub: (x y : (univSlice K).Direction (↑univShape.sigma, ha) 0), x = y(univPshData K).reindex (h g) univShape.sigma, ha b = (univPshData K).reindex g univShape.sigma, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.sigma, ha) (cast b)) All goals completed! 🐙 K:Type uKj:Fin 2j':Fin 2j'':Fin 2g:j' jh:j'' j'ha:(univPshData K).toSlicePFunctor.ShapeOver j univShape.pib:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.pi, ha)) 0(univPshData K).reindex (h g) univShape.pi, ha b = (univPshData K).reindex g univShape.pi, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.pi, ha) (cast b)) K:Type uKj:Fin 2j':Fin 2j'':Fin 2g:j' jh:j'' j'ha:(univPshData K).toSlicePFunctor.ShapeOver j univShape.pib:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.pi, ha)) 0hsub: (x y : (univSlice K).Direction (↑univShape.pi, ha) 0), x = y(univPshData K).reindex (h g) univShape.pi, ha b = (univPshData K).reindex g univShape.pi, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.pi, ha) (cast b)) All goals completed! 🐙 K:Type uKj:Fin 2j':Fin 2j'':Fin 2g:j' jh:j'' j'ha:(univPshData K).toSlicePFunctor.ShapeOver j univShape.termSigmab:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0(univPshData K).reindex (h g) univShape.termSigma, ha b = (univPshData K).reindex g univShape.termSigma, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termSigma, ha) (cast b)) K:Type uKj:Fin 2j':Fin 2j'':Fin 2g:j' jh:j'' j'ha:(univPshData K).toSlicePFunctor.ShapeOver j univShape.termSigmab:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0hq:(univPshData K).q univShape.termSigma = j(univPshData K).reindex (h g) univShape.termSigma, ha b = (univPshData K).reindex g univShape.termSigma, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termSigma, ha) (cast b)) K:Type uKj:Fin 2j':Fin 2j'':Fin 2g:j' jh:j'' j'ha:(univPshData K).toSlicePFunctor.ShapeOver j univShape.termSigmab:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0hq:(univPshData K).q univShape.termSigma = jhj:j = 1(univPshData K).reindex (h g) univShape.termSigma, ha b = (univPshData K).reindex g univShape.termSigma, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termSigma, ha) (cast b)) K:Type uKj':Fin 2j'':Fin 2h:j'' j'g:j' 1ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmab:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0hq:(univPshData K).q univShape.termSigma = 1(univPshData K).reindex (h g) univShape.termSigma, ha b = (univPshData K).reindex g univShape.termSigma, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termSigma, ha) (cast b)) K:Type uKj':Fin 2j'':Fin 2h:j'' j'g:j' 1ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmab:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0hq:(univPshData K).q univShape.termSigma = 1ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termSigma, ha))) 0(univPshData K).reindex (h g) univShape.termSigma, ha b = (univPshData K).reindex g univShape.termSigma, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termSigma, ha) (cast b)) K:Type uKj':Fin 2j'':Fin 2h:j'' j'g:j' 1ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmab:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0hq:(univPshData K).q univShape.termSigma = 1ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termSigma, ha))) 0hj':j' = 0(univPshData K).reindex (h g) univShape.termSigma, ha b = (univPshData K).reindex g univShape.termSigma, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termSigma, ha) (cast b))K:Type uKj':Fin 2j'':Fin 2h:j'' j'g:j' 1ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmab:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0hq:(univPshData K).q univShape.termSigma = 1ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termSigma, ha))) 0hj':¬j' = 0(univPshData K).reindex (h g) univShape.termSigma, ha b = (univPshData K).reindex g univShape.termSigma, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termSigma, ha) (cast b)) K:Type uKj':Fin 2j'':Fin 2h:j'' j'g:j' 1ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmab:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0hq:(univPshData K).q univShape.termSigma = 1ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termSigma, ha))) 0hj':j' = 0(univPshData K).reindex (h g) univShape.termSigma, ha b = (univPshData K).reindex g univShape.termSigma, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termSigma, ha) (cast b)) K:Type uKj'':Fin 2ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1h:j'' 0g:0 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termSigma, ha))) 0(univPshData K).reindex (h g) univShape.termSigma, ha b = (univPshData K).reindex g univShape.termSigma, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termSigma, ha) (cast b)) K:Type uKj'':Fin 2ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1h:j'' 0g:0 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termSigma, ha))) 0hj'':j'' = 0(univPshData K).reindex (h g) univShape.termSigma, ha b = (univPshData K).reindex g univShape.termSigma, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termSigma, ha) (cast b))K:Type uKj'':Fin 2ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1h:j'' 0g:0 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termSigma, ha))) 0hj'':¬j'' = 0(univPshData K).reindex (h g) univShape.termSigma, ha b = (univPshData K).reindex g univShape.termSigma, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termSigma, ha) (cast b)) K:Type uKj'':Fin 2ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1h:j'' 0g:0 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termSigma, ha))) 0hj'':j'' = 0(univPshData K).reindex (h g) univShape.termSigma, ha b = (univPshData K).reindex g univShape.termSigma, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termSigma, ha) (cast b)) K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1g:0 1h:0 0b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termSigma, ha))) 0(univPshData K).reindex (h g) univShape.termSigma, ha b = (univPshData K).reindex g univShape.termSigma, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termSigma, ha) (cast b)) K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1g:0 1h:0 0b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termSigma, ha))) 0(univPshData K).reindex (h g) univShape.termSigma, ha b = (univPshData K).reindex g univShape.termSigma, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termSigma, ha) (cast ec b)) K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1g:0 1h:0 0b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termSigma, ha))) 0((univPshData K).reindex (h g) univShape.termSigma, ha b) = ((univPshData K).reindex g univShape.termSigma, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termSigma, ha) (cast ec b))) All goals completed! 🐙 K:Type uKj'':Fin 2ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1h:j'' 0g:0 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termSigma, ha))) 0hj'':¬j'' = 0(univPshData K).reindex (h g) univShape.termSigma, ha b = (univPshData K).reindex g univShape.termSigma, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termSigma, ha) (cast b)) K:Type uKj'':Fin 2ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1h:j'' 0g:0 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termSigma, ha))) 0hj'':¬j'' = 0hj''1:j'' = 1(univPshData K).reindex (h g) univShape.termSigma, ha b = (univPshData K).reindex g univShape.termSigma, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termSigma, ha) (cast b)) K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1g:0 1h:1 0b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termSigma, ha))) 0hj'':¬1 = 0(univPshData K).reindex (h g) univShape.termSigma, ha b = (univPshData K).reindex g univShape.termSigma, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termSigma, ha) (cast b)) K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1g:0 1h:1 0b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termSigma, ha))) 0hj'':¬1 = 0False K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1g:0 1h:1 0b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termSigma, ha))) 0hj'':¬1 = 0hle:1 0False All goals completed! 🐙 K:Type uKj':Fin 2j'':Fin 2h:j'' j'g:j' 1ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmab:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0hq:(univPshData K).q univShape.termSigma = 1ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termSigma, ha))) 0hj':¬j' = 0(univPshData K).reindex (h g) univShape.termSigma, ha b = (univPshData K).reindex g univShape.termSigma, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termSigma, ha) (cast b)) K:Type uKj':Fin 2j'':Fin 2h:j'' j'g:j' 1ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmab:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0hq:(univPshData K).q univShape.termSigma = 1ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termSigma, ha))) 0hj':¬j' = 0hj'1:j' = 1(univPshData K).reindex (h g) univShape.termSigma, ha b = (univPshData K).reindex g univShape.termSigma, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termSigma, ha) (cast b)) K:Type uKj'':Fin 2ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1h:j'' 1g:1 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termSigma, ha))) 0hj':¬1 = 0(univPshData K).reindex (h g) univShape.termSigma, ha b = (univPshData K).reindex g univShape.termSigma, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termSigma, ha) (cast b)) K:Type uKj'':Fin 2ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1h:j'' 1g:1 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termSigma, ha))) 0hj':¬1 = 0hj'':j'' = 0(univPshData K).reindex (h g) univShape.termSigma, ha b = (univPshData K).reindex g univShape.termSigma, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termSigma, ha) (cast b))K:Type uKj'':Fin 2ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1h:j'' 1g:1 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termSigma, ha))) 0hj':¬1 = 0hj'':¬j'' = 0(univPshData K).reindex (h g) univShape.termSigma, ha b = (univPshData K).reindex g univShape.termSigma, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termSigma, ha) (cast b)) K:Type uKj'':Fin 2ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1h:j'' 1g:1 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termSigma, ha))) 0hj':¬1 = 0hj'':j'' = 0(univPshData K).reindex (h g) univShape.termSigma, ha b = (univPshData K).reindex g univShape.termSigma, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termSigma, ha) (cast b)) K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1g:1 1hj':¬1 = 0h:0 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termSigma, ha))) 0(univPshData K).reindex (h g) univShape.termSigma, ha b = (univPshData K).reindex g univShape.termSigma, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termSigma, ha) (cast b)) K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1g:1 1hj':¬1 = 0h:0 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termSigma, ha))) 0(univPshData K).reindex (h g) univShape.termSigma, ha b = (univPshData K).reindex g univShape.termSigma, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termSigma, ha) (cast ec b)) K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1g:1 1hj':¬1 = 0h:0 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termSigma, ha))) 0((univPshData K).reindex (h g) univShape.termSigma, ha b) = ((univPshData K).reindex g univShape.termSigma, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termSigma, ha) (cast ec b))) All goals completed! 🐙 K:Type uKj'':Fin 2ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1h:j'' 1g:1 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termSigma, ha))) 0hj':¬1 = 0hj'':¬j'' = 0(univPshData K).reindex (h g) univShape.termSigma, ha b = (univPshData K).reindex g univShape.termSigma, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termSigma, ha) (cast b)) K:Type uKj'':Fin 2ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1h:j'' 1g:1 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termSigma, ha))) 0hj':¬1 = 0hj'':¬j'' = 0hj''1:j'' = 1(univPshData K).reindex (h g) univShape.termSigma, ha b = (univPshData K).reindex g univShape.termSigma, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termSigma, ha) (cast b)) K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1g:1 1hj':¬1 = 0h:1 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termSigma, ha))) 0hj'':¬1 = 0(univPshData K).reindex (h g) univShape.termSigma, ha b = (univPshData K).reindex g univShape.termSigma, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termSigma, ha) (cast b)) K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1g:1 1hj':¬1 = 0h:1 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termSigma, ha))) 0hj'':¬1 = 0hg:g = 𝟙 1(univPshData K).reindex (h g) univShape.termSigma, ha b = (univPshData K).reindex g univShape.termSigma, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termSigma, ha) (cast b)) K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1g:1 1hj':¬1 = 0h:1 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termSigma, ha))) 0hj'':¬1 = 0hg:g = 𝟙 1hh:h = 𝟙 1(univPshData K).reindex (h g) univShape.termSigma, ha b = (univPshData K).reindex g univShape.termSigma, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termSigma, ha) (cast b)) K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1g:1 1hj':¬1 = 0h:1 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termSigma, ha))) 0hj'':¬1 = 0hg:g = 𝟙 1hh:h = 𝟙 1(univPshData K).reindex (𝟙 1 𝟙 1) univShape.termSigma, ha b = (univPshData K).reindex (𝟙 1) univShape.termSigma, ha ((univPshData K).reindex (𝟙 1) ((univPshData K).shapeRestr (𝟙 1) univShape.termSigma, ha) (cast b)) K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1g:1 1hj':¬1 = 0h:1 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termSigma, ha))) 0hj'':¬1 = 0hg:g = 𝟙 1hh:h = 𝟙 1(univPshData K).reindex (𝟙 1) univShape.termSigma, ha b = (univPshData K).reindex (𝟙 1) univShape.termSigma, ha ((univPshData K).reindex (𝟙 1) ((univPshData K).shapeRestr (𝟙 1) univShape.termSigma, ha) (cast b)) K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termSigmahq:(univPshData K).q univShape.termSigma = 1g:1 1hj':¬1 = 0h:1 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termSigma, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termSigma, ha))) 0hj'':¬1 = 0hg:g = 𝟙 1hh:h = 𝟙 1((univPshData K).reindex (𝟙 1) univShape.termSigma, ha b) = ((univPshData K).reindex (𝟙 1) univShape.termSigma, ha ((univPshData K).reindex (𝟙 1) ((univPshData K).shapeRestr (𝟙 1) univShape.termSigma, ha) (cast b))) All goals completed! 🐙 K:Type uKj:Fin 2j':Fin 2j'':Fin 2g:j' jh:j'' j'ha:(univPshData K).toSlicePFunctor.ShapeOver j univShape.termPib:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0(univPshData K).reindex (h g) univShape.termPi, ha b = (univPshData K).reindex g univShape.termPi, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termPi, ha) (cast b)) K:Type uKj:Fin 2j':Fin 2j'':Fin 2g:j' jh:j'' j'ha:(univPshData K).toSlicePFunctor.ShapeOver j univShape.termPib:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0hq:(univPshData K).q univShape.termPi = j(univPshData K).reindex (h g) univShape.termPi, ha b = (univPshData K).reindex g univShape.termPi, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termPi, ha) (cast b)) K:Type uKj:Fin 2j':Fin 2j'':Fin 2g:j' jh:j'' j'ha:(univPshData K).toSlicePFunctor.ShapeOver j univShape.termPib:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0hq:(univPshData K).q univShape.termPi = jhj:j = 1(univPshData K).reindex (h g) univShape.termPi, ha b = (univPshData K).reindex g univShape.termPi, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termPi, ha) (cast b)) K:Type uKj':Fin 2j'':Fin 2h:j'' j'g:j' 1ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPib:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0hq:(univPshData K).q univShape.termPi = 1(univPshData K).reindex (h g) univShape.termPi, ha b = (univPshData K).reindex g univShape.termPi, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termPi, ha) (cast b)) K:Type uKj':Fin 2j'':Fin 2h:j'' j'g:j' 1ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPib:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0hq:(univPshData K).q univShape.termPi = 1ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termPi, ha))) 0(univPshData K).reindex (h g) univShape.termPi, ha b = (univPshData K).reindex g univShape.termPi, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termPi, ha) (cast b)) K:Type uKj':Fin 2j'':Fin 2h:j'' j'g:j' 1ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPib:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0hq:(univPshData K).q univShape.termPi = 1ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termPi, ha))) 0hj':j' = 0(univPshData K).reindex (h g) univShape.termPi, ha b = (univPshData K).reindex g univShape.termPi, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termPi, ha) (cast b))K:Type uKj':Fin 2j'':Fin 2h:j'' j'g:j' 1ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPib:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0hq:(univPshData K).q univShape.termPi = 1ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termPi, ha))) 0hj':¬j' = 0(univPshData K).reindex (h g) univShape.termPi, ha b = (univPshData K).reindex g univShape.termPi, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termPi, ha) (cast b)) K:Type uKj':Fin 2j'':Fin 2h:j'' j'g:j' 1ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPib:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0hq:(univPshData K).q univShape.termPi = 1ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termPi, ha))) 0hj':j' = 0(univPshData K).reindex (h g) univShape.termPi, ha b = (univPshData K).reindex g univShape.termPi, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termPi, ha) (cast b)) K:Type uKj'':Fin 2ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1h:j'' 0g:0 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termPi, ha))) 0(univPshData K).reindex (h g) univShape.termPi, ha b = (univPshData K).reindex g univShape.termPi, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termPi, ha) (cast b)) K:Type uKj'':Fin 2ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1h:j'' 0g:0 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termPi, ha))) 0hj'':j'' = 0(univPshData K).reindex (h g) univShape.termPi, ha b = (univPshData K).reindex g univShape.termPi, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termPi, ha) (cast b))K:Type uKj'':Fin 2ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1h:j'' 0g:0 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termPi, ha))) 0hj'':¬j'' = 0(univPshData K).reindex (h g) univShape.termPi, ha b = (univPshData K).reindex g univShape.termPi, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termPi, ha) (cast b)) K:Type uKj'':Fin 2ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1h:j'' 0g:0 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termPi, ha))) 0hj'':j'' = 0(univPshData K).reindex (h g) univShape.termPi, ha b = (univPshData K).reindex g univShape.termPi, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termPi, ha) (cast b)) K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1g:0 1h:0 0b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termPi, ha))) 0(univPshData K).reindex (h g) univShape.termPi, ha b = (univPshData K).reindex g univShape.termPi, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termPi, ha) (cast b)) K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1g:0 1h:0 0b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termPi, ha))) 0(univPshData K).reindex (h g) univShape.termPi, ha b = (univPshData K).reindex g univShape.termPi, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termPi, ha) (cast ec b)) K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1g:0 1h:0 0b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termPi, ha))) 0((univPshData K).reindex (h g) univShape.termPi, ha b) = ((univPshData K).reindex g univShape.termPi, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termPi, ha) (cast ec b))) All goals completed! 🐙 K:Type uKj'':Fin 2ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1h:j'' 0g:0 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termPi, ha))) 0hj'':¬j'' = 0(univPshData K).reindex (h g) univShape.termPi, ha b = (univPshData K).reindex g univShape.termPi, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termPi, ha) (cast b)) K:Type uKj'':Fin 2ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1h:j'' 0g:0 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termPi, ha))) 0hj'':¬j'' = 0hj''1:j'' = 1(univPshData K).reindex (h g) univShape.termPi, ha b = (univPshData K).reindex g univShape.termPi, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termPi, ha) (cast b)) K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1g:0 1h:1 0b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termPi, ha))) 0hj'':¬1 = 0(univPshData K).reindex (h g) univShape.termPi, ha b = (univPshData K).reindex g univShape.termPi, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termPi, ha) (cast b)) K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1g:0 1h:1 0b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termPi, ha))) 0hj'':¬1 = 0False K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1g:0 1h:1 0b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termPi, ha))) 0hj'':¬1 = 0hle:1 0False All goals completed! 🐙 K:Type uKj':Fin 2j'':Fin 2h:j'' j'g:j' 1ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPib:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0hq:(univPshData K).q univShape.termPi = 1ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termPi, ha))) 0hj':¬j' = 0(univPshData K).reindex (h g) univShape.termPi, ha b = (univPshData K).reindex g univShape.termPi, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termPi, ha) (cast b)) K:Type uKj':Fin 2j'':Fin 2h:j'' j'g:j' 1ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPib:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0hq:(univPshData K).q univShape.termPi = 1ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termPi, ha))) 0hj':¬j' = 0hj'1:j' = 1(univPshData K).reindex (h g) univShape.termPi, ha b = (univPshData K).reindex g univShape.termPi, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termPi, ha) (cast b)) K:Type uKj'':Fin 2ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1h:j'' 1g:1 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termPi, ha))) 0hj':¬1 = 0(univPshData K).reindex (h g) univShape.termPi, ha b = (univPshData K).reindex g univShape.termPi, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termPi, ha) (cast b)) K:Type uKj'':Fin 2ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1h:j'' 1g:1 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termPi, ha))) 0hj':¬1 = 0hj'':j'' = 0(univPshData K).reindex (h g) univShape.termPi, ha b = (univPshData K).reindex g univShape.termPi, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termPi, ha) (cast b))K:Type uKj'':Fin 2ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1h:j'' 1g:1 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termPi, ha))) 0hj':¬1 = 0hj'':¬j'' = 0(univPshData K).reindex (h g) univShape.termPi, ha b = (univPshData K).reindex g univShape.termPi, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termPi, ha) (cast b)) K:Type uKj'':Fin 2ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1h:j'' 1g:1 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termPi, ha))) 0hj':¬1 = 0hj'':j'' = 0(univPshData K).reindex (h g) univShape.termPi, ha b = (univPshData K).reindex g univShape.termPi, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termPi, ha) (cast b)) K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1g:1 1hj':¬1 = 0h:0 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termPi, ha))) 0(univPshData K).reindex (h g) univShape.termPi, ha b = (univPshData K).reindex g univShape.termPi, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termPi, ha) (cast b)) K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1g:1 1hj':¬1 = 0h:0 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termPi, ha))) 0(univPshData K).reindex (h g) univShape.termPi, ha b = (univPshData K).reindex g univShape.termPi, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termPi, ha) (cast ec b)) K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1g:1 1hj':¬1 = 0h:0 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termPi, ha))) 0((univPshData K).reindex (h g) univShape.termPi, ha b) = ((univPshData K).reindex g univShape.termPi, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termPi, ha) (cast ec b))) All goals completed! 🐙 K:Type uKj'':Fin 2ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1h:j'' 1g:1 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termPi, ha))) 0hj':¬1 = 0hj'':¬j'' = 0(univPshData K).reindex (h g) univShape.termPi, ha b = (univPshData K).reindex g univShape.termPi, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termPi, ha) (cast b)) K:Type uKj'':Fin 2ha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1h:j'' 1g:1 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termPi, ha))) 0hj':¬1 = 0hj'':¬j'' = 0hj''1:j'' = 1(univPshData K).reindex (h g) univShape.termPi, ha b = (univPshData K).reindex g univShape.termPi, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termPi, ha) (cast b)) K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1g:1 1hj':¬1 = 0h:1 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termPi, ha))) 0hj'':¬1 = 0(univPshData K).reindex (h g) univShape.termPi, ha b = (univPshData K).reindex g univShape.termPi, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termPi, ha) (cast b)) K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1g:1 1hj':¬1 = 0h:1 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termPi, ha))) 0hj'':¬1 = 0hg:g = 𝟙 1(univPshData K).reindex (h g) univShape.termPi, ha b = (univPshData K).reindex g univShape.termPi, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termPi, ha) (cast b)) K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1g:1 1hj':¬1 = 0h:1 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termPi, ha))) 0hj'':¬1 = 0hg:g = 𝟙 1hh:h = 𝟙 1(univPshData K).reindex (h g) univShape.termPi, ha b = (univPshData K).reindex g univShape.termPi, ha ((univPshData K).reindex h ((univPshData K).shapeRestr g univShape.termPi, ha) (cast b)) K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1g:1 1hj':¬1 = 0h:1 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termPi, ha))) 0hj'':¬1 = 0hg:g = 𝟙 1hh:h = 𝟙 1(univPshData K).reindex (𝟙 1 𝟙 1) univShape.termPi, ha b = (univPshData K).reindex (𝟙 1) univShape.termPi, ha ((univPshData K).reindex (𝟙 1) ((univPshData K).shapeRestr (𝟙 1) univShape.termPi, ha) (cast b)) K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1g:1 1hj':¬1 = 0h:1 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termPi, ha))) 0hj'':¬1 = 0hg:g = 𝟙 1hh:h = 𝟙 1(univPshData K).reindex (𝟙 1) univShape.termSigma, ha b = (univPshData K).reindex (𝟙 1) univShape.termSigma, ha ((univPshData K).reindex (𝟙 1) ((univPshData K).shapeRestr (𝟙 1) univShape.termSigma, ha) (cast b)) K:Type uKha:(univPshData K).toSlicePFunctor.ShapeOver 1 univShape.termPihq:(univPshData K).q univShape.termPi = 1g:1 1hj':¬1 = 0h:1 1b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0ec:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) univShape.termPi, ha)) 0 = (univPshData K).Direction (↑((univPshData K).shapeRestr h ((univPshData K).shapeRestr g univShape.termPi, ha))) 0hj'':¬1 = 0hg:g = 𝟙 1hh:h = 𝟙 1((univPshData K).reindex (𝟙 1) univShape.termSigma, ha b) = ((univPshData K).reindex (𝟙 1) univShape.termSigma, ha ((univPshData K).reindex (𝟙 1) ((univPshData K).shapeRestr (𝟙 1) univShape.termSigma, ha) (cast b))) All goals completed! 🐙 K:Type uKj:Fin 2j':Fin 2j'':Fin 2g:j' jh:j'' j'a:(univPshData K).toSlicePFunctor.Shape ji:Fin 2b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) a)) ihi:¬i = 0(univPshData K).reindex (h g) a b = (univPshData K).reindex g a ((univPshData K).reindex h ((univPshData K).shapeRestr g a) (cast b)) K:Type uKj:Fin 2j':Fin 2j'':Fin 2g:j' jh:j'' j'a:(univPshData K).toSlicePFunctor.Shape ji:Fin 2b:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) a)) ihi:¬i = 0hi1:i = 1(univPshData K).reindex (h g) a b = (univPshData K).reindex g a ((univPshData K).reindex h ((univPshData K).shapeRestr g a) (cast b)) K:Type uKj:Fin 2j':Fin 2j'':Fin 2g:j' jh:j'' j'a:(univPshData K).toSlicePFunctor.Shape jb:(univPshData K).Direction (↑((univPshData K).shapeRestr (h g) a)) 1hi:¬1 = 0(univPshData K).reindex (h g) a b = (univPshData K).reindex g a ((univPshData K).reindex h ((univPshData K).shapeRestr g a) (cast b)) All goals completed! 🐙 }

The presheaf polynomial endofunctor of the universe over the walking arrow: its W-type is the presheaf inductive-inductive universe, the codes at fibre 0 and the terms at fibre 1.

def univPsh (K : Type uK) : PresheafPFunctor.{0, 0, uK, 0, 0, 0} (Fin 2) (Fin 2) := { toPresheafPFunctorData := univPshData K isFunctorial := univPshLaws K }

The presheaf initial algebra

The W-type of univPsh: the presheaf inductive-inductive universe over the walking arrow.

def univW (K : Type uK) : (Fin 2)ᵒᵖ Type uK := (univPsh K).W

The codes: the fibre of univW over 0.

abbrev Codes (K : Type uK) : Type uK := (univW K).obj (0 : Fin 2)

The terms: the fibre of univW over 1.

abbrev Terms (K : Type uK) : Type uK := (univW K).obj (1 : Fin 2)

The decoding of a term into its code: the restriction map of the presheaf univW along 0 ⟶ 1.

def fib (K : Type uK) : Terms K Codes K := (univW K).map waHom.op

The constructors

The node data of the iota code at the starting type k: the shape .iota k, whose direction type is empty, so the direction-assignment and both its compatibility and naturality are vacuous.

def iotaNode (K : Type uK) (k : K) : ((univPsh K).objPresheaf (univW K)).obj (0 : Fin 2) := (.iota k : univShape K), fun b PEmpty.elim b, (univPsh K).toSliceDomPFunctor.compatible_iff _ (.iota k) _ |>.mpr (K:Type uKk:K (b : (univPsh K).B (univShape.iota k)), PresheafDomPFunctorData.elemProj (univW K) (univShape.iota k, fun b PEmpty.elim b.snd b) = (univPsh K).r univShape.iota k, b K:Type uKk:Kb:(univPsh K).B (univShape.iota k)PresheafDomPFunctorData.elemProj (univW K) (univShape.iota k, fun b PEmpty.elim b.snd b) = (univPsh K).r univShape.iota k, b; All goals completed! 🐙), K:Type uKk:K(univPsh K).IsNatural univShape.iota k, fun b PEmpty.elim b, K:Type uKk:Ki:Fin 2i':Fin 2f:i' ib:(univPsh K).Direction (↑univShape.iota k, fun b PEmpty.elim b, ).fst i(univPsh K).value univShape.iota k, fun b PEmpty.elim b, ((univPsh K).directionRestr (↑univShape.iota k, fun b PEmpty.elim b, ).fst f b) = (ConcreteCategory.hom ((univW K).map f.op)) ((univPsh K).value univShape.iota k, fun b PEmpty.elim b, b) All goals completed! 🐙, rfl

The iota code at the starting type k.

def univIota (K : Type uK) (k : K) : Codes K := PresheafPFunctor.W.mk (iotaNode K k)

The node data of the sigma code with bound code u: the shape .sigma, whose single direction is assigned the bound code, the direction-input map being constantly 0.

def sigmaNode (K : Type uK) (u : Codes K) : ((univPsh K).objPresheaf (univW K)).obj (0 : Fin 2) := (.sigma : univShape K), fun _ (0 : Fin 2), u, (univPsh K).toSliceDomPFunctor.compatible_iff _ .sigma _ |>.mpr (K:Type uKu:Codes K (b : (univPsh K).B univShape.sigma), PresheafDomPFunctorData.elemProj (univW K) (univShape.sigma, fun x 0, u.snd b) = (univPsh K).r univShape.sigma, b K:Type uKu:Codes Kb:(univPsh K).B univShape.sigmaPresheafDomPFunctorData.elemProj (univW K) (univShape.sigma, fun x 0, u.snd b) = (univPsh K).r univShape.sigma, b; All goals completed! 🐙), K:Type uKu:Codes K(univPsh K).IsNatural univShape.sigma, fun x 0, u, K:Type uKu:Codes Ki:Fin 2i':Fin 2f:i' ib:(univPsh K).Direction (↑univShape.sigma, fun x 0, u, ).fst i(univPsh K).value univShape.sigma, fun x 0, u, ((univPsh K).directionRestr (↑univShape.sigma, fun x 0, u, ).fst f b) = (ConcreteCategory.hom ((univW K).map f.op)) ((univPsh K).value univShape.sigma, fun x 0, u, b) K:Type uKu:Codes Ki:Fin 2i':Fin 2f:i' ib:(univPsh K).Direction (↑univShape.sigma, fun x 0, u, ).fst ihb:0 = i(univPsh K).value univShape.sigma, fun x 0, u, ((univPsh K).directionRestr (↑univShape.sigma, fun x 0, u, ).fst f b) = (ConcreteCategory.hom ((univW K).map f.op)) ((univPsh K).value univShape.sigma, fun x 0, u, b) K:Type uKu:Codes Ki':Fin 2f:i' 0b:(univPsh K).Direction (↑univShape.sigma, fun x 0, u, ).fst 0(univPsh K).value univShape.sigma, fun x 0, u, ((univPsh K).directionRestr (↑univShape.sigma, fun x 0, u, ).fst f b) = (ConcreteCategory.hom ((univW K).map f.op)) ((univPsh K).value univShape.sigma, fun x 0, u, b) K:Type uKu:Codes Ki':Fin 2f:i' 0b:(univPsh K).Direction (↑univShape.sigma, fun x 0, u, ).fst 0hi':i' = 0(univPsh K).value univShape.sigma, fun x 0, u, ((univPsh K).directionRestr (↑univShape.sigma, fun x 0, u, ).fst f b) = (ConcreteCategory.hom ((univW K).map f.op)) ((univPsh K).value univShape.sigma, fun x 0, u, b) K:Type uKu:Codes Kb:(univPsh K).Direction (↑univShape.sigma, fun x 0, u, ).fst 0f:0 0(univPsh K).value univShape.sigma, fun x 0, u, ((univPsh K).directionRestr (↑univShape.sigma, fun x 0, u, ).fst f b) = (ConcreteCategory.hom ((univW K).map f.op)) ((univPsh K).value univShape.sigma, fun x 0, u, b) K:Type uKu:Codes Kb:(univPsh K).Direction (↑univShape.sigma, fun x 0, u, ).fst 0f:0 0hf:f = 𝟙 0(univPsh K).value univShape.sigma, fun x 0, u, ((univPsh K).directionRestr (↑univShape.sigma, fun x 0, u, ).fst f b) = (ConcreteCategory.hom ((univW K).map f.op)) ((univPsh K).value univShape.sigma, fun x 0, u, b) K:Type uKu:Codes Kb:(univPsh K).Direction (↑univShape.sigma, fun x 0, u, ).fst 0(univPsh K).value univShape.sigma, fun x 0, u, ((univPsh K).directionRestr (↑univShape.sigma, fun x 0, u, ).fst (𝟙 0) b) = (ConcreteCategory.hom ((univW K).map (𝟙 0).op)) ((univPsh K).value univShape.sigma, fun x 0, u, b) K:Type uKu:Codes Kb:(univPsh K).Direction (↑univShape.sigma, fun x 0, u, ).fst 0(univPsh K).value univShape.sigma, fun x 0, u, ((univPsh K).directionRestr (↑univShape.sigma, fun x 0, u, ).fst (𝟙 0) b) = (ConcreteCategory.hom ((univW K).map (𝟙 (Opposite.op 0)))) ((univPsh K).value univShape.sigma, fun x 0, u, b) K:Type uKu:Codes Kb:(univPsh K).Direction (↑univShape.sigma, fun x 0, u, ).fst 0(univPsh K).value univShape.sigma, fun x 0, u, ((univPsh K).directionRestr (↑univShape.sigma, fun x 0, u, ).fst (𝟙 0) b) = (ConcreteCategory.hom (𝟙 ((univW K).obj (Opposite.op 0)))) ((univPsh K).value univShape.sigma, fun x 0, u, b) All goals completed! 🐙, rfl

The sigma code with bound code u.

def univSigma (K : Type uK) (u : Codes K) : Codes K := PresheafPFunctor.W.mk (sigmaNode K u)

The node data of the pi code with bound code u.

def piNode (K : Type uK) (u : Codes K) : ((univPsh K).objPresheaf (univW K)).obj (0 : Fin 2) := (.pi : univShape K), fun _ (0 : Fin 2), u, (univPsh K).toSliceDomPFunctor.compatible_iff _ .pi _ |>.mpr (K:Type uKu:Codes K (b : (univPsh K).B univShape.pi), PresheafDomPFunctorData.elemProj (univW K) (univShape.pi, fun x 0, u.snd b) = (univPsh K).r univShape.pi, b K:Type uKu:Codes Kb:(univPsh K).B univShape.piPresheafDomPFunctorData.elemProj (univW K) (univShape.pi, fun x 0, u.snd b) = (univPsh K).r univShape.pi, b; All goals completed! 🐙), K:Type uKu:Codes K(univPsh K).IsNatural univShape.pi, fun x 0, u, K:Type uKu:Codes Ki:Fin 2i':Fin 2f:i' ib:(univPsh K).Direction (↑univShape.pi, fun x 0, u, ).fst i(univPsh K).value univShape.pi, fun x 0, u, ((univPsh K).directionRestr (↑univShape.pi, fun x 0, u, ).fst f b) = (ConcreteCategory.hom ((univW K).map f.op)) ((univPsh K).value univShape.pi, fun x 0, u, b) K:Type uKu:Codes Ki:Fin 2i':Fin 2f:i' ib:(univPsh K).Direction (↑univShape.pi, fun x 0, u, ).fst ihb:0 = i(univPsh K).value univShape.pi, fun x 0, u, ((univPsh K).directionRestr (↑univShape.pi, fun x 0, u, ).fst f b) = (ConcreteCategory.hom ((univW K).map f.op)) ((univPsh K).value univShape.pi, fun x 0, u, b) K:Type uKu:Codes Ki':Fin 2f:i' 0b:(univPsh K).Direction (↑univShape.pi, fun x 0, u, ).fst 0(univPsh K).value univShape.pi, fun x 0, u, ((univPsh K).directionRestr (↑univShape.pi, fun x 0, u, ).fst f b) = (ConcreteCategory.hom ((univW K).map f.op)) ((univPsh K).value univShape.pi, fun x 0, u, b) K:Type uKu:Codes Ki':Fin 2f:i' 0b:(univPsh K).Direction (↑univShape.pi, fun x 0, u, ).fst 0hi':i' = 0(univPsh K).value univShape.pi, fun x 0, u, ((univPsh K).directionRestr (↑univShape.pi, fun x 0, u, ).fst f b) = (ConcreteCategory.hom ((univW K).map f.op)) ((univPsh K).value univShape.pi, fun x 0, u, b) K:Type uKu:Codes Kb:(univPsh K).Direction (↑univShape.pi, fun x 0, u, ).fst 0f:0 0(univPsh K).value univShape.pi, fun x 0, u, ((univPsh K).directionRestr (↑univShape.pi, fun x 0, u, ).fst f b) = (ConcreteCategory.hom ((univW K).map f.op)) ((univPsh K).value univShape.pi, fun x 0, u, b) K:Type uKu:Codes Kb:(univPsh K).Direction (↑univShape.pi, fun x 0, u, ).fst 0f:0 0hf:f = 𝟙 0(univPsh K).value univShape.pi, fun x 0, u, ((univPsh K).directionRestr (↑univShape.pi, fun x 0, u, ).fst f b) = (ConcreteCategory.hom ((univW K).map f.op)) ((univPsh K).value univShape.pi, fun x 0, u, b) K:Type uKu:Codes Kb:(univPsh K).Direction (↑univShape.pi, fun x 0, u, ).fst 0(univPsh K).value univShape.pi, fun x 0, u, ((univPsh K).directionRestr (↑univShape.pi, fun x 0, u, ).fst (𝟙 0) b) = (ConcreteCategory.hom ((univW K).map (𝟙 0).op)) ((univPsh K).value univShape.pi, fun x 0, u, b) K:Type uKu:Codes Kb:(univPsh K).Direction (↑univShape.pi, fun x 0, u, ).fst 0(univPsh K).value univShape.pi, fun x 0, u, ((univPsh K).directionRestr (↑univShape.pi, fun x 0, u, ).fst (𝟙 0) b) = (ConcreteCategory.hom ((univW K).map (𝟙 (Opposite.op 0)))) ((univPsh K).value univShape.pi, fun x 0, u, b) K:Type uKu:Codes Kb:(univPsh K).Direction (↑univShape.pi, fun x 0, u, ).fst 0(univPsh K).value univShape.pi, fun x 0, u, ((univPsh K).directionRestr (↑univShape.pi, fun x 0, u, ).fst (𝟙 0) b) = (ConcreteCategory.hom (𝟙 ((univW K).obj (Opposite.op 0)))) ((univPsh K).value univShape.pi, fun x 0, u, b) All goals completed! 🐙, rfl

The pi code with bound code u.

def univPi (K : Type uK) (u : Codes K) : Codes K := PresheafPFunctor.W.mk (piNode K u)

The node data of the sigma term at the code p with payload d: the shape .termSigma, whose two directions are assigned the code and the payload.

def termSigmaNode (K : Type uK) (p d : Codes K) : ((univPsh K).objPresheaf (univW K)).obj (1 : Fin 2) := (.termSigma : univShape K), fun b match b with | Sum.inl _ => (0 : Fin 2), p | Sum.inr _ => (0 : Fin 2), d, (univPsh K).toSliceDomPFunctor.compatible_iff _ .termSigma _ |>.mpr (K:Type uKp:Codes Kd:Codes K (b : (univPsh K).B univShape.termSigma), PresheafDomPFunctorData.elemProj (univW K) (univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d.snd b) = (univPsh K).r univShape.termSigma, b K:Type uKp:Codes Kd:Codes Kb:(univPsh K).B univShape.termSigmaPresheafDomPFunctorData.elemProj (univW K) (univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d.snd b) = (univPsh K).r univShape.termSigma, b; K:Type uKp:Codes Kd:Codes Kval✝:PUnit.{1}PresheafDomPFunctorData.elemProj (univW K) (univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d.snd (Sum.inl val✝)) = (univPsh K).r univShape.termSigma, Sum.inl val✝K:Type uKp:Codes Kd:Codes Kval✝:PUnit.{1}PresheafDomPFunctorData.elemProj (univW K) (univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d.snd (Sum.inr val✝)) = (univPsh K).r univShape.termSigma, Sum.inr val✝ K:Type uKp:Codes Kd:Codes Kval✝:PUnit.{1}PresheafDomPFunctorData.elemProj (univW K) (univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d.snd (Sum.inl val✝)) = (univPsh K).r univShape.termSigma, Sum.inl val✝K:Type uKp:Codes Kd:Codes Kval✝:PUnit.{1}PresheafDomPFunctorData.elemProj (univW K) (univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d.snd (Sum.inr val✝)) = (univPsh K).r univShape.termSigma, Sum.inr val✝ All goals completed! 🐙), K:Type uKp:Codes Kd:Codes K(univPsh K).IsNatural univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, K:Type uKp:Codes Kd:Codes Ki:Fin 2i':Fin 2f:i' ib:(univPsh K).Direction (↑univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst i(univPsh K).value univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ((univPsh K).directionRestr (↑univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst f b) = (ConcreteCategory.hom ((univW K).map f.op)) ((univPsh K).value univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, b) K:Type uKp:Codes Kd:Codes Ki:Fin 2i':Fin 2f:i' ib:(univPsh K).Direction (↑univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst ihb:0 = i(univPsh K).value univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ((univPsh K).directionRestr (↑univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst f b) = (ConcreteCategory.hom ((univW K).map f.op)) ((univPsh K).value univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, b) K:Type uKp:Codes Kd:Codes Ki':Fin 2f:i' 0b:(univPsh K).Direction (↑univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst 0(univPsh K).value univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ((univPsh K).directionRestr (↑univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst f b) = (ConcreteCategory.hom ((univW K).map f.op)) ((univPsh K).value univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, b) K:Type uKp:Codes Kd:Codes Ki':Fin 2f:i' 0b:(univPsh K).Direction (↑univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst 0hi':i' = 0(univPsh K).value univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ((univPsh K).directionRestr (↑univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst f b) = (ConcreteCategory.hom ((univW K).map f.op)) ((univPsh K).value univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, b) K:Type uKp:Codes Kd:Codes Kb:(univPsh K).Direction (↑univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst 0f:0 0(univPsh K).value univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ((univPsh K).directionRestr (↑univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst f b) = (ConcreteCategory.hom ((univW K).map f.op)) ((univPsh K).value univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, b) K:Type uKp:Codes Kd:Codes Kb:(univPsh K).Direction (↑univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst 0f:0 0hf:f = 𝟙 0(univPsh K).value univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ((univPsh K).directionRestr (↑univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst f b) = (ConcreteCategory.hom ((univW K).map f.op)) ((univPsh K).value univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, b) K:Type uKp:Codes Kd:Codes Kb:(univPsh K).Direction (↑univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst 0(univPsh K).value univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ((univPsh K).directionRestr (↑univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst (𝟙 0) b) = (ConcreteCategory.hom ((univW K).map (𝟙 0).op)) ((univPsh K).value univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, b) K:Type uKp:Codes Kd:Codes Kb:(univPsh K).Direction (↑univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst 0(univPsh K).value univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ((univPsh K).directionRestr (↑univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst (𝟙 0) b) = (ConcreteCategory.hom ((univW K).map (𝟙 (Opposite.op 0)))) ((univPsh K).value univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, b) K:Type uKp:Codes Kd:Codes Kb:(univPsh K).Direction (↑univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst 0(univPsh K).value univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ((univPsh K).directionRestr (↑univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst (𝟙 0) b) = (ConcreteCategory.hom (𝟙 ((univW K).obj (Opposite.op 0)))) ((univPsh K).value univShape.termSigma, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, b) All goals completed! 🐙, rfl

The sigma term at the code p with payload d.

def univTermSigma (K : Type uK) (p d : Codes K) : Terms K := PresheafPFunctor.W.mk (termSigmaNode K p d)

The node data of the pi term at the code p with payload d.

def termPiNode (K : Type uK) (p d : Codes K) : ((univPsh K).objPresheaf (univW K)).obj (1 : Fin 2) := (.termPi : univShape K), fun b match b with | Sum.inl _ => (0 : Fin 2), p | Sum.inr _ => (0 : Fin 2), d, (univPsh K).toSliceDomPFunctor.compatible_iff _ .termPi _ |>.mpr (K:Type uKp:Codes Kd:Codes K (b : (univPsh K).B univShape.termPi), PresheafDomPFunctorData.elemProj (univW K) (univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d.snd b) = (univPsh K).r univShape.termPi, b K:Type uKp:Codes Kd:Codes Kb:(univPsh K).B univShape.termPiPresheafDomPFunctorData.elemProj (univW K) (univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d.snd b) = (univPsh K).r univShape.termPi, b; K:Type uKp:Codes Kd:Codes Kval✝:PUnit.{1}PresheafDomPFunctorData.elemProj (univW K) (univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d.snd (Sum.inl val✝)) = (univPsh K).r univShape.termPi, Sum.inl val✝K:Type uKp:Codes Kd:Codes Kval✝:PUnit.{1}PresheafDomPFunctorData.elemProj (univW K) (univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d.snd (Sum.inr val✝)) = (univPsh K).r univShape.termPi, Sum.inr val✝ K:Type uKp:Codes Kd:Codes Kval✝:PUnit.{1}PresheafDomPFunctorData.elemProj (univW K) (univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d.snd (Sum.inl val✝)) = (univPsh K).r univShape.termPi, Sum.inl val✝K:Type uKp:Codes Kd:Codes Kval✝:PUnit.{1}PresheafDomPFunctorData.elemProj (univW K) (univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d.snd (Sum.inr val✝)) = (univPsh K).r univShape.termPi, Sum.inr val✝ All goals completed! 🐙), K:Type uKp:Codes Kd:Codes K(univPsh K).IsNatural univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, K:Type uKp:Codes Kd:Codes Ki:Fin 2i':Fin 2f:i' ib:(univPsh K).Direction (↑univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst i(univPsh K).value univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ((univPsh K).directionRestr (↑univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst f b) = (ConcreteCategory.hom ((univW K).map f.op)) ((univPsh K).value univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, b) K:Type uKp:Codes Kd:Codes Ki:Fin 2i':Fin 2f:i' ib:(univPsh K).Direction (↑univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst ihb:0 = i(univPsh K).value univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ((univPsh K).directionRestr (↑univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst f b) = (ConcreteCategory.hom ((univW K).map f.op)) ((univPsh K).value univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, b) K:Type uKp:Codes Kd:Codes Ki':Fin 2f:i' 0b:(univPsh K).Direction (↑univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst 0(univPsh K).value univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ((univPsh K).directionRestr (↑univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst f b) = (ConcreteCategory.hom ((univW K).map f.op)) ((univPsh K).value univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, b) K:Type uKp:Codes Kd:Codes Ki':Fin 2f:i' 0b:(univPsh K).Direction (↑univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst 0hi':i' = 0(univPsh K).value univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ((univPsh K).directionRestr (↑univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst f b) = (ConcreteCategory.hom ((univW K).map f.op)) ((univPsh K).value univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, b) K:Type uKp:Codes Kd:Codes Kb:(univPsh K).Direction (↑univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst 0f:0 0(univPsh K).value univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ((univPsh K).directionRestr (↑univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst f b) = (ConcreteCategory.hom ((univW K).map f.op)) ((univPsh K).value univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, b) K:Type uKp:Codes Kd:Codes Kb:(univPsh K).Direction (↑univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst 0f:0 0hf:f = 𝟙 0(univPsh K).value univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ((univPsh K).directionRestr (↑univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst f b) = (ConcreteCategory.hom ((univW K).map f.op)) ((univPsh K).value univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, b) K:Type uKp:Codes Kd:Codes Kb:(univPsh K).Direction (↑univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst 0(univPsh K).value univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ((univPsh K).directionRestr (↑univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst (𝟙 0) b) = (ConcreteCategory.hom ((univW K).map (𝟙 0).op)) ((univPsh K).value univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, b) K:Type uKp:Codes Kd:Codes Kb:(univPsh K).Direction (↑univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst 0(univPsh K).value univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ((univPsh K).directionRestr (↑univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst (𝟙 0) b) = (ConcreteCategory.hom ((univW K).map (𝟙 (Opposite.op 0)))) ((univPsh K).value univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, b) K:Type uKp:Codes Kd:Codes Kb:(univPsh K).Direction (↑univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst 0(univPsh K).value univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ((univPsh K).directionRestr (↑univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, ).fst (𝟙 0) b) = (ConcreteCategory.hom (𝟙 ((univW K).obj (Opposite.op 0)))) ((univPsh K).value univShape.termPi, fun b match b with | Sum.inl val => 0, p | Sum.inr val => 0, d, b) All goals completed! 🐙, rfl

The pi term at the code p with payload d.

def univTermPi (K : Type uK) (p d : Codes K) : Terms K := PresheafPFunctor.W.mk (termPiNode K p d)

Decoding

The decoding of a term into its code is the restriction map fib; its computation on the constructors — fib (univTermSigma p d) = univSigma p — goes through the root-restriction wRestrTree of the presheaf W-type and is deferred to the review this prototype is intended for. The tests exercise the construction at the level that does compute: the fibres, the constructors, and the shapes of the constructed codes and terms.

end PresheafIRUnivend