Welcome to Abella 1.1.3-dev2 Reading clauses from normal.mod
Abella < Define nabla x, name x.
Abella < Define ctxs nil nil.
Abella < Define nabla x, ctxs (term x :: L) (neutral x :: K) := ctxs L K.
Abella < Theorem ctxs_member_term : 
forall X L K, ctxs L K -> member (term X) L -> member (neutral X) K.
1 subgoal(s).

  
  ============================
   forall X L K, ctxs L K -> member (term X) L -> member (neutral X) K

ctxs_member_term < induction on 1.
1 subgoal(s).

  
  IH : forall X L K, ctxs L K * -> member (term X) L -> member (neutral X) K
  ============================
   forall X L K, ctxs L K @ -> member (term X) L -> member (neutral X) K

ctxs_member_term < intros.
1 subgoal(s).

  Variables: X, L, K
  IH : forall X L K, ctxs L K * -> member (term X) L -> member (neutral X) K
  H1 : ctxs L K @
  H2 : member (term X) L
  ============================
   member (neutral X) K

ctxs_member_term < case H1.
2 subgoal(s).

  Variables: X, L, K
  IH : forall X L K, ctxs L K * -> member (term X) L -> member (neutral X) K
  H2 : member (term X) nil
  ============================
   member (neutral X) nil

subgoal 2 is:
 member (neutral (X n1)) (neutral n1 :: K1)

ctxs_member_term < case H2.
1 subgoal(s).

  Variables: X, L, K, K1, L1
  IH : forall X L K, ctxs L K * -> member (term X) L -> member (neutral X) K
  H2 : member (term (X n1)) (term n1 :: L1)
  H3 : ctxs L1 K1 *
  ============================
   member (neutral (X n1)) (neutral n1 :: K1)

ctxs_member_term < case H2.
2 subgoal(s).

  Variables: X, L, K, K1, L1
  IH : forall X L K, ctxs L K * -> member (term X) L -> member (neutral X) K
  H3 : ctxs L1 K1 *
  ============================
   member (neutral n1) (neutral n1 :: K1)

subgoal 2 is:
 member (neutral (X n1)) (neutral n1 :: K1)

ctxs_member_term < search.
1 subgoal(s).

  Variables: X, L, K, K1, L1
  IH : forall X L K, ctxs L K * -> member (term X) L -> member (neutral X) K
  H3 : ctxs L1 K1 *
  H4 : member (term (X n1)) L1
  ============================
   member (neutral (X n1)) (neutral n1 :: K1)

ctxs_member_term < apply IH to H3 H4.
1 subgoal(s).

  Variables: X, L, K, K1, L1
  IH : forall X L K, ctxs L K * -> member (term X) L -> member (neutral X) K
  H3 : ctxs L1 K1 *
  H4 : member (term (X n1)) L1
  H5 : member (neutral (X n1)) K1
  ============================
   member (neutral (X n1)) (neutral n1 :: K1)

ctxs_member_term < search.
Proof completed.
Abella < Theorem ctxs_var : 
forall E L K, ctxs L K -> member E K -> (exists X, E = neutral X /\ name X).
1 subgoal(s).

  
  ============================
   forall E L K, ctxs L K -> member E K -> (exists X, E = neutral X /\
     name X)

ctxs_var < induction on 1.
1 subgoal(s).

  
  IH : forall E L K, ctxs L K * -> member E K -> (exists X, E = neutral X /\
         name X)
  ============================
   forall E L K, ctxs L K @ -> member E K -> (exists X, E = neutral X /\
     name X)

ctxs_var < intros.
1 subgoal(s).

  Variables: E, L, K
  IH : forall E L K, ctxs L K * -> member E K -> (exists X, E = neutral X /\
         name X)
  H1 : ctxs L K @
  H2 : member E K
  ============================
   exists X, E = neutral X /\ name X

