# 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) ```