Welcome to Abella 1.1.3-dev2
Reading clauses from eval.mod
Abella < Theorem eval_det :
forall E V1 V2, {eval E V1} -> {eval E V2} -> V1 = V2.
1 subgoal(s).
============================
forall E V1 V2, {eval E V1} -> {eval E V2} -> V1 = V2
eval_det < induction on 1.
1 subgoal(s).
IH : forall E V1 V2, {eval E V1}* -> {eval E V2} -> V1 = V2
============================
forall E V1 V2, {eval E V1}@ -> {eval E V2} -> V1 = V2
eval_det < intros.
1 subgoal(s).
Variables: E, V1, V2
IH : forall E V1 V2, {eval E V1}* -> {eval E V2} -> V1 = V2
H1 : {eval E V1}@
H2 : {eval E V2}
============================
V1 = V2
eval_det < case H1.
2 subgoal(s).
Variables: E, V1, V2, R
IH : forall E V1 V2, {eval E V1}* -> {eval E V2} -> V1 = V2
H2 : {eval (abs R) V2}
============================
abs R = V2
subgoal 2 is:
V1 = V2
eval_det < case H2.
2 subgoal(s).
Variables: E, V1, V2, R
IH : forall E V1 V2, {eval E V1}* -> {eval E V2} -> V1 = V2
============================
abs R = abs R
subgoal 2 is:
V1 = V2
eval_det < search.
1 subgoal(s).
Variables: E, V1, V2, R, N, M
IH : forall E V1 V2, {eval E V1}* -> {eval E V2} -> V1 = V2
H2 : {eval (app M N) V2}
H3 : {eval M (abs R)}*
H4 : {eval (R N) V1}*
============================
V1 = V2
eval_det < case H2.
1 subgoal(s).
Variables: E, V1, V2, R, N, M, R1
IH : forall E V1 V2, {eval E V1}* -> {eval E V2} -> V1 = V2
H3 : {eval M (abs R)}*
H4 : {eval (R N) V1}*
H5 : {eval M (abs R1)}
H6 : {eval (R1 N) V2}
============================
V1 = V2
eval_det < apply IH to H3 H5.
1 subgoal(s).
Variables: E, V1, V2, R, N, M, R1
IH : forall E V1 V2, {eval E V1}* -> {eval E V2} -> V1 = V2
H3 : {eval M (abs R1)}*
H4 : {eval (R1 N) V1}*
H5 : {eval M (abs R1)}
H6 : {eval (R1 N) V2}
============================
V1 = V2
eval_det < apply IH to H4 H6.
1 subgoal(s).
Variables: E, V1, V2, R, N, M, R1
IH : forall E V1 V2, {eval E V1}* -> {eval E V2} -> V1 = V2
H3 : {eval M (abs R1)}*
H4 : {eval (R1 N) V2}*
H5 : {eval M (abs R1)}
H6 : {eval (R1 N) V2}
============================
V2 = V2
eval_det < search.
Proof completed.
Abella < Theorem step_det :
forall E1 E2 E3, {step E1 E2} -> {step E1 E3} -> E2 = E3.
1 subgoal(s).
============================
forall E1 E2 E3, {step E1 E2} -> {step E1 E3} -> E2 = E3
step_det < induction on 1.
1 subgoal(s).
IH : forall E1 E2 E3, {step E1 E2}* -> {step E1 E3} -> E2 = E3
============================
forall E1 E2 E3, {step E1 E2}@ -> {step E1 E3} -> E2 = E3
step_det < intros.
1 subgoal(s).
Variables: E1, E2, E3
IH : forall E1 E2 E3, {step E1 E2}* -> {step E1 E3} -> E2 = E3
H1 : {step E1 E2}@
H2 : {step E1 E3}
============================
E2 = E3
step_det < case H1.
2 subgoal(s).
Variables: E1, E2, E3, M, R
IH : forall E1 E2 E3, {step E1 E2}* -> {step E1 E3} -> E2 = E3
H2 : {step (app (abs R) M) E3}
============================
R M = E3
subgoal 2 is:
app M' N = E3
step_det < case H2.
3 subgoal(s).
Variables: E1, E2, E3, M, R
IH : forall E1 E2 E3, {step E1 E2}* -> {step E1 E3} -> E2 = E3
============================
R M = R M
subgoal 2 is:
R M = app M' M
subgoal 3 is:
app M' N = E3
step_det < search.
2 subgoal(s).
Variables: E1, E2, E3, M, R, M'
IH : forall E1 E2 E3, {step E1 E2}* -> {step E1 E3} -> E2 = E3
H3 : {step (abs R) M'}
============================
R M = app M' M
subgoal 2 is:
app M' N = E3
step_det < case H3.
1 subgoal(s).
Variables: E1, E2, E3, M', N, M
IH : forall E1 E2 E3, {step E1 E2}* -> {step E1 E3} -> E2 = E3
H2 : {step (app M N) E3}
H3 : {step M M'}*
============================
app M' N = E3
step_det < case H2.
2 subgoal(s).
Variables: E1, E2, E3, M', N, M, R
IH : forall E1 E2 E3, {step E1 E2}* -> {step E1 E3} -> E2 = E3
H3 : {step (abs R) M'}*
============================
app M' N = R N
subgoal 2 is:
app M' N = app M'1 N
step_det < case H3.
1 subgoal(s).
Variables: E1, E2, E3, M', N, M, M'1
IH : forall E1 E2 E3, {step E1 E2}* -> {step E1 E3} -> E2 = E3
H3 : {step M M'}*
H4 : {step M M'1}
============================
app M' N = app M'1 N
step_det < apply IH to H3 H4.
1 subgoal(s).
Variables: E1, E2, E3, M', N, M, M'1
IH : forall E1 E2 E3, {step E1 E2}* -> {step E1 E3} -> E2 = E3
H3 : {step M M'1}*
H4 : {step M M'1}
============================
app M'1 N = app M'1 N
step_det < search.
Proof completed.
Abella < Theorem nstep_det :
forall E R1 R2, {nstep E (abs R1)} -> {nstep E (abs R2)} -> R1 = R2.
1 subgoal(s).
============================
forall E R1 R2, {nstep E (abs R1)} -> {nstep E (abs R2)} -> R1 = R2
nstep_det < induction on 1.
1 subgoal(s).
IH : forall E R1 R2, {nstep E (abs R1)}* -> {nstep E (abs R2)} -> R1 = R2
============================
forall E R1 R2, {nstep E (abs R1)}@ -> {nstep E (abs R2)} -> R1 = R2
nstep_det < intros.
1 subgoal(s).
Variables: E, R1, R2
IH : forall E R1 R2, {nstep E (abs R1)}* -> {nstep E (abs R2)} -> R1 = R2
H1 : {nstep E (abs R1)}@
H2 : {nstep E (abs R2)}
============================
R1 = R2
nstep_det < case H1.
2 subgoal(s).
Variables: E, R1, R2
IH : forall E R1 R2, {nstep E (abs R1)}* -> {nstep E (abs R2)} -> R1 = R2
H2 : {nstep (abs R1) (abs R2)}
============================
R1 = R2
subgoal 2 is:
R1 = R2
nstep_det < case H2.
3 subgoal(s).
Variables: E, R1, R2
IH : forall E R1 R2, {nstep E (abs R1)}* -> {nstep E (abs R2)} -> R1 = R2
============================
R2 = R2
subgoal 2 is:
R1 = R2
subgoal 3 is:
R1 = R2
nstep_det < search.
2 subgoal(s).
Variables: E, R1, R2, B
IH : forall E R1 R2, {nstep E (abs R1)}* -> {nstep E (abs R2)} -> R1 = R2
H3 : {step (abs R1) B}
H4 : {nstep B (abs R2)}
============================
R1 = R2
subgoal 2 is:
R1 = R2
nstep_det < case H3.
1 subgoal(s).
Variables: E, R1, R2, B
IH : forall E R1 R2, {nstep E (abs R1)}* -> {nstep E (abs R2)} -> R1 = R2
H2 : {nstep E (abs R2)}
H3 : {step E B}*
H4 : {nstep B (abs R1)}*
============================
R1 = R2
nstep_det < case H2.
2 subgoal(s).
Variables: E, R1, R2, B
IH : forall E R1 R2, {nstep E (abs R1)}* -> {nstep E (abs R2)} -> R1 = R2
H3 : {step (abs R2) B}*
H4 : {nstep B (abs R1)}*
============================
R1 = R2
subgoal 2 is:
R1 = R2
nstep_det < case H3.
1 subgoal(s).
Variables: E, R1, R2, B, B1
IH : forall E R1 R2, {nstep E (abs R1)}* -> {nstep E (abs R2)} -> R1 = R2
H3 : {step E B}*
H4 : {nstep B (abs R1)}*
H5 : {step E B1}
H6 : {nstep B1 (abs R2)}
============================
R1 = R2
nstep_det < apply step_det to H3 H5.
1 subgoal(s).
Variables: E, R1, R2, B, B1
IH : forall E R1 R2, {nstep E (abs R1)}* -> {nstep E (abs R2)} -> R1 = R2
H3 : {step E B1}*
H4 : {nstep B1 (abs R1)}*
H5 : {step E B1}
H6 : {nstep B1 (abs R2)}
============================
R1 = R2
nstep_det < apply IH to H4 H6.
1 subgoal(s).
Variables: E, R1, R2, B, B1
IH : forall E R1 R2, {nstep E (abs R1)}* -> {nstep E (abs R2)} -> R1 = R2
H3 : {step E B1}*
H4 : {nstep B1 (abs R2)}*
H5 : {step E B1}
H6 : {nstep B1 (abs R2)}
============================
R2 = R2
nstep_det < search.
Proof completed.
Abella < Theorem nstep_lemma :
forall M N R V, {nstep M (abs R)} -> {nstep (R N) V} -> {nstep (app M N) V}.
1 subgoal(s).
============================
forall M N R V, {nstep M (abs R)} -> {nstep (R N) V} ->
{nstep (app M N) V}
nstep_lemma < induction on 1.
1 subgoal(s).
IH : forall M N R V, {nstep M (abs R)}* -> {nstep (R N) V} ->
{nstep (app M N) V}
============================
forall M N R V, {nstep M (abs R)}@ -> {nstep (R N) V} ->
{nstep (app M N) V}
nstep_lemma < intros.
1 subgoal(s).
Variables: M, N, R, V
IH : forall M N R V, {nstep M (abs R)}* -> {nstep (R N) V} ->
{nstep (app M N) V}
H1 : {nstep M (abs R)}@
H2 : {nstep (R N) V}
============================
{nstep (app M N) V}
nstep_lemma < case H1.
2 subgoal(s).
Variables: M, N, R, V
IH : forall M N R V, {nstep M (abs R)}* -> {nstep (R N) V} ->
{nstep (app M N) V}
H2 : {nstep (R N) V}
============================
{nstep (app (abs R) N) V}
subgoal 2 is:
{nstep (app M N) V}
nstep_lemma < search.
1 subgoal(s).
Variables: M, N, R, V, B
IH : forall M N R V, {nstep M (abs R)}* -> {nstep (R N) V} ->
{nstep (app M N) V}
H2 : {nstep (R N) V}
H3 : {step M B}*
H4 : {nstep B (abs R)}*
============================
{nstep (app M N) V}
nstep_lemma < apply IH to H4 H2.
1 subgoal(s).
Variables: M, N, R, V, B
IH : forall M N R V, {nstep M (abs R)}* -> {nstep (R N) V} ->
{nstep (app M N) V}
H2 : {nstep (R N) V}
H3 : {step M B}*
H4 : {nstep B (abs R)}*
H5 : {nstep (app B N) V}
============================
{nstep (app M N) V}
nstep_lemma < search.
Proof completed.
Abella < Theorem eval_nstep :
forall E V, {eval E V} -> {nstep E V}.
1 subgoal(s).
============================
forall E V, {eval E V} -> {nstep E V}
eval_nstep < induction on 1.
1 subgoal(s).
IH : forall E V, {eval E V}* -> {nstep E V}
============================
forall E V, {eval E V}@ -> {nstep E V}
eval_nstep < intros.
1 subgoal(s).
Variables: E, V
IH : forall E V, {eval E V}* -> {nstep E V}
H1 : {eval E V}@
============================
{nstep E V}
eval_nstep < case H1.
2 subgoal(s).
Variables: E, V, R
IH : forall E V, {eval E V}* -> {nstep E V}
============================
{nstep (abs R) (abs R)}
subgoal 2 is:
{nstep (app M N) V}
eval_nstep < search.
1 subgoal(s).
Variables: E, V, R, N, M
IH : forall E V, {eval E V}* -> {nstep E V}
H2 : {eval M (abs R)}*
H3 : {eval (R N) V}*
============================
{nstep (app M N) V}
eval_nstep < apply IH to H2.
1 subgoal(s).
Variables: E, V, R, N, M
IH : forall E V, {eval E V}* -> {nstep E V}
H2 : {eval M (abs R)}*
H3 : {eval (R N) V}*
H4 : {nstep M (abs R)}
============================
{nstep (app M N) V}
eval_nstep < apply IH to H3.
1 subgoal(s).
Variables: E, V, R, N, M
IH : forall E V, {eval E V}* -> {nstep E V}
H2 : {eval M (abs R)}*
H3 : {eval (R N) V}*
H4 : {nstep M (abs R)}
H5 : {nstep (R N) V}
============================
{nstep (app M N) V}
eval_nstep < apply nstep_lemma to H4 H5.
1 subgoal(s).
Variables: E, V, R, N, M
IH : forall E V, {eval E V}* -> {nstep E V}
H2 : {eval M (abs R)}*
H3 : {eval (R N) V}*
H4 : {nstep M (abs R)}
H5 : {nstep (R N) V}
H6 : {nstep (app M N) V}
============================
{nstep (app M N) V}
eval_nstep < search.
Proof completed.
Abella < Theorem step_eval_lemma :
forall A B C, {step A B} -> {eval B C} -> {eval A C}.
1 subgoal(s).
============================
forall A B C, {step A B} -> {eval B C} -> {eval A C}
step_eval_lemma < induction on 1.
1 subgoal(s).
IH : forall A B C, {step A B}* -> {eval B C} -> {eval A C}
============================
forall A B C, {step A B}@ -> {eval B C} -> {eval A C}
step_eval_lemma < intros.
1 subgoal(s).
Variables: A, B, C
IH : forall A B C, {step A B}* -> {eval B C} -> {eval A C}
H1 : {step A B}@
H2 : {eval B C}
============================
{eval A C}
step_eval_lemma < case H1.
2 subgoal(s).
Variables: A, B, C, M, R
IH : forall A B C, {step A B}* -> {eval B C} -> {eval A C}
H2 : {eval (R M) C}
============================
{eval (app (abs R) M) C}
subgoal 2 is:
{eval (app M N) C}
step_eval_lemma < search.
1 subgoal(s).
Variables: A, B, C, M', N, M
IH : forall A B C, {step A B}* -> {eval B C} -> {eval A C}
H2 : {eval (app M' N) C}
H3 : {step M M'}*
============================
{eval (app M N) C}
step_eval_lemma < case H2.
1 subgoal(s).
Variables: A, B, C, M', N, M, R
IH : forall A B C, {step A B}* -> {eval B C} -> {eval A C}
H3 : {step M M'}*
H4 : {eval M' (abs R)}
H5 : {eval (R N) C}
============================
{eval (app M N) C}
step_eval_lemma < apply IH to H3 H4.
1 subgoal(s).
Variables: A, B, C, M', N, M, R
IH : forall A B C, {step A B}* -> {eval B C} -> {eval A C}
H3 : {step M M'}*
H4 : {eval M' (abs R)}
H5 : {eval (R N) C}
H6 : {eval M (abs R)}
============================
{eval (app M N) C}
step_eval_lemma < search.
Proof completed.
Abella < Theorem nstep_eval :
forall E R, {nstep E (abs R)} -> {eval E (abs R)}.
1 subgoal(s).
============================
forall E R, {nstep E (abs R)} -> {eval E (abs R)}
nstep_eval < induction on 1.
1 subgoal(s).
IH : forall E R, {nstep E (abs R)}* -> {eval E (abs R)}
============================
forall E R, {nstep E (abs R)}@ -> {eval E (abs R)}
nstep_eval < intros.
1 subgoal(s).
Variables: E, R
IH : forall E R, {nstep E (abs R)}* -> {eval E (abs R)}
H1 : {nstep E (abs R)}@
============================
{eval E (abs R)}
nstep_eval < case H1.
2 subgoal(s).
Variables: E, R
IH : forall E R, {nstep E (abs R)}* -> {eval E (abs R)}
============================
{eval (abs R) (abs R)}
subgoal 2 is:
{eval E (abs R)}
nstep_eval < search.
1 subgoal(s).
Variables: E, R, B
IH : forall E R, {nstep E (abs R)}* -> {eval E (abs R)}
H2 : {step E B}*
H3 : {nstep B (abs R)}*
============================
{eval E (abs R)}
nstep_eval < apply IH to H3.
1 subgoal(s).
Variables: E, R, B
IH : forall E R, {nstep E (abs R)}* -> {eval E (abs R)}
H2 : {step E B}*
H3 : {nstep B (abs R)}*
H4 : {eval B (abs R)}
============================
{eval E (abs R)}
nstep_eval < apply step_eval_lemma to H2 H4.
1 subgoal(s).
Variables: E, R, B
IH : forall E R, {nstep E (abs R)}* -> {eval E (abs R)}
H2 : {step E B}*
H3 : {nstep B (abs R)}*
H4 : {eval B (abs R)}
H5 : {eval E (abs R)}
============================
{eval E (abs R)}
nstep_eval < search.
Proof completed.
Abella < Theorem sr_eval :
forall E V T, {eval E V} -> {of E T} -> {of V T}.
1 subgoal(s).
============================
forall E V T, {eval E V} -> {of E T} -> {of V T}
sr_eval < induction on 1.
1 subgoal(s).
IH : forall E V T, {eval E V}* -> {of E T} -> {of V T}
============================
forall E V T, {eval E V}@ -> {of E T} -> {of V T}
sr_eval < intros.
1 subgoal(s).
Variables: E, V, T
IH : forall E V T, {eval E V}* -> {of E T} -> {of V T}
H1 : {eval E V}@
H2 : {of E T}
============================
{of V T}
sr_eval < case H1.
2 subgoal(s).
Variables: E, V, T, R
IH : forall E V T, {eval E V}* -> {of E T} -> {of V T}
H2 : {of (abs R) T}
============================
{of (abs R) T}
subgoal 2 is:
{of V T}
sr_eval < search.
1 subgoal(s).
Variables: E, V, T, R, N, M
IH : forall E V T, {eval E V}* -> {of E T} -> {of V T}
H2 : {of (app M N) T}
H3 : {eval M (abs R)}*
H4 : {eval (R N) V}*
============================
{of V T}
sr_eval < case H2.
1 subgoal(s).
Variables: E, V, T, R, N, M, U
IH : forall E V T, {eval E V}* -> {of E T} -> {of V T}
H3 : {eval M (abs R)}*
H4 : {eval (R N) V}*
H5 : {of M (arrow U T)}
H6 : {of N U}
============================
{of V T}
sr_eval < apply IH to H3 H5.
1 subgoal(s).
Variables: E, V, T, R, N, M, U
IH : forall E V T, {eval E V}* -> {of E T} -> {of V T}
H3 : {eval M (abs R)}*
H4 : {eval (R N) V}*
H5 : {of M (arrow U T)}
H6 : {of N U}
H7 : {of (abs R) (arrow U T)}
============================
{of V T}
sr_eval < case H7.
1 subgoal(s).
Variables: E, V, T, R, N, M, U
IH : forall E V T, {eval E V}* -> {of E T} -> {of V T}
H3 : {eval M (abs R)}*
H4 : {eval (R N) V}*
H5 : {of M (arrow U T)}
H6 : {of N U}
H8 : {of n1 U |- of (R n1) T}
============================
{of V T}
sr_eval < inst H8 with n1 = N.
1 subgoal(s).
Variables: E, V, T, R, N, M, U
IH : forall E V T, {eval E V}* -> {of E T} -> {of V T}
H3 : {eval M (abs R)}*
H4 : {eval (R N) V}*
H5 : {of M (arrow U T)}
H6 : {of N U}
H8 : {of n1 U |- of (R n1) T}
H9 : {of N U |- of (R N) T}
============================
{of V T}
sr_eval < cut H9 with H6.
1 subgoal(s).
Variables: E, V, T, R, N, M, U
IH : forall E V T, {eval E V}* -> {of E T} -> {of V T}
H3 : {eval M (abs R)}*
H4 : {eval (R N) V}*
H5 : {of M (arrow U T)}
H6 : {of N U}
H8 : {of n1 U |- of (R n1) T}
H9 : {of N U |- of (R N) T}
H10 : {of (R N) T}
============================
{of V T}
sr_eval < apply IH to H4 H10.
1 subgoal(s).
Variables: E, V, T, R, N, M, U
IH : forall E V T, {eval E V}* -> {of E T} -> {of V T}
H3 : {eval M (abs R)}*
H4 : {eval (R N) V}*
H5 : {of M (arrow U T)}
H6 : {of N U}
H8 : {of n1 U |- of (R n1) T}
H9 : {of N U |- of (R N) T}
H10 : {of (R N) T}
H11 : {of V T}
============================
{of V T}
sr_eval < search.
Proof completed.
Abella < Theorem sr_step :
forall E1 E2 T, {step E1 E2} -> {of E1 T} -> {of E2 T}.
1 subgoal(s).
============================
forall E1 E2 T, {step E1 E2} -> {of E1 T} -> {of E2 T}
sr_step < induction on 1.
1 subgoal(s).
IH : forall E1 E2 T, {step E1 E2}* -> {of E1 T} -> {of E2 T}
============================
forall E1 E2 T, {step E1 E2}@ -> {of E1 T} -> {of E2 T}
sr_step < intros.
1 subgoal(s).
Variables: E1, E2, T
IH : forall E1 E2 T, {step E1 E2}* -> {of E1 T} -> {of E2 T}
H1 : {step E1 E2}@
H2 : {of E1 T}
============================
{of E2 T}
sr_step < case H1.
2 subgoal(s).
Variables: E1, E2, T, M, R
IH : forall E1 E2 T, {step E1 E2}* -> {of E1 T} -> {of E2 T}
H2 : {of (app (abs R) M) T}
============================
{of (R M) T}
subgoal 2 is:
{of (app M' N) T}
sr_step < case H2.
2 subgoal(s).
Variables: E1, E2, T, M, R, U
IH : forall E1 E2 T, {step E1 E2}* -> {of E1 T} -> {of E2 T}
H3 : {of (abs R) (arrow U T)}
H4 : {of M U}
============================
{of (R M) T}
subgoal 2 is:
{of (app M' N) T}
sr_step < case H3.
2 subgoal(s).
Variables: E1, E2, T, M, R, U
IH : forall E1 E2 T, {step E1 E2}* -> {of E1 T} -> {of E2 T}
H4 : {of M U}
H5 : {of n1 U |- of (R n1) T}
============================
{of (R M) T}
subgoal 2 is:
{of (app M' N) T}
sr_step < inst H5 with n1 = M.
2 subgoal(s).
Variables: E1, E2, T, M, R, U
IH : forall E1 E2 T, {step E1 E2}* -> {of E1 T} -> {of E2 T}
H4 : {of M U}
H5 : {of n1 U |- of (R n1) T}
H6 : {of M U |- of (R M) T}
============================
{of (R M) T}
subgoal 2 is:
{of (app M' N) T}
sr_step < cut H6 with H4.
2 subgoal(s).
Variables: E1, E2, T, M, R, U
IH : forall E1 E2 T, {step E1 E2}* -> {of E1 T} -> {of E2 T}
H4 : {of M U}
H5 : {of n1 U |- of (R n1) T}
H6 : {of M U |- of (R M) T}
H7 : {of (R M) T}
============================
{of (R M) T}
subgoal 2 is:
{of (app M' N) T}
sr_step < search.
1 subgoal(s).
Variables: E1, E2, T, M', N, M
IH : forall E1 E2 T, {step E1 E2}* -> {of E1 T} -> {of E2 T}
H2 : {of (app M N) T}
H3 : {step M M'}*
============================
{of (app M' N) T}
sr_step < case H2.
1 subgoal(s).
Variables: E1, E2, T, M', N, M, U
IH : forall E1 E2 T, {step E1 E2}* -> {of E1 T} -> {of E2 T}
H3 : {step M M'}*
H4 : {of M (arrow U T)}
H5 : {of N U}
============================
{of (app M' N) T}
sr_step < apply IH to H3 H4.
1 subgoal(s).
Variables: E1, E2, T, M', N, M, U
IH : forall E1 E2 T, {step E1 E2}* -> {of E1 T} -> {of E2 T}
H3 : {step M M'}*
H4 : {of M (arrow U T)}
H5 : {of N U}
H6 : {of M' (arrow U T)}
============================
{of (app M' N) T}
sr_step < search.
Proof completed.
Abella < Theorem sr_nstep :
forall E1 E2 T, {nstep E1 E2} -> {of E1 T} -> {of E2 T}.
1 subgoal(s).
============================
forall E1 E2 T, {nstep E1 E2} -> {of E1 T} -> {of E2 T}
sr_nstep < induction on 1.
1 subgoal(s).
IH : forall E1 E2 T, {nstep E1 E2}* -> {of E1 T} -> {of E2 T}
============================
forall E1 E2 T, {nstep E1 E2}@ -> {of E1 T} -> {of E2 T}
sr_nstep < intros.
1 subgoal(s).
Variables: E1, E2, T
IH : forall E1 E2 T, {nstep E1 E2}* -> {of E1 T} -> {of E2 T}
H1 : {nstep E1 E2}@
H2 : {of E1 T}
============================
{of E2 T}
sr_nstep < case H1.
2 subgoal(s).
Variables: E1, E2, T
IH : forall E1 E2 T, {nstep E1 E2}* -> {of E1 T} -> {of E2 T}
H2 : {of E2 T}
============================
{of E2 T}
subgoal 2 is:
{of E2 T}
sr_nstep < search.
1 subgoal(s).
Variables: E1, E2, T, B
IH : forall E1 E2 T, {nstep E1 E2}* -> {of E1 T} -> {of E2 T}
H2 : {of E1 T}
H3 : {step E1 B}*
H4 : {nstep B E2}*
============================
{of E2 T}
sr_nstep < apply sr_step to H3 H2.
1 subgoal(s).
Variables: E1, E2, T, B
IH : forall E1 E2 T, {nstep E1 E2}* -> {of E1 T} -> {of E2 T}
H2 : {of E1 T}
H3 : {step E1 B}*
H4 : {nstep B E2}*
H5 : {of B T}
============================
{of E2 T}
sr_nstep < apply IH to H4 H5.
1 subgoal(s).
Variables: E1, E2, T, B
IH : forall E1 E2 T, {nstep E1 E2}* -> {of E1 T} -> {of E2 T}
H2 : {of E1 T}
H3 : {step E1 B}*
H4 : {nstep B E2}*
H5 : {of B T}
H6 : {of E2 T}
============================
{of E2 T}
sr_nstep < search.
Proof completed.
Abella < Theorem type_subst :
forall L E E' T T', nabla x, {L, of x T' |- of (E x) T} -> {L |- of E' T'} ->
{L |- of (E E') T}.
1 subgoal(s).
============================
forall L E E' T T', nabla x, {L, of x T' |- of (E x) T} ->
{L |- of E' T'} -> {L |- of (E E') T}
type_subst < intros.
1 subgoal(s).
Variables: L, E, E', T, T'
H1 : {L, of n1 T' |- of (E n1) T}
H2 : {L |- of E' T'}
============================
{L |- of (E E') T}
type_subst < inst H1 with n1 = E'.
1 subgoal(s).
Variables: L, E, E', T, T'
H1 : {L, of n1 T' |- of (E n1) T}
H2 : {L |- of E' T'}
H3 : {L, of E' T' |- of (E E') T}
============================
{L |- of (E E') T}
type_subst < cut H3 with H2.
1 subgoal(s).
Variables: L, E, E', T, T'
H1 : {L, of n1 T' |- of (E n1) T}
H2 : {L |- of E' T'}
H3 : {L, of E' T' |- of (E E') T}
H4 : {L |- of (E E') T}
============================
{L |- of (E E') T}
type_subst < search.
Proof completed.
Abella < Theorem of_self_app_absurd :
forall T, {of (abs (x1\app x1 x1)) T} -> false.
1 subgoal(s).
============================
forall T, {of (abs (x1\app x1 x1)) T} -> false
of_self_app_absurd < intros.
1 subgoal(s).
Variables: T
H1 : {of (abs (x1\app x1 x1)) T}
============================
false
of_self_app_absurd < case H1.
1 subgoal(s).
Variables: T, U, T1
H2 : {of n1 T1 |- of (app n1 n1) U}
============================
false
of_self_app_absurd < case H2.
2 subgoal(s).
Variables: T, U, T1
H3 : member (of (app n1 n1) U) (of n1 T1 :: nil)
============================
false
subgoal 2 is:
false
of_self_app_absurd < case H3.
2 subgoal(s).
Variables: T, U, T1
H4 : member (of (app n1 n1) U) nil
============================
false
subgoal 2 is:
false
of_self_app_absurd < case H4.
1 subgoal(s).
Variables: T, U, T1, U1
H3 : {of n1 T1 |- of n1 (arrow (U1 n1) U)}
H4 : {of n1 T1 |- of n1 (U1 n1)}
============================
false
of_self_app_absurd < case H4.
1 subgoal(s).
Variables: T, U, T1, U1
H3 : {of n1 T1 |- of n1 (arrow (U1 n1) U)}
H5 : member (of n1 (U1 n1)) (of n1 T1 :: nil)
============================
false
of_self_app_absurd < case H5.
2 subgoal(s).
Variables: T, U, T1, U1
H3 : {of n1 T1 |- of n1 (arrow T1 U)}
============================
false
subgoal 2 is:
false
of_self_app_absurd < case H3.
2 subgoal(s).
Variables: T, U, T1, U1
H6 : member (of n1 (arrow T1 U)) (of n1 T1 :: nil)
============================
false
subgoal 2 is:
false
of_self_app_absurd < case H6.
2 subgoal(s).
Variables: T, U, T1, U1
H7 : member (of n1 (arrow T1 U)) nil
============================
false
subgoal 2 is:
false
of_self_app_absurd < case H7.
1 subgoal(s).
Variables: T, U, T1, U1
H3 : {of n1 T1 |- of n1 (arrow (U1 n1) U)}
H6 : member (of n1 (U1 n1)) nil
============================
false
of_self_app_absurd < case H6.
Proof completed.
Abella < Theorem no_eval :
forall V, {eval (app (abs (x1\app x1 x1)) (abs (x1\app x1 x1))) V} -> false.
1 subgoal(s).
============================
forall V, {eval (app (abs (x1\app x1 x1)) (abs (x1\app x1 x1))) V} ->
false
no_eval < induction on 1.
1 subgoal(s).
IH : forall V, {eval (app (abs (x1\app x1 x1)) (abs (x1\app x1 x1))) V}* ->
false
============================
forall V, {eval (app (abs (x1\app x1 x1)) (abs (x1\app x1 x1))) V}@ ->
false
no_eval < intros.
1 subgoal(s).
Variables: V
IH : forall V, {eval (app (abs (x1\app x1 x1)) (abs (x1\app x1 x1))) V}* ->
false
H1 : {eval (app (abs (x1\app x1 x1)) (abs (x1\app x1 x1))) V}@
============================
false
no_eval < case H1.
1 subgoal(s).
Variables: V, R
IH : forall V, {eval (app (abs (x1\app x1 x1)) (abs (x1\app x1 x1))) V}* ->
false
H2 : {eval (abs (x1\app x1 x1)) (abs R)}*
H3 : {eval (R (abs (x1\app x1 x1))) V}*
============================
false
no_eval < case H2.
1 subgoal(s).
Variables: V, R
IH : forall V, {eval (app (abs (x1\app x1 x1)) (abs (x1\app x1 x1))) V}* ->
false
H3 : {eval (app (abs (x1\app x1 x1)) (abs (x1\app x1 x1))) V}*
============================
false
no_eval < apply IH to H3.
Proof completed.
Abella < CoDefine diverge (app M N) := diverge M.
Abella < CoDefine diverge (app M N) := exists R, {eval M (abs R)} /\ diverge (R N).
Abella < Theorem omega_diverge :
diverge (app (abs (x1\app x1 x1)) (abs (x1\app x1 x1))).
1 subgoal(s).
============================
diverge (app (abs (x1\app x1 x1)) (abs (x1\app x1 x1)))
omega_diverge < coinduction.
1 subgoal(s).
CH : diverge (app (abs (x1\app x1 x1)) (abs (x1\app x1 x1))) +
============================
diverge (app (abs (x1\app x1 x1)) (abs (x1\app x1 x1))) @
omega_diverge < search.
Proof completed.
Abella < Theorem eval_diverge_absurd :
forall M V, {eval M V} -> diverge M -> false.
1 subgoal(s).
============================
forall M V, {eval M V} -> diverge M -> false
eval_diverge_absurd < induction on 1.
1 subgoal(s).
IH : forall M V, {eval M V}* -> diverge M -> false
============================
forall M V, {eval M V}@ -> diverge M -> false
eval_diverge_absurd < intros.
1 subgoal(s).
Variables: M, V
IH : forall M V, {eval M V}* -> diverge M -> false
H1 : {eval M V}@
H2 : diverge M
============================
false
eval_diverge_absurd < case H1.
2 subgoal(s).
Variables: M, V, R
IH : forall M V, {eval M V}* -> diverge M -> false
H2 : diverge (abs R)
============================
false
subgoal 2 is:
false
eval_diverge_absurd < case H2.
1 subgoal(s).
Variables: M, V, R, N, M1
IH : forall M V, {eval M V}* -> diverge M -> false
H2 : diverge (app M1 N)
H3 : {eval M1 (abs R)}*
H4 : {eval (R N) V}*
============================
false
eval_diverge_absurd < case H2.
2 subgoal(s).
Variables: M, V, R, N, M1
IH : forall M V, {eval M V}* -> diverge M -> false
H3 : {eval M1 (abs R)}*
H4 : {eval (R N) V}*
H5 : diverge M1
============================
false
subgoal 2 is:
false
eval_diverge_absurd < apply IH to H3 H5.
1 subgoal(s).
Variables: M, V, R, N, M1, R1
IH : forall M V, {eval M V}* -> diverge M -> false
H3 : {eval M1 (abs R)}*
H4 : {eval (R N) V}*
H5 : {eval M1 (abs R1)}
H6 : diverge (R1 N)
============================
false
eval_diverge_absurd < apply eval_det to H3 H5.
1 subgoal(s).
Variables: M, V, R, N, M1, R1
IH : forall M V, {eval M V}* -> diverge M -> false
H3 : {eval M1 (abs R1)}*
H4 : {eval (R1 N) V}*
H5 : {eval M1 (abs R1)}
H6 : diverge (R1 N)
============================
false
eval_diverge_absurd < apply IH to H4 H6.
Proof completed.
Abella < Goodbye.