ctxs_var < case H1.
2 subgoal(s).

  Variables: E, L, K
  IH : forall E L K, ctxs L K * -> member E K -> (exists X, E = neutral X /\
         name X)
  H2 : member E nil
  ============================
   exists X, E = neutral X /\ name X

subgoal 2 is:
 exists X, E n1 = neutral X /\ name X

ctxs_var < case H2.
1 subgoal(s).

  Variables: E, L, K, K1, L1
  IH : forall E L K, ctxs L K * -> member E K -> (exists X, E = neutral X /\
         name X)
  H2 : member (E n1) (neutral n1 :: K1)
  H3 : ctxs L1 K1 *
  ============================
   exists X, E n1 = neutral X /\ name X

ctxs_var < case H2.
2 subgoal(s).

  Variables: E, L, K, K1, L1
  IH : forall E L K, ctxs L K * -> member E K -> (exists X, E = neutral X /\
         name X)
  H3 : ctxs L1 K1 *
  ============================
   exists X, neutral n1 = neutral X /\ name X

subgoal 2 is:
 exists X, E n1 = neutral X /\ name X

ctxs_var < search.
1 subgoal(s).

  Variables: E, L, K, K1, L1
  IH : forall E L K, ctxs L K * -> member E K -> (exists X, E = neutral X /\
         name X)
  H3 : ctxs L1 K1 *
  H4 : member (E n1) K1
  ============================
   exists X, E n1 = neutral X /\ name X

ctxs_var < apply IH to H3 H4.
1 subgoal(s).

  Variables: E, L, K, K1, L1, X
  IH : forall E L K, ctxs L K * -> member E K -> (exists X, E = neutral X /\
         name X)
  H3 : ctxs L1 K1 *
  H4 : member (neutral (X n1)) K1
  H5 : name (X n1)
  ============================
   exists X1, neutral (X n1) = neutral X1 /\ name X1

ctxs_var < search.
Proof completed.
Abella < Theorem total_ext : 
forall T L K, ctxs L K -> {L |- term T} -> {K |- normal T} \/ {non_normal T}.
1 subgoal(s).

  
  ============================
   forall T L K, ctxs L K -> {L |- term T} -> {K |- normal T} \/
     {non_normal T}

total_ext < induction on 2.
1 subgoal(s).

  
  IH : forall T L K, ctxs L K -> {L |- term T}* -> {K |- normal T} \/
         {non_normal T}
  ============================
   forall T L K, ctxs L K -> {L |- term T}@ -> {K |- normal T} \/
     {non_normal T}

total_ext < intros.
1 subgoal(s).

  Variables: T, L, K
  IH : forall T L K, ctxs L K -> {L |- term T}* -> {K |- normal T} \/
         {non_normal T}
  H1 : ctxs L K
  H2 : {L |- term T}@
  ============================
   {K |- normal T} \/ {non_normal T}

total_ext < case H2.
3 subgoal(s).

  Variables: T, L, K
  IH : forall T L K, ctxs L K -> {L |- term T}* -> {K |- normal T} \/
         {non_normal T}
  H1 : ctxs L K
  H3 : member (term T) L
  ============================
   {K |- normal T} \/ {non_normal T}

subgoal 2 is:
 {K |- normal (app M N)} \/ {non_normal (app M N)}

subgoal 3 is:
 {K |- normal (abs R)} \/ {non_normal (abs R)}

total_ext < apply ctxs_member_term to H1 H3.
3 subgoal(s).

  Variables: T, L, K
  IH : forall T L K, ctxs L K -> {L |- term T}* -> {K |- normal T} \/
         {non_normal T}
  H1 : ctxs L K
  H3 : member (term T) L
  H4 : member (neutral T) K
  ============================
   {K |- normal T} \/ {non_normal T}

subgoal 2 is:
 {K |- normal (app M N)} \/ {non_normal (app M N)}

subgoal 3 is:
 {K |- normal (abs R)} \/ {non_normal (abs R)}

