Ayberk Tosun, 10 March 2021. Based in part by the `Cubical.Functions.Logic` module UF.of `agda/cubical`. \begin{code} {-# OPTIONS --without-K --exact-split --safe --auto-inline #-} module UF.Logic where open import MLTT.Spartan open import UF.Subsingletons open import UF.PropTrunc open import UF.FunExt open import UF.Subsingletons-FunExt \end{code} \section{Conjunction} \begin{code} module Conjunction where _∧_ : Ω 𝓤 → Ω 𝓥 → Ω (𝓤 ⊔ 𝓥) P ∧ Q = (P holds × Q holds) , γ where γ = ×-is-prop (holds-is-prop P) (holds-is-prop Q) infixr 4 _∧_ \end{code} \section{Universal quantification} \begin{code} module Universal (fe : Fun-Ext) where ∀[∶]-syntax : (I : 𝓤 ̇) → (I → Ω 𝓥) → Ω (𝓤 ⊔ 𝓥) ∀[∶]-syntax I P = ((i : I) → P i holds) , γ where γ : is-prop ((i : I) → P i holds) γ = Π-is-prop fe (holds-is-prop ∘ P) ∀[]-syntax : {I : 𝓤 ̇} → (I → Ω 𝓥) → Ω (𝓤 ⊔ 𝓥) ∀[]-syntax {I = I} P = ∀[∶]-syntax I P infixr -1 ∀[∶]-syntax infixr -1 ∀[]-syntax syntax ∀[∶]-syntax I (λ i → e) = Ɐ i ∶ I , e syntax ∀[]-syntax (λ i → e) = Ɐ i , e \end{code} \section{Implication} \begin{code} module Implication (fe : Fun-Ext) where open Universal fe infixr 3 _⇒_ _⇒_ : Ω 𝓤 → Ω 𝓥 → Ω (𝓤 ⊔ 𝓥) P ⇒ Q = (P holds → Q holds) , γ where γ : is-prop (P holds → Q holds) γ = Π-is-prop fe λ _ → holds-is-prop Q open Conjunction _↔_ : Ω 𝓤 → Ω 𝓥 → Ω (𝓤 ⊔ 𝓥) P ↔ Q = (P ⇒ Q) ∧ (Q ⇒ P) infixr 3 _↔_ \end{code} \section{Disjunction} \begin{code} module Disjunction (pt : propositional-truncations-exist) where open propositional-truncations-exist pt _∨_ : Ω 𝓤 → Ω 𝓥 → Ω (𝓤 ⊔ 𝓥) P ∨ Q = ∥ P holds + Q holds ∥ , ∥∥-is-prop infix 3 _∨_ \end{code} \section{Truncation} \begin{code} module Truncation (pt : propositional-truncations-exist) where open PropositionalTruncation pt ∥_∥Ω : 𝓤 ̇ → Ω 𝓤 ∥ A ∥Ω = ∥ A ∥ , ∥∥-is-prop \end{code} \section{Existential quantification} \begin{code} module Existential (pt : propositional-truncations-exist) where open Truncation pt ∃[∶]-syntax : (I : 𝓤 ̇) → (I → 𝓥 ̇) → Ω (𝓤 ⊔ 𝓥) ∃[∶]-syntax I A = ∥ Σ i ꞉ I , A i ∥Ω ∃[]-syntax : {I : 𝓤 ̇} → (I → 𝓥 ̇) → Ω (𝓤 ⊔ 𝓥) ∃[]-syntax {I = I} P = ∃[∶]-syntax I P infixr -1 ∃[∶]-syntax infixr -1 ∃[]-syntax syntax ∃[∶]-syntax I (λ i → e) = Ǝ i ∶ I , e syntax ∃[]-syntax (λ i → e) = Ǝ i , e \end{code} \section{Negation of equality} \begin{code} module Negation-of-equality (fe : Fun-Ext) where _≢_ : {X : 𝓤 ̇ } → X → X → Ω 𝓤 x ≢ y = (x ≠ y) , Π-is-prop fe (λ _ → 𝟘-is-prop) \end{code} \section{A module for importing all combinators} \begin{code} module AllCombinators (pt : propositional-truncations-exist) (fe : Fun-Ext) where open Conjunction public open Universal fe public open Implication fe public open Disjunction pt public open Existential pt public open Truncation pt public open Negation-of-equality fe public \end{code}