# Well-founded relations

```agda
module order-theory.well-founded-relations where
```

<details><summary>Imports</summary>

```agda
open import foundation.action-on-identifications-functions
open import foundation.binary-relations
open import foundation.dependent-pair-types
open import foundation.function-extensionality
open import foundation.identity-types
open import foundation.negation
open import foundation.propositions
open import foundation.universe-levels

open import order-theory.accessible-elements-relations
```

</details>

## Idea

Given a type `X` equipped with a
[binary relation](foundation.binary-relations.md) `_ϵ_ : X → X → Type` we say
that the relation `_ϵ_` is **well-founded** if all elements of `X` are
[accessible](order-theory.accessible-elements-relations.md) with respect to
`_ϵ_`.

Well-founded relations satisfy an induction principle: In order to construct an
element of `P x` for all `x : X` it suffices to construct an element of `P y`
for all elements `y ϵ x`. More precisely, the **well-founded induction
principle** is a function

```text
  (x : X) → ((y : Y) → y ϵ x → P y) → P x.
```

## Definitions

### The predicate of being a well-founded relation

```agda
module _
  {l1 l2 : Level} {X : UU l1} (_ϵ_ : Relation l2 X)
  where

  is-well-founded-prop-Relation : Prop (l1  l2)
  is-well-founded-prop-Relation =
    Π-Prop X (is-accessible-element-prop-Relation _ϵ_)

  is-well-founded-Relation : UU (l1  l2)
  is-well-founded-Relation = (x : X)  is-accessible-element-Relation _ϵ_ x
```

### Well-founded relations

```agda
Well-Founded-Relation : {l1 : Level} (l2 : Level)  UU l1  UU (l1  lsuc l2)
Well-Founded-Relation l X = Σ (Relation l X) is-well-founded-Relation

module _
  {l1 l2 : Level} {X : UU l1} (R : Well-Founded-Relation l2 X)
  where

  rel-Well-Founded-Relation : Relation l2 X
  rel-Well-Founded-Relation = pr1 R

  is-well-founded-Well-Founded-Relation :
    is-well-founded-Relation rel-Well-Founded-Relation
  is-well-founded-Well-Founded-Relation = pr2 R
```

## Properties

### Well-founded induction

```agda
module _
  {l1 l2 l3 : Level} {X : UU l1} ((_ϵ_ , w) : Well-Founded-Relation l2 X)
  (P : X  UU l3)
  where

  ind-Well-Founded-Relation :
    ({x : X}  ({y : X}  y ϵ x  P y)  P x)  (x : X)  P x
  ind-Well-Founded-Relation IH x =
    ind-accessible-element-Relation _ϵ_ P  _  IH) (w x)
```

### A well-founded relation is asymmetric (and thus irreflexive)

```agda
module _
  {l1 l2 : Level} {X : UU l1} ((_ϵ_ , w) : Well-Founded-Relation l2 X)
  where

  is-asymmetric-Well-Founded-Relation :
    is-asymmetric _ϵ_
  is-asymmetric-Well-Founded-Relation x y =
    is-asymmetric-is-accessible-element-Relation _ϵ_ (w x)

module _
  {l1 l2 : Level} {X : UU l1} (ϵ : Well-Founded-Relation l2 X)
  where

  is-irreflexive-Well-Founded-Relation :
    is-irreflexive (rel-Well-Founded-Relation ϵ)
  is-irreflexive-Well-Founded-Relation =
    is-irreflexive-is-asymmetric
      ( rel-Well-Founded-Relation ϵ)
      ( is-asymmetric-Well-Founded-Relation ϵ)
```