Welcome to Abella 1.1.3-dev2
Reading clauses from cascade.mod
Abella < Define subst nil T T.
Abella < Define nabla x, subst (pair x K :: L) (T x) S := subst L (T K) S.
Abella < Theorem subst_app :
forall L T R S, subst L (app T R) S -> (exists U V, S = app U V /\
subst L T U /\ subst L R V).
1 subgoal(s).
============================
forall L T R S, subst L (app T R) S -> (exists U V, S = app U V /\
subst L T U /\ subst L R V)
subst_app < induction on 1.
1 subgoal(s).
IH : forall L T R S, subst L (app T R) S * -> (exists U V, S = app U V /\
subst L T U /\ subst L R V)
============================
forall L T R S, subst L (app T R) S @ -> (exists U V, S = app U V /\
subst L T U /\ subst L R V)
subst_app < intros.
1 subgoal(s).
Variables: L, T, R, S
IH : forall L T R S, subst L (app T R) S * -> (exists U V, S = app U V /\
subst L T U /\ subst L R V)
H1 : subst L (app T R) S @
============================
exists U V, S = app U V /\ subst L T U /\ subst L R V
subst_app < case H1.
2 subgoal(s).
Variables: L, T, R, S
IH : forall L T R S, subst L (app T R) S * -> (exists U V, S = app U V /\
subst L T U /\ subst L R V)
============================
exists U V, app T R = app U V /\ subst nil T U /\ subst nil R V
subgoal 2 is:
exists U V, S1 = app U V /\ subst (pair n1 K :: L1) (T n1) U /\
subst (pair n1 K :: L1) (R n1) V
subst_app < search.
1 subgoal(s).
Variables: L, T, R, S, S1, L1, K
IH : forall L T R S, subst L (app T R) S * -> (exists U V, S = app U V /\
subst L T U /\ subst L R V)
H2 : subst L1 (app (T K) (R K)) S1 *
============================
exists U V, S1 = app U V /\ subst (pair n1 K :: L1) (T n1) U /\
subst (pair n1 K :: L1) (R n1) V
subst_app < apply IH to H2.
1 subgoal(s).
Variables: L, T, R, S, S1, L1, K, U, V
IH : forall L T R S, subst L (app T R) S * -> (exists U V, S = app U V /\
subst L T U /\ subst L R V)
H2 : subst L1 (app (T K) (R K)) (app U V) *
H3 : subst L1 (T K) U
H4 : subst L1 (R K) V
============================
exists U1 V1, app U V = app U1 V1 /\ subst (pair n1 K :: L1) (T n1) U1 /\
subst (pair n1 K :: L1) (R n1) V1
subst_app < search.
Proof completed.
Abella < Theorem subst_abs :
forall L T R, subst L (abs T) R -> (exists S, R = abs S /\ (nabla z,
subst L (T z) (S z))).
1 subgoal(s).
============================
forall L T R, subst L (abs T) R -> (exists S, R = abs S /\ (nabla z,
subst L (T z) (S z)))
subst_abs < induction on 1.
1 subgoal(s).
IH : forall L T R, subst L (abs T) R * -> (exists S, R = abs S /\ (nabla z,
subst L (T z) (S z)))
============================
forall L T R, subst L (abs T) R @ -> (exists S, R = abs S /\ (nabla z,
subst L (T z) (S z)))
subst_abs < intros.
1 subgoal(s).
Variables: L, T, R
IH : forall L T R, subst L (abs T) R * -> (exists S, R = abs S /\ (nabla z,
subst L (T z) (S z)))
H1 : subst L (abs T) R @
============================
exists S, R = abs S /\ (nabla z, subst L (T z) (S z))
subst_abs < case H1.
2 subgoal(s).
Variables: L, T, R
IH : forall L T R, subst L (abs T) R * -> (exists S, R = abs S /\ (nabla z,
subst L (T z) (S z)))
============================
exists S, abs T = abs S /\ (nabla z, subst nil (T z) (S z))
subgoal 2 is:
exists S1, S = abs S1 /\ (nabla z, subst (pair n1 K :: L1) (T n1 z) (S1 z))
subst_abs < search.
1 subgoal(s).
Variables: L, T, R, S, L1, K
IH : forall L T R, subst L (abs T) R * -> (exists S, R = abs S /\ (nabla z,
subst L (T z) (S z)))
H2 : subst L1 (abs (T K)) S *
============================
exists S1, S = abs S1 /\ (nabla z,
subst (pair n1 K :: L1) (T n1 z) (S1 z))
subst_abs < apply IH to H2.
1 subgoal(s).
Variables: L, T, R, S, L1, K, S1
IH : forall L T R, subst L (abs T) R * -> (exists S, R = abs S /\ (nabla z,
subst L (T z) (S z)))
H2 : subst L1 (abs (T K)) (abs S1) *
H3 : subst L1 (T K n1) (S1 n1)
============================
exists S2, abs S1 = abs S2 /\ (nabla z,
subst (pair n1 K :: L1) (T n1 z) (S2 z))
subst_abs < search.
Proof completed.
Abella < Goodbye.