54 lines
1.8 KiB
Text
54 lines
1.8 KiB
Text
namespace pair {
|
||
|
||
def0 Σ : (A : ★) → (0.A → ★) → ★ = λ A B ⇒ (x : A) × B x;
|
||
|
||
def fst : 0.(A : ★) → 0.(B : 0.A → ★) → ω.(Σ A B) → A =
|
||
λ A B p ⇒ caseω p return A of { (x, _) ⇒ x };
|
||
|
||
def snd : 0.(A : ★) → 0.(B : 0.A → ★) → ω.(p : Σ A B) → B (fst A B p) =
|
||
λ A B p ⇒ caseω p return p' ⇒ B (fst A B p') of { (_, y) ⇒ y };
|
||
|
||
def uncurry :
|
||
0.(A : ★) → 0.(B : 0.A → ★) → 0.(C : 0.(x : A) → 0.(B x) → ★) →
|
||
(f : (x : A) → (y : B x) → C x y) →
|
||
(p : Σ A B) → C (fst A B p) (snd A B p) =
|
||
λ A B C f p ⇒
|
||
case p return p' ⇒ C (fst A B p') (snd A B p') of { (x, y) ⇒ f x y };
|
||
|
||
def uncurry' :
|
||
0.(A B C : ★) → (A → B → C) → (A × B) → C =
|
||
λ A B C ⇒ uncurry A (λ _ ⇒ B) (λ _ _ ⇒ C);
|
||
|
||
def curry :
|
||
0.(A : ★) → 0.(B : 0.A → ★) → 0.(C : 0.(Σ A B) → ★) →
|
||
(f : (p : Σ A B) → C p) → (x : A) → (y : B x) → C (x, y) =
|
||
λ A B C f x y ⇒ f (x, y);
|
||
|
||
def curry' :
|
||
0.(A B C : ★) → ((A × B) → C) → A → B → C =
|
||
λ A B C ⇒ curry A (λ _ ⇒ B) (λ _ ⇒ C);
|
||
|
||
def0 fst-snd :
|
||
(A : ★) → (B : 0.A → ★) →
|
||
(p : Σ A B) → p ≡ (fst A B p, snd A B p) : Σ A B =
|
||
λ A B p ⇒
|
||
case p
|
||
return p' ⇒ p' ≡ (fst A B p', snd A B p') : Σ A B
|
||
of { (x, y) ⇒ δ 𝑖 ⇒ (x, y) };
|
||
|
||
def map :
|
||
0.(A A' : ★) →
|
||
0.(B : 0.A → ★) → 0.(B' : 0.A' → ★) →
|
||
(f : A → A') → (g : 0.(x : A) → (B x) → B' (f x)) →
|
||
(Σ A B) → Σ A' B' =
|
||
λ A A' B B' f g p ⇒
|
||
case p return Σ A' B' of { (x, y) ⇒ (f x, g x y) };
|
||
|
||
def map' : 0.(A A' B B' : ★) → (A → A') → (B → B') → (A × B) → A' × B' =
|
||
λ A A' B B' f g ⇒ map A A' (λ _ ⇒ B) (λ _ ⇒ B') f (λ _ ⇒ g);
|
||
|
||
}
|
||
|
||
def0 Σ = pair.Σ;
|
||
def fst = pair.fst;
|
||
def snd = pair.snd;
|