# Subterminal types

```agda
module foundation.subterminal-types where
```

<details><summary>Imports</summary>

```agda
open import foundation.action-on-identifications-functions
open import foundation.unit-type
open import foundation.universe-levels

open import foundation-core.contractible-types
open import foundation-core.embeddings
open import foundation-core.equivalences
open import foundation-core.function-types
open import foundation-core.identity-types
open import foundation-core.propositions
```

</details>

## Idea

A type is said to be {{#concept "subterminal" Agda=is-subterminal}} if it
[embeds](foundation-core.embeddings.md) into the
[unit type](foundation.unit-type.md). A type is subterminal if and only if it is
a [proposition](foundation-core.propositions.md).

## Definition

```agda
module _
  {l : Level} (A : UU l)
  where

  is-subterminal : UU l
  is-subterminal = is-emb (terminal-map A)
```

## Properties

### A type is subterminal if and only if it is a proposition

```agda
module _
  {l : Level} {A : UU l}
  where

  abstract
    is-subterminal-is-proof-irrelevant :
      is-proof-irrelevant A  is-subterminal A
    is-subterminal-is-proof-irrelevant H =
      is-emb-is-emb
        ( λ x  is-emb-is-equiv (is-equiv-is-contr _ (H x) is-contr-unit))

  abstract
    is-subterminal-all-elements-equal : all-elements-equal A  is-subterminal A
    is-subterminal-all-elements-equal =
      is-subterminal-is-proof-irrelevant 
      is-proof-irrelevant-all-elements-equal

  abstract
    is-subterminal-is-prop : is-prop A  is-subterminal A
    is-subterminal-is-prop = is-subterminal-all-elements-equal  eq-is-prop'

  abstract
    is-prop-is-subterminal : is-subterminal A  is-prop A
    is-prop-is-subterminal H x y =
      is-contr-is-equiv
        ( star  star)
        ( ap (terminal-map A))
        ( H x y)
        ( is-prop-unit star star)

  abstract
    eq-is-subterminal : is-subterminal A  all-elements-equal A
    eq-is-subterminal = eq-is-prop'  is-prop-is-subterminal

  abstract
    is-proof-irrelevant-is-subterminal :
      is-subterminal A  is-proof-irrelevant A
    is-proof-irrelevant-is-subterminal H =
      is-proof-irrelevant-all-elements-equal (eq-is-subterminal H)
```

## Table of files about propositional logic

The following table gives an overview of basic constructions in propositional
logic and related considerations.

{{#include tables/propositional-logic.md}}