-- | function from nat to nat defined by lambda abstractionf1 : nat -> nat -> nat = \(b: nat) -> \(c : nat) -> b
-- | function from nat, nat -> nat defined by case analaysisf2 : 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'