# Coproduct types

```agda
module foundation-core.coproduct-types where
```

<details><summary>Imports</summary>

```agda
open import foundation.universe-levels
```

</details>

## Idea

The {{#concept "coproduct" Disambiguation="of types"}} of two types `A` and `B`
can be thought of as the disjoint union of `A` and `B`.

## Definition

### Coproduct types

```agda
infixr 10 _+_

data _+_ {l1 l2 : Level} (A : UU l1) (B : UU l2) : UU (l1  l2)
  where
  inl : A  A + B
  inr : B  A + B
```

### The induction principle for coproduct types

```agda
ind-coproduct :
  {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} (C : A + B  UU l3) 
  ((x : A)  C (inl x))  ((y : B)  C (inr y)) 
  (t : A + B)  C t
ind-coproduct C f g (inl x) = f x
ind-coproduct C f g (inr x) = g x
```

### The recursion principle for coproduct types

```agda
rec-coproduct :
  {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {C : UU l3} 
  (A  C)  (B  C)  (A + B)  C
rec-coproduct {C = C} = ind-coproduct  _  C)
```