Andrew Swan, February 7th 2024

This is a generalisation of some of the results by Martín Escardó in
TypeTopology.PropTychonoff, based on the observation that for
propositions P, the functor sending A to P → A is a
modality. Modalities of this form are an important special case and
they have a name; they are *open modalities* (Example 1.7 in
[2]). However, we will show a version of the theorem is not only true
for open modalities, but for all modalities.

For another example, let ∇ be the modality of double negation sheaves
(Example 3.41 of [2]). The internal logic in this reflective universe
is boolean. It follows that ∇ (is-compact∙ A) holds for all types A,
and so we can deduce that ∇ A is always compact.

We can also see as a special case that truncation preserves
compactness, although it seems unlikely there are any good examples of
compact higher types where it isn't already clear that the
0-truncation is compact.

Closed modalities are also a promising application, since they are
related to Friedman's A-translation in proof theory.

TODO: So far we have implemented open modalities and used them to
derive a new proof of propositional Tychonoff (in
TypeTopology.AbsolutenessOfCompactnessExample). We leave it for future
work to implement and look for applications of the other examples above.

We note that the results hold for all modalities with no further
conditions and in particular the modality is not required to be lex,
or to preserve 𝟘. For the main theorem, we don't even need a full
modality, and the weaker notion of reflective subuniverse suffices.

When formulated in terms of modalities, the result is best thought of
as an "absoluteness result." When working in models of some theory, a
logical formula might make sense stated both internally in the model
and for the same object viewed externally from outside the
model. Absoluteness says that these two statements are equivalent.

In this case we are thinking of reflective subuniverses as models of
type theory sitting inside some larger "external" model of type
theory. We will show that compactness is an upwards absolute
notion. That is, if a type inside the reflective subuniverse is
compact with respect to the internal logic of the subuniverse then it
is compact viewed outside the subuniverse as just a type. The converse
does not quite hold, so there can be compact types where the internal
statement of compactness is not true, and we don't get full
absoluteness.

We sketch out an example from realizabilty to illustrate how downwards
absoluteness can fail. We recall from section 17 of [1] that each
Turing degree can be viewed as a local operator in the effective
topos, and from section 3.3 of [2] we recall that local operators can
be viewed as modalities via sheafification. We will use that fact that
for such modalities, the unit maps A → ○ A are ¬¬-connected (or
equivalently that the corresponding subtoposes all contain the
subtopos of sets).

Furthermore, we recall from section 3.3 of [3] that the object R of
real numbers is isomorphic to the computable real numbers and that
every function R → R is continuous. The latter implies that every
function R → 2 is constant, and so vacuously R is compact in the
effective topos.

Let ○ be the modality corresponding to the halting set, as described
above. Since the unit map R → ○ R is ¬¬-connected, it is also true
that every map ○ R → 2 is constant: the composition of any such map
with the unit map, R → ○ R is constant, but every element of ○ R does
not not belong to R, and 2 is ¬¬-separated, so the restriction to ○ R
must also be constant. However, the halting set allows us to construct
new functions R → ○ 2, and thereby functions ○ R → ○ 2: we can use the
halting set to decide whether or not two computable real numbers are
equal, and so extend any function ○ N → ○ 2 to ○ R, mapping everything
outside ○ N to 0. However, ○ N is not compact in the reflective
subuniverse, by the same argument as for the effective topos, so ○ R
is not compact either.


[1] Hyland, The effective topos,
https://doi.org/10.1016/S0049-237X(09)70129-6

[2] Rijke, Shulman, Spitters, Modalities in homotopy type theory,
https://doi.org/10.23638/LMCS-16(1:2)2020

[3] Van Oosten, Realizability: An introduction to its categorical side

\begin{code}

