Welcome to Abella 1.1.3-dev2 Reading clauses from subst.mod
Abella < Define ctx nil nil.
Abella < Define ctx (term X :: L1) (copy X X :: L2) := ctx L1 L2.
Abella < Theorem ctx_lemma : 
forall L1 L2 T, ctx L1 L2 -> member (term T) L1 -> member (copy T T) L2.
1 subgoal(s).

  
  ============================
   forall L1 L2 T, ctx L1 L2 -> member (term T) L1 -> member (copy T T) L2

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

  
  IH : forall L1 L2 T, ctx L1 L2 * -> member (term T) L1 ->
         member (copy T T) L2
  ============================
   forall L1 L2 T, ctx L1 L2 @ -> member (term T) L1 -> member (copy T T) L2

ctx_lemma < intros.
1 subgoal(s).

  Variables: L1, L2, T
  IH : forall L1 L2 T, ctx L1 L2 * -> member (term T) L1 ->
         member (copy T T) L2
  H1 : ctx L1 L2 @
  H2 : member (term T) L1
  ============================
   member (copy T T) L2

ctx_lemma < case H1.
2 subgoal(s).

  Variables: L1, L2, T
  IH : forall L1 L2 T, ctx L1 L2 * -> member (term T) L1 ->
         member (copy T T) L2
  H2 : member (term T) nil
  ============================
   member (copy T T) nil

subgoal 2 is:
 member (copy T T) (copy X X :: L4)

ctx_lemma < case H2.
1 subgoal(s).

  Variables: L1, L2, T, L4, L3, X
  IH : forall L1 L2 T, ctx L1 L2 * -> member (term T) L1 ->
         member (copy T T) L2
  H2 : member (term T) (term X :: L3)
  H3 : ctx L3 L4 *
  ============================
   member (copy T T) (copy X X :: L4)

ctx_lemma < case H2.
2 subgoal(s).

  Variables: L1, L2, T, L4, L3, X
  IH : forall L1 L2 T, ctx L1 L2 * -> member (term T) L1 ->
         member (copy T T) L2
  H3 : ctx L3 L4 *
  ============================
   member (copy X X) (copy X X :: L4)

subgoal 2 is:
 member (copy T T) (copy X X :: L4)

ctx_lemma < search.
1 subgoal(s).

  Variables: L1, L2, T, L4, L3, X
  IH : forall L1 L2 T, ctx L1 L2 * -> member (term T) L1 ->
         member (copy T T) L2
  H3 : ctx L3 L4 *
  H4 : member (term T) L3
  ============================
   member (copy T T) (copy X X :: L4)

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

  Variables: L1, L2, T, L4, L3, X
  IH : forall L1 L2 T, ctx L1 L2 * -> member (term T) L1 ->
         member (copy T T) L2
  H3 : ctx L3 L4 *
  H4 : member (term T) L3
  H5 : member (copy T T) L4
  ============================
   member (copy T T) (copy X X :: L4)

ctx_lemma < search.
Proof completed.
Abella < Theorem copy_id : 
forall L1 L2 T, ctx L1 L2 -> {L1 |- term T} -> {L2 |- copy T T}.
1 subgoal(s).

  
  ============================
   forall L1 L2 T, ctx L1 L2 -> {L1 |- term T} -> {L2 |- copy T T}

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

  
  IH : forall L1 L2 T, ctx L1 L2 -> {L1 |- term T}* -> {L2 |- copy T T}
  ============================
   forall L1 L2 T, ctx L1 L2 -> {L1 |- term T}@ -> {L2 |- copy T T}

copy_id < intros.
1 subgoal(s).

  Variables: L1, L2, T
  IH : forall L1 L2 T, ctx L1 L2 -> {L1 |- term T}* -> {L2 |- copy T T}
  H1 : ctx L1 L2
  H2 : {L1 |- term T}@
  ============================
   {L2 |- copy T T}

copy_id < case H2.
3 subgoal(s).

  Variables: L1, L2, T
  IH : forall L1 L2 T, ctx L1 L2 -> {L1 |- term T}* -> {L2 |- copy T T}
  H1 : ctx L1 L2
  H3 : member (term T) L1
  ============================
   {L2 |- copy T T}

subgoal 2 is:
 {L2 |- copy (app M N) (app M N)}

subgoal 3 is:
 {L2 |- copy (abs R) (abs R)}

copy_id < apply ctx_lemma to H1 H3.
3 subgoal(s).

  Variables: L1, L2, T
  IH : forall L1 L2 T, ctx L1 L2 -> {L1 |- term T}* -> {L2 |- copy T T}
  H1 : ctx L1 L2
  H3 : member (term T) L1
  H4 : member (copy T T) L2
  ============================
   {L2 |- copy T T}

subgoal 2 is:
 {L2 |- copy (app M N) (app M N)}

