Welcome to Abella 1.1.3-dev2 Reading clauses from combinators.mod
Abella < Theorem deduction : 
forall L A B, {L, comb A |- comb B} -> {L |- comb (imp A B)}.
1 subgoal(s).

  
  ============================
   forall L A B, {L, comb A |- comb B} -> {L |- comb (imp A B)}

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

  
  IH : forall L A B, {L, comb A |- comb B}* -> {L |- comb (imp A B)}
  ============================
   forall L A B, {L, comb A |- comb B}@ -> {L |- comb (imp A B)}

deduction < intros.
1 subgoal(s).

  Variables: L, A, B
  IH : forall L A B, {L, comb A |- comb B}* -> {L |- comb (imp A B)}
  H1 : {L, comb A |- comb B}@
  ============================
   {L |- comb (imp A B)}

deduction < case H1.
4 subgoal(s).

  Variables: L, A, B
  IH : forall L A B, {L, comb A |- comb B}* -> {L |- comb (imp A B)}
  H2 : member (comb B) (comb A :: L)
  ============================
   {L |- comb (imp A B)}

subgoal 2 is:
 {L |- comb (imp A (imp A1 (imp B1 A1)))}

subgoal 3 is:
 {L |- comb (imp A (imp (imp A1 (imp B1 C)) (imp (imp A1 B1) (imp A1 C))))}

subgoal 4 is:
 {L |- comb (imp A B)}

deduction < case H2.
5 subgoal(s).

  Variables: L, A, B
  IH : forall L A B, {L, comb A |- comb B}* -> {L |- comb (imp A B)}
  ============================
   {L |- comb (imp A A)}

subgoal 2 is:
 {L |- comb (imp A B)}

subgoal 3 is:
 {L |- comb (imp A (imp A1 (imp B1 A1)))}

subgoal 4 is:
 {L |- comb (imp A (imp (imp A1 (imp B1 C)) (imp (imp A1 B1) (imp A1 C))))}

subgoal 5 is:
 {L |- comb (imp A B)}

deduction < search.
4 subgoal(s).

  Variables: L, A, B
  IH : forall L A B, {L, comb A |- comb B}* -> {L |- comb (imp A B)}
  H3 : member (comb B) L
  ============================
   {L |- comb (imp A B)}

subgoal 2 is:
 {L |- comb (imp A (imp A1 (imp B1 A1)))}

subgoal 3 is:
 {L |- comb (imp A (imp (imp A1 (imp B1 C)) (imp (imp A1 B1) (imp A1 C))))}

subgoal 4 is:
 {L |- comb (imp A B)}

deduction < search.
3 subgoal(s).

  Variables: L, A, B, B1, A1
  IH : forall L A B, {L, comb A |- comb B}* -> {L |- comb (imp A B)}
  ============================
   {L |- comb (imp A (imp A1 (imp B1 A1)))}

subgoal 2 is:
 {L |- comb (imp A (imp (imp A1 (imp B1 C)) (imp (imp A1 B1) (imp A1 C))))}

subgoal 3 is:
 {L |- comb (imp A B)}

deduction < search.
2 subgoal(s).

  Variables: L, A, B, C, B1, A1
  IH : forall L A B, {L, comb A |- comb B}* -> {L |- comb (imp A B)}
  ============================
   {L |- comb (imp A (imp (imp A1 (imp B1 C)) (imp (imp A1 B1) (imp A1 C))))}

subgoal 2 is:
 {L |- comb (imp A B)}

deduction < search.
1 subgoal(s).

  Variables: L, A, B, A1
  IH : forall L A B, {L, comb A |- comb B}* -> {L |- comb (imp A B)}
  H2 : {L, comb A |- comb (imp A1 B)}*
  H3 : {L, comb A |- comb A1}*
  ============================
   {L |- comb (imp A B)}

deduction < apply IH to H2.
1 subgoal(s).

  Variables: L, A, B, A1
  IH : forall L A B, {L, comb A |- comb B}* -> {L |- comb (imp A B)}
  H2 : {L, comb A |- comb (imp A1 B)}*
  H3 : {L, comb A |- comb A1}*
  H4 : {L |- comb (imp A (imp A1 B))}
  ============================
   {L |- comb (imp A B)}

