# Conjunction

```agda
module foundation.conjunction where
```

<details><summary>Imports</summary>

```agda
open import foundation.decidable-types
open import foundation.dependent-pair-types
open import foundation.logical-equivalences
open import foundation.propositional-truncations
open import foundation.universal-property-cartesian-product-types
open import foundation.universe-levels

open import foundation-core.cartesian-product-types
open import foundation-core.decidable-propositions
open import foundation-core.equivalences
open import foundation-core.function-types
open import foundation-core.propositions
```

</details>

## Idea

The
{{#concept "conjunction" Disambiguation="of propositions" WDID=Q191081 WD="logical conjunction" Agda=conjunction-Prop}}
`P ∧ Q` of two [propositions](foundation-core.propositions.md) `P` and `Q` is
the proposition that both `P` and `Q` hold and is thus defined by the
[cartesian product](foundation-core.cartesian-product-types.md) of their
underlying types

```text
  P ∧ Q := P × Q
```

The conjunction of two propositions satisfies the universal property of the
[meet](order-theory.greatest-lower-bounds-large-posets.md) in the
[locale of propositions](foundation.large-locale-of-propositions.md). This means
that any span of propositions over `P` and `Q` factor (uniquely) through the
conjunction

```text
           R
        /  ∶  \
      /    ∶    \
    ∨      ∨      ∨
  P <--- P ∧ Q ---> Q.
```

In other words, we have a
[logical equivalence](foundation.logical-equivalences.md)

```text
  (R → P) ∧ (R → Q) ↔ (R → P ∧ Q)
```

for every proposition `R`. In fact, `R` can be any type.

The
{{#concept "recursion principle" Disambiguation"of the conjunction of propositions" Agda=elimination-principle-conjunction-Prop}}
of the conjunction of propositions states that to define a function `P ∧ Q → R`
into a proposition `R`, or indeed any type, is equivalent to defining a function
`P → Q → R`.

## Definitions

### The conjunction

```agda
module _
  {l1 l2 : Level} (P : Prop l1) (Q : Prop l2)
  where

  conjunction-Prop : Prop (l1  l2)
  conjunction-Prop = product-Prop P Q

  type-conjunction-Prop : UU (l1  l2)
  type-conjunction-Prop = type-Prop conjunction-Prop

  is-prop-conjunction-Prop :
    is-prop type-conjunction-Prop
  is-prop-conjunction-Prop = is-prop-type-Prop conjunction-Prop

  infixr 15 _∧_
  _∧_ : Prop (l1  l2)
  _∧_ = conjunction-Prop
```

**Note**: The symbol used for the conjunction `_∧_` is the
[logical and](https://codepoints.net/U+2227) `∧` (agda-input: `\wedge` or
`\and`).

### The conjunction of decidable propositions

```agda
module _
  {l1 l2 : Level} (P : Decidable-Prop l1) (Q : Decidable-Prop l2)
  where

  is-decidable-conjunction-Decidable-Prop :
    is-decidable
      ( type-conjunction-Prop (prop-Decidable-Prop P) (prop-Decidable-Prop Q))
  is-decidable-conjunction-Decidable-Prop =
    is-decidable-product
      ( is-decidable-Decidable-Prop P)
      ( is-decidable-Decidable-Prop Q)

  conjunction-Decidable-Prop : Decidable-Prop (l1  l2)
  conjunction-Decidable-Prop =
    ( type-conjunction-Prop (prop-Decidable-Prop P) (prop-Decidable-Prop Q) ,
      is-prop-conjunction-Prop (prop-Decidable-Prop P) (prop-Decidable-Prop Q) ,
      is-decidable-conjunction-Decidable-Prop)
```

### The introduction rule and projections for the conjunction of propositions

While we define the introduction rule and projections for the conjunction below,
we advice users to use the standard pairing and projection functions for the
cartesian product types: `pair`, `pr1` and `pr2`.

```agda
module _
  {l1 l2 : Level} (P : Prop l1) (Q : Prop l2)
  where

  intro-conjunction-Prop : type-Prop P  type-Prop Q  type-conjunction-Prop P Q
  intro-conjunction-Prop = pair

  pr1-conjunction-Prop : type-conjunction-Prop P Q  type-Prop P
  pr1-conjunction-Prop = pr1

  pr2-conjunction-Prop : type-conjunction-Prop P Q  type-Prop Q
  pr2-conjunction-Prop = pr2
```

### The elimination principle of the conjunction

```agda
module _
  {l1 l2 : Level} (P : Prop l1) (Q : Prop l2)
  where

  ev-conjunction-Prop :
    {l : Level} (R : Prop l)  type-Prop (((P  Q)  R)  P  Q  R)
  ev-conjunction-Prop R = ev-pair

  elimination-principle-conjunction-Prop : UUω
  elimination-principle-conjunction-Prop =
    {l : Level} (R : Prop l)  has-converse (ev-conjunction-Prop R)
```

## Properties

### The conjunction satisfies the recursion principle of the conjunction

```agda
module _
  {l1 l2 : Level} (P : Prop l1) (Q : Prop l2)
  where

  elim-conjunction-Prop : elimination-principle-conjunction-Prop P Q
  elim-conjunction-Prop R f (p , q) = f p q
```

### The conjunction is the meet in the locale of propositions

```agda
module _
  {l1 l2 l3 : Level} (P : Prop l1) (Q : Prop l2) (C : UU l3)
  where

  map-distributive-conjunction-Prop :
    type-conjunction-Prop (function-Prop C P) (function-Prop C Q) 
    C  type-conjunction-Prop P Q
  map-distributive-conjunction-Prop (f , g) y = (f y , g y)

  map-inv-distributive-conjunction-Prop :
    (C  type-conjunction-Prop P Q) 
    type-conjunction-Prop (function-Prop C P) (function-Prop C Q)
  map-inv-distributive-conjunction-Prop f = (pr1  f , pr2  f)

  is-equiv-map-distributive-conjunction-Prop :
    is-equiv map-distributive-conjunction-Prop
  is-equiv-map-distributive-conjunction-Prop =
    is-equiv-has-converse
      ( conjunction-Prop (function-Prop C P) (function-Prop C Q))
      ( function-Prop C (conjunction-Prop P Q))
      ( map-inv-distributive-conjunction-Prop)

  distributive-conjunction-Prop :
    type-conjunction-Prop (function-Prop C P) (function-Prop C Q) 
    (C  type-conjunction-Prop P Q)
  distributive-conjunction-Prop =
    ( map-distributive-conjunction-Prop ,
      is-equiv-map-distributive-conjunction-Prop)

module _
  {l1 l2 l3 : Level} (P : Prop l1) (Q : Prop l2) (R : Prop l3)
  where

  is-greatest-binary-lower-bound-conjunction-Prop :
    type-Prop (((R  P)  (R  Q))  (R  P  Q))
  is-greatest-binary-lower-bound-conjunction-Prop =
    ( map-distributive-conjunction-Prop P Q (type-Prop R) ,
      map-inv-distributive-conjunction-Prop P Q (type-Prop R))
```

## See also

- The indexed counterpart to conjunction is
  [universal quantification](foundation.universal-quantification.md).

## 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}}

## External links

- [logical conjunction](https://ncatlab.org/nlab/show/logical+conjunction) at
  $n$Lab
- [Logical conjunction](https://en.wikipedia.org/wiki/Logical_conjunction) at
  Wikipedia