# Galois connections between large posets

```agda
module order-theory.galois-connections-large-posets where
```

<details><summary>Imports</summary>

```agda
open import foundation.action-on-identifications-functions
open import foundation.dependent-pair-types
open import foundation.function-types
open import foundation.homotopies
open import foundation.logical-equivalences
open import foundation.universe-levels

open import order-theory.large-posets
open import order-theory.least-upper-bounds-large-posets
open import order-theory.order-preserving-maps-large-posets
open import order-theory.principal-lower-sets-large-posets
open import order-theory.principal-upper-sets-large-posets
open import order-theory.similarity-of-elements-large-posets
open import order-theory.similarity-of-order-preserving-maps-large-posets
```

</details>

## Idea

A **galois connection** between [large posets](order-theory.large-posets.md) `P`
and `Q` consists of
[order preserving maps](order-theory.order-preserving-maps-large-posets.md)
`f : hom-Large-Poset (λ l → l) P Q` and `hom-Large-Poset id Q P` such that the
adjoint relation

```text
  (f x ≤ y) ↔ (x ≤ g y)
```

holds for every two elements `x : P` and `y : Q`.

The following table lists the Galois connections that have been formalized in
the agda-unimath library

{{#include tables/galois-connections.md}}

## Definitions

### The adjoint relation between order preserving maps between large posets

```agda
module _
  {αP αQ γ δ : Level  Level} {βP βQ : Level  Level  Level}
  (P : Large-Poset αP βP) (Q : Large-Poset αQ βQ)
  (F : hom-Large-Poset γ P Q) (G : hom-Large-Poset δ Q P)
  where

  forward-implication-adjoint-relation-hom-Large-Poset : UUω
  forward-implication-adjoint-relation-hom-Large-Poset =
    {l1 l2 : Level}
    {x : type-Large-Poset P l1} {y : type-Large-Poset Q l2} 
    leq-Large-Poset Q (map-hom-Large-Poset P Q F x) y 
    leq-Large-Poset P x (map-hom-Large-Poset Q P G y)

  backward-implication-adjoint-relation-hom-Large-Poset : UUω
  backward-implication-adjoint-relation-hom-Large-Poset =
    {l1 l2 : Level}
    {x : type-Large-Poset P l1} {y : type-Large-Poset Q l2} 
    leq-Large-Poset P x (map-hom-Large-Poset Q P G y) 
    leq-Large-Poset Q (map-hom-Large-Poset P Q F x) y

  adjoint-relation-hom-Large-Poset : UUω
  adjoint-relation-hom-Large-Poset =
    {l1 l2 : Level}
    (x : type-Large-Poset P l1) (y : type-Large-Poset Q l2) 
    leq-Large-Poset Q (map-hom-Large-Poset P Q F x) y 
    leq-Large-Poset P x (map-hom-Large-Poset Q P G y)
```

### Galois connections between large posets

```agda
module _
  {αP αQ : Level  Level} {βP βQ : Level  Level  Level}
  (γ : Level  Level) (δ : Level  Level)
  (P : Large-Poset αP βP) (Q : Large-Poset αQ βQ)
  where

  record
    galois-connection-Large-Poset : UUω
    where
    constructor
      make-galois-connection-Large-Poset
    field
      lower-adjoint-galois-connection-Large-Poset :
        hom-Large-Poset γ P Q
      upper-adjoint-galois-connection-Large-Poset :
        hom-Large-Poset δ Q P
      adjoint-relation-galois-connection-Large-Poset :
        adjoint-relation-hom-Large-Poset P Q
          lower-adjoint-galois-connection-Large-Poset
          upper-adjoint-galois-connection-Large-Poset

  open galois-connection-Large-Poset public

module _
  {αP αQ : Level  Level} {βP βQ : Level  Level  Level}
  {γ : Level  Level} {δ : Level  Level}
  (P : Large-Poset αP βP) (Q : Large-Poset αQ βQ)
  (G : galois-connection-Large-Poset γ δ P Q)
  where

  map-lower-adjoint-galois-connection-Large-Poset :
    {l1 : Level}  type-Large-Poset P l1  type-Large-Poset Q (γ l1)
  map-lower-adjoint-galois-connection-Large-Poset =
    map-hom-Large-Poset P Q
      ( lower-adjoint-galois-connection-Large-Poset G)

  preserves-order-lower-adjoint-galois-connection-Large-Poset :
    {l1 l2 : Level} (x : type-Large-Poset P l1) (y : type-Large-Poset P l2) 
    leq-Large-Poset P x y 
    leq-Large-Poset Q
      ( map-lower-adjoint-galois-connection-Large-Poset x)
      ( map-lower-adjoint-galois-connection-Large-Poset y)
  preserves-order-lower-adjoint-galois-connection-Large-Poset =
    preserves-order-hom-Large-Poset P Q
      ( lower-adjoint-galois-connection-Large-Poset G)

  map-upper-adjoint-galois-connection-Large-Poset :
    {l1 : Level}  type-Large-Poset Q l1  type-Large-Poset P (δ l1)
  map-upper-adjoint-galois-connection-Large-Poset =
    map-hom-Large-Poset Q P
      ( upper-adjoint-galois-connection-Large-Poset G)

  preserves-order-upper-adjoint-galois-connection-Large-Poset :
    {l1 l2 : Level} (x : type-Large-Poset Q l1) (y : type-Large-Poset Q l2) 
    leq-Large-Poset Q x y 
    leq-Large-Poset P
      ( map-upper-adjoint-galois-connection-Large-Poset x)
      ( map-upper-adjoint-galois-connection-Large-Poset y)
  preserves-order-upper-adjoint-galois-connection-Large-Poset =
    preserves-order-hom-Large-Poset Q P
      ( upper-adjoint-galois-connection-Large-Poset G)

  forward-implication-adjoint-relation-galois-connection-Large-Poset :
    forward-implication-adjoint-relation-hom-Large-Poset P Q
      ( lower-adjoint-galois-connection-Large-Poset G)
      ( upper-adjoint-galois-connection-Large-Poset G)
  forward-implication-adjoint-relation-galois-connection-Large-Poset =
    forward-implication (adjoint-relation-galois-connection-Large-Poset G _ _)

  backward-implication-adjoint-relation-galois-connection-Large-Poset :
    backward-implication-adjoint-relation-hom-Large-Poset P Q
      ( lower-adjoint-galois-connection-Large-Poset G)
      ( upper-adjoint-galois-connection-Large-Poset G)
  backward-implication-adjoint-relation-galois-connection-Large-Poset =
    backward-implication (adjoint-relation-galois-connection-Large-Poset G _ _)
```

### Composition of Galois connections

```agda
module _
  {αP αQ αR : Level  Level} {βP βQ βR : Level  Level  Level}
  {γG γH : Level  Level} {δG δH : Level  Level}
  (P : Large-Poset αP βP)
  (Q : Large-Poset αQ βQ)
  (R : Large-Poset αR βR)
  (H : galois-connection-Large-Poset γH δH Q R)
  (G : galois-connection-Large-Poset γG δG P Q)
  where

  lower-adjoint-comp-galois-connection-Large-Poset :
    hom-Large-Poset  l  γH (γG l)) P R
  lower-adjoint-comp-galois-connection-Large-Poset =
    comp-hom-Large-Poset P Q R
      ( lower-adjoint-galois-connection-Large-Poset H)
      ( lower-adjoint-galois-connection-Large-Poset G)

  map-lower-adjoint-comp-galois-connection-Large-Poset :
    {l : Level}  type-Large-Poset P l  type-Large-Poset R (γH (γG l))
  map-lower-adjoint-comp-galois-connection-Large-Poset =
    map-comp-hom-Large-Poset P Q R
      ( lower-adjoint-galois-connection-Large-Poset H)
      ( lower-adjoint-galois-connection-Large-Poset G)

  preserves-order-lower-adjoint-comp-galois-connection-Large-Poset :
    preserves-order-map-Large-Poset P R
      map-lower-adjoint-comp-galois-connection-Large-Poset
  preserves-order-lower-adjoint-comp-galois-connection-Large-Poset =
    preserves-order-comp-hom-Large-Poset P Q R
      ( lower-adjoint-galois-connection-Large-Poset H)
      ( lower-adjoint-galois-connection-Large-Poset G)

  upper-adjoint-comp-galois-connection-Large-Poset :
    hom-Large-Poset  l  δG (δH l)) R P
  upper-adjoint-comp-galois-connection-Large-Poset =
    comp-hom-Large-Poset R Q P
      ( upper-adjoint-galois-connection-Large-Poset G)
      ( upper-adjoint-galois-connection-Large-Poset H)

  map-upper-adjoint-comp-galois-connection-Large-Poset :
    {l : Level}  type-Large-Poset R l  type-Large-Poset P (δG (δH l))
  map-upper-adjoint-comp-galois-connection-Large-Poset =
    map-comp-hom-Large-Poset R Q P
      ( upper-adjoint-galois-connection-Large-Poset G)
      ( upper-adjoint-galois-connection-Large-Poset H)

  preserves-order-upper-adjoint-comp-galois-connection-Large-Poset :
    preserves-order-map-Large-Poset R P
      map-upper-adjoint-comp-galois-connection-Large-Poset
  preserves-order-upper-adjoint-comp-galois-connection-Large-Poset =
    preserves-order-comp-hom-Large-Poset R Q P
      ( upper-adjoint-galois-connection-Large-Poset G)
      ( upper-adjoint-galois-connection-Large-Poset H)

  forward-implication-adjoint-relation-comp-galois-connection-Large-Poset :
    forward-implication-adjoint-relation-hom-Large-Poset P R
      lower-adjoint-comp-galois-connection-Large-Poset
      upper-adjoint-comp-galois-connection-Large-Poset
  forward-implication-adjoint-relation-comp-galois-connection-Large-Poset =
    forward-implication-adjoint-relation-galois-connection-Large-Poset P Q G 
    forward-implication-adjoint-relation-galois-connection-Large-Poset Q R H

  backward-implication-adjoint-relation-comp-galois-connection-Large-Poset :
    backward-implication-adjoint-relation-hom-Large-Poset P R
      lower-adjoint-comp-galois-connection-Large-Poset
      upper-adjoint-comp-galois-connection-Large-Poset
  backward-implication-adjoint-relation-comp-galois-connection-Large-Poset =
    backward-implication-adjoint-relation-galois-connection-Large-Poset Q R H 
    backward-implication-adjoint-relation-galois-connection-Large-Poset P Q G

  adjoint-relation-comp-galois-connection-Large-Poset :
    adjoint-relation-hom-Large-Poset P R
      lower-adjoint-comp-galois-connection-Large-Poset
      upper-adjoint-comp-galois-connection-Large-Poset
  pr1 (adjoint-relation-comp-galois-connection-Large-Poset x y) =
    forward-implication-adjoint-relation-comp-galois-connection-Large-Poset
  pr2 (adjoint-relation-comp-galois-connection-Large-Poset x y) =
    backward-implication-adjoint-relation-comp-galois-connection-Large-Poset

  comp-galois-connection-Large-Poset :
    galois-connection-Large-Poset  l  γH (γG l))  l  δG (δH l)) P R
  lower-adjoint-galois-connection-Large-Poset
    comp-galois-connection-Large-Poset =
    lower-adjoint-comp-galois-connection-Large-Poset
  upper-adjoint-galois-connection-Large-Poset
    comp-galois-connection-Large-Poset =
    upper-adjoint-comp-galois-connection-Large-Poset
  adjoint-relation-galois-connection-Large-Poset
    comp-galois-connection-Large-Poset =
    adjoint-relation-comp-galois-connection-Large-Poset
```

### Homotopies of Galois connections

**Homotopies of Galois connections** are pointwise identifications between
either their lower adjoints or their upper adjoints. We will show below that
homotopies between lower adjoints induce homotopies between upper adjoints and
vice versa.

**Note:** We can only have homotopies between Galois connections with the same
universe level reindexing functions.

```agda
module _
  {αP αQ γ δ : Level  Level} {βP βQ : Level  Level  Level}
  (P : Large-Poset αP βP) (Q : Large-Poset αQ βQ)
  (G H : galois-connection-Large-Poset γ δ P Q)
  where

  lower-htpy-galois-connection-Large-Poset : UUω
  lower-htpy-galois-connection-Large-Poset =
    htpy-hom-Large-Poset P Q
      ( lower-adjoint-galois-connection-Large-Poset G)
      ( lower-adjoint-galois-connection-Large-Poset H)

  upper-htpy-galois-connection-Large-Poset : UUω
  upper-htpy-galois-connection-Large-Poset =
    htpy-hom-Large-Poset Q P
      ( upper-adjoint-galois-connection-Large-Poset G)
      ( upper-adjoint-galois-connection-Large-Poset H)
```

### Similarity of Galois connections

**Similarities of Galois connections** are pointwise
[similarities](order-theory.similarity-of-elements-large-posets.md) between
either their lower or their upper adjoints. We will show below that similarities
between lower adjoints induce similarities between upper adjoints and vice
versa.

**Note:** Since the notion of similarity applies to galois connections with not
necessarily the same universe level reindexing function, it is slightly more
flexible. For this reason, it may be easier to work with similarity of galois
connections.

```agda
module _
  {αP αQ γG γH δG δH : Level  Level} {βP βQ : Level  Level  Level}
  (P : Large-Poset αP βP) (Q : Large-Poset αQ βQ)
  (G : galois-connection-Large-Poset γG δG P Q)
  (H : galois-connection-Large-Poset γH δH P Q)
  where

  lower-sim-galois-connection-Large-Poset : UUω
  lower-sim-galois-connection-Large-Poset =
    sim-hom-Large-Poset P Q
      ( lower-adjoint-galois-connection-Large-Poset G)
      ( lower-adjoint-galois-connection-Large-Poset H)

  upper-sim-galois-connection-Large-Poset : UUω
  upper-sim-galois-connection-Large-Poset =
    sim-hom-Large-Poset Q P
      ( upper-adjoint-galois-connection-Large-Poset G)
      ( upper-adjoint-galois-connection-Large-Poset H)
```

### Lower universal objects of galois connections

Consider a Galois connection `G : P → Q` and an element `x : P`. An element
`x' : Q` is then said to satisfy the **lower universal property** with respect
to `x` if the logical equivalence

```text
  (x' ≤-Q y) ↔ (x ≤-P UG y)
```

holds for every element `y : Q`.

```agda
module _
  {αP αQ γ δ : Level  Level} {βP βQ : Level  Level  Level}
  (P : Large-Poset αP βP) (Q : Large-Poset αQ βQ)
  (G : galois-connection-Large-Poset γ δ P Q)
  {l1 l2 : Level} (x : type-Large-Poset P l1)
  (x' : type-Large-Poset Q l2)
  where

  is-lower-element-galois-connection-Large-Poset : UUω
  is-lower-element-galois-connection-Large-Poset =
    {l : Level} (y : type-Large-Poset Q l) 
    leq-Large-Poset Q x' y 
    leq-Large-Poset P x
      ( map-upper-adjoint-galois-connection-Large-Poset P Q G y)
```

### Upper universal objects of galois connections

Consider a Galois connection `G : P → Q` and an element `y : Q`. An element
`y' : P` is then said to satisfy the **upper universal property** with respect
to `y` if the logical equivalence

```text
  (LG x ≤-Q y) ↔ (x ≤-P y')
```

holds for every element `x : P`.

```agda
module _
  {αP αQ γ δ : Level  Level} {βP βQ : Level  Level  Level}
  (P : Large-Poset αP βP) (Q : Large-Poset αQ βQ)
  (G : galois-connection-Large-Poset γ δ P Q)
  {l1 l2 : Level} (y : type-Large-Poset Q l1)
  (y' : type-Large-Poset P l2)
  where

  is-upper-element-galois-connection-Large-Poset : UUω
  is-upper-element-galois-connection-Large-Poset =
    {l : Level} (x : type-Large-Poset P l) 
    leq-Large-Poset Q
      ( map-lower-adjoint-galois-connection-Large-Poset P Q G x)
      ( y) 
    leq-Large-Poset P x y'
```

## Properties

### A similarity between lower adjoints of a Galois connection induces a similarity between upper adjoints, and vice versa

**Proof:** Consider two Galois connections `LG ⊣ UG` and `LH ⊣ UH` between `P`
and `Q`, and suppose that `LG(x) ~ LH(x)` for all elements `x : P`. Then it
follows that

```text
  (x ≤ UG(y)) ↔ (LG(x) ≤ y) ↔ (LH(x) ≤ y) ↔ (x ≤ UH(y)).
```

Therefore it follows that `UG(y)` and `UH(y)` have the same lower sets, and
hence they must be equal.

```agda
module _
  {αP αQ γG γH δG δH : Level  Level} {βP βQ : Level  Level  Level}
  (P : Large-Poset αP βP) (Q : Large-Poset αQ βQ)
  (G : galois-connection-Large-Poset γG δG P Q)
  (H : galois-connection-Large-Poset γH δH P Q)
  where

  upper-sim-lower-sim-galois-connection-Large-Poset :
    lower-sim-galois-connection-Large-Poset P Q G H 
    upper-sim-galois-connection-Large-Poset P Q H G
  upper-sim-lower-sim-galois-connection-Large-Poset
    p x =
    sim-has-same-elements-principal-lower-set-element-Large-Poset P
      ( λ y 
        logical-equivalence-reasoning
          leq-Large-Poset P y
            ( map-upper-adjoint-galois-connection-Large-Poset P Q H x)
           leq-Large-Poset Q
              ( map-lower-adjoint-galois-connection-Large-Poset P Q H y)
              ( x)
            by inv-iff (adjoint-relation-galois-connection-Large-Poset H y x)
           leq-Large-Poset Q
              ( map-lower-adjoint-galois-connection-Large-Poset P Q G y)
              ( x)
            by
            inv-iff
              ( has-same-elements-principal-upper-set-element-sim-Large-Poset Q
                ( p y)
                ( x))
           leq-Large-Poset P y
              ( map-upper-adjoint-galois-connection-Large-Poset P Q G x)
            by adjoint-relation-galois-connection-Large-Poset G y x)

  lower-sim-upper-sim-galois-connection-Large-Poset :
    upper-sim-galois-connection-Large-Poset P Q H G 
    lower-sim-galois-connection-Large-Poset P Q G H
  lower-sim-upper-sim-galois-connection-Large-Poset
    p y =
    sim-has-same-elements-principal-upper-set-element-Large-Poset Q
      ( λ x 
        logical-equivalence-reasoning
          leq-Large-Poset Q
            ( map-lower-adjoint-galois-connection-Large-Poset P Q G y)
            ( x)
           leq-Large-Poset P y
              ( map-upper-adjoint-galois-connection-Large-Poset P Q G x)
            by adjoint-relation-galois-connection-Large-Poset G y x
           leq-Large-Poset P y
              ( map-upper-adjoint-galois-connection-Large-Poset P Q H x)
            by
            inv-iff
              ( has-same-elements-principal-lower-set-element-sim-Large-Poset P
                ( p x)
                ( y))
           leq-Large-Poset Q
              ( map-lower-adjoint-galois-connection-Large-Poset P Q H y)
              ( x)
            by inv-iff (adjoint-relation-galois-connection-Large-Poset H y x))
```

### A homotopy between lower adjoints of a Galois connection induces a homotopy between upper adjoints, and vice versa

**Proof:** Consider two Galois connections `LG ⊣ UG` and `LH ⊣ UH` between `P`
and `Q`, and suppose that `LG ~ LH`. Then there is a similarity `LG ≈ LH`, and
this induces a similarity `UG ≈ UH`. In other words, we obtain that

```text
  UG y ~ UH y
```

for any element `y : Q`. Since `UG y` and `UH y` are of the same universe level,
it follows that they are equal.

```agda
module _
  {αP αQ γ δ : Level  Level} {βP βQ : Level  Level  Level}
  (P : Large-Poset αP βP) (Q : Large-Poset αQ βQ)
  (G H : galois-connection-Large-Poset γ δ P Q)
  where

  upper-htpy-lower-htpy-galois-connection-Large-Poset :
    lower-htpy-galois-connection-Large-Poset P Q G H 
    upper-htpy-galois-connection-Large-Poset P Q G H
  upper-htpy-lower-htpy-galois-connection-Large-Poset p =
    htpy-sim-hom-Large-Poset Q P
      ( upper-adjoint-galois-connection-Large-Poset G)
      ( upper-adjoint-galois-connection-Large-Poset H)
      ( upper-sim-lower-sim-galois-connection-Large-Poset P Q H G
        ( sim-htpy-hom-Large-Poset P Q
          ( lower-adjoint-galois-connection-Large-Poset H)
          ( lower-adjoint-galois-connection-Large-Poset G)
          ( inv-htpy p)))

  lower-htpy-upper-htpy-galois-connection-Large-Poset :
    upper-htpy-galois-connection-Large-Poset P Q H G 
    lower-htpy-galois-connection-Large-Poset P Q G H
  lower-htpy-upper-htpy-galois-connection-Large-Poset p =
    htpy-sim-hom-Large-Poset P Q
      ( lower-adjoint-galois-connection-Large-Poset G)
      ( lower-adjoint-galois-connection-Large-Poset H)
      ( lower-sim-upper-sim-galois-connection-Large-Poset P Q G H
        ( sim-htpy-hom-Large-Poset Q P
          ( upper-adjoint-galois-connection-Large-Poset H)
          ( upper-adjoint-galois-connection-Large-Poset G)
          ( p)))
```

### An element `x' : Q` satisfies the lower universal property with respect to `x : P` if and only if it is similar to the element `LG x`

```agda
module _
  {αP αQ : Level  Level} {βP βQ : Level  Level  Level}
  {γ δ : Level  Level}
  (P : Large-Poset αP βP) (Q : Large-Poset αQ βQ)
  (G : galois-connection-Large-Poset γ δ P Q)
  {l1 l2 : Level} (x : type-Large-Poset P l1) (x' : type-Large-Poset Q l2)
  where

  is-lower-element-sim-galois-connection-Large-Poset :
    sim-Large-Poset Q
      ( map-lower-adjoint-galois-connection-Large-Poset P Q G x)
      ( x') 
    is-lower-element-galois-connection-Large-Poset P Q G x x'
  pr1 (is-lower-element-sim-galois-connection-Large-Poset s y) p =
    forward-implication-adjoint-relation-galois-connection-Large-Poset P Q G
      ( transitive-leq-Large-Poset Q _ x' y p (pr1 s))
  pr2 (is-lower-element-sim-galois-connection-Large-Poset s y) p =
    transitive-leq-Large-Poset Q x' _ y
      ( backward-implication-adjoint-relation-galois-connection-Large-Poset
        P Q G p)
      ( pr2 s)

  sim-is-lower-element-galois-connection-Large-Poset :
    is-lower-element-galois-connection-Large-Poset P Q G x x' 
    sim-Large-Poset Q
      ( map-lower-adjoint-galois-connection-Large-Poset P Q G x)
      ( x')
  sim-is-lower-element-galois-connection-Large-Poset l =
    sim-has-same-elements-principal-upper-set-element-Large-Poset Q
      ( λ y 
        logical-equivalence-reasoning
          leq-Large-Poset Q _ y
           leq-Large-Poset P x _
            by adjoint-relation-galois-connection-Large-Poset G x y
           leq-Large-Poset Q x' y
            by inv-iff (l y))
```

### An element `y' : P` satisfies the upper universal property with respect to `y : Q` if and only if it is similar to the element `UG y`

```agda
module _
  {αP αQ : Level  Level} {βP βQ : Level  Level  Level}
  {γ δ : Level  Level}
  (P : Large-Poset αP βP) (Q : Large-Poset αQ βQ)
  (G : galois-connection-Large-Poset γ δ P Q)
  {l1 l2 : Level} (y : type-Large-Poset Q l1) (y' : type-Large-Poset P l2)
  where

  is-upper-element-sim-galois-connection-Large-Poset :
    sim-Large-Poset P
      ( map-upper-adjoint-galois-connection-Large-Poset P Q G y)
      ( y') 
    is-upper-element-galois-connection-Large-Poset P Q G y y'
  pr1 (is-upper-element-sim-galois-connection-Large-Poset s x) p =
    transitive-leq-Large-Poset P x _ y'
      ( pr1 s)
      ( forward-implication-adjoint-relation-galois-connection-Large-Poset
        P Q G p)
  pr2 (is-upper-element-sim-galois-connection-Large-Poset s x) p =
    backward-implication-adjoint-relation-galois-connection-Large-Poset P Q G
      ( transitive-leq-Large-Poset P x y' _ (pr2 s) p)

  sim-is-upper-element-galois-connection-Large-Poset :
    is-upper-element-galois-connection-Large-Poset P Q G y y' 
    sim-Large-Poset P
      ( map-upper-adjoint-galois-connection-Large-Poset P Q G y)
      ( y')
  sim-is-upper-element-galois-connection-Large-Poset u =
    sim-has-same-elements-principal-lower-set-element-Large-Poset P
      ( λ x 
        logical-equivalence-reasoning
          leq-Large-Poset P x _
           leq-Large-Poset Q _ y
            by inv-iff (adjoint-relation-galois-connection-Large-Poset G x y)
           leq-Large-Poset P x y'
            by u x)
```

### The lower adjoint of a Galois connection preserves all existing joins

```agda
module _
  {αP αQ : Level  Level} {βP βQ : Level  Level  Level}
  {γ δ : Level  Level}
  (P : Large-Poset αP βP) (Q : Large-Poset αQ βQ)
  (G : galois-connection-Large-Poset γ δ P Q)
  where

  private
    _≤-P_ :
      {l1 l2 : Level}  type-Large-Poset P l1  type-Large-Poset P l2 
      UU (βP l1 l2)
    _≤-P_ = leq-Large-Poset P

    _≤-Q_ :
      {l1 l2 : Level}  type-Large-Poset Q l1  type-Large-Poset Q l2 
      UU (βQ l1 l2)
    _≤-Q_ = leq-Large-Poset Q

    hom-f : hom-Large-Poset _ P Q
    hom-f = lower-adjoint-galois-connection-Large-Poset G

    f : {l : Level}  type-Large-Poset P l  type-Large-Poset Q (γ l)
    f = map-hom-Large-Poset P Q hom-f

    hom-g : hom-Large-Poset _ Q P
    hom-g = upper-adjoint-galois-connection-Large-Poset G

    g : {l : Level}  type-Large-Poset Q l  type-Large-Poset P (δ l)
    g = map-hom-Large-Poset Q P hom-g

    adjoint-relation-G :
      {l1 l2 : Level}
      (x : type-Large-Poset P l1) (y : type-Large-Poset Q l2) 
      leq-Large-Poset Q (f x) y 
      leq-Large-Poset P x (g y)
    adjoint-relation-G = adjoint-relation-galois-connection-Large-Poset G

  preserves-join-lower-adjoint-galois-connection-Large-Poset :
    {l1 l2 l3 : Level} {U : UU l1} (x : U  type-Large-Poset P l2)
    (y : type-Large-Poset P l3) 
    is-least-upper-bound-family-of-elements-Large-Poset P x y 
    is-least-upper-bound-family-of-elements-Large-Poset Q
      ( λ α  f (x α))
      ( f y)
  preserves-join-lower-adjoint-galois-connection-Large-Poset x y H z =
    logical-equivalence-reasoning
      ((α : _)  f (x α) ≤-Q z)
       ((α : _)  (x α) ≤-P g z)
        by iff-Π-iff-family  α  adjoint-relation-G (x α) z)
       y ≤-P g z by H (g z)
       f y ≤-Q z by inv-iff (adjoint-relation-G y z)
```