sys = define("a", 1)
.and(define("fn_ex", a => 2 * a, "a"))
.and(define("fn", VIEW, "fn_ex", "a"))
.and(define("base_case_n", 1))
.and(define("first_general_case_n", 2))
.and(define("base_case_ex", (f, n) => 1, "fn", "base_case_n"))
.and(define("base_case", VIEW, "base_case_ex", "fn", "base_case_n"))
.and(define("fib_ex", (f, n) => n < 2 ? 1 : f(f, n-1) + f(f, n-2), "base_case", "first_general_case_n"))
.and(define("fib_explicit_rec", VIEW, "fib_ex", "base_case", "first_general_case_n"))
.and(define("example_n", 6))
.and(define("fib_explicit_rec_out", (fib, n) => fib(fib, n), "fib_explicit_rec", "example_n"))
.and(define("fib", VIEW, "fib_explicit_rec_out", "example_n"))
.and(define("fib_out", "fib", "example_n"))