1. j : ℤ
2. 0 < j
3. ∀a,b:Base.
((λevalall,t. eval x = t in
if x is a pair then let a,b = x
in eval a' = evalall a in
eval b' = evalall b in
<a', b'> otherwise if x is inl then eval y = evalall outl(x) in
inl y
else if x is inr then eval y = evalall outr(x) in
inr y
else x^j - 1
⊥
(a @ b))↓
⇒ (a ∈ Base List))
4. a : Base@i
5. b : Base@i
6. (λevalall,t. eval x = t in
if x is a pair then let a,b = x
in eval a' = evalall a in
eval b' = evalall b in
<a', b'> otherwise if x is inl then eval y = evalall outl(x) in
inl y
else if x is inr then eval y = evalall outr(x) in
inr y
else x^j
⊥
(a @ b))↓@i
⊢ a ∈ Base List
{ ((RWO "fun_exp_unroll_1" (-1) THENA Auto) THEN Reduce (-1) THEN HasValueD (-1)) }
1. j : ℤ
2. 0 < j
3. ∀a,b:Base.
((λevalall,t. eval x = t in
if x is a pair then let a,b = x
in eval a' = evalall a in
eval b' = evalall b in
<a', b'> otherwise if x is inl then eval y = evalall outl(x) in
inl y
else if x is inr then eval y = evalall outr(x) in
inr y
else x^j - 1
⊥
(a @ b))↓
⇒ (a ∈ Base List))
4. a : Base@i
5. b : Base@i
6. (if a @ b is a pair then let a,b = a @ b
in eval a' = λevalall,t. eval x = t in
if x is a pair then let a,b = x
in eval a' = evalall a in
eval b' = evalall b in
<a', b'>
otherwise if x is inl then eval y = evalall outl(x) in
inl y
else if x is inr then eval y = evalall outr(x) in
inr y
else x^j - 1
⊥
a in
eval b' = λevalall,t. eval x = t in
if x is a pair then let a,b = x
in eval a' = evalall a in
eval b' = evalall b in
<a', b'>
otherwise if x is inl then eval y = evalall outl(x) in
inl y
else if x is inr then eval y = evalall outr(x) in
inr y
else x^j - 1
⊥
b in
<a', b'>
otherwise if a @ b is inl then eval y = λevalall,t. eval x = t in
if x is a pair then let a,b = x
in eval a' = evalall a in
eval b' = evalall b in
<a', b'>
otherwise if x is inl then eval y = evalall outl(x) in
inl y
else if x is inr then eval y = evalall outr(x) in
inr y
else x^j - 1
⊥
outl(a @ b) in
inl y
else if a @ b is inr then eval y = λevalall,t. eval x = t in
if x is a pair then let a,b = x
in eval a' = evalall a in
eval b' = evalall b in
<a', b'>
otherwise if x is inl then eval y = evalall outl(x) in
inl y
else if x is inr then eval y = evalall outr(x) in
inr y
else x^j - 1
⊥
outr(a @ b) in
inr y
else a @ b)↓@i
7. (a @ b)↓
⊢ a ∈ Base List