subgoal 3 is:
 {L2 |- copy (abs R) (abs R)}

copy_id < search.
2 subgoal(s).

  Variables: L1, L2, T, N, M
  IH : forall L1 L2 T, ctx L1 L2 -> {L1 |- term T}* -> {L2 |- copy T T}
  H1 : ctx L1 L2
  H3 : {L1 |- term M}*
  H4 : {L1 |- term N}*
  ============================
   {L2 |- copy (app M N) (app M N)}

subgoal 2 is:
 {L2 |- copy (abs R) (abs R)}

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

  Variables: L1, L2, T, N, M
  IH : forall L1 L2 T, ctx L1 L2 -> {L1 |- term T}* -> {L2 |- copy T T}
  H1 : ctx L1 L2
  H3 : {L1 |- term M}*
  H4 : {L1 |- term N}*
  H5 : {L2 |- copy M M}
  ============================
   {L2 |- copy (app M N) (app M N)}

subgoal 2 is:
 {L2 |- copy (abs R) (abs R)}

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

  Variables: L1, L2, T, N, M
  IH : forall L1 L2 T, ctx L1 L2 -> {L1 |- term T}* -> {L2 |- copy T T}
  H1 : ctx L1 L2
  H3 : {L1 |- term M}*
  H4 : {L1 |- term N}*
  H5 : {L2 |- copy M M}
  H6 : {L2 |- copy N N}
  ============================
   {L2 |- copy (app M N) (app M N)}

subgoal 2 is:
 {L2 |- copy (abs R) (abs R)}

copy_id < search.
1 subgoal(s).

  Variables: L1, L2, T, R
  IH : forall L1 L2 T, ctx L1 L2 -> {L1 |- term T}* -> {L2 |- copy T T}
  H1 : ctx L1 L2
  H3 : {L1, term n1 |- term (R n1)}*
  ============================
   {L2 |- copy (abs R) (abs R)}

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

  Variables: L1, L2, T, R
  IH : forall L1 L2 T, ctx L1 L2 -> {L1 |- term T}* -> {L2 |- copy T T}
  H1 : ctx L1 L2
  H3 : {L1, term n1 |- term (R n1)}*
  H4 : {L2, copy n1 n1 |- copy (R n1) (R n1)}
  ============================
   {L2 |- copy (abs R) (abs R)}

copy_id < search.
Proof completed.
Abella < Define ctx2 nil.
Abella < Define ctx2 (copy X X :: L) := ctx2 L.
Abella < Theorem ctx2_eq : 
forall L T S, ctx2 L -> member (copy T S) L -> T = S.
1 subgoal(s).

  
  ============================
   forall L T S, ctx2 L -> member (copy T S) L -> T = S

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

  
  IH : forall L T S, ctx2 L * -> member (copy T S) L -> T = S
  ============================
   forall L T S, ctx2 L @ -> member (copy T S) L -> T = S

ctx2_eq < intros.
1 subgoal(s).

  Variables: L, T, S
  IH : forall L T S, ctx2 L * -> member (copy T S) L -> T = S
  H1 : ctx2 L @
  H2 : member (copy T S) L
  ============================
   T = S

ctx2_eq < case H1.
2 subgoal(s).

  Variables: L, T, S
  IH : forall L T S, ctx2 L * -> member (copy T S) L -> T = S
  H2 : member (copy T S) nil
  ============================
   T = S

subgoal 2 is:
 T = S

ctx2_eq < case H2.
1 subgoal(s).

  Variables: L, T, S, L1, X
  IH : forall L T S, ctx2 L * -> member (copy T S) L -> T = S
  H2 : member (copy T S) (copy X X :: L1)
  H3 : ctx2 L1 *
  ============================
   T = S

ctx2_eq < case H2.
2 subgoal(s).

  Variables: L, T, S, L1, X
  IH : forall L T S, ctx2 L * -> member (copy T S) L -> T = S
  H3 : ctx2 L1 *
  ============================
   X = X

subgoal 2 is:
 T = S

ctx2_eq < search.
1 subgoal(s).

  Variables: L, T, S, L1, X
  IH : forall L T S, ctx2 L * -> member (copy T S) L -> T = S
  H3 : ctx2 L1 *
  H4 : member (copy T S) L1
  ============================
   T = S

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

  Variables: L, T, S, L1, X
  IH : forall L T S, ctx2 L * -> member (copy T S) L -> T = S
  H3 : ctx2 L1 *
  H4 : member (copy S S) L1
  ============================
   S = S

ctx2_eq < search.
Proof completed.
Abella < Theorem copy_eq : 
forall L T S, ctx2 L -> {L |- copy T S} -> T = S.
1 subgoal(s).

  
  ============================
   forall L T S, ctx2 L -> {L |- copy T S} -> T = S

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

  
  IH : forall L T S, ctx2 L -> {L |- copy T S}* -> T = S
  ============================
   forall L T S, ctx2 L -> {L |- copy T S}@ -> T = S