{-# OPTIONS --safe --without-K #-}
open import MLTT.Spartan
open import MLTT.Two-Properties

import Modal.SigmaClosedReflectiveSubuniverse
open import Modal.Subuniverse

open import TypeTopology.CompactTypes

open import UF.Equiv
open import UF.FunExt
open import UF.UniverseEmbedding

\end{code}

Throughout we are going to assume that we are given a reflective
subuniverse. We import some notation and lemmas from
Modal.ReflectiveSubuniverse. In particular, we write ○ for the
modality corresponding to the reflective subuniverse.

\begin{code}

module TypeTopology.AbsolutenessOfCompactness
 (P : subuniverse 𝓤 𝓥)
 (P-is-reflective : subuniverse-is-reflective P)
 where

open import Modal.ReflectiveSubuniverse P P-is-reflective

\end{code}

We now give some statements related to compactness. We first consider
what it means for a type in the reflective subuniverse to be compact
according to the internal logic. We recall that when we interpret type
theory in a reflective subuniverse, this is done by induction on the
structure of types. Dependent functions, Σ-types and identity types
are the same as externally, whereas whenever we see an inductive type
(such as 𝟚) we need to apply the modality.

Unwinding all this, gives the following internal definition of
compactness for the reflective subuniverse.

\begin{code}

is-internal-compact∙ : 𝓤 ̇ → 𝓤 ̇
is-internal-compact∙ A =
 (F : A → ○ (Lift _ 𝟚))
 → Σ a₀ ꞉ A , (F a₀ ＝ η _ (lift 𝓤 ₁)
 → (a : A)
 → F a ＝ η _ (lift 𝓤 ₁))

\end{code}

It turns out that in addition to internal compactness, it's also
useful to consider the weaker notion below. The reason for this is
that although we can show internal compact implies compact, we don't
have the converse direction. However, we will be able to show that
compact implies weak internal compact.

This weaker notion will also be useful for making the connection with
the results of TypeTopology.PropTychonoff clear. To do this, we will
also look at the type obtained by simply applying the modality to the
statement that A is compact. We will be able to show ○ (is-compact∙ A)
→ is-weak-internal-compact∙, but not the same implication for just
internal compact.

\begin{code}

is-weak-internal-compact∙ : 𝓤 ̇ → 𝓤 ̇
is-weak-internal-compact∙ A =
 (F : A → 𝟚)
   → Σ a₀ ꞉ A , (F a₀ ＝ ₁ → (a : A) → η _ (lift 𝓤 (F a)) ＝ η _ (lift 𝓤 ₁))

\end{code}

We check that weak internal compactness actually is weaker.

\begin{code}

internal-compact-implies-weak-internal-compact
 : (A : 𝓤 ̇ )
 → is-internal-compact∙ A
 → is-weak-internal-compact∙ A

internal-compact-implies-weak-internal-compact A c F =
 (pr₁ weak-internal-instance) ,
 (λ p → pr₂ weak-internal-instance (ap (η _ ∘ lift _) p))

 where
  F' : A → ○ (Lift _ 𝟚)
  F' = η _ ∘ (lift _) ∘ F

  weak-internal-instance
   : Σ a₀ ꞉ A , (F' a₀ ＝ η _ (lift 𝓤 ₁) → (a : A) → F' a ＝ η _ (lift 𝓤 ₁))

  weak-internal-instance = c F'

\end{code}

Note that we defined weak internal compactness so that it is also
implied by compactness.

\begin{code}

compact-implies-weak-internal-compact
 : (A : 𝓤 ̇ )
 → is-compact∙ A
 → is-weak-internal-compact∙ A

compact-implies-weak-internal-compact A c F =
 (pr₁ (c F)) , (λ p a → ap (η _ ∘ lift _) (pr₂ (c F) p a))

\end{code}

We can now prove the main theorem: whenever a modal type is weak
internal compact, it is (externally) compact.

Although it looks a bit different, this is the argument that most
closely follows the original theorem prop-tychonoff.

\begin{code}

weak-internal-compact-implies-compact
 : (A : 𝓤 ̇ )
 → (A-modal : is-modal A)
 → is-weak-internal-compact∙ A
 → is-compact∙ A
weak-internal-compact-implies-compact A A-modal c F = a₀ , a₀-works
 where

\end{code}

Constructing a candidate universal witness is very easy. We just use
the same one given by weak internal compactness.

\begin{code}

  internal-compactness-instance :
   Σ a₀ ꞉ A , (F a₀ ＝ ₁ → (a : A) → η _ (lift 𝓤 (F a)) ＝ η _ (lift 𝓤 ₁))
  internal-compactness-instance = c F

  a₀ = pr₁ internal-compactness-instance

\end{code}

To show that the candidate universal witness actually works, we need
to check that the boolean F a is 1, whenever F a₀ is. We will split
into two cases depending on the value of F a. If F a = 1, then we are
already done. The tricky case, which we deal with in the lemma below
is getting a proof F a = 1 out of a proof of F a = 0. We would like to
argue by contradiction from the fact that F a₀ = 1, but F a =
0. However, all that weak internal compactness tells us is that η(F a)
= η(1) as elements of ○ 𝟚.  This is actually consistant with F a = 0:
consider the open modality on the empty type.

The idea of the lemma is as follows: given η(F a) = η(1), we can
derive a proof that η(0) = η(1). We define a map 𝟚 → A sending 0 to a
and 1 to a₀. Since A is modal, this map must factor through ○ 𝟚, and
so we can apply ap to our path to get the required path a = a₀.

\begin{code}

  lemma
   : (F a₀ ＝ ₁)
   → (a : A)
   → (F a ＝ ₀)
   → (a ＝ a₀)
  lemma p a q =
   a                   ＝⟨ by-construction ⟩
   t (lift _ ₀)        ＝⟨ ○-rec-compute _ _ _ _ _ ⁻¹ ⟩
   t' (η _ (lift _ ₀)) ＝⟨ ap t' modal-zero-is-modal-one ⟩
   t' (η _ (lift _ ₁)) ＝⟨ ○-rec-compute _ _ _ _ _ ⟩
   t (lift _ ₁)        ＝⟨ by-construction ⟩
   a₀ ∎

   where
    t : Lift _ 𝟚 → A
    t = 𝟚-cases a a₀ ∘ lower

    t' : ○ (Lift _ 𝟚) → A
    t' = ○-rec _ _ A-modal t

    modal-zero-is-modal-one : η _ (lift _ ₀) ＝ η _ (lift _ ₁)
    modal-zero-is-modal-one =
     η _ (lift _ ₀) ＝⟨ ap (η _ ∘ lift _) (q ⁻¹) ⟩
     η _ (lift _ (F a)) ＝⟨ pr₂ internal-compactness-instance p a ⟩
     η _ (lift _ ₁) ∎

  a₀-works : F a₀ ＝ ₁ → (a : A) → F a ＝ ₁
  a₀-works p a = 𝟚-equality-cases (λ q → ap F (lemma p a q) ∙ p) id

\end{code}

As a corollary we can combine the main theorem with our proposition
that internal compact implies weak internal compact, to show that if
a type is compact according to the internal logic of a reflective
subuniverse, then it is compact externally. That is, compactness is
upwards absolute for reflective subuniverses.

\begin{code}

internal-compact-implies-compact
 : (A : 𝓤 ̇ )
 → (A-modal : is-modal A)
 → is-internal-compact∙ A
 → is-compact∙ A
internal-compact-implies-compact A A-modal c =
 weak-internal-compact-implies-compact
  _
  A-modal
  (internal-compact-implies-weak-internal-compact _ c)

\end{code}

The remaining theorems in this module all require a couple of extra
assumptions: function extensionality, and the subuniverse
needs to be Σ-closed, making it an actual modality, and replete.

\begin{code}

module WithFunExtAndRepleteSigmaClosed
 (fe : funext 𝓤 𝓤)
 (P-is-sigma-closed : subuniverse-is-sigma-closed P)
 (repleteness : subuniverse-is-replete P)
 where

\end{code}

We import some theorems about Σ-closed reflective subuniverses.

\begin{code}

 module S =
  Modal.SigmaClosedReflectiveSubuniverse
   P P-is-reflective P-is-sigma-closed

\end{code}

The next two lemmas get quite technical. In both cases the ideas are
simple, but we require constructing terms by ○-induction or
recursion. This requires proving that certain types are ○-modal, which
requires some care with universe levels, as well as the application of
several lemmas using function extensionality and repleteness of P.

We first show that if A is weak internal compact, then so is ○ A.
\begin{code}

 ○-preserves-wi-compact
  : (A : 𝓤 ̇ )
  → is-weak-internal-compact∙ A
  → is-weak-internal-compact∙ (○ A)
 ○-preserves-wi-compact A c F = α₀ , α₀-works
  where
   F' : A → 𝟚
   F' = F ∘ η _

   compactness-instance
    : Σ a₀ ꞉ A ,
    (F' a₀ ＝ ₁ → (a : A) → η _ (lift _ (F' a)) ＝ η _ (lift _ ₁))
   compactness-instance = c F'

   α₀ = η _ (pr₁ compactness-instance)

   α₀-works
    : (p : F α₀ ＝ ₁)
    → (α : ○ A)
    → η _ (lift _ (F α)) ＝ η _ (lift _ ₁)
   α₀-works p =
    S.○-induction
     fe
     _ _
     (λ _ →
      id-types-of-modal-types-are-modal
       fe
       repleteness
       _ _
       _
       (○-is-modal _))
     (pr₂ compactness-instance p)