deduction < apply IH to H3.
1 subgoal(s).

  Variables: L, A, B, A1
  IH : forall L A B, {L, comb A |- comb B}* -> {L |- comb (imp A B)}
  H2 : {L, comb A |- comb (imp A1 B)}*
  H3 : {L, comb A |- comb A1}*
  H4 : {L |- comb (imp A (imp A1 B))}
  H5 : {L |- comb (imp A A1)}
  ============================
   {L |- comb (imp A B)}

deduction < search.
Proof completed.
Abella < Define fold nil B B.
Abella < Define fold (comb A :: L) B B' := fold L (imp A B) B'.
Abella < Theorem deduction_generalized : 
forall L B B', fold L B B' -> {L |- comb B} -> {comb B'}.
1 subgoal(s).

  
  ============================
   forall L B B', fold L B B' -> {L |- comb B} -> {comb B'}

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

  
  IH : forall L B B', fold L B B' * -> {L |- comb B} -> {comb B'}
  ============================
   forall L B B', fold L B B' @ -> {L |- comb B} -> {comb B'}

deduction_generalized < intros.
1 subgoal(s).

  Variables: L, B, B'
  IH : forall L B B', fold L B B' * -> {L |- comb B} -> {comb B'}
  H1 : fold L B B' @
  H2 : {L |- comb B}
  ============================
   {comb B'}

deduction_generalized < case H1.
2 subgoal(s).

  Variables: L, B, B'
  IH : forall L B B', fold L B B' * -> {L |- comb B} -> {comb B'}
  H2 : {comb B'}
  ============================
   {comb B'}

subgoal 2 is:
 {comb B'}

deduction_generalized < search.
1 subgoal(s).

  Variables: L, B, B', L1, A
  IH : forall L B B', fold L B B' * -> {L |- comb B} -> {comb B'}
  H2 : {L1, comb A |- comb B}
  H3 : fold L1 (imp A B) B' *
  ============================
   {comb B'}

deduction_generalized < apply deduction to H2.
1 subgoal(s).

  Variables: L, B, B', L1, A
  IH : forall L B B', fold L B B' * -> {L |- comb B} -> {comb B'}
  H2 : {L1, comb A |- comb B}
  H3 : fold L1 (imp A B) B' *
  H4 : {L1 |- comb (imp A B)}
  ============================
   {comb B'}

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

  Variables: L, B, B', L1, A
  IH : forall L B B', fold L B B' * -> {L |- comb B} -> {comb B'}
  H2 : {L1, comb A |- comb B}
  H3 : fold L1 (imp A B) B' *
  H4 : {L1 |- comb (imp A B)}
  H5 : {comb B'}
  ============================
   {comb B'}

deduction_generalized < search.
Proof completed.
Abella < Define ctxs nil nil.
Abella < Define ctxs (nd D :: L) (comb D :: K) := ctxs L K.
Abella < Theorem ctxs_world : 
forall L K D, ctxs L K -> member (nd D) L -> member (comb D) K.
1 subgoal(s).

  
  ============================
   forall L K D, ctxs L K -> member (nd D) L -> member (comb D) K

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

  
  IH : forall L K D, ctxs L K -> member (nd D) L * -> member (comb D) K
  ============================
   forall L K D, ctxs L K -> member (nd D) L @ -> member (comb D) K

ctxs_world < intros.
1 subgoal(s).

  Variables: L, K, D
  IH : forall L K D, ctxs L K -> member (nd D) L * -> member (comb D) K
  H1 : ctxs L K
  H2 : member (nd D) L @
  ============================
   member (comb D) K

ctxs_world < case H2.
2 subgoal(s).

  Variables: L, K, D, L1
  IH : forall L K D, ctxs L K -> member (nd D) L * -> member (comb D) K
  H1 : ctxs (nd D :: L1) K
  ============================
   member (comb D) K

subgoal 2 is:
 member (comb D) K

ctxs_world < case H1.
2 subgoal(s).

  Variables: L, K, D, L1, K1
  IH : forall L K D, ctxs L K -> member (nd D) L * -> member (comb D) K
  H3 : ctxs L1 K1
  ============================
   member (comb D) (comb D :: K1)

subgoal 2 is:
 member (comb D) K

ctxs_world < search.
1 subgoal(s).

  Variables: L, K, D, L1, B
  IH : forall L K D, ctxs L K -> member (nd D) L * -> member (comb D) K
  H1 : ctxs (B :: L1) K
  H3 : member (nd D) L1 *
  ============================
   member (comb D) K

ctxs_world < case H1.
1 subgoal(s).

  Variables: L, K, D, L1, B, K1, D1
  IH : forall L K D, ctxs L K -> member (nd D) L * -> member (comb D) K
  H3 : member (nd D) L1 *
  H4 : ctxs L1 K1
  ============================
   member (comb D) (comb D1 :: K1)

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

  Variables: L, K, D, L1, B, K1, D1
  IH : forall L K D, ctxs L K -> member (nd D) L * -> member (comb D) K
  H3 : member (nd D) L1 *
  H4 : ctxs L1 K1
  H5 : member (comb D) K1
  ============================
   member (comb D) (comb D1 :: K1)

ctxs_world < search.
Proof completed.
Abella < Theorem nd_implies_comb_generalize : 
forall L K D, ctxs L K -> {L |- nd D} -> {K |- comb D}.
1 subgoal(s).

  
  ============================
   forall L K D, ctxs L K -> {L |- nd D} -> {K |- comb D}

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

  
  IH : forall L K D, ctxs L K -> {L |- nd D}* -> {K |- comb D}
  ============================
   forall L K D, ctxs L K -> {L |- nd D}@ -> {K |- comb D}

nd_implies_comb_generalize < intros.
1 subgoal(s).

  Variables: L, K, D
  IH : forall L K D, ctxs L K -> {L |- nd D}* -> {K |- comb D}
  H1 : ctxs L K
  H2 : {L |- nd D}@
  ============================
   {K |- comb D}

nd_implies_comb_generalize < case H2.
3 subgoal(s).

  Variables: L, K, D
  IH : forall L K D, ctxs L K -> {L |- nd D}* -> {K |- comb D}
  H1 : ctxs L K
  H3 : member (nd D) L
  ============================
   {K |- comb D}

subgoal 2 is:
 {K |- comb (imp A B)}

subgoal 3 is:
 {K |- comb D}

nd_implies_comb_generalize < apply ctxs_world to H1 H3.
3 subgoal(s).

  Variables: L, K, D
  IH : forall L K D, ctxs L K -> {L |- nd D}* -> {K |- comb D}
  H1 : ctxs L K
  H3 : member (nd D) L
  H4 : member (comb D) K
  ============================
   {K |- comb D}

subgoal 2 is:
 {K |- comb (imp A B)}

subgoal 3 is:
 {K |- comb D}

nd_implies_comb_generalize < search.
2 subgoal(s).

  Variables: L, K, D, B, A
  IH : forall L K D, ctxs L K -> {L |- nd D}* -> {K |- comb D}
  H1 : ctxs L K
  H3 : {L, nd A |- nd B}*
  ============================
   {K |- comb (imp A B)}

subgoal 2 is:
 {K |- comb D}

nd_implies_comb_generalize < apply IH to _ H3.
2 subgoal(s).

  Variables: L, K, D, B, A
  IH : forall L K D, ctxs L K -> {L |- nd D}* -> {K |- comb D}
  H1 : ctxs L K
  H3 : {L, nd A |- nd B}*
  H4 : {K, comb A |- comb B}
  ============================
   {K |- comb (imp A B)}

subgoal 2 is:
 {K |- comb D}

nd_implies_comb_generalize < apply deduction to H4.
2 subgoal(s).

  Variables: L, K, D, B, A
  IH : forall L K D, ctxs L K -> {L |- nd D}* -> {K |- comb D}
  H1 : ctxs L K
  H3 : {L, nd A |- nd B}*
  H4 : {K, comb A |- comb B}
  H5 : {K |- comb (imp A B)}
  ============================
   {K |- comb (imp A B)}

subgoal 2 is:
 {K |- comb D}

nd_implies_comb_generalize < search.
1 subgoal(s).

  Variables: L, K, D, A
  IH : forall L K D, ctxs L K -> {L |- nd D}* -> {K |- comb D}
  H1 : ctxs L K
  H3 : {L |- nd (imp A D)}*
  H4 : {L |- nd A}*
  ============================
   {K |- comb D}

nd_implies_comb_generalize < apply IH to H1 H3.
1 subgoal(s).

  Variables: L, K, D, A
  IH : forall L K D, ctxs L K -> {L |- nd D}* -> {K |- comb D}
  H1 : ctxs L K
  H3 : {L |- nd (imp A D)}*
  H4 : {L |- nd A}*
  H5 : {K |- comb (imp A D)}
  ============================
   {K |- comb D}

nd_implies_comb_generalize < apply IH to H1 H4.
1 subgoal(s).

  Variables: L, K, D, A
  IH : forall L K D, ctxs L K -> {L |- nd D}* -> {K |- comb D}
  H1 : ctxs L K
  H3 : {L |- nd (imp A D)}*
  H4 : {L |- nd A}*
  H5 : {K |- comb (imp A D)}
  H6 : {K |- comb A}
  ============================
   {K |- comb D}

nd_implies_comb_generalize < search.
Proof completed.
Abella < Theorem nd_implies_comb : 
forall D, {nd D} -> {comb D}.
1 subgoal(s).

  
  ============================
   forall D, {nd D} -> {comb D}

nd_implies_comb < intros.
1 subgoal(s).

  Variables: D
  H1 : {nd D}
  ============================
   {comb D}

nd_implies_comb < apply nd_implies_comb_generalize to _ H1.
1 subgoal(s).

  Variables: D
  H1 : {nd D}
  H2 : {comb D}
  ============================
   {comb D}

nd_implies_comb < search.
Proof completed.
Abella < Theorem comb_implies_nd : 
forall D, {comb D} -> {nd D}.
1 subgoal(s).

  
  ============================
   forall D, {comb D} -> {nd D}

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

  
  IH : forall D, {comb D}* -> {nd D}
  ============================
   forall D, {comb D}@ -> {nd D}

comb_implies_nd < intros.
1 subgoal(s).

  Variables: D
  IH : forall D, {comb D}* -> {nd D}
  H1 : {comb D}@
  ============================
   {nd D}

comb_implies_nd < case H1.
3 subgoal(s).

  Variables: D, B, A
  IH : forall D, {comb D}* -> {nd D}
  ============================
   {nd (imp A (imp B A))}

subgoal 2 is:
 {nd (imp (imp A (imp B C)) (imp (imp A B) (imp A C)))}

subgoal 3 is:
 {nd D}

comb_implies_nd < search.
2 subgoal(s).

  Variables: D, C, B, A
  IH : forall D, {comb D}* -> {nd D}
  ============================
   {nd (imp (imp A (imp B C)) (imp (imp A B) (imp A C)))}

subgoal 2 is:
 {nd D}

comb_implies_nd < assert {nd (imp A (imp B C)), nd (imp A B), nd A |- nd C}.
2 subgoal(s).

  Variables: D, C, B, A
  IH : forall D, {comb D}* -> {nd D}
  H2 : {nd (imp A (imp B C)), nd (imp A B), nd A |- nd C}
  ============================
   {nd (imp (imp A (imp B C)) (imp (imp A B) (imp A C)))}

subgoal 2 is:
 {nd D}

comb_implies_nd < search.
1 subgoal(s).

  Variables: D, A
  IH : forall D, {comb D}* -> {nd D}
  H2 : {comb (imp A D)}*
  H3 : {comb A}*
  ============================
   {nd D}

comb_implies_nd < apply IH to H2.
1 subgoal(s).

  Variables: D, A
  IH : forall D, {comb D}* -> {nd D}
  H2 : {comb (imp A D)}*
  H3 : {comb A}*
  H4 : {nd (imp A D)}
  ============================
   {nd D}

comb_implies_nd < apply IH to H3.
1 subgoal(s).

  Variables: D, A
  IH : forall D, {comb D}* -> {nd D}
  H2 : {comb (imp A D)}*
  H3 : {comb A}*
  H4 : {nd (imp A D)}
  H5 : {nd A}
  ============================
   {nd D}

comb_implies_nd < search.
Proof completed.
Abella < Goodbye.