copy_eq < intros.
1 subgoal(s).

  Variables: L, T, S
  IH : forall L T S, ctx2 L -> {L |- copy T S}* -> T = S
  H1 : ctx2 L
  H2 : {L |- copy T S}@
  ============================
   T = S

copy_eq < case H2.
3 subgoal(s).

  Variables: L, T, S
  IH : forall L T S, ctx2 L -> {L |- copy T S}* -> T = S
  H1 : ctx2 L
  H3 : member (copy T S) L
  ============================
   T = S

subgoal 2 is:
 app N M = app P Q

subgoal 3 is:
 abs R = abs S1

copy_eq < apply ctx2_eq to H1 H3.
3 subgoal(s).

  Variables: L, T, S
  IH : forall L T S, ctx2 L -> {L |- copy T S}* -> T = S
  H1 : ctx2 L
  H3 : member (copy S S) L
  ============================
   S = S

subgoal 2 is:
 app N M = app P Q

subgoal 3 is:
 abs R = abs S1

copy_eq < search.
2 subgoal(s).

  Variables: L, T, S, Q, P, M, N
  IH : forall L T S, ctx2 L -> {L |- copy T S}* -> T = S
  H1 : ctx2 L
  H3 : {L |- copy N P}*
  H4 : {L |- copy M Q}*
  ============================
   app N M = app P Q

subgoal 2 is:
 abs R = abs S1

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

  Variables: L, T, S, Q, P, M, N
  IH : forall L T S, ctx2 L -> {L |- copy T S}* -> T = S
  H1 : ctx2 L
  H3 : {L |- copy P P}*
  H4 : {L |- copy M Q}*
  ============================
   app P M = app P Q

subgoal 2 is:
 abs R = abs S1

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

  Variables: L, T, S, Q, P, M, N
  IH : forall L T S, ctx2 L -> {L |- copy T S}* -> T = S
  H1 : ctx2 L
  H3 : {L |- copy P P}*
  H4 : {L |- copy Q Q}*
  ============================
   app P Q = app P Q

subgoal 2 is:
 abs R = abs S1

copy_eq < search.
1 subgoal(s).

  Variables: L, T, S, S1, R
  IH : forall L T S, ctx2 L -> {L |- copy T S}* -> T = S
  H1 : ctx2 L
  H3 : {L, copy n1 n1 |- copy (R n1) (S1 n1)}*
  ============================
   abs R = abs S1

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

  Variables: L, T, S, S1, R
  IH : forall L T S, ctx2 L -> {L |- copy T S}* -> T = S
  H1 : ctx2 L
  H3 : {L, copy n1 n1 |- copy (S1 n1) (S1 n1)}*
  ============================
   abs (x1\S1 x1) = abs S1

copy_eq < search.
Proof completed.
Abella < Theorem subst : 
forall R T S, {term T} -> {subst R T S} -> R T = S.
1 subgoal(s).

  
  ============================
   forall R T S, {term T} -> {subst R T S} -> R T = S

subst < intros.
1 subgoal(s).

  Variables: R, T, S
  H1 : {term T}
  H2 : {subst R T S}
  ============================
   R T = S

subst < case H2.
1 subgoal(s).

  Variables: R, T, S
  H1 : {term T}
  H3 : {copy n1 T |- copy (R n1) S}
  ============================
   R T = S

subst < apply copy_id to _ H1.
1 subgoal(s).

  Variables: R, T, S
  H1 : {term T}
  H3 : {copy n1 T |- copy (R n1) S}
  H4 : {copy T T}
  ============================
   R T = S

subst < inst H3 with n1 = T.
1 subgoal(s).

  Variables: R, T, S
  H1 : {term T}
  H3 : {copy n1 T |- copy (R n1) S}
  H4 : {copy T T}
  H5 : {copy T T |- copy (R T) S}
  ============================
   R T = S

subst < cut H5 with H4.
1 subgoal(s).

  Variables: R, T, S
  H1 : {term T}
  H3 : {copy n1 T |- copy (R n1) S}
  H4 : {copy T T}
  H5 : {copy T T |- copy (R T) S}
  H6 : {copy (R T) S}
  ============================
   R T = S

subst < apply copy_eq to _ H6.
1 subgoal(s).

  Variables: R, T, S
  H1 : {term T}
  H3 : {copy n1 T |- copy (R n1) (R T)}
  H4 : {copy T T}
  H5 : {copy T T |- copy (R T) (R T)}
  H6 : {copy (R T) (R T)}
  ============================
   R T = R T

subst < search.
Proof completed.
Abella < Goodbye.