------------------------------------------------------------------------ -- The Agda standard library -- -- Relationships between properties of functions where the equality -- over both the domain and codomain are assumed to be setoids. ------------------------------------------------------------------------ {-# OPTIONS --cubical-compatible --safe #-} open import Relation.Binary.Bundles using (Setoid) module Function.Consequences.Setoid {a b ℓ₁ ℓ₂} (S : Setoid a ℓ₁) (T : Setoid b ℓ₂) where open import Function.Definitions open import Relation.Nullary.Negation.Core import Function.Consequences as C private open module S = Setoid S using () renaming (Carrier to A; _≈_ to ≈₁) open module T = Setoid T using () renaming (Carrier to B; _≈_ to ≈₂) variable f : A B f⁻¹ : B A ------------------------------------------------------------------------ -- Injective contraInjective : Injective ≈₁ ≈₂ f {x y} ¬ (≈₁ x y) ¬ (≈₂ (f x) (f y)) contraInjective = C.contraInjective ≈₂ ------------------------------------------------------------------------ -- Inverseˡ inverseˡ⇒surjective : Inverseˡ ≈₁ ≈₂ f f⁻¹ Surjective ≈₁ ≈₂ f inverseˡ⇒surjective = C.inverseˡ⇒surjective ≈₂ ------------------------------------------------------------------------ -- Inverseʳ inverseʳ⇒injective : f Inverseʳ ≈₁ ≈₂ f f⁻¹ Injective ≈₁ ≈₂ f inverseʳ⇒injective f = C.inverseʳ⇒injective ≈₂ f T.refl S.sym S.trans ------------------------------------------------------------------------ -- Inverseᵇ inverseᵇ⇒bijective : Inverseᵇ ≈₁ ≈₂ f f⁻¹ Bijective ≈₁ ≈₂ f inverseᵇ⇒bijective = C.inverseᵇ⇒bijective ≈₂ T.refl S.sym S.trans ------------------------------------------------------------------------ -- StrictlySurjective surjective⇒strictlySurjective : Surjective ≈₁ ≈₂ f StrictlySurjective ≈₂ f surjective⇒strictlySurjective = C.surjective⇒strictlySurjective ≈₂ S.refl strictlySurjective⇒surjective : Congruent ≈₁ ≈₂ f StrictlySurjective ≈₂ f Surjective ≈₁ ≈₂ f strictlySurjective⇒surjective = C.strictlySurjective⇒surjective T.trans ------------------------------------------------------------------------ -- StrictlyInverseˡ inverseˡ⇒strictlyInverseˡ : Inverseˡ ≈₁ ≈₂ f f⁻¹ StrictlyInverseˡ ≈₂ f f⁻¹ inverseˡ⇒strictlyInverseˡ = C.inverseˡ⇒strictlyInverseˡ ≈₁ ≈₂ S.refl strictlyInverseˡ⇒inverseˡ : Congruent ≈₁ ≈₂ f StrictlyInverseˡ ≈₂ f f⁻¹ Inverseˡ ≈₁ ≈₂ f f⁻¹ strictlyInverseˡ⇒inverseˡ = C.strictlyInverseˡ⇒inverseˡ T.trans ------------------------------------------------------------------------ -- StrictlyInverseʳ inverseʳ⇒strictlyInverseʳ : Inverseʳ ≈₁ ≈₂ f f⁻¹ StrictlyInverseʳ ≈₁ f f⁻¹ inverseʳ⇒strictlyInverseʳ = C.inverseʳ⇒strictlyInverseʳ ≈₁ ≈₂ T.refl strictlyInverseʳ⇒inverseʳ : Congruent ≈₂ ≈₁ f⁻¹ StrictlyInverseʳ ≈₁ f f⁻¹ Inverseʳ ≈₁ ≈₂ f f⁻¹ strictlyInverseʳ⇒inverseʳ = C.strictlyInverseʳ⇒inverseʳ S.trans