String-diagram semantics for functional languages with data-flow
Steven Cheung & Dan Ghica & Koko Moruya University of Birmingham 9th Sep 2017
String-diagram semantics for functional languages with data-flow - - PowerPoint PPT Presentation
String-diagram semantics for functional languages with data-flow Steven Cheung & Dan Ghica & Koko Moruya University of Birmingham 9th Sep 2017 GoI machine [Mackie 95] [Danos & Regnier 99] Geometry of interaction [Girard
Steven Cheung & Dan Ghica & Koko Moruya University of Birmingham 9th Sep 2017
[Mackie ’95] [Danos & Regnier ’99]
[Muroya & Ghica ’17]
[Muroya & Ghica ’17]
@ D + λ + C D D ! D D 1 ! 1 !
(λx.x + x) (1 + 1)
[Muroya & Ghica ’17]
@ D + λ + C D D ! D D 1 ! 1 !
(λx.x + x) (1 + 1)
[Muroya & Ghica ’17]
@ D + λ + C D D ! D D 1 ! 1 !
(λx.x + x) (1 + 1) → (λx.x + x) 2
@ D ! λ + C D D ! 2
[Muroya & Ghica ’17]
@ D ! λ + C D D ! 2
(λx.x + x) (1 + 1) → (λx.x + x) 2
[Muroya & Ghica ’17]
@ D ! λ + C D D ! 2
(λx.x + x) (1 + 1) → (λx.x + x) 2 → x + x [x ↦ 2]
+ 2 ! D D C
[Muroya & Ghica ’17]
+ 2 ! D D C
(λx.x + x) (1 + 1) → (λx.x + x) 2 → x + x [x ↦ 2]
[Muroya & Ghica ’17]
+ 2 ! D D C
(λx.x + x) (1 + 1) → (λx.x + x) 2 → x + x [x ↦ 2] → x + 2 [x ↦ 2]
+ 2 ! D D C ! 2
[Muroya & Ghica ’17]
+ 2 ! D D C ! 2
(λx.x + x) (1 + 1) → (λx.x + x) 2 → x + x [x ↦ 2] → x + 2 [x ↦ 2] → 2 + 2
[Muroya & Ghica ’17]
+ 2 ! D D C ! 2
(λx.x + x) (1 + 1) → (λx.x + x) 2 → x + x [x ↦ 2] → x + 2 [x ↦ 2] → 2 + 2 → 4
! 4
[Muroya & Ghica ’17]
@ D + λ + C D D ! D D 1 ! 1 !
(λx.x + x) (1 + 1)
import tensorflow as tf # Model parameters W = tf.Variable([1], dtype=tf.float32) b = tf.Variable([0], dtype=tf.float32) # Model input and output x = tf.placeholder(tf.float32) linear_model = W * x + b y = tf.placeholder(tf.float32) # loss loss = tf.reduce_sum(tf.square(linear_model - y)) # sum of the squares # optimizer
train = optimizer.minimize(loss) # training data x_train = [1, 2, 3, 4] y_train = [0, -1, -2, -3] # training loop init = tf.global_variables_initializer() sess = tf.Session() sess.run(init) # reset values to wrong for i in range(1000): sess.run(train, {x: x_train, y: y_train}) # evaluate training accuracy curr_W, curr_b, curr_loss = sess.run([W, b, loss], {x: x_train, y: y_train}) print("W: %s b: %s loss: %s"%(curr_W, curr_b, curr_loss))
import tensorflow as tf # Model parameters W = tf.Variable([1], dtype=tf.float32) b = tf.Variable([0], dtype=tf.float32) # Model input and output x = tf.placeholder(tf.float32) linear_model = W * x + b y = tf.placeholder(tf.float32) # loss loss = tf.reduce_sum(tf.square(linear_model - y)) # sum of the squares # optimizer
train = optimizer.minimize(loss) # training data x_train = [1, 2, 3, 4] y_train = [0, -1, -2, -3] # training loop init = tf.global_variables_initializer() sess = tf.Session() sess.run(init) # reset values to wrong for i in range(1000): sess.run(train, {x: x_train, y: y_train}) # evaluate training accuracy curr_W, curr_b, curr_loss = sess.run([W, b, loss], {x: x_train, y: y_train}) print("W: %s b: %s loss: %s"%(curr_W, curr_b, curr_loss))
import tensorflow as tf # Model parameters W = tf.Variable([1], dtype=tf.float32) b = tf.Variable([0], dtype=tf.float32) # Model input and output x = tf.placeholder(tf.float32) linear_model = W * x + b y = tf.placeholder(tf.float32) # loss loss = tf.reduce_sum(tf.square(linear_model - y)) # sum of the squares # optimizer
train = optimizer.minimize(loss) # training data x_train = [1, 2, 3, 4] y_train = [0, -1, -2, -3] # training loop init = tf.global_variables_initializer() sess = tf.Session() sess.run(init) # reset values to wrong for i in range(1000): sess.run(train, {x: x_train, y: y_train}) # evaluate training accuracy curr_W, curr_b, curr_loss = sess.run([W, b, loss], {x: x_train, y: y_train}) print("W: %s b: %s loss: %s"%(curr_W, curr_b, curr_loss))
import tensorflow as tf # Model parameters W = tf.Variable([1], dtype=tf.float32) b = tf.Variable([0], dtype=tf.float32) # Model input and output x = tf.placeholder(tf.float32) linear_model = W * x + b y = tf.placeholder(tf.float32) # loss loss = tf.reduce_sum(tf.square(linear_model - y)) # sum of the squares # optimizer
train = optimizer.minimize(loss) # training data x_train = [1, 2, 3, 4] y_train = [0, -1, -2, -3] # training loop init = tf.global_variables_initializer() sess = tf.Session() sess.run(init) # reset values to wrong for i in range(1000): sess.run(train, {x: x_train, y: y_train}) # evaluate training accuracy curr_W, curr_b, curr_loss = sess.run([W, b, loss], {x: x_train, y: y_train}) print("W: %s b: %s loss: %s"%(curr_W, curr_b, curr_loss))
let loss f p = … in let grad_desc f p loss rate = … in let linear_model x = {1} * x + {0} in let f@p = linear_model in let linear_model’ = f (grad_desc f p loss rate) in …
let loss f p = … in let grad_desc f p loss rate = … in let linear_model x = {1} * x + {0} in let f@p = linear_model in let linear_model’ = f (grad_desc f p loss rate) in …
let f@p = linear_model in … f ≜ λp. λx. p[0] * x + p[1] p ≜ [1, 0] “Abductive” decoupling let loss f p = … in let grad_desc f p loss rate = … in let linear_model x = {1} * x + {0} in let f@p = linear_model in let linear_model’ = f (grad_desc f p loss rate) in …
let f@p = linear_model in … f ≜ λp. λx. p[0] * x + p[1] p ≜ [1, 0] “Abductive” decoupling let loss f p = … in let grad_desc f p loss rate = … in let linear_model x = {1} * x + {0} in let f@p = linear_model in let linear_model’ = f (grad_desc f p loss rate) in …
let f@p = λx. {1} * x + {0} in f p
@ λ ! A D @ D ! ? D ? ? ! λ ? D + * ᗡ ᗡ D ¿ ¿ ! ¿ ¿ ¡ ¡ 1
@ λ ! A D @ D ! ? D ? ? ! λ ? D + * ᗡ ᗡ D ¿ ¿ ! ¿ ¿ ¡ ¡ 1
D A ! @ D ! ? D ? ? ! λ ? D + * ᗡ ᗡ D ¿ ¿ ! ¿ ¿ ¡ ¡ 1
D A ! @ D ! ? D ? ? ! λ ? D + * ᗡ ᗡ D ¿ ¿ ! ¿ ¿ ¡ ¡ 1
D A ! @ D ! ? D ? ? ! λ ? D + * ᗡ ᗡ D ¿ ¿ ! ¿ ¿ ¡ ¡ 1
D A ! @ D ! ? D ? ? ! λ ? D + * ᗡ ᗡ D ¿ ¿ ! ¿ ¿ ¡ ¡ 1 D @ D ! ! D ? ! λ D P2 ! λ ? D + * D D D ? ? ! ? ? [1,0] ! 1 ¡ ¡ Ɔ0 Ɔ0
D A ! @ D ! ? D ? ? ! λ ? D + * ᗡ ᗡ D ¿ ¿ ! ¿ ¿ ¡ ¡ 1 D @ D ! ! D ? ! λ D P2 ! λ ? D + * D D D ? ? ! ? ? [1,0] ! 1 ¡ ¡ Ɔ0 Ɔ0
f ≜ λp. λx. p[0] * x + p[1] p ≜ [1, 0]
[Acar ’05]
let x = 1, y = 2, m = x + 1, n = y + 1 in m + n
1
x
2
m
+ 1 2
y
3
n
+ 1 5
z
+
[Acar ’05]
let x = 3, y = 2, m = x + 1, n = y + 1 in m + n
3
x
4
m
+ 1 2
y
3
n
+ 1 7
z
+
[Acar ’05]
let x = 3, y = 2, m = x + 1, n = y + 1 in m + n
3
x
4
m
+ 1 2
y
3
n
+ 1 7
z
+
@ D λ @ C D + λ @ ? D @ λ C0 ! D Δ λ P C0 ! ! ? 3 ! D D 2 ! ! 1 !
let x = {1} in let y = x + 2 in (set x to 3); prop; y
@ D λ @ C D + λ @ ? D @ λ C0 ! D Δ λ P C0 ! ! ? 3 ! D D 2 ! ! 1 !
let x = {1} in let y = x + 2 in (set x to 3); prop; y
@ D λ @ C D + λ @ ? D @ λ C0 ! D Δ λ P C0 ! ! ? 3 ! D D 2 ! ! 1 ! @ D M λ @ C D + λ @ ? D @ λ C0 ! D Δ λ P C0 ! ! ? 3 ! D D 2 ! ! 1 ! ! 1
let x = {1} in let y = x + 2 in (set x to 3); prop; y
@ D M λ @ C D + λ @ ? D @ λ C0 ! D Δ λ P C0 ! ! ? 3 ! D D 2 ! ! 1 ! ! 1
let x = {1} in let y = x + 2 in (set x to 3); prop; y
@ D M λ @ C D + λ @ ? D @ λ C0 ! D Δ λ P C0 ! ! ? 3 ! D D 2 ! ! 1 ! ! 1
let x = {1} in let y = x + 2 in (set x to 3); prop; y
@ 1 ! M ! 1 D + λ @ ? D @ λ C0 ! D Δ λ P C0 ! ! ? 3 ! C D D 2 !
let x = {1} in let y = x + 2 in (set x to 3); prop; y
@ 1 ! M ! 1 D + λ @ ? D @ λ C0 ! D Δ λ P C0 ! ! ? 3 ! C D D 2 !
let x = {1} in let y = x + 2 in (set x to 3); prop; y
@ 1 ! M ! 1 D + λ @ ? D @ λ C0 ! D Δ λ P C0 ! ! ? 3 ! C D D 2 ! @ 1 ! M ! 1 D M λ @ ? D @ λ C0 ! D Δ λ P C0 ! ! ? 3 ! C + D 2 ! 3
let x = {1} in let y = x + 2 in (set x to 3); prop; y
@ 1 ! M ! 1 D M λ @ ? D @ λ C0 ! D Δ λ P C0 ! ! ? 3 ! C + D 2 ! 3
let x = {1} in let y = x + 2 in (set x to 3); prop; y
@ 1 ! M ! 1 D M λ @ ? D @ λ C0 ! D Δ λ P C0 ! ! ? 3 ! C + D 2 ! 3 @ 1 ! M ! 1 + D 2 C M ! 3 D @ λ C0 ? ! D Δ λ P C0 ! ! 3
let x = {1} in let y = x + 2 in (set x to 3); prop; y
@ 1 ! M ! 1 + D 2 C M ! 3 D @ λ C0 ? ! D Δ λ P C0 ! ! 3
@ 1 ! M ! 1 + D 2 C M ! 3 D @ λ C0 ? ! D Δ λ P C0 ! ! 3
@ 1 ! R ! C 1 + D 2 C M ! 3 D @ λ C0 ? ! D Δ λ P C0 ! 3 ! C0
let x = {1} in let y = x + 2 in (set x to 3); prop; y
@ 1 ! R ! C 1 + D 2 C M ! 3 D @ λ C0 ? ! D Δ λ P C0 ! 3 ! C0
let x = {1} in let y = x + 2 in (set x to 3); prop; y
@ 1 ! R ! C 1 + D 2 C M ! 3 D @ λ C0 ? ! D Δ λ P C0 ! 3 ! C0
let x = {1} in let y = x + 2 in (set x to 3); prop; y
@ 1 ! R ! C 1 + D 2 C M ! 3 D @ λ C0 ? ! D ! λ P C0 ! 3 ! C0 C0 C0 ()
let x = {1} in let y = x + 2 in (set x to 3); prop; y
@ 1 ! R ! C 1 + D 2 C M ! 3 D @ λ C0 ? ! D ! λ P C0 ! 3 ! C0 C0 C0 ()
let x = {1} in let y = x + 2 in (set x to 3); prop; y
@ 1 ! R ! C 1 + D 2 C M ! 3 D @ λ C0 ? ! D ! λ P C0 ! 3 ! C0 C0 C0 () @ 1 ! R ! C 1 + D 2 C M ! 3 D P λ C0 ? ! 3 ! C0 C0 C0 () ! C0
let x = {1} in let y = x + 2 in (set x to 3); prop; y
@ 1 ! R ! C 1 + D 2 C M ! 3 D P λ C0 ? ! 3 ! C0 C0 C0 () ! C0
let x = {1} in let y = x + 2 in (set x to 3); prop; y
@ 1 ! R ! C 1 + D 2 C M ! 3 D P λ C0 ? ! 3 ! C0 C0 C0 () ! C0 @ 1 ! M ! C 1 + D 2 C M ! 3 D P λ C0 ? ! 3 ! C0 C0 C0 () ! C0
let x = {1} in let y = x + 2 in (set x to 3); prop; y
@ 1 ! R ! C 1 + D 2 C M ! 3 D P λ C0 ? ! 3 ! C0 C0 C0 () ! C0 @ 1 ! M ! C 1 + D 2 C M ! 3 D P λ C0 ? ! 3 ! C0 C0 C0 () ! C0
let x = {1} in let y = x + 2 in (set x to 3); prop; y
@ 1 ! R ! C 1 + D 2 C M ! 3 D P λ C0 ? ! 3 ! C0 C0 C0 () ! C0 @ 1 ! M ! C 1 + D 2 C M ! 3 D P λ C0 ? ! 3 ! C0 C0 C0 () ! C0
@ 1 ! M ! ! 1 ! + D 2 C M ! 3 D P λ C0 ? ! 3 ! C0 C C0 C0 () ! C0 3 C0 3
let x = {1} in let y = x + 2 in (set x to 3); prop; y
@ 1 ! M ! ! 1 ! + D 2 C M ! 3 D P λ C0 ? ! 3 ! C0 C C0 C0 () ! C0 3 C0 3
let x = {1} in let y = x + 2 in (set x to 3); prop; y
@ 1 ! M ! ! 1 ! + D 2 C M ! 3 D P λ C0 ? ! 3 ! C0 C C0 C0 () ! C0 3 C0 3
let x = {1} in let y = x + 2 in (set x to 3); prop; y
@ 1 ! M ! ! 1 ! + D 2 C M ! 3 D P λ C0 ? ! 3 ! C0 C C0 C0 () ! C0 3 C0 3
let x = {1} in let y = x + 2 in (set x to 3); prop; y
@ 1 ! M ! ! 1 ! + D 2 C M ! 3 D P λ C0 ? ! 3 ! C0 C C0 C0 () ! C0 3 C0 3
let x = {1} in let y = x + 2 in (set x to 3); prop; y
@ 1 ! M ! ! 1 ! + D 2 C M ! 3 D P λ C0 ? ! 3 ! C0 C C0 C0 () ! C0 3 C0 3
let x = {1} in let y = x + 2 in (set x to 3); prop; y
@ 1 ! M ! ! 1 ! + D 2 C M ! 3 D P λ C0 ? ! 3 ! C0 C C0 C0 () ! C0 3 C0 3 @ 1 ! M ! ! 1 ! + D 2 C M ! 3 ! D P λ C0 ? ! 3 ! C0 C C0 C0 () ! C0 3 C0 3 C0 5
let x = {1} in let y = x + 2 in (set x to 3); prop; y
@ 1 ! M ! ! 1 ! + D 2 C M ! 3 ! D P λ C0 ? ! 3 ! C0 C C0 C0 () ! C0 3 C0 3 C0 5
let x = {1} in let y = x + 2 in (set x to 3); prop; y
@ 1 ! M ! ! 1 ! + D 2 C M ! 3 ! D P λ C0 ? ! 3 ! C0 C C0 C0 () ! C0 3 C0 3 C0 5
let x = {1} in let y = x + 2 in (set x to 3); prop; y
@ 1 ! M ! ! 1 ! + D 2 C M ! 3 ! D P λ C0 ? ! 3 ! C0 C C0 C0 () ! C0 3 C0 3 C0 5
let x = {1} in let y = x + 2 in (set x to 3); prop; y
@ 1 ! M ! ! 1 ! + D 2 C M ! 3 ! D P λ C0 ? ! 3 ! C0 C C0 C0 () ! C0 3 C0 3 C0 5
let x = {1} in let y = x + 2 in (set x to 3); prop; y
@ 1 ! M ! ! 1 ! + D 2 C M ! 3 ! D P λ C0 ? ! 3 ! C0 C C0 C0 () ! C0 3 C0 3 C0 5
let x = {1} in let y = x + 2 in (set x to 3); prop; y
@ 1 ! M ! ! 1 ! + D 2 C M ! 3 ! D P λ C0 ? ! 3 ! C0 C C0 C0 () ! C0 3 C0 3 C0 5
let x = {1} in let y = x + 2 in (set x to 3); prop; y
@ 1 ! M ! ! 1 ! + D 2 C M ! 3 ! D P λ C0 ? ! 3 ! C0 C C0 C0 () ! C0 3 C0 3 C0 5
let x = {1} in let y = x + 2 in (set x to 3); prop; y
@ 1 ! M ! ! 1 ! + D 2 C M ! 3 ! D ! λ C0 ? ! 3 ! C0 C C0 C0 () ! C0 3 C0 3 C0 5 ()
let x = {1} in let y = x + 2 in (set x to 3); prop; y
@ 1 ! M ! ! 1 ! + D 2 C M ! 3 ! D ! λ C0 ? ! 3 ! C0 C C0 C0 () ! C0 3 C0 3 C0 5 ()
M 1 ! M ! ! 1 ! + D 2 C ! 3 ! 3 ! C0 C C0 C0 () ! C0 3 C0 3 C0 5 () ! C0
let x = {1} in let y = x + 2 in (set x to 3); prop; y
M 1 ! M ! ! 1 ! + D 2 C ! 3 ! 3 ! C0 C C0 C0 () ! C0 3 C0 3 C0 5 () ! C0
let x = {1} in let y = x + 2 in (set x to 3); prop; y
M 1 ! M ! ! 1 ! + D 2 C ! 3 ! 3 ! C0 C C0 C0 () ! C0 3 C0 3 C0 5 () ! C0
laws (beta, eta)