ยง CubicalTT: sharpening thinking about indexed functions
-- | function from nat to nat defined by lambda abstraction
f1 : nat -> nat -> nat = \(b: nat) -> \(c : nat) -> b
-- | function from nat, nat -> nat defined by case analaysis
f2 : nat -> nat -> nat =
split
zero -> split@(nat -> nat) with
zero -> zero
suc b' -> zero
suc a' -> split@(nat -> nat) with
zero -> a'
suc b' -> b'
-- | parametrized family of nats, defined by definition.
g1 (b : nat) (c : nat) : nat = b
-- | Family of nat parameterized by `(x: nat), `(y: nat)
-- | cannot split on parameters, can only split on fn.
-- g2 (x : nat) (y : nat) : nat =
-- split
-- zero -> split@(nat -> nat) with
-- zero -> zero
-- suc b' -> zero
-- suc a' -> split@(nat -> nat) with
-- zero -> a'
-- suc b' -> b'