module A202401.Prelude where
open import Agda.Builtin.Equality public
using (_โก_ ; refl)
open import Agda.Builtin.Nat public
using (zero ; suc)
renaming (Nat to โ)
open import Agda.Builtin.Sigma public
using (ฮฃ ; _,_ ; fst ; snd)
open import Agda.Builtin.Unit public
using ()
renaming (โค to ๐ ; tt to unit)
open import Agda.Primitive public
using (Level ; _โ_ ; lzero ; lsuc ; Setฯ)
id : โ {๐} {X : Set ๐} โ X โ X
id x = x
infixr -1 _$_
_$_ : โ {๐ ๐} {X : Set ๐} {Y : X โ Set ๐} โ (โ x โ Y x) โ (โ x โ Y x)
f $ x = f x
flip : โ {๐ ๐ ๐} {X : Set ๐} {Y : Set ๐} {Z : X โ Y โ Set ๐} โ (โ x y โ Z x y) โ
(โ y x โ Z x y)
(flip f) y x = f x y
infixr 9 _โ_
_โ_ : โ {๐ ๐ ๐} {X : Set ๐} {Y : X โ Set ๐} {Z : โ {x} โ Y x โ Set ๐} โ
(โ {x} (y : Y x) โ Z y) โ (g : โ x โ Y x) โ
(โ x โ Z (g x))
(f โ g) x = f (g x)
infixr 9 _โจพ_
_โจพ_ : โ {๐ ๐ ๐} {X : Set ๐} {Y : X โ Set ๐} {Z : โ {x} โ Y x โ Set ๐} (g : โ x โ Y x) โ
(โ {x} (y : Y x) โ Z y) โ
(โ x โ Z (g x))
(g โจพ f) x = f (g x)
data Rist {๐} (X : Set ๐) : Set ๐ where
โ : Rist X
_,_ : โ (ฮพ : Rist X) (x : X) โ Rist X
infixr 2 _ร_
_ร_ : โ {๐ ๐} (X : Set ๐) (Y : Set ๐) โ Set (๐ โ ๐)
X ร Y = ฮฃ X ฮป _ โ Y
infixr 1 _โ_
data _โ_ {๐ ๐} (X : Set ๐) (Y : Set ๐) : Set (๐ โ ๐) where
left : โ (x : X) โ X โ Y
right : โ (y : Y) โ X โ Y
recโ : โ {๐} {X : Set ๐} โ โ โ X โ (โ โ X โ X) โ X
recโ zero z s = z
recโ (suc n) z s = s n (recโ n z s)
record Irrelevant {๐} (X : Set ๐) : Set ๐ where
field .irrelevant : X
open Irrelevant public
private
data Empty : Set where
๐ : Set
๐ = Irrelevant Empty
{-# DISPLAY Irrelevant Empty = ๐ #-}
abort : โ {๐} {X : Set ๐} โ ๐ โ X
abort ()
infix 3 ยฌ_
ยฌ_ : โ {๐} โ Set ๐ โ Set ๐
ยฌ X = X โ ๐
_โฏ_ : โ {๐ ๐} {X : Set ๐} {Y : Set ๐} โ X โ ยฌ X โ Y
x โฏ ยฌx = abort (ยฌx x)
data Dec {๐} (X : Set ๐) : Set ๐ where
yes : โ (x : X) โ Dec X
no : โ (ยฌx : ยฌ X) โ Dec X
โก-syntax : โ {๐} (X : Set ๐) โ X โ X โ Set ๐
โก-syntax X = _โก_
infix 4 โก-syntax
syntax โก-syntax X x xโฒ = x โก xโฒ :> X
infix 9 _โปยน
sym _โปยน : โ {๐} {X : Set ๐} {x xโฒ : X} โ x โก xโฒ โ xโฒ โก x
sym refl = refl
_โปยน = sym
infixr 4 _โฎ_
trans _โฎ_ : โ {๐} {X : Set ๐} {x xโฒ xโณ : X} โ x โก xโฒ โ xโฒ โก xโณ โ x โก xโณ
trans refl eq = eq
_โฎ_ = trans
subst : โ {๐ ๐} {X : Set ๐} (Y : X โ Set ๐) {x xโฒ} โ x โก xโฒ โ Y x โ Y xโฒ
subst Y refl y = y
transport : โ {๐} {X Y : Set ๐} โ X โก Y โ X โ Y
transport = subst id
infixl 9 _&_
cong _&_ : โ {๐ ๐} {X : Set ๐} {Y : Set ๐} (f : X โ Y) {x xโฒ} โ x โก xโฒ โ f x โก f xโฒ
cong f refl = refl
_&_ = cong
congโ : โ {๐ ๐ ๐} {X : Set ๐} {Y : Set ๐} {Z : Set ๐} (f : X โ Y โ Z) {x xโฒ y yโฒ} โ x โก xโฒ โ
y โก yโฒ โ
f x y โก f xโฒ yโฒ
congโ f refl refl = refl
infixl 8 _โ_
_โ_ : โ {๐ ๐} {X : Set ๐} {Y : Set ๐} {f g : X โ Y} {x xโฒ} โ f โก g โ x โก xโฒ โ f x โก g xโฒ
refl โ refl = refl
congapp : โ {๐ ๐} {X : Set ๐} {Y : X โ Set ๐} {f g : โ x โ Y x} โ f โก g โ (โ x โ f x โก g x)
congapp refl x = refl
congappโฒ : โ {๐ ๐} {X : Set ๐} {Y : X โ Set ๐} {f g : โ {x} โ Y x} โ f โก g :> (โ {x} โ Y x) โ
(โ {x} โ f {x} โก g {x})
congappโฒ refl {x} = refl
FunExt : Setฯ
FunExt = โ {๐ ๐} {X : Set ๐} {Y : X โ Set ๐} {f g : โ x โ Y x} โ (โ x โ f x โก g x) โ f โก g
FunExtโฒ : Setฯ
FunExtโฒ = โ {๐ ๐} {X : Set ๐} {Y : X โ Set ๐} {f g : โ {x} โ Y x} โ (โ {x} โ f {x} โก g {x}) โ
f โก g :> (โ {x} โ Y x)
implify : FunExt โ FunExtโฒ
implify โ eq = (ฮป f {x} โ f x) & โ (ฮป x โ eq {x})
uniโก : โ {๐} {X : Set ๐} {x xโฒ : X} (eq eqโฒ : x โก xโฒ) โ eq โก eqโฒ
uniโก refl refl = refl
uni๐ : โ (z zโฒ : ๐) โ z โก zโฒ
uni๐ () ()
uniยฌ : โ {๐} {X : Set ๐} (f g : ยฌ X) โ f โก g
uniยฌ f g = refl
module _ (โ : FunExt) where
uniโ : โ {๐ ๐} {X : Set ๐} {Y : Set ๐} (uniY : โ y yโฒ โ y โก yโฒ) (f g : X โ Y) โ f โก g
uniโ uniY f g = โ ฮป x โ uniY (f x) (g x)
module โก-Reasoning {๐} {X : Set ๐} where
infix 1 begin_
begin_ : โ {x xโฒ : X} โ x โก xโฒ โ x โก xโฒ
begin_ eq = eq
infixr 2 _โกโจโฉ_
_โกโจโฉ_ : โ (x {xโฒ} : X) โ x โก xโฒ โ x โก xโฒ
x โกโจโฉ eq = eq
infixr 2 _โกโจ_โฉ_
_โกโจ_โฉ_ : โ (x {xโฒ xโณ} : X) โ x โก xโฒ โ xโฒ โก xโณ โ x โก xโณ
x โกโจ eq โฉ eqโฒ = trans eq eqโฒ
infixr 2 _โกหโจ_โฉ_
_โกหโจ_โฉ_ : โ (x {xโฒ xโณ} : X) โ xโฒ โก x โ xโฒ โก xโณ โ x โก xโณ
x โกหโจ eq โฉ eqโฒ = trans (sym eq) eqโฒ
infix 3 _โ
_โ : โ (x : X) โ x โก x
_โ _ = refl
infix 4 _โ
_
data _โ
_ {๐} {X : Set ๐} (x : X) : โ {๐} {Y : Set ๐} โ Y โ Set ๐ where
refl : x โ
x
โ
โโก : โ {๐} {X : Set ๐} {x xโฒ : X} โ x โ
xโฒ โ x โก xโฒ
โ
โโก refl = refl
โกโโ
: โ {๐} {X : Set ๐} {x xโฒ : X} โ x โก xโฒ โ x โ
xโฒ
โกโโ
refl = refl
hcong : โ {๐ ๐} {X : Set ๐} {Y : X โ Set ๐} (f : โ x โ Y x) {x xโฒ} โ x โ
xโฒ โ f x โ
f xโฒ
hcong f refl = refl
hcongโ : โ {๐ ๐ ๐} {X : Set ๐} {Y : X โ Set ๐} {Z : โ x โ Y x โ Set ๐}
(f : โ x โ (y : Y x) โ Z x y) {x xโฒ y yโฒ} โ x โ
xโฒ โ y โ
yโฒ โ
f x y โ
f xโฒ yโฒ
hcongโ f refl refl = refl