total_ext < search.
2 subgoal(s).

  Variables: T, L, K, N, M
  IH : forall T L K, ctxs L K -> {L |- term T}* -> {K |- normal T} \/
         {non_normal T}
  H1 : ctxs L K
  H3 : {L |- term M}*
  H4 : {L |- term N}*
  ============================
   {K |- normal (app M N)} \/ {non_normal (app M N)}

subgoal 2 is:
 {K |- normal (abs R)} \/ {non_normal (abs R)}

total_ext < apply IH to H1 H3.
2 subgoal(s).

  Variables: T, L, K, N, M
  IH : forall T L K, ctxs L K -> {L |- term T}* -> {K |- normal T} \/
         {non_normal T}
  H1 : ctxs L K
  H3 : {L |- term M}*
  H4 : {L |- term N}*
  H5 : {K |- normal M} \/ {non_normal M}
  ============================
   {K |- normal (app M N)} \/ {non_normal (app M N)}

subgoal 2 is:
 {K |- normal (abs R)} \/ {non_normal (abs R)}

total_ext < apply IH to H1 H4.
2 subgoal(s).

  Variables: T, L, K, N, M
  IH : forall T L K, ctxs L K -> {L |- term T}* -> {K |- normal T} \/
         {non_normal T}
  H1 : ctxs L K
  H3 : {L |- term M}*
  H4 : {L |- term N}*
  H5 : {K |- normal M} \/ {non_normal M}
  H6 : {K |- normal N} \/ {non_normal N}
  ============================
   {K |- normal (app M N)} \/ {non_normal (app M N)}

subgoal 2 is:
 {K |- normal (abs R)} \/ {non_normal (abs R)}

total_ext < case H5.
3 subgoal(s).

  Variables: T, L, K, N, M
  IH : forall T L K, ctxs L K -> {L |- term T}* -> {K |- normal T} \/
         {non_normal T}
  H1 : ctxs L K
  H3 : {L |- term M}*
  H4 : {L |- term N}*
  H6 : {K |- normal N} \/ {non_normal N}
  H7 : {K |- normal M}
  ============================
   {K |- normal (app M N)} \/ {non_normal (app M N)}

subgoal 2 is:
 {K |- normal (app M N)} \/ {non_normal (app M N)}

subgoal 3 is:
 {K |- normal (abs R)} \/ {non_normal (abs R)}

total_ext < case H6.
4 subgoal(s).

  Variables: T, L, K, N, M
  IH : forall T L K, ctxs L K -> {L |- term T}* -> {K |- normal T} \/
         {non_normal T}
  H1 : ctxs L K
  H3 : {L |- term M}*
  H4 : {L |- term N}*
  H7 : {K |- normal M}
  H8 : {K |- normal N}
  ============================
   {K |- normal (app M N)} \/ {non_normal (app M N)}

subgoal 2 is:
 {K |- normal (app M N)} \/ {non_normal (app M N)}

subgoal 3 is:
 {K |- normal (app M N)} \/ {non_normal (app M N)}

subgoal 4 is:
 {K |- normal (abs R)} \/ {non_normal (abs R)}

total_ext < case H7.
6 subgoal(s).

  Variables: T, L, K, N, M
  IH : forall T L K, ctxs L K -> {L |- term T}* -> {K |- normal T} \/
         {non_normal T}
  H1 : ctxs L K
  H3 : {L |- term M}*
  H4 : {L |- term N}*
  H8 : {K |- normal N}
  H9 : member (normal M) K
  ============================
   {K |- normal (app M N)} \/ {non_normal (app M N)}

subgoal 2 is:
 {K |- normal (app (abs R) N)} \/ {non_normal (app (abs R) N)}

subgoal 3 is:
 {K |- normal (app M N)} \/ {non_normal (app M N)}

subgoal 4 is:
 {K |- normal (app M N)} \/ {non_normal (app M N)}

subgoal 5 is:
 {K |- normal (app M N)} \/ {non_normal (app M N)}

subgoal 6 is:
 {K |- normal (abs R)} \/ {non_normal (abs R)}

total_ext < apply ctxs_var to H1 H9.
5 subgoal(s).

  Variables: T, L, K, N, M, R
  IH : forall T L K, ctxs L K -> {L |- term T}* -> {K |- normal T} \/
         {non_normal T}
  H1 : ctxs L K
  H3 : {L |- term (abs R)}*
  H4 : {L |- term N}*
  H8 : {K |- normal N}
  H9 : {K, neutral n1 |- normal (R n1)}
  ============================
   {K |- normal (app (abs R) N)} \/ {non_normal (app (abs R) N)}

subgoal 2 is:
 {K |- normal (app M N)} \/ {non_normal (app M N)}

subgoal 3 is:
 {K |- normal (app M N)} \/ {non_normal (app M N)}

subgoal 4 is:
 {K |- normal (app M N)} \/ {non_normal (app M N)}

subgoal 5 is:
 {K |- normal (abs R)} \/ {non_normal (abs R)}

total_ext < search.
4 subgoal(s).

  Variables: T, L, K, N, M
  IH : forall T L K, ctxs L K -> {L |- term T}* -> {K |- normal T} \/
         {non_normal T}
  H1 : ctxs L K
  H3 : {L |- term M}*
  H4 : {L |- term N}*
  H8 : {K |- normal N}
  H9 : {K |- neutral M}
  ============================
   {K |- normal (app M N)} \/ {non_normal (app M N)}

subgoal 2 is:
 {K |- normal (app M N)} \/ {non_normal (app M N)}

subgoal 3 is:
 {K |- normal (app M N)} \/ {non_normal (app M N)}

subgoal 4 is:
 {K |- normal (abs R)} \/ {non_normal (abs R)}

total_ext < search.
3 subgoal(s).

  Variables: T, L, K, N, M
  IH : forall T L K, ctxs L K -> {L |- term T}* -> {K |- normal T} \/
         {non_normal T}
  H1 : ctxs L K
  H3 : {L |- term M}*
  H4 : {L |- term N}*
  H7 : {K |- normal M}
  H8 : {non_normal N}
  ============================
   {K |- normal (app M N)} \/ {non_normal (app M N)}

subgoal 2 is:
 {K |- normal (app M N)} \/ {non_normal (app M N)}

subgoal 3 is:
 {K |- normal (abs R)} \/ {non_normal (abs R)}

total_ext < search.
2 subgoal(s).

  Variables: T, L, K, N, M
  IH : forall T L K, ctxs L K -> {L |- term T}* -> {K |- normal T} \/
         {non_normal T}
  H1 : ctxs L K
  H3 : {L |- term M}*
  H4 : {L |- term N}*
  H6 : {K |- normal N} \/ {non_normal N}
  H7 : {non_normal M}
  ============================
   {K |- normal (app M N)} \/ {non_normal (app M N)}

subgoal 2 is:
 {K |- normal (abs R)} \/ {non_normal (abs R)}

total_ext < search.
1 subgoal(s).

  Variables: T, L, K, R
  IH : forall T L K, ctxs L K -> {L |- term T}* -> {K |- normal T} \/
         {non_normal T}
  H1 : ctxs L K
  H3 : {L, term n1 |- term (R n1)}*
  ============================
   {K |- normal (abs R)} \/ {non_normal (abs R)}

total_ext < apply IH to _ H3.
1 subgoal(s).

  Variables: T, L, K, R
  IH : forall T L K, ctxs L K -> {L |- term T}* -> {K |- normal T} \/
         {non_normal T}
  H1 : ctxs L K
  H3 : {L, term n1 |- term (R n1)}*
  H4 : {K, neutral n1 |- normal (R n1)} \/ {non_normal (R n1)}
  ============================
   {K |- normal (abs R)} \/ {non_normal (abs R)}

total_ext < case H4.
2 subgoal(s).

  Variables: T, L, K, R
  IH : forall T L K, ctxs L K -> {L |- term T}* -> {K |- normal T} \/
         {non_normal T}
  H1 : ctxs L K
  H3 : {L, term n1 |- term (R n1)}*
  H5 : {K, neutral n1 |- normal (R n1)}
  ============================
   {K |- normal (abs R)} \/ {non_normal (abs R)}

subgoal 2 is:
 {K |- normal (abs R)} \/ {non_normal (abs R)}

total_ext < search.
1 subgoal(s).

  Variables: T, L, K, R
  IH : forall T L K, ctxs L K -> {L |- term T}* -> {K |- normal T} \/
         {non_normal T}
  H1 : ctxs L K
  H3 : {L, term n1 |- term (R n1)}*
  H5 : {non_normal (R n1)}
  ============================
   {K |- normal (abs R)} \/ {non_normal (abs R)}

total_ext < search.
Proof completed.
Abella < Theorem total : 
forall T, {term T} -> {normal T} \/ {non_normal T}.
1 subgoal(s).

  
  ============================
   forall T, {term T} -> {normal T} \/ {non_normal T}

total < intros.
1 subgoal(s).

  Variables: T
  H1 : {term T}
  ============================
   {normal T} \/ {non_normal T}

total < apply total_ext to _ H1.
1 subgoal(s).

  Variables: T
  H1 : {term T}
  H2 : {normal T} \/ {non_normal T}
  ============================
   {normal T} \/ {non_normal T}

total < search.
Proof completed.
Abella < Theorem neutral_abs_absurd : 
forall L K R, ctxs L K -> {K |- neutral (abs R)} -> false.
1 subgoal(s).

  
  ============================
   forall L K R, ctxs L K -> {K |- neutral (abs R)} -> false

neutral_abs_absurd < intros.
1 subgoal(s).

  Variables: L, K, R
  H1 : ctxs L K
  H2 : {K |- neutral (abs R)}
  ============================
   false

neutral_abs_absurd < case H2.
1 subgoal(s).

  Variables: L, K, R
  H1 : ctxs L K
  H3 : member (neutral (abs R)) K
  ============================
   false

neutral_abs_absurd < apply ctxs_var to H1 H3.
1 subgoal(s).

  Variables: L, K, R, X
  H1 : ctxs L K
  H3 : member (neutral (abs R)) K
  H4 : name (abs R)
  ============================
   false

neutral_abs_absurd < case H4.
Proof completed.
Abella < Theorem disjoint_ext : 
forall L K T, ctxs L K -> {K |- normal T} -> {non_normal T} -> false.
1 subgoal(s).

  
  ============================
   forall L K T, ctxs L K -> {K |- normal T} -> {non_normal T} -> false

disjoint_ext < induction on 3.
1 subgoal(s).

  
  IH : forall L K T, ctxs L K -> {K |- normal T} -> {non_normal T}* -> false
  ============================
   forall L K T, ctxs L K -> {K |- normal T} -> {non_normal T}@ -> false

disjoint_ext < intros.
1 subgoal(s).

  Variables: L, K, T
  IH : forall L K T, ctxs L K -> {K |- normal T} -> {non_normal T}* -> false
  H1 : ctxs L K
  H2 : {K |- normal T}
  H3 : {non_normal T}@
  ============================
   false

disjoint_ext < case H2.
3 subgoal(s).

  Variables: L, K, T
  IH : forall L K T, ctxs L K -> {K |- normal T} -> {non_normal T}* -> false
  H1 : ctxs L K
  H3 : {non_normal T}@
  H4 : member (normal T) K
  ============================
   false

subgoal 2 is:
 false

subgoal 3 is:
 false

disjoint_ext < apply ctxs_var to H1 H4.
2 subgoal(s).

  Variables: L, K, T, R
  IH : forall L K T, ctxs L K -> {K |- normal T} -> {non_normal T}* -> false
  H1 : ctxs L K
  H3 : {non_normal (abs R)}@
  H4 : {K, neutral n1 |- normal (R n1)}
  ============================
   false

