# Lecture 4: Streams

Streams:
$\cfrac{Γ, c: C ⊢ A: U\quad Γ, c: C ⊢ t:A\quad Γ ⊢ v: C\quad Γ ⊢ C: U\quad Γ, s: \prod_{c:C} Stream \, A, c:C ⊢ U: Stream \, A}{Γ ⊢ \lbrace hd=t; \; tl/s = u \rbrace_{/c} \, v : Stream \, A}$
• $hd \lbrace hd=t; \; tl/s = u \rbrace_{/c}^v ⟶ t[c:=v]$
• $tl \lbrace hd=t; \; tl/s = u \rbrace_{/c}^v ⟶ u[c := v]\left[s := λx. \lbrace hd=t; \; tl/s = u \rbrace_{/c} \, x\right]$

Exs:

• $prod \, n \, A = \underbrace{A × ⋯ × A}_{n \text{ times}}$
$number\_generator: Nat ⟶ Stream \, Nat$ $numbers ≝ \lbrace hd=c; \; tl/s = s (succ \, c) \rbrace_c \, zero : Stream \, Nat$
• $hd \, numbers ⟶ zero$
• $tl numbers ⟶ (λx. \lbrace hd = c; \; tl/s = s \, (succ \, c) \rbrace_c \, x) (succ \, zero)$
• $hd \, tl \, numbers ⟶ succ \, zero$
• $tl \, tl \, number ⟶ \lbrace hd=c; \; tl/s = s \, (succ \, c) \rbrace_c \, (succ \, (succ \, zero))$

1. a function which takes a stream of $Nat$ and multiplies all elements by $2$
2. a function which takes two streams of $Nat$ and add all elements pointwise.

### 1.

$multstream ≝ λs: Stream \, Nat. \lbrace hd=(hd \, c) × 2; \; tl/s' = s' \, (tl \, c) \rbrace_{/c} \, s$

Indeed:

$hd \Big(multstream \, \lbrace hd=3; \; tl=\lbrace hd=7; \; tl=\lbrace hd=2; \; ⋯ \rbrace \rbrace \rbrace \Big) ⟶ 6$ $tl \, \Big(multstream \, \lbrace hd=3; \; tl=\lbrace hd=7; \; tl=\lbrace hd=2; \; ⋯ \rbrace \rbrace \rbrace \Big) ⟶ \lbrace hd=(hd \, c) × 2; \; tl/s' = s' \, (tl \, c) \rbrace_{/c} \, \lbrace hd = 7; ⋯ \rbrace$

### 2.

$λ s_1: Stream \, Nat, s_2: Stream \, Nat.\\ \lbrace hd: hd \, c.1 + hd \, c.2; \quad tl/s' = s' \, (tl \, c.1, tl \, c.2) \rbrace_{/c} \, (s_1, s_2)$

## $Σ$-type as a co-inductive type

A $Σ$-type is just an instance of a negative type, i.e a co-inductive type without recursivity.

$\sum\limits_{ a:A } B$ $\cfrac{Γ ⊢ A: U_i \quad Γ, a:A ⊢ B: U_j}{Γ ⊢ \underbrace{\lbrace fst: A; snd: B \, (fst) \rbrace}_{\text{an alternative notation for }\sum\limits_{ a:A } B }: U_{\max(i, j)}}$

Destructors:

$\cfrac{Γ ⊢ t: \sum\limits_{ a:A } B}{Γ ⊢ fst \, t: A}$

and

$\cfrac{Γ ⊢ t: \sum\limits_{ a:A } B}{Γ ⊢ snd \, t: B \, (fst \, t)}$ $\cfrac{Γ ⊢ t: A \quad Γ ⊢ u: B(t)}{Γ ⊢ \underbrace{\lbrace fst=t; snd=u \rbrace}_{\text{ also denoted by } (t, u)}: \sum\limits_{ a:A } B}$
• $fst \, (t, u) = fst \, \lbrace fst=t; snd=u \rbrace ⟶ t$
• $snd \, (t, u) = snd \, \lbrace fst=t; snd=u \rbrace ⟶ u$

### $η$-rule for $Σ$-types

$v ≡ \underbrace{(v.1, v.2)}_{\text{surjective pairing, a.k.a } η\text{-rule for } Σ\text{ types}}\\ v ≡ \lbrace fst = \underbrace{fst}_{\text{just syntactic sugar}} \, v; snd = snd \, v\rbrace$

# co-Nat

CoNat:

like Nat, but with an infinite element $∞$: it’s the largest set generated by $zero$ and $succ$, whereas Nat is the smallest one.

Nat CoNat
zero
succ
$tl: CoNat ⟶ option \; CoNat$

where

Inductive option (A: Ui): Ui :=
none : option A
| some : A -> option A


In category theory: $1+A$

CoInductive CoNat: U1 := {tl: option CoNat}

$\cfrac{}{Γ ⊢ μ_X \lbrace tl = option \, X \rbrace: U_1}$ $\cfrac{Γ ⊢ t: CoNat}{Γ ⊢ tl \, t: option \, CoNat}$ $\cfrac{Γ, s: CoNat ⊢ U: option \, CoNat}{Γ ⊢ \lbrace tl/s = u \rbrace : CoNat}$ $∞ ≝ \lbrace tl/s = Some \, s \rbrace\\ 0 ≝ \lbrace tl/s = none \rbrace \\ 1 ≝ \lbrace tl/s = Some \, \lbrace tl/s = None \rbrace \rbrace$ $tl \, \lbrace tl/s = u\rbrace ⟶ u[s := \lbrace tl/s = u \rbrace]$

Two ways to build elements of $CoNat$:

• by co-induction
• by induction on $Nat$

# General constructions

$t, A ≝ \lbrace d_1: N; ⋯ ; d_n: N \rbrace \qquad \text{negative: destructors}\\ \mid \lbrace c_1: P; ⋯ ; c_n: P \rbrace \qquad \text{positive: constructors}$

ex:

• $0: Unit ⟶ Nat$
• $S: Nat ⟶ Nat$
• $\lbrace 0: Unit; S: Nat \rbrace$

No dependency for constructors right now, but we have dependent types for destructors (cf. $Σ$-types).

$cons: A ⟶ list \, A ⟶ list \, A \\ cons: A \otimes list \, A ⟶ list \, A$

where $\otimes$ is the positive conjunction (in linear logic): $Σ$-type is the negative one.

$P ≝ 1 \mid (a:A) \otimes P\\ N ≝ \prod\limits_{ a:A } N \mid A$

$\prod$ is a negative type which is not co-inductive, that is: its introduction rules are reversible (you can recover the premises from the conclusion).

Ex:

Not reversible:

$\cfrac{?}{Γ ⊢ n: Nat}$

because it could come from $zero$ or $succ$

Revertible (negative)

$\cfrac{⊢ A \quad ⊢ B}{⊢ A \& B}$

Usually:

• negative types have

• an $η$-rule on the constructor/eliminator
• universal properties that include arrows going into them (limits)
• positive types have

• an $η$-rule on the destructors/eliminator
• universal properties that include arrows going out of them (co-limits)

$t, A ≝ ⋯ \mid case \; t \; of \; [c_1 \, p ⇒ t \mid ⋯ \mid c_n \, p ⇒ t]\\ p ≝ () \mid (a, p) \\ t ≝ ⋯ \mid c_i \, u \mid d_i \, t\\ u ≝ () \mid (t, u) \mid \lbrace d_1 = v; ⋯ ; d_n = v \rbrace\\ v ≝ λa:A. v \mid t$

Tags:

Updated: