\begin{code}
{-# OPTIONS --cubical --safe #-}

module Snippets.Introduction where

open import Level
open import Path
\end{code}
%<*bot>
\begin{code}
data  : Type₀ where
\end{code}
%</bot>
%<*top>
\begin{code}
record  : Type₀ where
  constructor tt
\end{code}
%</top>
%<*bool>
\begin{code}
data Bool : Type₀ where
  true   : Bool
  false  : Bool
\end{code}
%</bool>
\begin{code}
if_then_else_ : Bool  A  A  A
if true  then t else f = t
if false then t else f = f
\end{code}
%<*sigma>
\begin{code}
record Σ (A : Type a) (B : A  Type b) : Type (a ℓ⊔ b) where
  constructor _,_
  field
    fst : A
    snd : B fst
\end{code}
%</sigma>
\begin{code}
 :  {a b} {A : Type a} (B : A  Type b)  Type (a ℓ⊔ b)
 {A = A} = Σ A

infixr 4.5 ∃-syntax
∃-syntax :  {a b} {A : Type a} (B : A  Type b)  Type (a ℓ⊔ b)
∃-syntax = 

syntax ∃-syntax  x  e) = ∃[ x ] e

infixr 4.5 Σ⦂-syntax
Σ⦂-syntax : (A : Type a) (B : A  Type b)  Type (a ℓ⊔ b)
Σ⦂-syntax = Σ

syntax Σ⦂-syntax t  x  e) = Σ[ x  t ] e

module SigmaSyntaxes {a b} {A : Type a} {B : A  Type b} where
  example₁ : Type _
  example₁ =
\end{code}
%<*sigma-syntax-1>
\begin{code}[inline]
    Σ A B
\end{code}
%</sigma-syntax-1>
\begin{code}
  example₂ : Type _
  example₂ =
\end{code}
%<*sigma-syntax-2>
\begin{code}[inline]%
     B
\end{code}
%</sigma-syntax-2>
\begin{code}
  example₃ : Type _
\end{code}
\begin{code}
  example₃ =
\end{code}
%<*sigma-syntax-3>
\begin{code}[inline]
    Σ[ x  A ] B x
\end{code}
%</sigma-syntax-3>
\begin{code}
  example₄ =
\end{code}
%<*sigma-syntax-4>
\begin{code}
    ∃[ x ] B x
\end{code}
%</sigma-syntax-4>
\begin{code}

Π : (A : Type a) (B : A  Type b)  Type _
Π A B = (x : A)  B x

∀′ : {A : Type a} (B : A  Type b)  Type _
∀′ {A = A} B = Π A B

infixr 4.5 ∀-syntax
∀-syntax :  {a b} {A : Type a} (B : A  Type b)  Type (a ℓ⊔ b)
∀-syntax = ∀′

syntax ∀-syntax  x  e) = ∀[ x ] e

infixr 4.5 Π⦂-syntax
Π⦂-syntax : (A : Type a) (B : A  Type b)  Type (a ℓ⊔ b)
Π⦂-syntax = Π

syntax Π⦂-syntax t  x  e) = Π[ x  t ] e

module PiSyntaxes {a b} {A : Type a} {B : A  Type b} where
  example₁ : Type _
  example₁ =
\end{code}
%<*pi-syntax-1>
\begin{code}
    Π A B
\end{code}
%</pi-syntax-1>
\begin{code}
  example₂ : Type _
  example₂ =
\end{code}
%<*pi-syntax-2>
\begin{code}
    (x : A)  B x
\end{code}
%</pi-syntax-2>
\begin{code}
  example₃ : Type _
\end{code}
\begin{code}
  example₃ =
\end{code}
%<*pi-syntax-3>
\begin{code}[inline]
     x  B x
\end{code}
%</pi-syntax-3>
\begin{code}
module SigmaDisjUnion where
  _⊎_ : Type a  Type a  Type _
\end{code}
%<*sigma-disj-union>
\begin{code}
  A  B = Σ[ x  Bool ] if x then A else B
\end{code}
%</sigma-disj-union>
%<*disj-union>
\begin{code}
data _⊎_ (A : Type a) (B : Type b) : Type (a ℓ⊔ b) where
  inl  : A   A  B
  inr  : B   A  B
\end{code}
%</disj-union>
\begin{code}
isContr : Type a  Type a
isProp : Type a  Type a
isSet : Type a  Type a
isGroupoid : Type a  Type a
\end{code}
%<*isContr>
\begin{code}
isContr A = Σ[ x  A ]  y  x  y
\end{code}
%</isContr>
%<*isProp>
\begin{code}
isProp A = (x y : A)  x  y
\end{code}
%</isProp>
%<*isSet>
\begin{code}
isSet A = (x y : A)  isProp (x  y)
\end{code}
%</isSet>
%<*isGroupoid>
\begin{code}
isGroupoid A = (x y : A)  isSet (x  y)
\end{code}
%</isGroupoid>
%<*fiber>
\begin{code}
fiber : (A  B)  B  Type _
fiber f y = ∃[ x ] (f x  y)
\end{code}
%</fiber>
%<*not>
\begin{code}
¬_ : Type a  Type a
¬ A = A  
\end{code}
%</not>