subgoal 2 is:
 false

disjoint_ext < case H3.
2 subgoal(s).

  Variables: L, K, T, R
  IH : forall L K T, ctxs L K -> {K |- normal T} -> {non_normal T}* -> false
  H1 : ctxs L K
  H4 : {K, neutral n1 |- normal (R n1)}
  H5 : {non_normal (R n1)}*
  ============================
   false

subgoal 2 is:
 false

disjoint_ext < apply IH to _ H4 H5.
1 subgoal(s).

  Variables: L, K, T
  IH : forall L K T, ctxs L K -> {K |- normal T} -> {non_normal T}* -> false
  H1 : ctxs L K
  H3 : {non_normal T}@
  H4 : {K |- neutral T}
  ============================
   false

disjoint_ext < case H4.
2 subgoal(s).

  Variables: L, K, T
  IH : forall L K T, ctxs L K -> {K |- normal T} -> {non_normal T}* -> false
  H1 : ctxs L K
  H3 : {non_normal T}@
  H5 : member (neutral T) K
  ============================
   false

subgoal 2 is:
 false

disjoint_ext < apply ctxs_var to H1 H5.
2 subgoal(s).

  Variables: L, K, T, X
  IH : forall L K T, ctxs L K -> {K |- normal T} -> {non_normal T}* -> false
  H1 : ctxs L K
  H3 : {non_normal X}@
  H5 : member (neutral X) K
  H6 : name X
  ============================
   false

subgoal 2 is:
 false

disjoint_ext < case H6.
2 subgoal(s).

  Variables: L, K, T, X
  IH : forall L K T, ctxs L K -> {K |- normal T} -> {non_normal T}* -> false
  H1 : ctxs (L n1) (K n1)
  H3 : {non_normal n1}@
  H5 : member (neutral n1) (K n1)
  ============================
   false

subgoal 2 is:
 false

disjoint_ext < case H3.
1 subgoal(s).

  Variables: L, K, T, N, M
  IH : forall L K T, ctxs L K -> {K |- normal T} -> {non_normal T}* -> false
  H1 : ctxs L K
  H3 : {non_normal (app M N)}@
  H5 : {K |- neutral M}
  H6 : {K |- normal N}
  ============================
   false

disjoint_ext < case H3.
3 subgoal(s).

  Variables: L, K, T, N, M, R
  IH : forall L K T, ctxs L K -> {K |- normal T} -> {non_normal T}* -> false
  H1 : ctxs L K
  H5 : {K |- neutral (abs R)}
  H6 : {K |- normal N}
  ============================
   false

subgoal 2 is:
 false

subgoal 3 is:
 false

disjoint_ext < apply neutral_abs_absurd to H1 H5.
2 subgoal(s).

  Variables: L, K, T, N, M
  IH : forall L K T, ctxs L K -> {K |- normal T} -> {non_normal T}* -> false
  H1 : ctxs L K
  H5 : {K |- neutral M}
  H6 : {K |- normal N}
  H7 : {non_normal M}*
  ============================
   false

subgoal 2 is:
 false

disjoint_ext < apply IH to H1 _ H7.
1 subgoal(s).

  Variables: L, K, T, N, M
  IH : forall L K T, ctxs L K -> {K |- normal T} -> {non_normal T}* -> false
  H1 : ctxs L K
  H5 : {K |- neutral M}
  H6 : {K |- normal N}
  H7 : {non_normal N}*
  ============================
   false

disjoint_ext < apply IH to H1 H6 H7.
Proof completed.
Abella < Theorem disjoint : 
forall T, {normal T} -> {non_normal T} -> false.
1 subgoal(s).

  
  ============================
   forall T, {normal T} -> {non_normal T} -> false

disjoint < intros.
1 subgoal(s).

  Variables: T
  H1 : {normal T}
  H2 : {non_normal T}
  ============================
   false

disjoint < apply disjoint_ext to _ H1 H2.
Proof completed.
Abella < Goodbye.