
module LF where

data Zero : Set where

record One : Set where

★ : One
★ = record {}

One-elim : (C : One -> Set) -> C ★ -> (a : One) -> C a
One-elim C h _ = h

One-elim₁ : (C : One -> Set1) -> C ★ -> (a : One) -> C a
One-elim₁ C h _ = h

-- data One' : Set1 where
--   ★' : One'

data Two : Set where
  ★₀ : Two
  ★₁ : Two

case₂ : {A : Set1} -> Two -> A -> A -> A
case₂ ★₀ x y = x
case₂ ★₁ x y = y

data _+_ (A : Set)(B : Set) : Set where
  inl : A -> A + B
  inr : B -> A + B

record _×_ (A : Set)(B : A -> Set) : Set where
  field
    π₀ : A
    π₁ : B π₀

open _×_ public

_,_ : {A : Set}{B : A -> Set}(a : A) -> B a -> A × B
x , y = record { π₀ = x; π₁ = y }

_*_ : (A B : Set) -> Set
A * B = A × \_ -> B

-- data _×'_ (A : Set)(B : A -> Set1) : Set1 where
--   _,'_ : (a : A) -> B a -> A ×' B
--
-- π₀' : {A : Set}{B : A -> Set1} -> A ×' B -> A
-- π₀' (a ,' b) = a
--
-- π₁' : {A : Set}{B : A -> Set1}(p : A ×' B) -> B (π₀' p)
-- π₁' (a ,' b) = b

