Sections of dependent type theories

{-# OPTIONS --guardedness #-}
module type-theories.sections-dependent-type-theories where
Imports
open import foundation.identity-types
open import foundation.universe-levels

open import type-theories.dependent-type-theories
open import type-theories.fibered-dependent-type-theories
open dependent
open fibered

module sections-dtt where

  precomp-fibered-system :
    {l1 l2 l3 l4 l5 l6 : Level}
    {A : system l1 l2} {B : system l3 l4}
    (C : fibered-system l5 l6 B) (f : hom-system A B) 
    fibered-system l5 l6 A
  fibered-system.type (precomp-fibered-system C f) X =
    fibered-system.type C (section-system.type f X)
  fibered-system.element (precomp-fibered-system C f) Y x =
    fibered-system.element C Y (section-system.element f x)
  fibered-system.slice (precomp-fibered-system C f) {X} Y =
    precomp-fibered-system
      ( fibered-system.slice C Y)
      ( section-system.slice f X)

  precomp-section-system :
    {l1 l2 l3 l4 l5 l6 : Level}
    {A : system l1 l2} {B : system l3 l4}
    {C : fibered-system l5 l6 B}
    (g : section-system C) (f : hom-system A B) 
    section-system (precomp-fibered-system C f)
  section-system.type (precomp-section-system g f) X =
    section-system.type g (section-system.type f X)
  section-system.element (precomp-section-system g f) x =
    section-system.element g (section-system.element f x)
  section-system.slice (precomp-section-system g f) X =
    precomp-section-system
      ( section-system.slice g (section-system.type f X))
      ( section-system.slice f X)

  transpose-bifibered-system :
    {l1 l2 l3 l4 l5 l6 l7 l8 : Level}
    {A : system l1 l2}
    {B : fibered-system l3 l4 A} {C : fibered-system l5 l6 A}
    (D : bifibered-system l7 l8 B C) 
    bifibered-system l7 l8 C B
  bifibered-system.type (transpose-bifibered-system D) Z Y =
    bifibered-system.type D Y Z
  bifibered-system.element (transpose-bifibered-system D) W z y =
    bifibered-system.element D W y z
  bifibered-system.slice (transpose-bifibered-system D) W =
    transpose-bifibered-system (bifibered-system.slice D W)

  postcomp-section-system :
    {l1 l2 l3 l4 l5 l6 l7 l8 : Level}
    {A : system l1 l2} {B : fibered-system l3 l4 A}
    {C : system l5 l6} {D : fibered-system l7 l8 C}
    {f : hom-system A C} (g : hom-fibered-system f B D)
    (h : section-system B)  section-system (precomp-fibered-system D f)
  section-system.type (postcomp-section-system g h) X =
    section-fibered-system.type g (section-system.type h X)
  section-system.element (postcomp-section-system g h) x =
    section-fibered-system.element g (section-system.element h x)
  section-system.slice (postcomp-section-system g h) X =
    postcomp-section-system
      ( section-fibered-system.slice g (section-system.type h X))
      ( section-system.slice h X)

  record preserves-weakening-section-system
    {l1 l2 l3 l4 : Level} {A : system l1 l2} {B : fibered-system l3 l4 A}
    {WA : weakening A} (WB : fibered-weakening B WA)
    (f : section-system B) : UU (l1  l2  l3  l4)
    where
    coinductive
    field
      type :
        (X : system.type A) 
        htpy-section-system
          ( precomp-section-system
            ( section-system.slice f X)
            ( weakening.type WA X))
          ( postcomp-section-system
            ( fibered-weakening.type WB (section-system.type f X))
            ( f))
      slice :
        (X : system.type A) 
        preserves-weakening-section-system
          ( fibered-weakening.slice WB (section-system.type f X))
          ( section-system.slice f X)

  record preserves-substitution-section-system
    {l1 l2 l3 l4 : Level}
    {A : system l1 l2} {B : fibered-system l3 l4 A}
    {SA : substitution A} (SB : fibered-substitution B SA)
    (f : section-system B) : UU (l1  l2  l3  l4)
    where
    coinductive
    field
      type :
        {X : system.type A} (x : system.element A X) 
        htpy-section-system
          ( precomp-section-system f (substitution.type SA x))
          ( postcomp-section-system
            ( fibered-substitution.type SB (section-system.element f x))
            ( section-system.slice f X))
      slice :
        (X : system.type A) 
        preserves-substitution-section-system
          ( fibered-substitution.slice SB (section-system.type f X))
          ( section-system.slice f X)

  record preserves-generic-element-section-system
    {l1 l2 l3 l4 : Level}
    {A : system l1 l2} {B : fibered-system l3 l4 A}
    {WA : weakening A} {δA : generic-element WA}
    {WB : fibered-weakening B WA} (δB : fibered-generic-element WB δA)
    {f : section-system B} (Wf : preserves-weakening-section-system WB f) :
    UU (l1  l2  l3  l4)
    where
    coinductive
    field
      type :
        (X : system.type A) 
        Id
          ( tr
            ( λ t 
              fibered-system.element
                ( fibered-system.slice B (section-system.type f X))
                ( t)
                ( generic-element.type δA X))
            ( section-system.type
              ( preserves-weakening-section-system.type Wf X)
              ( X))
            ( section-system.element
              ( section-system.slice f X)
              ( generic-element.type δA X)))
            ( fibered-generic-element.type δB (section-system.type f X))
      slice :
        (X : system.type A) 
        preserves-generic-element-section-system
          ( fibered-generic-element.slice δB (section-system.type f X))
          ( preserves-weakening-section-system.slice Wf X)

  record section-type-theory
    {l1 l2 l3 l4 : Level}
    {A : type-theory l1 l2}
    (B : fibered-type-theory l3 l4 A) : UU (l1  l2  l3  l4)
    where
    field
      sys : section-system (fibered-type-theory.sys B)
      W :
        preserves-weakening-section-system
          ( fibered-type-theory.W B)
          ( sys)
      S :
        preserves-substitution-section-system
          ( fibered-type-theory.S B)
          ( sys)
      δ :
        preserves-generic-element-section-system
          ( fibered-type-theory.δ B)
          ( W)