{-# OPTIONS --safe #-}
module Multiset.Util where
open import Cubical.Foundations.Prelude
open import Cubical.Foundations.Equiv
open import Cubical.Foundations.Function using (_∘_)
open import Cubical.Foundations.Univalence using (ua)
open import Cubical.Data.Empty as Empty using (⊥)
open import Cubical.Data.Unit as Unit using (Unit ; tt)
open import Cubical.Data.Sigma as Sigma using (_×_)
private
variable
ℓ ℓ' : Level
A : Type ℓ
B : Type ℓ'
Path→cong : ∀ {ℓ ℓ' ℓ''} {A : (i : I) → Type ℓ}
{B : (i : I) → Type ℓ'}
{C : (i : I) → Type ℓ''}
{f₀ : A i0 → B i0} {f₁ : A i1 → B i1}
(F : {i : I} → B i → C i)
(p : PathP (λ i → A i → B i) f₀ f₁)
→ PathP (λ i → A i → C i) (F {i0} ∘ f₀) (F {i1} ∘ f₁)
Path→cong F p = λ i x → F (p i x)
ua→PathP : ∀ {ℓ'} {A₀ A₁ : Type ℓ} {X : Type ℓ'}
→ (e : A₀ ≃ A₁)
→ (f₀ : A₀ → X)
→ (f₁ : A₁ → X)
→ Type _
ua→PathP {X = X} e f₀ f₁ = PathP (λ i → ua e i → X) f₀ f₁
module _ {ℓ' : Level} {Y : ⊥ → Type ℓ'} where
isPropΠ⊥ : isProp ((k : ⊥) → Y k)
isPropΠ⊥ = isContr→isProp Empty.isContrΠ⊥
Π⊥≡elim : (v : (k : ⊥) → Y k) → Empty.elim ≡ v
Π⊥≡elim v _ ()
the-syntax : (A : Type ℓ) → (a : A) → A
the-syntax _ a = a
infix 0 the-syntax
syntax the-syntax A a = a ∶ A
!_ : A → Unit
! a = tt
infixr 80 !_
isInjective : (f : A → B) → Type _
isInjective f = ∀ x y → f x ≡ f y → x ≡ y
isSurjective : (f : A → B) → Type _
isSurjective {B = B} f = (b : B) → fiber f b