Built with Alectryon. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use instead of Ctrl.
(** * Spectra *)

Require Import HoTT.Basics HoTT.Types.
Require Import Pointed.

Local Open Scope nat_scope.
Local Open Scope path_scope.
Local Open Scope equiv_scope.
Local Open Scope pointed_scope.

(** ** Basic Definitions of Spectra *)

Record Prespectrum :=
  { deloop :> nat -> pType
    ; glue : forall n, deloop n ->* loops (deloop (n .+1)) }.

Class IsSpectrum (E : Prespectrum) :=
  is_equiv_glue :: forall n, IsEquiv (glue E n).

Definition equiv_glue (E : Prespectrum) `{IsSpectrum E}
: forall n, E n <~>* loops (E n.+1)
  := fun n => Build_pEquiv (glue E n) _.

Record Spectrum :=
  { to_prespectrum :> Prespectrum
    ; to_is_spectrum :: IsSpectrum to_prespectrum }.

(** ** Truncations of spectra *)

H: Univalence
k: trunc_index
E: Spectrum

Spectrum
H: Univalence
k: trunc_index
E: Spectrum

Spectrum
H: Univalence
k: trunc_index
E: Spectrum

forall n : nat, (fun n0 : nat => pTr (trunc_index_inc k n0) (E n0)) n ->* loops ((fun n0 : nat => pTr (trunc_index_inc k n0) (E n0)) n.+1)
H: Univalence
k: trunc_index
E: Spectrum
IsSpectrum {| deloop := fun n : nat => pTr (trunc_index_inc k n) (E n); glue := ?glue |}
H: Univalence
k: trunc_index
E: Spectrum

forall n : nat, (fun n0 : nat => pTr (trunc_index_inc k n0) (E n0)) n ->* loops ((fun n0 : nat => pTr (trunc_index_inc k n0) (E n0)) n.+1)
H: Univalence
k: trunc_index
E: Spectrum
n: nat

(fun n0 : nat => pTr (trunc_index_inc k n0) (E n0)) n ->* loops ((fun n0 : nat => pTr (trunc_index_inc k n0) (E n0)) n.+1)
exact ((ptr_loops _ (E n.+1)) o*E (pequiv_ptr_functor _ (equiv_glue E n))).
H: Univalence
k: trunc_index
E: Spectrum

IsSpectrum {| deloop := fun n : nat => pTr (trunc_index_inc k n) (E n); glue := fun n : nat => ptr_loops (trunc_index_inc k n) (E n.+1) o*E pequiv_ptr_functor (trunc_index_inc k n) (equiv_glue E n) |}
H: Univalence
k: trunc_index
E: Spectrum
n: nat

IsEquiv (glue {| deloop := fun n0 : nat => pTr (trunc_index_inc k n0) (E n0); glue := fun n0 : nat => ptr_loops (trunc_index_inc k n0) (E n0.+1) o*E pequiv_ptr_functor (trunc_index_inc k n0) (equiv_glue E n0) |} n)
H: Univalence
k: trunc_index
E: Spectrum
n: nat

IsEquiv (ptr_loops (trunc_index_inc k n) (E n.+1) o*E pequiv_ptr_functor (trunc_index_inc k n) (equiv_glue E n))
rapply isequiv_compose. Defined.