Skip to content

Latest commit

 

History

History
281 lines (221 loc) · 5.16 KB

File metadata and controls

281 lines (221 loc) · 5.16 KB

Lecture 4: Converse, Conjugate and Composition

Converse

Converse (反过来) $x, R^{-1}, y \Leftrightarrow y, R, x$: R^~1

image-20250121202021120

我们可以写成

p1 = x $wire <a, a, x> .
p2 = [id, R, id] .
p3 = <b, y, y> $wire b .
current = p1 ; p2 ; p3 . # x R b

Converse 有一些规则 $$ \begin{align*} &(R^{-1})^{-1} = R\ &(Q ; R)^{-1} = R^{-1} ; Q^{-1}\ &[Q, R]^{-1} = [Q^{-1}, R^{-1}]\ &R ; R^{-1} \neq id \text{ (in general)} \end{align*} $$

Constant

Constant (常数操作 $c$)$x ,c, y \Leftrightarrow x=y = c$

敞亮电路 c 会将相同的常量值输出道 x, y 两端

如果考虑一个电路

add2 = VAR x . x $rel (`add` <x, 2>) .

我们可以把常数 2 定义为 snd 2

snd R = [id, R].
# <x, y> (snd R) <x, z> = y R z
pi1 = <x,y> $wire x.

image-20250121203354233

add2 = pi1^~1 ; snd 2 ; add .

Converse 有一些规则 $$ \begin{align*} &(R^{-1})^{-1} = R\ &(Q ; R)^{-1} = R^{-1} ; Q^{-1}\ &[Q, R]^{-1} = [Q^{-1}, R^{-1}]\ &R ; R^{-1} \neq id \text{ (in general)} \end{align*} $$

Conjugate 共轭

image-20250121215527357

$$ P^{-1} ; Q;P \Leftrightarrow Q \setminus P \\ \begin{align*} P \setminus (Q;R) &= (Q;R)^{-1}; P; (Q; R) \\&=R^{-1}; Q^{-1}; P; Q; R \\&= R^{-1};(P\setminus Q); R \\&= (P\setminus Q) \setminus R

\end{align*} $$

Repeated Series

image-20250121220240604

$$ R^3 = R ; R; R $$ 我们可以通过递归定义: $$ \begin{align*} \text{base case: } &R^0 = id\\ \text{inductive case: } & R^{n+1} = R ; R^n\\ \end{align*} $$ 也就是
R^n = IF (n $eq 0) THEN id
                   ELSE (R ; R^(n-1)) .

Wiring Patterns

# <<x1, ..., xm>, <y1, ..., yn>>
# -> <x1, ..., xm, y1, ..., yn>
append m n

# <x, <y1, ..., yn>>
# -> <x1, y1, ..., yn>
apl n = append 1 n

# <<x1, ..., xm>, y1>
# -> <x1, ..., xm, y1>
apr m = append m 1

# <
#   <k1, ..., kn>,
#   <v1, ..., vn>
# > : 2 x n
# -> <
#   <k1, v1>,
#   ...
#   <kn, vn>
# >
zip n

# m x n -> n x m
tran m n

Repeaded Parallel

image-20250121221436740

$$ map_3 R = [R, R, R] $$

$$ \begin{align*} \text{base case: } &map_0, R = []\\ \text{inductive case: } & map_{n+1} ,R = apl_n [R, map_n, R] \end{align*} $$

# map (n+1) R

# INPUT : <x1, x2, ..., xn>
# OUTPUT: <y1, y2, ..., yn>

# <x0, x1, ..., xn>
# <x0, <x1, ..., xn>> # (apl n)^~1
#  R                  # [R, map n R]
#          map n R
# <y0, <y1, ..., yn>> # apl n
# <y0, y1, ..., yn>

# map (n+1) R = (apl n)^~1 ; [R, map n R] ; apl n
#             = [R, map n R] \ (apl n)

也就是

map n R = IF (n $eq 0)
          THEN []
          ELSE ( [R, map (n-1) R] \ (apl (n01))) .

Types

Primitive: bit, uint, sint, ureal, sreal

Composite: $$ \begin{cases} Q: (A\sim B)\ R: (B\sim C) \end{cases} \Longrightarrow(Q;R):(A\sim C) $$

$$ \begin{cases} Q: (A\sim B)\\ R:(C\sim D) \end{cases} \Longrightarrow[Q,R]:(\lang A, C\rang\sim \lang B,D\rang) $$

Series: $R: X\sim X, R^n : X\sim X$

Parallel $R : X\sim Y, map_n , R : \lang X\rang_n \sim \lang Y \rang_n$

Append $append_{m, n} : \lang \lang X\rang_m, \lang X\rang_n\rang \sim\lang X\rang_{m+n}$

Tree-shape Array

image-20250121224200938

$$ R : \lang X, X \rang \sim X $$

$$ \begin{align*} \text{base case: } &btree_1 = R\\ \text{inductive case: } & btree_{n+1} = [btree_{n}, R, btree_n, R] ; R \end{align*} $$

# <x1, ..., xn, y1, ..., yn>
# -> <<x1, ..., xn>, <y1, ..., yn>>
half n = (append n n)^~1 .

我们期望的树结构是 $\mathbb{R}^{2^n}\to \mathbb{R}$, 而 $half : \mathbb{R}^{2n} \to \mathbb{R}^n, \mathbb{R}^n$

因此可以定义 $$ \begin{align*} \text{base case: } &btree_1 = R\ \text{inductive case: } & btree_{n+1} = half_{m=2^n} ; [btree_{n}, R, btree_n, R] ; R \end{align*} $$

如果不使用 half,则最终类型会变成

<<<X, X>, <X, X>> , <<X, X>, <X, X>>> ~ X

例如对于点积,即 $$ \mathbf{z} = \sum [ \mathbf{x}_i \times \mathbf{y}_i ] $$ 我们假设类型为 $\lang \lang \mathbb{R}_x, \mathbb{R}_y\rangle\rang_m \sim \mathbb{R}_z$,则有 $$ \text{innerprod} = \text{map}_m, \text{mult} ; \text{btree}_n, \text{add} \ \text{where } m=2^n $$

Triangular Array

image-20250121230557762

$$ \begin{align*} \Delta_n\, R &= [R^0, R^1, R^2, \dots, R^{n-1}] \end{align*} $$
/\ n R = IF (n $eq 0)
         THEN []
         ELSE ( [/\ (n-1) R, R^(n-1)] \ apr (n-1) ).

# apr : (xs:x) -> (xxs) 
# n = 1: [[], R^0]

Flipped Triangle: $$ \Delta_n^\sim, R = [R^{n-1}, \dots, R^2, R^1, R^0] $$

/\~ n R = IF (n $eq 0)
          THEN []
          ELSE ( [R^(n-1), /\~ (n-1) R] \ apl (n-1) ).