# Mere logical equivalences
```agda
module foundation.mere-logical-equivalences where
```
<details><summary>Imports</summary>
```agda
open import foundation.conjunction
open import foundation.dependent-pair-types
open import foundation.inhabited-types
open import foundation.logical-equivalences
open import foundation.mere-functions
open import foundation.propositional-truncations
open import foundation.universe-levels
open import foundation-core.cartesian-product-types
open import foundation-core.equivalences
open import foundation-core.function-types
open import foundation-core.propositions
```
</details>
## Idea
Two types `A` and `B` are
{{#concept "merely logically equivalent" Disambiguation="types" Agda=mere-iff}}
if the type of [logical equivalences](foundation.logical-equivalences.md)
between `A` and `B` is [inhabited](foundation.inhabited-types.md).
```text
mere-iff A B := ║(A ↔ B)║₋₁
```
## Definitions
### Mere logical equivalence of types
```agda
module _
{l1 l2 : Level} (A : UU l1) (B : UU l2)
where
prop-mere-iff : Prop (l1 ⊔ l2)
prop-mere-iff = trunc-Prop (A ↔ B)
mere-iff : UU (l1 ⊔ l2)
mere-iff = type-Prop prop-mere-iff
is-prop-mere-iff : is-prop mere-iff
is-prop-mere-iff = is-prop-type-Prop prop-mere-iff
```
## Properties
### Mere logical equivalence is a reflexive relation
```agda
module _
{l : Level} (A : UU l)
where
refl-mere-iff : mere-iff A A
refl-mere-iff = unit-trunc-Prop id-iff
```
### Mere logical equivalence is a transitive relation
```agda
module _
{l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {C : UU l3}
where
transitive-mere-iff : mere-iff B C → mere-iff A B → mere-iff A C
transitive-mere-iff |g| =
rec-trunc-Prop
( prop-mere-iff A C)
( λ f →
rec-trunc-Prop
( prop-mere-iff A C)
( λ g → unit-trunc-Prop (g ∘iff f))
( |g|))
```
### Mere logical equivalence is a symmetric relation
```agda
module _
{l1 l2 : Level} {A : UU l1} {B : UU l2}
where
symmetric-mere-iff : mere-iff A B → mere-iff B A
symmetric-mere-iff =
rec-trunc-Prop (prop-mere-iff B A) (unit-trunc-Prop ∘ inv-iff)
```
### Merely logically equivalent types are coinhabited
If `A` and `B` are merely logically equivalent then they are
[coinhabited](foundation.coinhabited-pairs-of-types.md).
```agda
module _
{l1 l2 : Level} (A : UU l1) (B : UU l2)
where
ev-forward-mere-iff' : mere-iff A B → A → is-inhabited B
ev-forward-mere-iff' |f| a =
rec-trunc-Prop
( trunc-Prop B)
( λ f → unit-trunc-Prop (forward-implication f a))
( |f|)
ev-forward-mere-iff : mere-iff A B → is-inhabited A → is-inhabited B
ev-forward-mere-iff |f| =
rec-trunc-Prop (trunc-Prop B) (ev-forward-mere-iff' |f|)
ev-backward-mere-iff' : mere-iff A B → B → is-inhabited A
ev-backward-mere-iff' |f| b =
rec-trunc-Prop
( trunc-Prop A)
( λ f → unit-trunc-Prop (backward-implication f b))
( |f|)
ev-backward-mere-iff : mere-iff A B → is-inhabited B → is-inhabited A
ev-backward-mere-iff |f| =
rec-trunc-Prop (trunc-Prop A) (ev-backward-mere-iff' |f|)
is-coinhabited-mere-iff : mere-iff A B → is-inhabited A ↔ is-inhabited B
is-coinhabited-mere-iff |f| =
( ev-forward-mere-iff |f| , ev-backward-mere-iff |f|)
```
### Merely logically equivalent types have bidirectional mere functions
If `A` and `B` are merely logically equivalent then we have a mere function from
`A` to `B` and a mere function from `B` to `A`.
```agda
module _
{l1 l2 : Level} {A : UU l1} {B : UU l2}
where
forward-mere-function-mere-iff : mere-iff A B → mere-function A B
forward-mere-function-mere-iff =
rec-trunc-Prop
( prop-mere-function A B)
( unit-trunc-Prop ∘ forward-implication)
backward-mere-function-mere-iff : mere-iff A B → mere-function B A
backward-mere-function-mere-iff =
rec-trunc-Prop
( prop-mere-function B A)
( unit-trunc-Prop ∘ backward-implication)
```
### Mere logical equivalence is equivalent to having bidirectional mere functions
For all types we have the equivalence
```text
(mere-iff A B) ≃ (mere-function A B × mere-function B A).
```
```agda
module _
{l1 l2 : Level} {A : UU l1} {B : UU l2}
where
compute-mere-iff :
mere-iff A B ≃ mere-function A B × mere-function B A
compute-mere-iff = equiv-product-trunc-Prop (A → B) (B → A)
```
## See also
- [Mere functions](foundation.mere-functions.md)
- [Coinhabitedness](foundation.coinhabited-pairs-of-types.md) is a related but
weaker notion than mere logical equivalence.