NN
Types
Functions
def relu (v: Vector) : {r : Vector | dim r = dim v && lower r ≥ 0.0}
def sigmoid (v: Vector) : {r : Vector | dim r = dim v && (lower r ≥ 0.0 && upper r ≤ 1.0)}
def tanh_act (v: Vector) : {r : Vector | dim r = dim v && (lower r ≥ 0.0 - 1.0 && upper r ≤ 1.0)}
def softmax (v: {x : Vector | dim x > 0}) : {r : Vector | dim r = dim v && (lower r ≥ 0.0 && upper r ≤ 1.0)}
def dense (nin: {k : Int | k > 0}) (nout: {k : Int | k > 0}) : {l : Layer | in_features l = nin && out_features l = nout}
def dense_relu (nin: {k : Int | k > 0}) (nout: {k : Int | k > 0}) : {l : Layer | in_features l = nin && out_features l = nout}
def dense_sigmoid (nin: {k : Int | k > 0}) (nout: {k : Int | k > 0}) : {l : Layer | in_features l = nin && out_features l = nout}
def dense_tanh (nin: {k : Int | k > 0}) (nout: {k : Int | k > 0}) : {l : Layer | in_features l = nin && out_features l = nout}
def make_layer (w: Matrix) (b: {v : Vector | dim v = rows w}) : {l : Layer | in_features l = cols w && out_features l = rows w}
def layer_in (l: Layer) : {n : Int | n = in_features l && n ≥ 0}
def layer_out (l: Layer) : {n : Int | n = out_features l && n ≥ 0}
def forward (l: Layer) (x: {v : Vector | dim v = in_features l}) : {r : Vector | dim r = out_features l}
def sequential (l: Layer) : {n : Network | net_in n = in_features l && net_out n = out_features l}
def stack (net: Network) (l: {x : Layer | in_features x = net_out net}) : {n : Network | net_in n = net_in net && net_out n = out_features l}
def net_in_of (net: Network) : {n : Int | n = net_in net && n ≥ 0}
def net_out_of (net: Network) : {n : Int | n = net_out net && n ≥ 0}
def predict (net: Network) (x: {v : Vector | dim v = net_in net}) : {r : Vector | dim r = net_out net}
def predict_unchecked (net: Network) (x: Vector) : Vector
def predict_scalar (net: Network) (x: Vector) : Float
def mse (pred: Vector) (target: {v : Vector | dim v = dim pred}) : {f : Float | f ≥ 0.0}
def cross_entropy (pred: {v : Vector | dim v > 0}) (target: {v : Vector | dim v = dim pred}) : {f : Float | f ≥ 0.0}
def softmax_cross_entropy (logits: {v : Vector | dim v > 0}) (target: {v : Vector | dim v = dim logits}) : {f : Float | f ≥ 0.0}
def backward (net: Network) (x: {v : Vector | dim v = net_in net}) (target: {v : Vector | dim v = net_out net}) : {g : Gradients | grad_in g = net_in net && grad_out g = net_out net}
def backward_ce (net: Network) (x: {v : Vector | dim v = net_in net}) (target: {v : Vector | dim v = net_out net}) : {g : Gradients | grad_in g = net_in net && grad_out g = net_out net}
def grad_in_of (g: Gradients) : {n : Int | n = grad_in g && n ≥ 0}
def grad_out_of (g: Gradients) : {n : Int | n = grad_out g && n ≥ 0}
def sgd_step (net: Network) (grads: {g : Gradients | grad_in g = net_in net && grad_out g = net_out net}) (lr: {f : Float | f > 0.0}) : {out : Network | net_in out = net_in net && net_out out = net_out net}
def train_step (net: Network) (x: {v : Vector | dim v = net_in net}) (target: {v : Vector | dim v = net_out net}) (lr: {f : Float | f > 0.0}) : {out : Network | net_in out = net_in net && net_out out = net_out net}
def train_step_ce (net: Network) (x: {v : Vector | dim v = net_in net}) (target: {v : Vector | dim v = net_out net}) (lr: {f : Float | f > 0.0}) : {out : Network | net_in out = net_in net && net_out out = net_out net}
Uninterpreted
Functions declared as def f ... = uninterpreted: only their signature is known to the verifier; they have no body.
def in_features : (l : Layer) → Int
def out_features : (l : Layer) → Int
def net_in : (n : Network) → Int
def net_out : (n : Network) → Int
def grad_in : (g : Gradients) → Int
def grad_out : (g : Gradients) → Int