{-# OPTIONS --cubical-compatible #-} module Prelude where open import Agda.Primitive module šŸ˜ where data āŠ„ : Set where Ā¬_ : Set ā†’ Set Ā¬ A = A ā†’ āŠ„ open šŸ˜ public module šŸ™ where data āŠ¤ : Set where tt : āŠ¤ open šŸ™ public module šŸš where data Bool : Set where true : Bool false : Bool open šŸš public id : {l : Level} {A : Set l} ā†’ A ā†’ A id x = x module Nat where data ā„• : Set where zero : ā„• suc : ā„• ā†’ ā„• {-# BUILTIN NATURAL ā„• #-} infixl 6 _+_ _+_ : ā„• ā†’ ā„• ā†’ ā„• zero + n = n suc m + n = suc (m + n) open Nat public infix 4 _ā‰”_ data _ā‰”_ {l} {A : Set l} : (a b : A) ā†’ Set l where instance refl : {x : A} ā†’ x ā‰” x transport : {lā‚ lā‚‚ : Level} {A : Set lā‚} {x y : A} ā†’ (P : A ā†’ Set lā‚‚) ā†’ (p : x ā‰” y) ā†’ P x ā†’ P y transport {lā‚} {lā‚‚} {A} {x} {y} P refl = id infix 4 _ā‰¢_ _ā‰¢_ : āˆ€ {A : Set} ā†’ A ā†’ A ā†’ Set x ā‰¢ y = Ā¬ (x ā‰” y) module dependent-product where infixr 4 _,_ infixr 2 _Ɨ_ record Ī£ {lā‚ lā‚‚} (A : Set lā‚) (B : A ā†’ Set lā‚‚) : Set (lā‚ āŠ” lā‚‚) where constructor _,_ field fst : A snd : B fst open Ī£ {-# BUILTIN SIGMA Ī£ #-} syntax Ī£ A (Ī» x ā†’ B) = Ī£[ x āˆˆ A ] B _Ɨ_ : {l : Level} (A B : Set l) ā†’ Set l _Ɨ_ A B = Ī£ A (Ī» _ ā†’ B) open dependent-product public _āˆ˜_ : {A B C : Set} (g : B ā†’ C) ā†’ (f : A ā†’ B) ā†’ A ā†’ C (g āˆ˜ f) a = g (f a) _āˆ¼_ : {A B : Set} (f g : A ā†’ B) ā†’ Set _āˆ¼_ {A} f g = (x : A) ā†’ f x ā‰” g x