\end{code}

In the second technical lemma we strengthen the above result. We
derive the same conclusion as before, but we weaken the assumption by
putting it inside the modality.

\begin{code}

 ○-compact-implies-weak-internal-compact
  : (A : 𝓤 ̇ )
  → ○ (is-weak-internal-compact∙ A)
  → is-weak-internal-compact∙ (○ A)

 ○-compact-implies-weak-internal-compact A c F =
  demodify-wic-instance
   (○-rec
    _
    _
    modified-wic-is-modal
    (λ c' → modify-wic-instance (○-preserves-wi-compact A c' F))
    c)

  where
   modified-wic-instance : 𝓤 ̇
   modified-wic-instance =
    Σ α₀ ꞉ ○ A ,
    (lift 𝓤 (F α₀) ＝ lift 𝓤 ₁ →
     (α : ○ A) → η _ (lift 𝓤 (F α)) ＝ η _ (lift 𝓤 ₁))

   demodify-wic-instance
    : modified-wic-instance
    → Σ α₀ ꞉ ○ A ,
    (F α₀ ＝ ₁ → (α : ○ A) → η _ (lift 𝓤 (F α)) ＝ η _ (lift 𝓤 ₁))
   demodify-wic-instance (α₀ , f) = α₀ , (λ p α → f (ap (lift _) p) α)

   modify-wic-instance
    : Σ α₀ ꞉ ○ A ,
    (F α₀ ＝ ₁ → (α : ○ A) → η _ (lift 𝓤 (F α)) ＝ η _ (lift 𝓤 ₁))
    → modified-wic-instance
   modify-wic-instance (α₀ , f) =
    α₀ , (λ p α → f (equivs-are-lc _ lift-is-equiv p) α)

   modified-wic-is-modal : is-modal modified-wic-instance
   modified-wic-is-modal =
    P-is-sigma-closed
     _ _
     (○-is-modal A)
     (λ _ →
      products-of-modal-types-are-modal
       fe
       repleteness
       _
       _
       λ _ →
        products-of-modal-types-are-modal
         fe
         repleteness
         _ _
         (λ _ →
           id-types-of-modal-types-are-modal
           fe
           repleteness
           _ _ _
           (○-is-modal _)))

\end{code}

Finally, we can use the lemmas together with the main theorem to get a
result which is closer to the statement of prop-tychonoff. This says ○
"preserves compactness" in the sense that if ○ (A is compact), then
(○ A) is compact.

In order to derive prop-tychonoff from this statement we will need a
few extra arguments. This will be covered in a separate module,
AbsolutenessOfCompactnessExample, which works specifically with open
modalities, as opposed to this module that applies to modalities in
general.

\begin{code}

 modalities-preserve-compact
  : (A : 𝓤 ̇ )
  → ○ (is-compact∙ A)
  → is-compact∙ (○ A)
 modalities-preserve-compact A c =
  weak-internal-compact-implies-compact
   _
   (○-is-modal _)
   (○-compact-implies-weak-internal-compact A
    (○-rec
     _ _
     (○-is-modal _)
     (λ c' → η _ (compact-implies-weak-internal-compact _ c'))
     c))

\end{code}
