Welcome to Abella 2.0.7-dev.
Abella < Kind atm Type.
Abella < Type a, b, c, d, e, f atm.
Abella < Type atom, natom atm -> o.
Abella < Type tens, par o -> o -> o.
Abella < Type one, bot o.
Abella < Define is_fm : o -> prop by
is_fm (atom A);
is_fm (natom A);
is_fm (tens A B) := is_fm A /\ is_fm B;
is_fm (par A B) := is_fm A /\ is_fm B;
is_fm one;
is_fm bot.
Abella < Define dual : o -> o -> prop by
dual (atom A) (natom A);
dual (tens A B) (par AA BB) := dual A AA /\ dual B BB;
dual one bot.
Abella < Theorem dual_is :
forall A B, dual A B -> is_fm A /\ is_fm B.
============================
forall A B, dual A B -> is_fm A /\ is_fm B
dual_is < induction on 1.
IH : forall A B, dual A B * -> is_fm A /\ is_fm B
============================
forall A B, dual A B @ -> is_fm A /\ is_fm B
dual_is < intros.
Variables: A B
IH : forall A B, dual A B * -> is_fm A /\ is_fm B
H1 : dual A B @
============================
is_fm A /\ is_fm B
dual_is < case H1.
Subgoal 1:
Variables: A1
IH : forall A B, dual A B * -> is_fm A /\ is_fm B
============================
is_fm (atom A1) /\ is_fm (natom A1)
Subgoal 2 is:
is_fm (tens A1 B1) /\ is_fm (par AA BB)
Subgoal 3 is:
is_fm one /\ is_fm bot
dual_is < search.
Subgoal 2:
Variables: BB AA B1 A1
IH : forall A B, dual A B * -> is_fm A /\ is_fm B
H2 : dual A1 AA *
H3 : dual B1 BB *
============================
is_fm (tens A1 B1) /\ is_fm (par AA BB)
Subgoal 3 is:
is_fm one /\ is_fm bot
dual_is < apply IH to *H2.
Subgoal 2:
Variables: BB AA B1 A1
IH : forall A B, dual A B * -> is_fm A /\ is_fm B
H3 : dual B1 BB *
H4 : is_fm A1
H5 : is_fm AA
============================
is_fm (tens A1 B1) /\ is_fm (par AA BB)
Subgoal 3 is:
is_fm one /\ is_fm bot
dual_is < apply IH to *H3.
Subgoal 2:
Variables: BB AA B1 A1
IH : forall A B, dual A B * -> is_fm A /\ is_fm B
H4 : is_fm A1
H5 : is_fm AA
H6 : is_fm B1
H7 : is_fm BB
============================
is_fm (tens A1 B1) /\ is_fm (par AA BB)
Subgoal 3 is:
is_fm one /\ is_fm bot
dual_is < search.
Subgoal 3:
IH : forall A B, dual A B * -> is_fm A /\ is_fm B
============================
is_fm one /\ is_fm bot
dual_is < search.
Proof completed.
Abella < Import "../../lib/merge" with is_o := is_fm.
Importing from "../../lib/merge".
Abella < Define mll : (list o) -> prop by
mll L := exists A, adj (natom A :: nil) (atom A) L;
mll L := exists A B LL JJ KK J K, adj LL (tens A B) L /\ merge JJ KK LL /\
adj JJ A J /\ mll J /\ adj KK B K /\ mll K;
mll (one :: nil);
mll L := exists A B LL J K, adj LL (par A B) L /\ adj LL A J /\ adj J B K /\ mll K;
mll L := exists LL, adj LL bot L /\ mll LL.
Abella < Theorem generalized_id :
forall A B, dual A B -> mll (A :: B :: nil).
============================
forall A B, dual A B -> mll (A :: B :: nil)
generalized_id < induction on 1.
IH : forall A B, dual A B * -> mll (A :: B :: nil)
============================
forall A B, dual A B @ -> mll (A :: B :: nil)
generalized_id < intros.
Variables: A B
IH : forall A B, dual A B * -> mll (A :: B :: nil)
H1 : dual A B @
============================
mll (A :: B :: nil)
generalized_id < case H1.
Subgoal 1:
Variables: A1
IH : forall A B, dual A B * -> mll (A :: B :: nil)
============================
mll (atom A1 :: natom A1 :: nil)
Subgoal 2 is:
mll (tens A1 B1 :: par AA BB :: nil)
Subgoal 3 is:
mll (one :: bot :: nil)
generalized_id < search.
Subgoal 2:
Variables: BB AA B1 A1
IH : forall A B, dual A B * -> mll (A :: B :: nil)
H2 : dual A1 AA *
H3 : dual B1 BB *
============================
mll (tens A1 B1 :: par AA BB :: nil)
Subgoal 3 is:
mll (one :: bot :: nil)
generalized_id < apply IH to H2.
Subgoal 2:
Variables: BB AA B1 A1
IH : forall A B, dual A B * -> mll (A :: B :: nil)
H2 : dual A1 AA *
H3 : dual B1 BB *
H4 : mll (A1 :: AA :: nil)
============================
mll (tens A1 B1 :: par AA BB :: nil)
Subgoal 3 is:
mll (one :: bot :: nil)
generalized_id < apply IH to H3.
Subgoal 2:
Variables: BB AA B1 A1
IH : forall A B, dual A B * -> mll (A :: B :: nil)
H2 : dual A1 AA *
H3 : dual B1 BB *
H4 : mll (A1 :: AA :: nil)
H5 : mll (B1 :: BB :: nil)
============================
mll (tens A1 B1 :: par AA BB :: nil)
Subgoal 3 is:
mll (one :: bot :: nil)
generalized_id < apply dual_is to H2.
Subgoal 2:
Variables: BB AA B1 A1
IH : forall A B, dual A B * -> mll (A :: B :: nil)
H2 : dual A1 AA *
H3 : dual B1 BB *
H4 : mll (A1 :: AA :: nil)
H5 : mll (B1 :: BB :: nil)
H6 : is_fm A1
H7 : is_fm AA
============================
mll (tens A1 B1 :: par AA BB :: nil)
Subgoal 3 is:
mll (one :: bot :: nil)
generalized_id < apply dual_is to H3.
Subgoal 2:
Variables: BB AA B1 A1
IH : forall A B, dual A B * -> mll (A :: B :: nil)
H2 : dual A1 AA *
H3 : dual B1 BB *
H4 : mll (A1 :: AA :: nil)
H5 : mll (B1 :: BB :: nil)
H6 : is_fm A1
H7 : is_fm AA
H8 : is_fm B1
H9 : is_fm BB
============================
mll (tens A1 B1 :: par AA BB :: nil)
Subgoal 3 is:
mll (one :: bot :: nil)
generalized_id < unfold 4.
Subgoal 2:
Variables: BB AA B1 A1
IH : forall A B, dual A B * -> mll (A :: B :: nil)
H2 : dual A1 AA *
H3 : dual B1 BB *
H4 : mll (A1 :: AA :: nil)
H5 : mll (B1 :: BB :: nil)
H6 : is_fm A1
H7 : is_fm AA
H8 : is_fm B1
H9 : is_fm BB
============================
exists A B LL J K, adj LL (par A B) (tens A1 B1 :: par AA BB :: nil) /\
adj LL A J /\ adj J B K /\ mll K
Subgoal 3 is:
mll (one :: bot :: nil)
generalized_id < witness AA.
Subgoal 2:
Variables: BB AA B1 A1
IH : forall A B, dual A B * -> mll (A :: B :: nil)
H2 : dual A1 AA *
H3 : dual B1 BB *
H4 : mll (A1 :: AA :: nil)
H5 : mll (B1 :: BB :: nil)
H6 : is_fm A1
H7 : is_fm AA
H8 : is_fm B1
H9 : is_fm BB
============================
exists B LL J K, adj LL (par AA B) (tens A1 B1 :: par AA BB :: nil) /\
adj LL AA J /\ adj J B K /\ mll K
Subgoal 3 is:
mll (one :: bot :: nil)
generalized_id < witness BB.
Subgoal 2:
Variables: BB AA B1 A1
IH : forall A B, dual A B * -> mll (A :: B :: nil)
H2 : dual A1 AA *
H3 : dual B1 BB *
H4 : mll (A1 :: AA :: nil)
H5 : mll (B1 :: BB :: nil)
H6 : is_fm A1
H7 : is_fm AA
H8 : is_fm B1
H9 : is_fm BB
============================
exists LL J K, adj LL (par AA BB) (tens A1 B1 :: par AA BB :: nil) /\
adj LL AA J /\ adj J BB K /\ mll K
Subgoal 3 is:
mll (one :: bot :: nil)
generalized_id < witness tens A1 B1 :: nil.
Subgoal 2:
Variables: BB AA B1 A1
IH : forall A B, dual A B * -> mll (A :: B :: nil)
H2 : dual A1 AA *
H3 : dual B1 BB *
H4 : mll (A1 :: AA :: nil)
H5 : mll (B1 :: BB :: nil)
H6 : is_fm A1
H7 : is_fm AA
H8 : is_fm B1
H9 : is_fm BB
============================
exists J K, adj (tens A1 B1 :: nil) (par AA BB)
(tens A1 B1 :: par AA BB :: nil) /\
adj (tens A1 B1 :: nil) AA J /\ adj J BB K /\ mll K
Subgoal 3 is:
mll (one :: bot :: nil)
generalized_id < witness tens A1 B1 :: AA :: nil.
Subgoal 2:
Variables: BB AA B1 A1
IH : forall A B, dual A B * -> mll (A :: B :: nil)
H2 : dual A1 AA *
H3 : dual B1 BB *
H4 : mll (A1 :: AA :: nil)
H5 : mll (B1 :: BB :: nil)
H6 : is_fm A1
H7 : is_fm AA
H8 : is_fm B1
H9 : is_fm BB
============================
exists K, adj (tens A1 B1 :: nil) (par AA BB)
(tens A1 B1 :: par AA BB :: nil) /\
adj (tens A1 B1 :: nil) AA (tens A1 B1 :: AA :: nil) /\
adj (tens A1 B1 :: AA :: nil) BB K /\ mll K
Subgoal 3 is:
mll (one :: bot :: nil)
generalized_id < witness tens A1 B1 :: AA :: BB :: nil.
Subgoal 2:
Variables: BB AA B1 A1
IH : forall A B, dual A B * -> mll (A :: B :: nil)
H2 : dual A1 AA *
H3 : dual B1 BB *
H4 : mll (A1 :: AA :: nil)
H5 : mll (B1 :: BB :: nil)
H6 : is_fm A1
H7 : is_fm AA
H8 : is_fm B1
H9 : is_fm BB
============================
adj (tens A1 B1 :: nil) (par AA BB) (tens A1 B1 :: par AA BB :: nil) /\
adj (tens A1 B1 :: nil) AA (tens A1 B1 :: AA :: nil) /\
adj (tens A1 B1 :: AA :: nil) BB (tens A1 B1 :: AA :: BB :: nil) /\
mll (tens A1 B1 :: AA :: BB :: nil)
Subgoal 3 is:
mll (one :: bot :: nil)
generalized_id < split.
Subgoal 2.1:
Variables: BB AA B1 A1
IH : forall A B, dual A B * -> mll (A :: B :: nil)
H2 : dual A1 AA *
H3 : dual B1 BB *
H4 : mll (A1 :: AA :: nil)
H5 : mll (B1 :: BB :: nil)
H6 : is_fm A1
H7 : is_fm AA
H8 : is_fm B1
H9 : is_fm BB
============================
adj (tens A1 B1 :: nil) (par AA BB) (tens A1 B1 :: par AA BB :: nil)
Subgoal 2.2 is:
adj (tens A1 B1 :: nil) AA (tens A1 B1 :: AA :: nil)
Subgoal 2.3 is:
adj (tens A1 B1 :: AA :: nil) BB (tens A1 B1 :: AA :: BB :: nil)
Subgoal 2.4 is:
mll (tens A1 B1 :: AA :: BB :: nil)
Subgoal 3 is:
mll (one :: bot :: nil)
generalized_id < search.
Subgoal 2.2:
Variables: BB AA B1 A1
IH : forall A B, dual A B * -> mll (A :: B :: nil)
H2 : dual A1 AA *
H3 : dual B1 BB *
H4 : mll (A1 :: AA :: nil)
H5 : mll (B1 :: BB :: nil)
H6 : is_fm A1
H7 : is_fm AA
H8 : is_fm B1
H9 : is_fm BB
============================
adj (tens A1 B1 :: nil) AA (tens A1 B1 :: AA :: nil)
Subgoal 2.3 is:
adj (tens A1 B1 :: AA :: nil) BB (tens A1 B1 :: AA :: BB :: nil)
Subgoal 2.4 is:
mll (tens A1 B1 :: AA :: BB :: nil)
Subgoal 3 is:
mll (one :: bot :: nil)
generalized_id < search.
Subgoal 2.3:
Variables: BB AA B1 A1
IH : forall A B, dual A B * -> mll (A :: B :: nil)
H2 : dual A1 AA *
H3 : dual B1 BB *
H4 : mll (A1 :: AA :: nil)
H5 : mll (B1 :: BB :: nil)
H6 : is_fm A1
H7 : is_fm AA
H8 : is_fm B1
H9 : is_fm BB
============================
adj (tens A1 B1 :: AA :: nil) BB (tens A1 B1 :: AA :: BB :: nil)
Subgoal 2.4 is:
mll (tens A1 B1 :: AA :: BB :: nil)
Subgoal 3 is:
mll (one :: bot :: nil)
generalized_id < search.
Subgoal 2.4:
Variables: BB AA B1 A1
IH : forall A B, dual A B * -> mll (A :: B :: nil)
H2 : dual A1 AA *
H3 : dual B1 BB *
H4 : mll (A1 :: AA :: nil)
H5 : mll (B1 :: BB :: nil)
H6 : is_fm A1
H7 : is_fm AA
H8 : is_fm B1
H9 : is_fm BB
============================
mll (tens A1 B1 :: AA :: BB :: nil)
Subgoal 3 is:
mll (one :: bot :: nil)
generalized_id < unfold 2.
Subgoal 2.4:
Variables: BB AA B1 A1
IH : forall A B, dual A B * -> mll (A :: B :: nil)
H2 : dual A1 AA *
H3 : dual B1 BB *
H4 : mll (A1 :: AA :: nil)
H5 : mll (B1 :: BB :: nil)
H6 : is_fm A1
H7 : is_fm AA
H8 : is_fm B1
H9 : is_fm BB
============================
exists A B LL JJ KK J K, adj LL (tens A B) (tens A1 B1 :: AA :: BB :: nil) /\
merge JJ KK LL /\ adj JJ A J /\ mll J /\ adj KK B K /\ mll K
Subgoal 3 is:
mll (one :: bot :: nil)
generalized_id < witness A1.
Subgoal 2.4:
Variables: BB AA B1 A1
IH : forall A B, dual A B * -> mll (A :: B :: nil)
H2 : dual A1 AA *
H3 : dual B1 BB *
H4 : mll (A1 :: AA :: nil)
H5 : mll (B1 :: BB :: nil)
H6 : is_fm A1
H7 : is_fm AA
H8 : is_fm B1
H9 : is_fm BB
============================
exists B LL JJ KK J K, adj LL (tens A1 B) (tens A1 B1 :: AA :: BB :: nil) /\
merge JJ KK LL /\ adj JJ A1 J /\ mll J /\ adj KK B K /\ mll K
Subgoal 3 is:
mll (one :: bot :: nil)
generalized_id < witness B1.
Subgoal 2.4:
Variables: BB AA B1 A1
IH : forall A B, dual A B * -> mll (A :: B :: nil)
H2 : dual A1 AA *
H3 : dual B1 BB *
H4 : mll (A1 :: AA :: nil)
H5 : mll (B1 :: BB :: nil)
H6 : is_fm A1
H7 : is_fm AA
H8 : is_fm B1
H9 : is_fm BB
============================
exists LL JJ KK J K, adj LL (tens A1 B1) (tens A1 B1 :: AA :: BB :: nil) /\
merge JJ KK LL /\ adj JJ A1 J /\ mll J /\ adj KK B1 K /\ mll K
Subgoal 3 is:
mll (one :: bot :: nil)
generalized_id < witness AA :: BB :: nil.
Subgoal 2.4:
Variables: BB AA B1 A1
IH : forall A B, dual A B * -> mll (A :: B :: nil)
H2 : dual A1 AA *
H3 : dual B1 BB *
H4 : mll (A1 :: AA :: nil)
H5 : mll (B1 :: BB :: nil)
H6 : is_fm A1
H7 : is_fm AA
H8 : is_fm B1
H9 : is_fm BB
============================
exists JJ KK J K, adj (AA :: BB :: nil) (tens A1 B1)
(tens A1 B1 :: AA :: BB :: nil) /\
merge JJ KK (AA :: BB :: nil) /\ adj JJ A1 J /\ mll J /\ adj KK B1 K /\
mll K
Subgoal 3 is:
mll (one :: bot :: nil)
generalized_id < witness AA :: nil.
Subgoal 2.4:
Variables: BB AA B1 A1
IH : forall A B, dual A B * -> mll (A :: B :: nil)
H2 : dual A1 AA *
H3 : dual B1 BB *
H4 : mll (A1 :: AA :: nil)
H5 : mll (B1 :: BB :: nil)
H6 : is_fm A1
H7 : is_fm AA
H8 : is_fm B1
H9 : is_fm BB
============================
exists KK J K, adj (AA :: BB :: nil) (tens A1 B1)
(tens A1 B1 :: AA :: BB :: nil) /\
merge (AA :: nil) KK (AA :: BB :: nil) /\ adj (AA :: nil) A1 J /\
mll J /\ adj KK B1 K /\ mll K
Subgoal 3 is:
mll (one :: bot :: nil)
generalized_id < witness BB :: nil.
Subgoal 2.4:
Variables: BB AA B1 A1
IH : forall A B, dual A B * -> mll (A :: B :: nil)
H2 : dual A1 AA *
H3 : dual B1 BB *
H4 : mll (A1 :: AA :: nil)
H5 : mll (B1 :: BB :: nil)
H6 : is_fm A1
H7 : is_fm AA
H8 : is_fm B1
H9 : is_fm BB
============================
exists J K, adj (AA :: BB :: nil) (tens A1 B1)
(tens A1 B1 :: AA :: BB :: nil) /\
merge (AA :: nil) (BB :: nil) (AA :: BB :: nil) /\ adj (AA :: nil) A1 J /\
mll J /\ adj (BB :: nil) B1 K /\ mll K
Subgoal 3 is:
mll (one :: bot :: nil)
generalized_id < witness A1 :: AA :: nil.
Subgoal 2.4:
Variables: BB AA B1 A1
IH : forall A B, dual A B * -> mll (A :: B :: nil)
H2 : dual A1 AA *
H3 : dual B1 BB *
H4 : mll (A1 :: AA :: nil)
H5 : mll (B1 :: BB :: nil)
H6 : is_fm A1
H7 : is_fm AA
H8 : is_fm B1
H9 : is_fm BB
============================
exists K, adj (AA :: BB :: nil) (tens A1 B1) (tens A1 B1 :: AA :: BB :: nil) /\
merge (AA :: nil) (BB :: nil) (AA :: BB :: nil) /\
adj (AA :: nil) A1 (A1 :: AA :: nil) /\ mll (A1 :: AA :: nil) /\
adj (BB :: nil) B1 K /\ mll K
Subgoal 3 is:
mll (one :: bot :: nil)
generalized_id < witness B1 :: BB :: nil.
Subgoal 2.4:
Variables: BB AA B1 A1
IH : forall A B, dual A B * -> mll (A :: B :: nil)
H2 : dual A1 AA *
H3 : dual B1 BB *
H4 : mll (A1 :: AA :: nil)
H5 : mll (B1 :: BB :: nil)
H6 : is_fm A1
H7 : is_fm AA
H8 : is_fm B1
H9 : is_fm BB
============================
adj (AA :: BB :: nil) (tens A1 B1) (tens A1 B1 :: AA :: BB :: nil) /\
merge (AA :: nil) (BB :: nil) (AA :: BB :: nil) /\
adj (AA :: nil) A1 (A1 :: AA :: nil) /\ mll (A1 :: AA :: nil) /\
adj (BB :: nil) B1 (B1 :: BB :: nil) /\ mll (B1 :: BB :: nil)
Subgoal 3 is:
mll (one :: bot :: nil)
generalized_id < search.
Subgoal 3:
IH : forall A B, dual A B * -> mll (A :: B :: nil)
============================
mll (one :: bot :: nil)
generalized_id < search.
Proof completed.
Abella < Theorem mll_perm :
forall K L, mll K -> perm K L -> mll L.
============================
forall K L, mll K -> perm K L -> mll L
mll_perm < induction on 1.
IH : forall K L, mll K * -> perm K L -> mll L
============================
forall K L, mll K @ -> perm K L -> mll L
mll_perm < intros.
Variables: K L
IH : forall K L, mll K * -> perm K L -> mll L
H1 : mll K @
H2 : perm K L
============================
mll L
mll_perm < case H1.
Subgoal 1:
Variables: K L A
IH : forall K L, mll K * -> perm K L -> mll L
H2 : perm K L
H3 : adj (natom A :: nil) (atom A) K
============================
mll L
Subgoal 2 is:
mll L
Subgoal 3 is:
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < case H3.
Subgoal 1.1:
Variables: L A
IH : forall K L, mll K * -> perm K L -> mll L
H2 : perm (atom A :: natom A :: nil) L
H4 : is_fm (atom A)
H5 : is_list (natom A :: nil)
============================
mll L
Subgoal 1.2 is:
mll L
Subgoal 2 is:
mll L
Subgoal 3 is:
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < apply perm_cons_1 to *H2.
Subgoal 1.1:
Variables: L A J
IH : forall K L, mll K * -> perm K L -> mll L
H4 : is_fm (atom A)
H5 : is_list (natom A :: nil)
H6 : adj J (atom A) L
H7 : perm (natom A :: nil) J
============================
mll L
Subgoal 1.2 is:
mll L
Subgoal 2 is:
mll L
Subgoal 3 is:
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < apply perm_cons_1 to *H7.
Subgoal 1.1:
Variables: L A J J1
IH : forall K L, mll K * -> perm K L -> mll L
H4 : is_fm (atom A)
H5 : is_list (natom A :: nil)
H6 : adj J (atom A) L
H8 : adj J1 (natom A) J
H9 : perm nil J1
============================
mll L
Subgoal 1.2 is:
mll L
Subgoal 2 is:
mll L
Subgoal 3 is:
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < case H9.
Subgoal 1.1.1:
Variables: L A J
IH : forall K L, mll K * -> perm K L -> mll L
H4 : is_fm (atom A)
H5 : is_list (natom A :: nil)
H6 : adj J (atom A) L
H8 : adj nil (natom A) J
============================
mll L
Subgoal 1.1.2 is:
mll L
Subgoal 1.2 is:
mll L
Subgoal 2 is:
mll L
Subgoal 3 is:
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < case H8.
Subgoal 1.1.1:
Variables: L A
IH : forall K L, mll K * -> perm K L -> mll L
H4 : is_fm (atom A)
H5 : is_list (natom A :: nil)
H6 : adj (natom A :: nil) (atom A) L
H10 : is_fm (natom A)
H11 : is_list nil
============================
mll L
Subgoal 1.1.2 is:
mll L
Subgoal 1.2 is:
mll L
Subgoal 2 is:
mll L
Subgoal 3 is:
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < search.
Subgoal 1.1.2:
Variables: L A J J1 A1 KK LL
IH : forall K L, mll K * -> perm K L -> mll L
H4 : is_fm (atom A)
H5 : is_list (natom A :: nil)
H6 : adj J (atom A) L
H8 : adj J1 (natom A) J
H10 : adj KK A1 nil
H11 : adj LL A1 J1
H12 : perm KK LL
============================
mll L
Subgoal 1.2 is:
mll L
Subgoal 2 is:
mll L
Subgoal 3 is:
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < case H10.
Subgoal 1.2:
Variables: L A L1
IH : forall K L, mll K * -> perm K L -> mll L
H2 : perm (natom A :: L1) L
H4 : is_fm (natom A)
H5 : adj nil (atom A) L1
============================
mll L
Subgoal 2 is:
mll L
Subgoal 3 is:
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < apply perm_cons_1 to *H2.
Subgoal 1.2:
Variables: L A L1 J
IH : forall K L, mll K * -> perm K L -> mll L
H4 : is_fm (natom A)
H5 : adj nil (atom A) L1
H6 : adj J (natom A) L
H7 : perm L1 J
============================
mll L
Subgoal 2 is:
mll L
Subgoal 3 is:
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < apply adj_nil_1 to *H5.
Subgoal 1.2:
Variables: L A J
IH : forall K L, mll K * -> perm K L -> mll L
H4 : is_fm (natom A)
H6 : adj J (natom A) L
H7 : perm (atom A :: nil) J
============================
mll L
Subgoal 2 is:
mll L
Subgoal 3 is:
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < apply perm_cons_1 to *H7.
Subgoal 1.2:
Variables: L A J J1
IH : forall K L, mll K * -> perm K L -> mll L
H4 : is_fm (natom A)
H6 : adj J (natom A) L
H8 : adj J1 (atom A) J
H9 : perm nil J1
============================
mll L
Subgoal 2 is:
mll L
Subgoal 3 is:
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < apply adj_swap to *H8 *H6.
Subgoal 1.2:
Variables: L A J J1 U
IH : forall K L, mll K * -> perm K L -> mll L
H4 : is_fm (natom A)
H9 : perm nil J1
H10 : adj J1 (natom A) U
H11 : adj U (atom A) L
============================
mll L
Subgoal 2 is:
mll L
Subgoal 3 is:
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < apply perm_nil_1 to *H9.
Subgoal 1.2:
Variables: L A J U
IH : forall K L, mll K * -> perm K L -> mll L
H4 : is_fm (natom A)
H10 : adj nil (natom A) U
H11 : adj U (atom A) L
============================
mll L
Subgoal 2 is:
mll L
Subgoal 3 is:
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < apply adj_nil_1 to *H10.
Subgoal 1.2:
Variables: L A J
IH : forall K L, mll K * -> perm K L -> mll L
H4 : is_fm (natom A)
H11 : adj (natom A :: nil) (atom A) L
============================
mll L
Subgoal 2 is:
mll L
Subgoal 3 is:
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < unfold 1.
Subgoal 1.2:
Variables: L A J
IH : forall K L, mll K * -> perm K L -> mll L
H4 : is_fm (natom A)
H11 : adj (natom A :: nil) (atom A) L
============================
exists A, adj (natom A :: nil) (atom A) L
Subgoal 2 is:
mll L
Subgoal 3 is:
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < search.
Subgoal 2:
Variables: K L A B LL JJ KK J K1
IH : forall K L, mll K * -> perm K L -> mll L
H2 : perm K L
H3 : adj LL (tens A B) K
H4 : merge JJ KK LL
H5 : adj JJ A J
H6 : mll J *
H7 : adj KK B K1
H8 : mll K1 *
============================
mll L
Subgoal 3 is:
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < apply adj_2_is_o to H5.
Subgoal 2:
Variables: K L A B LL JJ KK J K1
IH : forall K L, mll K * -> perm K L -> mll L
H2 : perm K L
H3 : adj LL (tens A B) K
H4 : merge JJ KK LL
H5 : adj JJ A J
H6 : mll J *
H7 : adj KK B K1
H8 : mll K1 *
H9 : is_fm A
============================
mll L
Subgoal 3 is:
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < apply adj_1_is_list to H5.
Subgoal 2:
Variables: K L A B LL JJ KK J K1
IH : forall K L, mll K * -> perm K L -> mll L
H2 : perm K L
H3 : adj LL (tens A B) K
H4 : merge JJ KK LL
H5 : adj JJ A J
H6 : mll J *
H7 : adj KK B K1
H8 : mll K1 *
H9 : is_fm A
H10 : is_list JJ
============================
mll L
Subgoal 3 is:
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < apply adj_2_is_o to H7.
Subgoal 2:
Variables: K L A B LL JJ KK J K1
IH : forall K L, mll K * -> perm K L -> mll L
H2 : perm K L
H3 : adj LL (tens A B) K
H4 : merge JJ KK LL
H5 : adj JJ A J
H6 : mll J *
H7 : adj KK B K1
H8 : mll K1 *
H9 : is_fm A
H10 : is_list JJ
H11 : is_fm B
============================
mll L
Subgoal 3 is:
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < apply adj_1_is_list to H7.
Subgoal 2:
Variables: K L A B LL JJ KK J K1
IH : forall K L, mll K * -> perm K L -> mll L
H2 : perm K L
H3 : adj LL (tens A B) K
H4 : merge JJ KK LL
H5 : adj JJ A J
H6 : mll J *
H7 : adj KK B K1
H8 : mll K1 *
H9 : is_fm A
H10 : is_list JJ
H11 : is_fm B
H12 : is_list KK
============================
mll L
Subgoal 3 is:
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < assert perm J (A :: JJ).
Subgoal 2.1:
Variables: K L A B LL JJ KK J K1
IH : forall K L, mll K * -> perm K L -> mll L
H2 : perm K L
H3 : adj LL (tens A B) K
H4 : merge JJ KK LL
H5 : adj JJ A J
H6 : mll J *
H7 : adj KK B K1
H8 : mll K1 *
H9 : is_fm A
H10 : is_list JJ
H11 : is_fm B
H12 : is_list KK
============================
perm J (A :: JJ)
Subgoal 2 is:
mll L
Subgoal 3 is:
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < apply perm_refl to H10.
Subgoal 2.1:
Variables: K L A B LL JJ KK J K1
IH : forall K L, mll K * -> perm K L -> mll L
H2 : perm K L
H3 : adj LL (tens A B) K
H4 : merge JJ KK LL
H5 : adj JJ A J
H6 : mll J *
H7 : adj KK B K1
H8 : mll K1 *
H9 : is_fm A
H10 : is_list JJ
H11 : is_fm B
H12 : is_list KK
H13 : perm JJ JJ
============================
perm J (A :: JJ)
Subgoal 2 is:
mll L
Subgoal 3 is:
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < search.
Subgoal 2:
Variables: K L A B LL JJ KK J K1
IH : forall K L, mll K * -> perm K L -> mll L
H2 : perm K L
H3 : adj LL (tens A B) K
H4 : merge JJ KK LL
H5 : adj JJ A J
H6 : mll J *
H7 : adj KK B K1
H8 : mll K1 *
H9 : is_fm A
H10 : is_list JJ
H11 : is_fm B
H12 : is_list KK
H13 : perm J (A :: JJ)
============================
mll L
Subgoal 3 is:
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < assert perm K1 (B :: KK).
Subgoal 2.2:
Variables: K L A B LL JJ KK J K1
IH : forall K L, mll K * -> perm K L -> mll L
H2 : perm K L
H3 : adj LL (tens A B) K
H4 : merge JJ KK LL
H5 : adj JJ A J
H6 : mll J *
H7 : adj KK B K1
H8 : mll K1 *
H9 : is_fm A
H10 : is_list JJ
H11 : is_fm B
H12 : is_list KK
H13 : perm J (A :: JJ)
============================
perm K1 (B :: KK)
Subgoal 2 is:
mll L
Subgoal 3 is:
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < apply perm_refl to H12.
Subgoal 2.2:
Variables: K L A B LL JJ KK J K1
IH : forall K L, mll K * -> perm K L -> mll L
H2 : perm K L
H3 : adj LL (tens A B) K
H4 : merge JJ KK LL
H5 : adj JJ A J
H6 : mll J *
H7 : adj KK B K1
H8 : mll K1 *
H9 : is_fm A
H10 : is_list JJ
H11 : is_fm B
H12 : is_list KK
H13 : perm J (A :: JJ)
H14 : perm KK KK
============================
perm K1 (B :: KK)
Subgoal 2 is:
mll L
Subgoal 3 is:
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < search.
Subgoal 2:
Variables: K L A B LL JJ KK J K1
IH : forall K L, mll K * -> perm K L -> mll L
H2 : perm K L
H3 : adj LL (tens A B) K
H4 : merge JJ KK LL
H5 : adj JJ A J
H6 : mll J *
H7 : adj KK B K1
H8 : mll K1 *
H9 : is_fm A
H10 : is_list JJ
H11 : is_fm B
H12 : is_list KK
H13 : perm J (A :: JJ)
H14 : perm K1 (B :: KK)
============================
mll L
Subgoal 3 is:
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < apply IH to *H6 *H13.
Subgoal 2:
Variables: K L A B LL JJ KK J K1
IH : forall K L, mll K * -> perm K L -> mll L
H2 : perm K L
H3 : adj LL (tens A B) K
H4 : merge JJ KK LL
H5 : adj JJ A J
H7 : adj KK B K1
H8 : mll K1 *
H9 : is_fm A
H10 : is_list JJ
H11 : is_fm B
H12 : is_list KK
H14 : perm K1 (B :: KK)
H15 : mll (A :: JJ)
============================
mll L
Subgoal 3 is:
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < apply IH to *H8 *H14.
Subgoal 2:
Variables: K L A B LL JJ KK J K1
IH : forall K L, mll K * -> perm K L -> mll L
H2 : perm K L
H3 : adj LL (tens A B) K
H4 : merge JJ KK LL
H5 : adj JJ A J
H7 : adj KK B K1
H9 : is_fm A
H10 : is_list JJ
H11 : is_fm B
H12 : is_list KK
H15 : mll (A :: JJ)
H16 : mll (B :: KK)
============================
mll L
Subgoal 3 is:
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < apply adj_perm_full to H2 H3.
Subgoal 2:
Variables: K L A B LL JJ KK J K1 KK1
IH : forall K L, mll K * -> perm K L -> mll L
H2 : perm K L
H3 : adj LL (tens A B) K
H4 : merge JJ KK LL
H5 : adj JJ A J
H7 : adj KK B K1
H9 : is_fm A
H10 : is_list JJ
H11 : is_fm B
H12 : is_list KK
H15 : mll (A :: JJ)
H16 : mll (B :: KK)
H17 : adj KK1 (tens A B) L
H18 : perm LL KK1
============================
mll L
Subgoal 3 is:
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < apply perm_merge_3 to *H4 *H18.
Subgoal 2:
Variables: K L A B LL JJ KK J K1 KK1
IH : forall K L, mll K * -> perm K L -> mll L
H2 : perm K L
H3 : adj LL (tens A B) K
H5 : adj JJ A J
H7 : adj KK B K1
H9 : is_fm A
H10 : is_list JJ
H11 : is_fm B
H12 : is_list KK
H15 : mll (A :: JJ)
H16 : mll (B :: KK)
H17 : adj KK1 (tens A B) L
H19 : merge JJ KK KK1
============================
mll L
Subgoal 3 is:
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < unfold 2.
Subgoal 2:
Variables: K L A B LL JJ KK J K1 KK1
IH : forall K L, mll K * -> perm K L -> mll L
H2 : perm K L
H3 : adj LL (tens A B) K
H5 : adj JJ A J
H7 : adj KK B K1
H9 : is_fm A
H10 : is_list JJ
H11 : is_fm B
H12 : is_list KK
H15 : mll (A :: JJ)
H16 : mll (B :: KK)
H17 : adj KK1 (tens A B) L
H19 : merge JJ KK KK1
============================
exists A B LL JJ KK J K, adj LL (tens A B) L /\ merge JJ KK LL /\
adj JJ A J /\ mll J /\ adj KK B K /\ mll K
Subgoal 3 is:
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < search.
Subgoal 3:
Variables: L
IH : forall K L, mll K * -> perm K L -> mll L
H2 : perm (one :: nil) L
============================
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < case H2.
Subgoal 3:
Variables: L A KK LL
IH : forall K L, mll K * -> perm K L -> mll L
H3 : adj KK A (one :: nil)
H4 : adj LL A L
H5 : perm KK LL
============================
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < case H3.
Subgoal 3.1:
Variables: L LL
IH : forall K L, mll K * -> perm K L -> mll L
H4 : adj LL one L
H5 : perm nil LL
H6 : is_fm one
H7 : is_list nil
============================
mll L
Subgoal 3.2 is:
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < apply perm_nil_1 to *H5.
Subgoal 3.1:
Variables: L
IH : forall K L, mll K * -> perm K L -> mll L
H4 : adj nil one L
H6 : is_fm one
H7 : is_list nil
============================
mll L
Subgoal 3.2 is:
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < apply adj_nil_1 to *H4.
Subgoal 3.1:
IH : forall K L, mll K * -> perm K L -> mll L
H6 : is_fm one
H7 : is_list nil
============================
mll (one :: nil)
Subgoal 3.2 is:
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < search.
Subgoal 3.2:
Variables: L A LL K1
IH : forall K L, mll K * -> perm K L -> mll L
H4 : adj LL A L
H5 : perm (one :: K1) LL
H6 : is_fm one
H7 : adj K1 A nil
============================
mll L
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < case H7.
Subgoal 4:
Variables: K L A B LL J K1
IH : forall K L, mll K * -> perm K L -> mll L
H2 : perm K L
H3 : adj LL (par A B) K
H4 : adj LL A J
H5 : adj J B K1
H6 : mll K1 *
============================
mll L
Subgoal 5 is:
mll L
mll_perm < apply adj_perm_full to *H2 *H3.
Subgoal 4:
Variables: K L A B LL J K1 KK
IH : forall K L, mll K * -> perm K L -> mll L
H4 : adj LL A J
H5 : adj J B K1
H6 : mll K1 *
H7 : adj KK (par A B) L
H8 : perm LL KK
============================
mll L
Subgoal 5 is:
mll L
mll_perm < assert perm J (A :: KK).
Subgoal 4.1:
Variables: K L A B LL J K1 KK
IH : forall K L, mll K * -> perm K L -> mll L
H4 : adj LL A J
H5 : adj J B K1
H6 : mll K1 *
H7 : adj KK (par A B) L
H8 : perm LL KK
============================
perm J (A :: KK)
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < apply adj_1_is_list to H7.
Subgoal 4.1:
Variables: K L A B LL J K1 KK
IH : forall K L, mll K * -> perm K L -> mll L
H4 : adj LL A J
H5 : adj J B K1
H6 : mll K1 *
H7 : adj KK (par A B) L
H8 : perm LL KK
H9 : is_list KK
============================
perm J (A :: KK)
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < apply adj_2_is_o to H4.
Subgoal 4.1:
Variables: K L A B LL J K1 KK
IH : forall K L, mll K * -> perm K L -> mll L
H4 : adj LL A J
H5 : adj J B K1
H6 : mll K1 *
H7 : adj KK (par A B) L
H8 : perm LL KK
H9 : is_list KK
H10 : is_fm A
============================
perm J (A :: KK)
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < search.
Subgoal 4:
Variables: K L A B LL J K1 KK
IH : forall K L, mll K * -> perm K L -> mll L
H4 : adj LL A J
H5 : adj J B K1
H6 : mll K1 *
H7 : adj KK (par A B) L
H8 : perm LL KK
H9 : perm J (A :: KK)
============================
mll L
Subgoal 5 is:
mll L
mll_perm < assert perm K1 (B :: A :: KK).
Subgoal 4.2:
Variables: K L A B LL J K1 KK
IH : forall K L, mll K * -> perm K L -> mll L
H4 : adj LL A J
H5 : adj J B K1
H6 : mll K1 *
H7 : adj KK (par A B) L
H8 : perm LL KK
H9 : perm J (A :: KK)
============================
perm K1 (B :: A :: KK)
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < apply adj_1_is_list to H7.
Subgoal 4.2:
Variables: K L A B LL J K1 KK
IH : forall K L, mll K * -> perm K L -> mll L
H4 : adj LL A J
H5 : adj J B K1
H6 : mll K1 *
H7 : adj KK (par A B) L
H8 : perm LL KK
H9 : perm J (A :: KK)
H10 : is_list KK
============================
perm K1 (B :: A :: KK)
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < apply adj_2_is_o to H4.
Subgoal 4.2:
Variables: K L A B LL J K1 KK
IH : forall K L, mll K * -> perm K L -> mll L
H4 : adj LL A J
H5 : adj J B K1
H6 : mll K1 *
H7 : adj KK (par A B) L
H8 : perm LL KK
H9 : perm J (A :: KK)
H10 : is_list KK
H11 : is_fm A
============================
perm K1 (B :: A :: KK)
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < apply adj_2_is_o to H5.
Subgoal 4.2:
Variables: K L A B LL J K1 KK
IH : forall K L, mll K * -> perm K L -> mll L
H4 : adj LL A J
H5 : adj J B K1
H6 : mll K1 *
H7 : adj KK (par A B) L
H8 : perm LL KK
H9 : perm J (A :: KK)
H10 : is_list KK
H11 : is_fm A
H12 : is_fm B
============================
perm K1 (B :: A :: KK)
Subgoal 4 is:
mll L
Subgoal 5 is:
mll L
mll_perm < search.
Subgoal 4:
Variables: K L A B LL J K1 KK
IH : forall K L, mll K * -> perm K L -> mll L
H4 : adj LL A J
H5 : adj J B K1
H6 : mll K1 *
H7 : adj KK (par A B) L
H8 : perm LL KK
H9 : perm J (A :: KK)
H10 : perm K1 (B :: A :: KK)
============================
mll L
Subgoal 5 is:
mll L
mll_perm < apply IH to *H6 *H10.
Subgoal 4:
Variables: K L A B LL J K1 KK
IH : forall K L, mll K * -> perm K L -> mll L
H4 : adj LL A J
H5 : adj J B K1
H7 : adj KK (par A B) L
H8 : perm LL KK
H9 : perm J (A :: KK)
H11 : mll (B :: A :: KK)
============================
mll L
Subgoal 5 is:
mll L
mll_perm < apply adj_1_is_list to H7.
Subgoal 4:
Variables: K L A B LL J K1 KK
IH : forall K L, mll K * -> perm K L -> mll L
H4 : adj LL A J
H5 : adj J B K1
H7 : adj KK (par A B) L
H8 : perm LL KK
H9 : perm J (A :: KK)
H11 : mll (B :: A :: KK)
H12 : is_list KK
============================
mll L
Subgoal 5 is:
mll L
mll_perm < apply adj_2_is_o to H4.
Subgoal 4:
Variables: K L A B LL J K1 KK
IH : forall K L, mll K * -> perm K L -> mll L
H4 : adj LL A J
H5 : adj J B K1
H7 : adj KK (par A B) L
H8 : perm LL KK
H9 : perm J (A :: KK)
H11 : mll (B :: A :: KK)
H12 : is_list KK
H13 : is_fm A
============================
mll L
Subgoal 5 is:
mll L
mll_perm < apply adj_2_is_o to H5.
Subgoal 4:
Variables: K L A B LL J K1 KK
IH : forall K L, mll K * -> perm K L -> mll L
H4 : adj LL A J
H5 : adj J B K1
H7 : adj KK (par A B) L
H8 : perm LL KK
H9 : perm J (A :: KK)
H11 : mll (B :: A :: KK)
H12 : is_list KK
H13 : is_fm A
H14 : is_fm B
============================
mll L
Subgoal 5 is:
mll L
mll_perm < unfold 4.
Subgoal 4:
Variables: K L A B LL J K1 KK
IH : forall K L, mll K * -> perm K L -> mll L
H4 : adj LL A J
H5 : adj J B K1
H7 : adj KK (par A B) L
H8 : perm LL KK
H9 : perm J (A :: KK)
H11 : mll (B :: A :: KK)
H12 : is_list KK
H13 : is_fm A
H14 : is_fm B
============================
exists A B LL J K, adj LL (par A B) L /\ adj LL A J /\ adj J B K /\ mll K
Subgoal 5 is:
mll L
mll_perm < search.
Subgoal 5:
Variables: K L LL
IH : forall K L, mll K * -> perm K L -> mll L
H2 : perm K L
H3 : adj LL bot K
H4 : mll LL *
============================
mll L
mll_perm < apply adj_perm_full to *H2 *H3.
Subgoal 5:
Variables: K L LL KK
IH : forall K L, mll K * -> perm K L -> mll L
H4 : mll LL *
H5 : adj KK bot L
H6 : perm LL KK
============================
mll L
mll_perm < apply IH to *H4 *H6.
Subgoal 5:
Variables: K L LL KK
IH : forall K L, mll K * -> perm K L -> mll L
H5 : adj KK bot L
H7 : mll KK
============================
mll L
mll_perm < unfold 5.
Subgoal 5:
Variables: K L LL KK
IH : forall K L, mll K * -> perm K L -> mll L
H5 : adj KK bot L
H7 : mll KK
============================
exists LL, adj LL bot L /\ mll LL
mll_perm < search.
Proof completed.
Abella < Theorem bot_inv :
forall J L, mll L -> adj J bot L -> mll J.
============================
forall J L, mll L -> adj J bot L -> mll J
bot_inv < induction on 1.
IH : forall J L, mll L * -> adj J bot L -> mll J
============================
forall J L, mll L @ -> adj J bot L -> mll J
bot_inv < intros.
Variables: J L
IH : forall J L, mll L * -> adj J bot L -> mll J
H1 : mll L @
H2 : adj J bot L
============================
mll J
bot_inv < case H1.
Subgoal 1:
Variables: J L A
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot L
H3 : adj (natom A :: nil) (atom A) L
============================
mll J
Subgoal 2 is:
mll J
Subgoal 3 is:
mll J
Subgoal 4 is:
mll J
Subgoal 5 is:
mll J
bot_inv < apply adj_same_result_diff to H2 H3.
Subgoal 1:
Variables: J L A
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot L
H3 : adj (natom A :: nil) (atom A) L
H4 : bot = atom A /\ perm J (natom A :: nil) \/
(exists KK, adj KK bot (natom A :: nil))
============================
mll J
Subgoal 2 is:
mll J
Subgoal 3 is:
mll J
Subgoal 4 is:
mll J
Subgoal 5 is:
mll J
bot_inv < case H4.
Subgoal 1:
Variables: J L A KK
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot L
H3 : adj (natom A :: nil) (atom A) L
H5 : adj KK bot (natom A :: nil)
============================
mll J
Subgoal 2 is:
mll J
Subgoal 3 is:
mll J
Subgoal 4 is:
mll J
Subgoal 5 is:
mll J
bot_inv < case H5.
Subgoal 1:
Variables: J L A K
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot L
H3 : adj (natom A :: nil) (atom A) L
H6 : is_fm (natom A)
H7 : adj K bot nil
============================
mll J
Subgoal 2 is:
mll J
Subgoal 3 is:
mll J
Subgoal 4 is:
mll J
Subgoal 5 is:
mll J
bot_inv < case H7.
Subgoal 2:
Variables: J L A B LL JJ KK J1 K
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot L
H3 : adj LL (tens A B) L
H4 : merge JJ KK LL
H5 : adj JJ A J1
H6 : mll J1 *
H7 : adj KK B K
H8 : mll K *
============================
mll J
Subgoal 3 is:
mll J
Subgoal 4 is:
mll J
Subgoal 5 is:
mll J
bot_inv < apply adj_same_result_diff to H2 H3.
Subgoal 2:
Variables: J L A B LL JJ KK J1 K
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot L
H3 : adj LL (tens A B) L
H4 : merge JJ KK LL
H5 : adj JJ A J1
H6 : mll J1 *
H7 : adj KK B K
H8 : mll K *
H9 : bot = tens A B /\ perm J LL \/ (exists KK, adj KK bot LL)
============================
mll J
Subgoal 3 is:
mll J
Subgoal 4 is:
mll J
Subgoal 5 is:
mll J
bot_inv < case H9.
Subgoal 2:
Variables: J L A B LL JJ KK J1 K KK1
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot L
H3 : adj LL (tens A B) L
H4 : merge JJ KK LL
H5 : adj JJ A J1
H6 : mll J1 *
H7 : adj KK B K
H8 : mll K *
H10 : adj KK1 bot LL
============================
mll J
Subgoal 3 is:
mll J
Subgoal 4 is:
mll J
Subgoal 5 is:
mll J
bot_inv < apply merge_unadj_3 to H4 H10.
Subgoal 2:
Variables: J L A B LL JJ KK J1 K KK1
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot L
H3 : adj LL (tens A B) L
H4 : merge JJ KK LL
H5 : adj JJ A J1
H6 : mll J1 *
H7 : adj KK B K
H8 : mll K *
H10 : adj KK1 bot LL
H11 : (exists JJ1, adj JJ1 bot JJ /\ merge JJ1 KK KK1) \/
(exists KK2, adj KK2 bot KK /\ merge JJ KK2 KK1)
============================
mll J
Subgoal 3 is:
mll J
Subgoal 4 is:
mll J
Subgoal 5 is:
mll J
bot_inv < case H11.
Subgoal 2.1:
Variables: J L A B LL JJ KK J1 K KK1 JJ1
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot L
H3 : adj LL (tens A B) L
H4 : merge JJ KK LL
H5 : adj JJ A J1
H6 : mll J1 *
H7 : adj KK B K
H8 : mll K *
H10 : adj KK1 bot LL
H12 : adj JJ1 bot JJ
H13 : merge JJ1 KK KK1
============================
mll J
Subgoal 2.2 is:
mll J
Subgoal 3 is:
mll J
Subgoal 4 is:
mll J
Subgoal 5 is:
mll J
bot_inv < apply adj_swap to H12 H5.
Subgoal 2.1:
Variables: J L A B LL JJ KK J1 K KK1 JJ1 U
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot L
H3 : adj LL (tens A B) L
H4 : merge JJ KK LL
H5 : adj JJ A J1
H6 : mll J1 *
H7 : adj KK B K
H8 : mll K *
H10 : adj KK1 bot LL
H12 : adj JJ1 bot JJ
H13 : merge JJ1 KK KK1
H14 : adj JJ1 A U
H15 : adj U bot J1
============================
mll J
Subgoal 2.2 is:
mll J
Subgoal 3 is:
mll J
Subgoal 4 is:
mll J
Subgoal 5 is:
mll J
bot_inv < apply IH to *H6 H15.
Subgoal 2.1:
Variables: J L A B LL JJ KK J1 K KK1 JJ1 U
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot L
H3 : adj LL (tens A B) L
H4 : merge JJ KK LL
H5 : adj JJ A J1
H7 : adj KK B K
H8 : mll K *
H10 : adj KK1 bot LL
H12 : adj JJ1 bot JJ
H13 : merge JJ1 KK KK1
H14 : adj JJ1 A U
H15 : adj U bot J1
H16 : mll U
============================
mll J
Subgoal 2.2 is:
mll J
Subgoal 3 is:
mll J
Subgoal 4 is:
mll J
Subgoal 5 is:
mll J
bot_inv < apply merge_unadj_1 to H4 H12.
Subgoal 2.1:
Variables: J L A B LL JJ KK J1 K KK1 JJ1 U LL1
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot L
H3 : adj LL (tens A B) L
H4 : merge JJ KK LL
H5 : adj JJ A J1
H7 : adj KK B K
H8 : mll K *
H10 : adj KK1 bot LL
H12 : adj JJ1 bot JJ
H13 : merge JJ1 KK KK1
H14 : adj JJ1 A U
H15 : adj U bot J1
H16 : mll U
H17 : adj LL1 bot LL
H18 : merge JJ1 KK LL1
============================
mll J
Subgoal 2.2 is:
mll J
Subgoal 3 is:
mll J
Subgoal 4 is:
mll J
Subgoal 5 is:
mll J
bot_inv < apply adj_swap to H17 H3.
Subgoal 2.1:
Variables: J L A B LL JJ KK J1 K KK1 JJ1 U LL1 U1
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot L
H3 : adj LL (tens A B) L
H4 : merge JJ KK LL
H5 : adj JJ A J1
H7 : adj KK B K
H8 : mll K *
H10 : adj KK1 bot LL
H12 : adj JJ1 bot JJ
H13 : merge JJ1 KK KK1
H14 : adj JJ1 A U
H15 : adj U bot J1
H16 : mll U
H17 : adj LL1 bot LL
H18 : merge JJ1 KK LL1
H19 : adj LL1 (tens A B) U1
H20 : adj U1 bot L
============================
mll J
Subgoal 2.2 is:
mll J
Subgoal 3 is:
mll J
Subgoal 4 is:
mll J
Subgoal 5 is:
mll J
bot_inv < assert mll U1.
Subgoal 2.1:
Variables: J L A B LL JJ KK J1 K KK1 JJ1 U LL1 U1
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot L
H3 : adj LL (tens A B) L
H4 : merge JJ KK LL
H5 : adj JJ A J1
H7 : adj KK B K
H8 : mll K *
H10 : adj KK1 bot LL
H12 : adj JJ1 bot JJ
H13 : merge JJ1 KK KK1
H14 : adj JJ1 A U
H15 : adj U bot J1
H16 : mll U
H17 : adj LL1 bot LL
H18 : merge JJ1 KK LL1
H19 : adj LL1 (tens A B) U1
H20 : adj U1 bot L
H21 : mll U1
============================
mll J
Subgoal 2.2 is:
mll J
Subgoal 3 is:
mll J
Subgoal 4 is:
mll J
Subgoal 5 is:
mll J
bot_inv < apply adj_same_result to H20 H2.
Subgoal 2.1:
Variables: J L A B LL JJ KK J1 K KK1 JJ1 U LL1 U1
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot L
H3 : adj LL (tens A B) L
H4 : merge JJ KK LL
H5 : adj JJ A J1
H7 : adj KK B K
H8 : mll K *
H10 : adj KK1 bot LL
H12 : adj JJ1 bot JJ
H13 : merge JJ1 KK KK1
H14 : adj JJ1 A U
H15 : adj U bot J1
H16 : mll U
H17 : adj LL1 bot LL
H18 : merge JJ1 KK LL1
H19 : adj LL1 (tens A B) U1
H20 : adj U1 bot L
H21 : mll U1
H22 : perm U1 J
============================
mll J
Subgoal 2.2 is:
mll J
Subgoal 3 is:
mll J
Subgoal 4 is:
mll J
Subgoal 5 is:
mll J
bot_inv < backchain mll_perm with K = U1.
Subgoal 2.2:
Variables: J L A B LL JJ KK J1 K KK1 KK2
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot L
H3 : adj LL (tens A B) L
H4 : merge JJ KK LL
H5 : adj JJ A J1
H6 : mll J1 *
H7 : adj KK B K
H8 : mll K *
H10 : adj KK1 bot LL
H12 : adj KK2 bot KK
H13 : merge JJ KK2 KK1
============================
mll J
Subgoal 3 is:
mll J
Subgoal 4 is:
mll J
Subgoal 5 is:
mll J
bot_inv < apply merge_unadj_2 to *H4 H12.
Subgoal 2.2:
Variables: J L A B LL JJ KK J1 K KK1 KK2 LL1
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot L
H3 : adj LL (tens A B) L
H5 : adj JJ A J1
H6 : mll J1 *
H7 : adj KK B K
H8 : mll K *
H10 : adj KK1 bot LL
H12 : adj KK2 bot KK
H13 : merge JJ KK2 KK1
H14 : adj LL1 bot LL
H15 : merge JJ KK2 LL1
============================
mll J
Subgoal 3 is:
mll J
Subgoal 4 is:
mll J
Subgoal 5 is:
mll J
bot_inv < apply adj_same_result to H14 H10.
Subgoal 2.2:
Variables: J L A B LL JJ KK J1 K KK1 KK2 LL1
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot L
H3 : adj LL (tens A B) L
H5 : adj JJ A J1
H6 : mll J1 *
H7 : adj KK B K
H8 : mll K *
H10 : adj KK1 bot LL
H12 : adj KK2 bot KK
H13 : merge JJ KK2 KK1
H14 : adj LL1 bot LL
H15 : merge JJ KK2 LL1
H16 : perm LL1 KK1
============================
mll J
Subgoal 3 is:
mll J
Subgoal 4 is:
mll J
Subgoal 5 is:
mll J
bot_inv < apply perm_merge_3 to *H15 *H16.
Subgoal 2.2:
Variables: J L A B LL JJ KK J1 K KK1 KK2 LL1
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot L
H3 : adj LL (tens A B) L
H5 : adj JJ A J1
H6 : mll J1 *
H7 : adj KK B K
H8 : mll K *
H10 : adj KK1 bot LL
H12 : adj KK2 bot KK
H13 : merge JJ KK2 KK1
H14 : adj LL1 bot LL
H17 : merge JJ KK2 KK1
============================
mll J
Subgoal 3 is:
mll J
Subgoal 4 is:
mll J
Subgoal 5 is:
mll J
bot_inv < apply adj_swap to H12 H7.
Subgoal 2.2:
Variables: J L A B LL JJ KK J1 K KK1 KK2 LL1 U
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot L
H3 : adj LL (tens A B) L
H5 : adj JJ A J1
H6 : mll J1 *
H7 : adj KK B K
H8 : mll K *
H10 : adj KK1 bot LL
H12 : adj KK2 bot KK
H13 : merge JJ KK2 KK1
H14 : adj LL1 bot LL
H17 : merge JJ KK2 KK1
H18 : adj KK2 B U
H19 : adj U bot K
============================
mll J
Subgoal 3 is:
mll J
Subgoal 4 is:
mll J
Subgoal 5 is:
mll J
bot_inv < apply IH to *H8 H19.
Subgoal 2.2:
Variables: J L A B LL JJ KK J1 K KK1 KK2 LL1 U
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot L
H3 : adj LL (tens A B) L
H5 : adj JJ A J1
H6 : mll J1 *
H7 : adj KK B K
H10 : adj KK1 bot LL
H12 : adj KK2 bot KK
H13 : merge JJ KK2 KK1
H14 : adj LL1 bot LL
H17 : merge JJ KK2 KK1
H18 : adj KK2 B U
H19 : adj U bot K
H20 : mll U
============================
mll J
Subgoal 3 is:
mll J
Subgoal 4 is:
mll J
Subgoal 5 is:
mll J
bot_inv < apply adj_swap to H10 H3.
Subgoal 2.2:
Variables: J L A B LL JJ KK J1 K KK1 KK2 LL1 U U1
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot L
H3 : adj LL (tens A B) L
H5 : adj JJ A J1
H6 : mll J1 *
H7 : adj KK B K
H10 : adj KK1 bot LL
H12 : adj KK2 bot KK
H13 : merge JJ KK2 KK1
H14 : adj LL1 bot LL
H17 : merge JJ KK2 KK1
H18 : adj KK2 B U
H19 : adj U bot K
H20 : mll U
H21 : adj KK1 (tens A B) U1
H22 : adj U1 bot L
============================
mll J
Subgoal 3 is:
mll J
Subgoal 4 is:
mll J
Subgoal 5 is:
mll J
bot_inv < assert mll U1.
Subgoal 2.2:
Variables: J L A B LL JJ KK J1 K KK1 KK2 LL1 U U1
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot L
H3 : adj LL (tens A B) L
H5 : adj JJ A J1
H6 : mll J1 *
H7 : adj KK B K
H10 : adj KK1 bot LL
H12 : adj KK2 bot KK
H13 : merge JJ KK2 KK1
H14 : adj LL1 bot LL
H17 : merge JJ KK2 KK1
H18 : adj KK2 B U
H19 : adj U bot K
H20 : mll U
H21 : adj KK1 (tens A B) U1
H22 : adj U1 bot L
H23 : mll U1
============================
mll J
Subgoal 3 is:
mll J
Subgoal 4 is:
mll J
Subgoal 5 is:
mll J
bot_inv < apply adj_same_result to H22 H2.
Subgoal 2.2:
Variables: J L A B LL JJ KK J1 K KK1 KK2 LL1 U U1
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot L
H3 : adj LL (tens A B) L
H5 : adj JJ A J1
H6 : mll J1 *
H7 : adj KK B K
H10 : adj KK1 bot LL
H12 : adj KK2 bot KK
H13 : merge JJ KK2 KK1
H14 : adj LL1 bot LL
H17 : merge JJ KK2 KK1
H18 : adj KK2 B U
H19 : adj U bot K
H20 : mll U
H21 : adj KK1 (tens A B) U1
H22 : adj U1 bot L
H23 : mll U1
H24 : perm U1 J
============================
mll J
Subgoal 3 is:
mll J
Subgoal 4 is:
mll J
Subgoal 5 is:
mll J
bot_inv < backchain mll_perm with K = U1.
Subgoal 3:
Variables: J
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot (one :: nil)
============================
mll J
Subgoal 4 is:
mll J
Subgoal 5 is:
mll J
bot_inv < case H2.
Subgoal 3:
Variables: K
IH : forall J L, mll L * -> adj J bot L -> mll J
H3 : is_fm one
H4 : adj K bot nil
============================
mll (one :: K)
Subgoal 4 is:
mll J
Subgoal 5 is:
mll J
bot_inv < case H4.
Subgoal 4:
Variables: J L A B LL J1 K
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot L
H3 : adj LL (par A B) L
H4 : adj LL A J1
H5 : adj J1 B K
H6 : mll K *
============================
mll J
Subgoal 5 is:
mll J
bot_inv < apply adj_same_result_diff to H2 H3.
Subgoal 4:
Variables: J L A B LL J1 K
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot L
H3 : adj LL (par A B) L
H4 : adj LL A J1
H5 : adj J1 B K
H6 : mll K *
H7 : bot = par A B /\ perm J LL \/ (exists KK, adj KK bot LL)
============================
mll J
Subgoal 5 is:
mll J
bot_inv < case H7.
Subgoal 4:
Variables: J L A B LL J1 K KK
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot L
H3 : adj LL (par A B) L
H4 : adj LL A J1
H5 : adj J1 B K
H6 : mll K *
H8 : adj KK bot LL
============================
mll J
Subgoal 5 is:
mll J
bot_inv < apply adj_swap to H8 H4.
Subgoal 4:
Variables: J L A B LL J1 K KK U
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot L
H3 : adj LL (par A B) L
H4 : adj LL A J1
H5 : adj J1 B K
H6 : mll K *
H8 : adj KK bot LL
H9 : adj KK A U
H10 : adj U bot J1
============================
mll J
Subgoal 5 is:
mll J
bot_inv < apply adj_swap to H10 H5.
Subgoal 4:
Variables: J L A B LL J1 K KK U U1
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot L
H3 : adj LL (par A B) L
H4 : adj LL A J1
H5 : adj J1 B K
H6 : mll K *
H8 : adj KK bot LL
H9 : adj KK A U
H10 : adj U bot J1
H11 : adj U B U1
H12 : adj U1 bot K
============================
mll J
Subgoal 5 is:
mll J
bot_inv < apply IH to *H6 H12.
Subgoal 4:
Variables: J L A B LL J1 K KK U U1
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot L
H3 : adj LL (par A B) L
H4 : adj LL A J1
H5 : adj J1 B K
H8 : adj KK bot LL
H9 : adj KK A U
H10 : adj U bot J1
H11 : adj U B U1
H12 : adj U1 bot K
H13 : mll U1
============================
mll J
Subgoal 5 is:
mll J
bot_inv < apply adj_swap to H8 H3.
Subgoal 4:
Variables: J L A B LL J1 K KK U U1 U2
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot L
H3 : adj LL (par A B) L
H4 : adj LL A J1
H5 : adj J1 B K
H8 : adj KK bot LL
H9 : adj KK A U
H10 : adj U bot J1
H11 : adj U B U1
H12 : adj U1 bot K
H13 : mll U1
H14 : adj KK (par A B) U2
H15 : adj U2 bot L
============================
mll J
Subgoal 5 is:
mll J
bot_inv < assert mll U2.
Subgoal 4:
Variables: J L A B LL J1 K KK U U1 U2
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot L
H3 : adj LL (par A B) L
H4 : adj LL A J1
H5 : adj J1 B K
H8 : adj KK bot LL
H9 : adj KK A U
H10 : adj U bot J1
H11 : adj U B U1
H12 : adj U1 bot K
H13 : mll U1
H14 : adj KK (par A B) U2
H15 : adj U2 bot L
H16 : mll U2
============================
mll J
Subgoal 5 is:
mll J
bot_inv < apply adj_same_result to H15 H2.
Subgoal 4:
Variables: J L A B LL J1 K KK U U1 U2
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot L
H3 : adj LL (par A B) L
H4 : adj LL A J1
H5 : adj J1 B K
H8 : adj KK bot LL
H9 : adj KK A U
H10 : adj U bot J1
H11 : adj U B U1
H12 : adj U1 bot K
H13 : mll U1
H14 : adj KK (par A B) U2
H15 : adj U2 bot L
H16 : mll U2
H17 : perm U2 J
============================
mll J
Subgoal 5 is:
mll J
bot_inv < backchain mll_perm with K = U2.
Subgoal 5:
Variables: J L LL
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot L
H3 : adj LL bot L
H4 : mll LL *
============================
mll J
bot_inv < apply adj_same_result to H3 H2.
Subgoal 5:
Variables: J L LL
IH : forall J L, mll L * -> adj J bot L -> mll J
H2 : adj J bot L
H3 : adj LL bot L
H4 : mll LL *
H5 : perm LL J
============================
mll J
bot_inv < backchain mll_perm.
Proof completed.
Abella < Theorem adj_sequence :
forall J A K B L, adj J A K -> adj J B L ->
(exists KK LL, adj L A LL /\ adj K B KK /\ perm KK LL).
============================
forall J A K B L, adj J A K -> adj J B L ->
(exists KK LL, adj L A LL /\ adj K B KK /\ perm KK LL)
adj_sequence < induction on 1.
IH : forall J A K B L, adj J A K * -> adj J B L ->
(exists KK LL, adj L A LL /\ adj K B KK /\ perm KK LL)
============================
forall J A K B L, adj J A K @ -> adj J B L ->
(exists KK LL, adj L A LL /\ adj K B KK /\ perm KK LL)
adj_sequence < intros.
Variables: J A K B L
IH : forall J A K B L, adj J A K * -> adj J B L ->
(exists KK LL, adj L A LL /\ adj K B KK /\ perm KK LL)
H1 : adj J A K @
H2 : adj J B L
============================
exists KK LL, adj L A LL /\ adj K B KK /\ perm KK LL
adj_sequence < case H1.
Subgoal 1:
Variables: J A B L
IH : forall J A K B L, adj J A K * -> adj J B L ->
(exists KK LL, adj L A LL /\ adj K B KK /\ perm KK LL)
H2 : adj J B L
H3 : is_fm A
H4 : is_list J
============================
exists KK LL, adj L A LL /\ adj (A :: J) B KK /\ perm KK LL
Subgoal 2 is:
exists KK LL, adj L A LL /\ adj (B1 :: L1) B KK /\ perm KK LL
adj_sequence < apply adj_3_is_list to H2.
Subgoal 1:
Variables: J A B L
IH : forall J A K B L, adj J A K * -> adj J B L ->
(exists KK LL, adj L A LL /\ adj K B KK /\ perm KK LL)
H2 : adj J B L
H3 : is_fm A
H4 : is_list J
H5 : is_list L
============================
exists KK LL, adj L A LL /\ adj (A :: J) B KK /\ perm KK LL
Subgoal 2 is:
exists KK LL, adj L A LL /\ adj (B1 :: L1) B KK /\ perm KK LL
adj_sequence < apply adj_exists to H3 H5.
Subgoal 1:
Variables: J A B L M
IH : forall J A K B L, adj J A K * -> adj J B L ->
(exists KK LL, adj L A LL /\ adj K B KK /\ perm KK LL)
H2 : adj J B L
H3 : is_fm A
H4 : is_list J
H5 : is_list L
H6 : adj L A M
============================
exists KK LL, adj L A LL /\ adj (A :: J) B KK /\ perm KK LL
Subgoal 2 is:
exists KK LL, adj L A LL /\ adj (B1 :: L1) B KK /\ perm KK LL
adj_sequence < witness A :: L.
Subgoal 1:
Variables: J A B L M
IH : forall J A K B L, adj J A K * -> adj J B L ->
(exists KK LL, adj L A LL /\ adj K B KK /\ perm KK LL)
H2 : adj J B L
H3 : is_fm A
H4 : is_list J
H5 : is_list L
H6 : adj L A M
============================
exists LL, adj L A LL /\ adj (A :: J) B (A :: L) /\ perm (A :: L) LL
Subgoal 2 is:
exists KK LL, adj L A LL /\ adj (B1 :: L1) B KK /\ perm KK LL
adj_sequence < witness M.
Subgoal 1:
Variables: J A B L M
IH : forall J A K B L, adj J A K * -> adj J B L ->
(exists KK LL, adj L A LL /\ adj K B KK /\ perm KK LL)
H2 : adj J B L
H3 : is_fm A
H4 : is_list J
H5 : is_list L
H6 : adj L A M
============================
adj L A M /\ adj (A :: J) B (A :: L) /\ perm (A :: L) M
Subgoal 2 is:
exists KK LL, adj L A LL /\ adj (B1 :: L1) B KK /\ perm KK LL
adj_sequence < split.
Subgoal 1.1:
Variables: J A B L M
IH : forall J A K B L, adj J A K * -> adj J B L ->
(exists KK LL, adj L A LL /\ adj K B KK /\ perm KK LL)
H2 : adj J B L
H3 : is_fm A
H4 : is_list J
H5 : is_list L
H6 : adj L A M
============================
adj L A M
Subgoal 1.2 is:
adj (A :: J) B (A :: L)
Subgoal 1.3 is:
perm (A :: L) M
Subgoal 2 is:
exists KK LL, adj L A LL /\ adj (B1 :: L1) B KK /\ perm KK LL
adj_sequence < search.
Subgoal 1.2:
Variables: J A B L M
IH : forall J A K B L, adj J A K * -> adj J B L ->
(exists KK LL, adj L A LL /\ adj K B KK /\ perm KK LL)
H2 : adj J B L
H3 : is_fm A
H4 : is_list J
H5 : is_list L
H6 : adj L A M
============================
adj (A :: J) B (A :: L)
Subgoal 1.3 is:
perm (A :: L) M
Subgoal 2 is:
exists KK LL, adj L A LL /\ adj (B1 :: L1) B KK /\ perm KK LL
adj_sequence < search.
Subgoal 1.3:
Variables: J A B L M
IH : forall J A K B L, adj J A K * -> adj J B L ->
(exists KK LL, adj L A LL /\ adj K B KK /\ perm KK LL)
H2 : adj J B L
H3 : is_fm A
H4 : is_list J
H5 : is_list L
H6 : adj L A M
============================
perm (A :: L) M
Subgoal 2 is:
exists KK LL, adj L A LL /\ adj (B1 :: L1) B KK /\ perm KK LL
adj_sequence < apply adj_3_is_list to H6.
Subgoal 1.3:
Variables: J A B L M
IH : forall J A K B L, adj J A K * -> adj J B L ->
(exists KK LL, adj L A LL /\ adj K B KK /\ perm KK LL)
H2 : adj J B L
H3 : is_fm A
H4 : is_list J
H5 : is_list L
H6 : adj L A M
H7 : is_list M
============================
perm (A :: L) M
Subgoal 2 is:
exists KK LL, adj L A LL /\ adj (B1 :: L1) B KK /\ perm KK LL
adj_sequence < apply perm_refl to H5.
Subgoal 1.3:
Variables: J A B L M
IH : forall J A K B L, adj J A K * -> adj J B L ->
(exists KK LL, adj L A LL /\ adj K B KK /\ perm KK LL)
H2 : adj J B L
H3 : is_fm A
H4 : is_list J
H5 : is_list L
H6 : adj L A M
H7 : is_list M
H8 : perm L L
============================
perm (A :: L) M
Subgoal 2 is:
exists KK LL, adj L A LL /\ adj (B1 :: L1) B KK /\ perm KK LL
adj_sequence < search.
Subgoal 2:
Variables: A B L L1 B1 K1
IH : forall J A K B L, adj J A K * -> adj J B L ->
(exists KK LL, adj L A LL /\ adj K B KK /\ perm KK LL)
H2 : adj (B1 :: K1) B L
H3 : is_fm B1
H4 : adj K1 A L1 *
============================
exists KK LL, adj L A LL /\ adj (B1 :: L1) B KK /\ perm KK LL
adj_sequence < case H2.
Subgoal 2.1:
Variables: A B L1 B1 K1
IH : forall J A K B L, adj J A K * -> adj J B L ->
(exists KK LL, adj L A LL /\ adj K B KK /\ perm KK LL)
H3 : is_fm B1
H4 : adj K1 A L1 *
H5 : is_fm B
H6 : is_list (B1 :: K1)
============================
exists KK LL, adj (B :: B1 :: K1) A LL /\ adj (B1 :: L1) B KK /\ perm KK LL
Subgoal 2.2 is:
exists KK LL, adj (B1 :: L2) A LL /\ adj (B1 :: L1) B KK /\ perm KK LL
adj_sequence < case H6.
Subgoal 2.1:
Variables: A B L1 B1 K1
IH : forall J A K B L, adj J A K * -> adj J B L ->
(exists KK LL, adj L A LL /\ adj K B KK /\ perm KK LL)
H3 : is_fm B1
H4 : adj K1 A L1 *
H5 : is_fm B
H7 : is_fm B1
H8 : is_list K1
============================
exists KK LL, adj (B :: B1 :: K1) A LL /\ adj (B1 :: L1) B KK /\ perm KK LL
Subgoal 2.2 is:
exists KK LL, adj (B1 :: L2) A LL /\ adj (B1 :: L1) B KK /\ perm KK LL
adj_sequence < apply adj_3_is_list to H4.
Subgoal 2.1:
Variables: A B L1 B1 K1
IH : forall J A K B L, adj J A K * -> adj J B L ->
(exists KK LL, adj L A LL /\ adj K B KK /\ perm KK LL)
H3 : is_fm B1
H4 : adj K1 A L1 *
H5 : is_fm B
H7 : is_fm B1
H8 : is_list K1
H9 : is_list L1
============================
exists KK LL, adj (B :: B1 :: K1) A LL /\ adj (B1 :: L1) B KK /\ perm KK LL
Subgoal 2.2 is:
exists KK LL, adj (B1 :: L2) A LL /\ adj (B1 :: L1) B KK /\ perm KK LL
adj_sequence < witness B :: B1 :: L1.
Subgoal 2.1:
Variables: A B L1 B1 K1
IH : forall J A K B L, adj J A K * -> adj J B L ->
(exists KK LL, adj L A LL /\ adj K B KK /\ perm KK LL)
H3 : is_fm B1
H4 : adj K1 A L1 *
H5 : is_fm B
H7 : is_fm B1
H8 : is_list K1
H9 : is_list L1
============================
exists LL, adj (B :: B1 :: K1) A LL /\ adj (B1 :: L1) B (B :: B1 :: L1) /\
perm (B :: B1 :: L1) LL
Subgoal 2.2 is:
exists KK LL, adj (B1 :: L2) A LL /\ adj (B1 :: L1) B KK /\ perm KK LL
adj_sequence < witness B :: B1 :: L1.
Subgoal 2.1:
Variables: A B L1 B1 K1
IH : forall J A K B L, adj J A K * -> adj J B L ->
(exists KK LL, adj L A LL /\ adj K B KK /\ perm KK LL)
H3 : is_fm B1
H4 : adj K1 A L1 *
H5 : is_fm B
H7 : is_fm B1
H8 : is_list K1
H9 : is_list L1
============================
adj (B :: B1 :: K1) A (B :: B1 :: L1) /\ adj (B1 :: L1) B (B :: B1 :: L1) /\
perm (B :: B1 :: L1) (B :: B1 :: L1)
Subgoal 2.2 is:
exists KK LL, adj (B1 :: L2) A LL /\ adj (B1 :: L1) B KK /\ perm KK LL
adj_sequence < apply perm_refl to _ with L = B :: B1 :: L1.
Subgoal 2.1:
Variables: A B L1 B1 K1
IH : forall J A K B L, adj J A K * -> adj J B L ->
(exists KK LL, adj L A LL /\ adj K B KK /\ perm KK LL)
H3 : is_fm B1
H4 : adj K1 A L1 *
H5 : is_fm B
H7 : is_fm B1
H8 : is_list K1
H9 : is_list L1
H10 : perm (B :: B1 :: L1) (B :: B1 :: L1)
============================
adj (B :: B1 :: K1) A (B :: B1 :: L1) /\ adj (B1 :: L1) B (B :: B1 :: L1) /\
perm (B :: B1 :: L1) (B :: B1 :: L1)
Subgoal 2.2 is:
exists KK LL, adj (B1 :: L2) A LL /\ adj (B1 :: L1) B KK /\ perm KK LL
adj_sequence < search.
Subgoal 2.2:
Variables: A B L1 B1 K1 L2
IH : forall J A K B L, adj J A K * -> adj J B L ->
(exists KK LL, adj L A LL /\ adj K B KK /\ perm KK LL)
H3 : is_fm B1
H4 : adj K1 A L1 *
H5 : is_fm B1
H6 : adj K1 B L2
============================
exists KK LL, adj (B1 :: L2) A LL /\ adj (B1 :: L1) B KK /\ perm KK LL
adj_sequence < apply IH to *H4 *H6.
Subgoal 2.2:
Variables: A B L1 B1 K1 L2 KK LL
IH : forall J A K B L, adj J A K * -> adj J B L ->
(exists KK LL, adj L A LL /\ adj K B KK /\ perm KK LL)
H3 : is_fm B1
H5 : is_fm B1
H7 : adj L2 A LL
H8 : adj L1 B KK
H9 : perm KK LL
============================
exists KK LL, adj (B1 :: L2) A LL /\ adj (B1 :: L1) B KK /\ perm KK LL
adj_sequence < witness B1 :: KK.
Subgoal 2.2:
Variables: A B L1 B1 K1 L2 KK LL
IH : forall J A K B L, adj J A K * -> adj J B L ->
(exists KK LL, adj L A LL /\ adj K B KK /\ perm KK LL)
H3 : is_fm B1
H5 : is_fm B1
H7 : adj L2 A LL
H8 : adj L1 B KK
H9 : perm KK LL
============================
exists LL, adj (B1 :: L2) A LL /\ adj (B1 :: L1) B (B1 :: KK) /\
perm (B1 :: KK) LL
adj_sequence < witness B1 :: LL.
Subgoal 2.2:
Variables: A B L1 B1 K1 L2 KK LL
IH : forall J A K B L, adj J A K * -> adj J B L ->
(exists KK LL, adj L A LL /\ adj K B KK /\ perm KK LL)
H3 : is_fm B1
H5 : is_fm B1
H7 : adj L2 A LL
H8 : adj L1 B KK
H9 : perm KK LL
============================
adj (B1 :: L2) A (B1 :: LL) /\ adj (B1 :: L1) B (B1 :: KK) /\
perm (B1 :: KK) (B1 :: LL)
adj_sequence < split.
Subgoal 2.2.1:
Variables: A B L1 B1 K1 L2 KK LL
IH : forall J A K B L, adj J A K * -> adj J B L ->
(exists KK LL, adj L A LL /\ adj K B KK /\ perm KK LL)
H3 : is_fm B1
H5 : is_fm B1
H7 : adj L2 A LL
H8 : adj L1 B KK
H9 : perm KK LL
============================
adj (B1 :: L2) A (B1 :: LL)
Subgoal 2.2.2 is:
adj (B1 :: L1) B (B1 :: KK)
Subgoal 2.2.3 is:
perm (B1 :: KK) (B1 :: LL)
adj_sequence < search.
Subgoal 2.2.2:
Variables: A B L1 B1 K1 L2 KK LL
IH : forall J A K B L, adj J A K * -> adj J B L ->
(exists KK LL, adj L A LL /\ adj K B KK /\ perm KK LL)
H3 : is_fm B1
H5 : is_fm B1
H7 : adj L2 A LL
H8 : adj L1 B KK
H9 : perm KK LL
============================
adj (B1 :: L1) B (B1 :: KK)
Subgoal 2.2.3 is:
perm (B1 :: KK) (B1 :: LL)
adj_sequence < search.
Subgoal 2.2.3:
Variables: A B L1 B1 K1 L2 KK LL
IH : forall J A K B L, adj J A K * -> adj J B L ->
(exists KK LL, adj L A LL /\ adj K B KK /\ perm KK LL)
H3 : is_fm B1
H5 : is_fm B1
H7 : adj L2 A LL
H8 : adj L1 B KK
H9 : perm KK LL
============================
perm (B1 :: KK) (B1 :: LL)
adj_sequence < apply perm_1_is_list to H9.
Subgoal 2.2.3:
Variables: A B L1 B1 K1 L2 KK LL
IH : forall J A K B L, adj J A K * -> adj J B L ->
(exists KK LL, adj L A LL /\ adj K B KK /\ perm KK LL)
H3 : is_fm B1
H5 : is_fm B1
H7 : adj L2 A LL
H8 : adj L1 B KK
H9 : perm KK LL
H10 : is_list KK
============================
perm (B1 :: KK) (B1 :: LL)
adj_sequence < apply perm_2_is_list to H9.
Subgoal 2.2.3:
Variables: A B L1 B1 K1 L2 KK LL
IH : forall J A K B L, adj J A K * -> adj J B L ->
(exists KK LL, adj L A LL /\ adj K B KK /\ perm KK LL)
H3 : is_fm B1
H5 : is_fm B1
H7 : adj L2 A LL
H8 : adj L1 B KK
H9 : perm KK LL
H10 : is_list KK
H11 : is_list LL
============================
perm (B1 :: KK) (B1 :: LL)
adj_sequence < search.
Proof completed.
Abella < Theorem par_inv :
forall L JJ A B, mll L -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL).
============================
forall L JJ A B, mll L -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
par_inv < induction on 1.
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
============================
forall L JJ A B, mll L @ -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
par_inv < intros.
Variables: L JJ A B
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H1 : mll L @
H2 : adj JJ (par A B) L
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < case H1.
Subgoal 1:
Variables: L JJ A B A1
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj (natom A1 :: nil) (atom A1) L
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_same_result_diff to H2 H3.
Subgoal 1:
Variables: L JJ A B A1
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj (natom A1 :: nil) (atom A1) L
H4 : par A B = atom A1 /\ perm JJ (natom A1 :: nil) \/
(exists KK, adj KK (par A B) (natom A1 :: nil))
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < case H4.
Subgoal 1:
Variables: L JJ A B A1 KK
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj (natom A1 :: nil) (atom A1) L
H5 : adj KK (par A B) (natom A1 :: nil)
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < case H5.
Subgoal 1:
Variables: L JJ A B A1 K
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj (natom A1 :: nil) (atom A1) L
H6 : is_fm (natom A1)
H7 : adj K (par A B) nil
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < case H7.
Subgoal 2:
Variables: L JJ A B A1 B1 LL JJ1 KK J K
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (tens A1 B1) L
H4 : merge JJ1 KK LL
H5 : adj JJ1 A1 J
H6 : mll J *
H7 : adj KK B1 K
H8 : mll K *
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_same_result_diff to H2 H3.
Subgoal 2:
Variables: L JJ A B A1 B1 LL JJ1 KK J K
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (tens A1 B1) L
H4 : merge JJ1 KK LL
H5 : adj JJ1 A1 J
H6 : mll J *
H7 : adj KK B1 K
H8 : mll K *
H9 : par A B = tens A1 B1 /\ perm JJ LL \/ (exists KK, adj KK (par A B) LL)
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < case H9.
Subgoal 2:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (tens A1 B1) L
H4 : merge JJ1 KK LL
H5 : adj JJ1 A1 J
H6 : mll J *
H7 : adj KK B1 K
H8 : mll K *
H10 : adj KK1 (par A B) LL
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply merge_unadj_3 to *H4 H10.
Subgoal 2:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (tens A1 B1) L
H5 : adj JJ1 A1 J
H6 : mll J *
H7 : adj KK B1 K
H8 : mll K *
H10 : adj KK1 (par A B) LL
H11 : (exists JJ, adj JJ (par A B) JJ1 /\ merge JJ KK KK1) \/
(exists KK2, adj KK2 (par A B) KK /\ merge JJ1 KK2 KK1)
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < case H11.
Subgoal 2.1:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 JJ2
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (tens A1 B1) L
H5 : adj JJ1 A1 J
H6 : mll J *
H7 : adj KK B1 K
H8 : mll K *
H10 : adj KK1 (par A B) LL
H12 : adj JJ2 (par A B) JJ1
H13 : merge JJ2 KK KK1
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 2.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_swap to H12 *H5.
Subgoal 2.1:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 JJ2 U
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (tens A1 B1) L
H6 : mll J *
H7 : adj KK B1 K
H8 : mll K *
H10 : adj KK1 (par A B) LL
H12 : adj JJ2 (par A B) JJ1
H13 : merge JJ2 KK KK1
H14 : adj JJ2 A1 U
H15 : adj U (par A B) J
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 2.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply IH to *H6 *H15.
Subgoal 2.1:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 JJ2 U KK2 LL1
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (tens A1 B1) L
H7 : adj KK B1 K
H8 : mll K *
H10 : adj KK1 (par A B) LL
H12 : adj JJ2 (par A B) JJ1
H13 : merge JJ2 KK KK1
H14 : adj JJ2 A1 U
H16 : adj U A KK2
H17 : adj KK2 B LL1
H18 : mll LL1
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 2.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_swap to *H14 *H16.
Subgoal 2.1:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 JJ2 U KK2 LL1 U1
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (tens A1 B1) L
H7 : adj KK B1 K
H8 : mll K *
H10 : adj KK1 (par A B) LL
H12 : adj JJ2 (par A B) JJ1
H13 : merge JJ2 KK KK1
H17 : adj KK2 B LL1
H18 : mll LL1
H19 : adj JJ2 A U1
H20 : adj U1 A1 KK2
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 2.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_swap to *H20 *H17.
Subgoal 2.1:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 JJ2 U KK2 LL1 U1 U2
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (tens A1 B1) L
H7 : adj KK B1 K
H8 : mll K *
H10 : adj KK1 (par A B) LL
H12 : adj JJ2 (par A B) JJ1
H13 : merge JJ2 KK KK1
H18 : mll LL1
H19 : adj JJ2 A U1
H21 : adj U1 B U2
H22 : adj U2 A1 LL1
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 2.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_1_is_list to H10.
Subgoal 2.1:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 JJ2 U KK2 LL1 U1 U2
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (tens A1 B1) L
H7 : adj KK B1 K
H8 : mll K *
H10 : adj KK1 (par A B) LL
H12 : adj JJ2 (par A B) JJ1
H13 : merge JJ2 KK KK1
H18 : mll LL1
H19 : adj JJ2 A U1
H21 : adj U1 B U2
H22 : adj U2 A1 LL1
H23 : is_list KK1
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 2.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_2_is_o to H19.
Subgoal 2.1:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 JJ2 U KK2 LL1 U1 U2
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (tens A1 B1) L
H7 : adj KK B1 K
H8 : mll K *
H10 : adj KK1 (par A B) LL
H12 : adj JJ2 (par A B) JJ1
H13 : merge JJ2 KK KK1
H18 : mll LL1
H19 : adj JJ2 A U1
H21 : adj U1 B U2
H22 : adj U2 A1 LL1
H23 : is_list KK1
H24 : is_fm A
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 2.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_2_is_o to H21.
Subgoal 2.1:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 JJ2 U KK2 LL1 U1 U2
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (tens A1 B1) L
H7 : adj KK B1 K
H8 : mll K *
H10 : adj KK1 (par A B) LL
H12 : adj JJ2 (par A B) JJ1
H13 : merge JJ2 KK KK1
H18 : mll LL1
H19 : adj JJ2 A U1
H21 : adj U1 B U2
H22 : adj U2 A1 LL1
H23 : is_list KK1
H24 : is_fm A
H25 : is_fm B
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 2.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < assert merge U2 KK (A :: B :: KK1).
Subgoal 2.1:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 JJ2 U KK2 LL1 U1 U2
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (tens A1 B1) L
H7 : adj KK B1 K
H8 : mll K *
H10 : adj KK1 (par A B) LL
H12 : adj JJ2 (par A B) JJ1
H13 : merge JJ2 KK KK1
H18 : mll LL1
H19 : adj JJ2 A U1
H21 : adj U1 B U2
H22 : adj U2 A1 LL1
H23 : is_list KK1
H24 : is_fm A
H25 : is_fm B
H26 : merge U2 KK (A :: B :: KK1)
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 2.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_2_is_o to H3.
Subgoal 2.1:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 JJ2 U KK2 LL1 U1 U2
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (tens A1 B1) L
H7 : adj KK B1 K
H8 : mll K *
H10 : adj KK1 (par A B) LL
H12 : adj JJ2 (par A B) JJ1
H13 : merge JJ2 KK KK1
H18 : mll LL1
H19 : adj JJ2 A U1
H21 : adj U1 B U2
H22 : adj U2 A1 LL1
H23 : is_list KK1
H24 : is_fm A
H25 : is_fm B
H26 : merge U2 KK (A :: B :: KK1)
H27 : is_fm (tens A1 B1)
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 2.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < assert mll (tens A1 B1 :: A :: B :: KK1).
Subgoal 2.1:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 JJ2 U KK2 LL1 U1 U2
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (tens A1 B1) L
H7 : adj KK B1 K
H8 : mll K *
H10 : adj KK1 (par A B) LL
H12 : adj JJ2 (par A B) JJ1
H13 : merge JJ2 KK KK1
H18 : mll LL1
H19 : adj JJ2 A U1
H21 : adj U1 B U2
H22 : adj U2 A1 LL1
H23 : is_list KK1
H24 : is_fm A
H25 : is_fm B
H26 : merge U2 KK (A :: B :: KK1)
H27 : is_fm (tens A1 B1)
H28 : mll (tens A1 B1 :: A :: B :: KK1)
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 2.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_swap to *H10 *H3.
Subgoal 2.1:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 JJ2 U KK2 LL1 U1 U2 U3
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H7 : adj KK B1 K
H8 : mll K *
H12 : adj JJ2 (par A B) JJ1
H13 : merge JJ2 KK KK1
H18 : mll LL1
H19 : adj JJ2 A U1
H21 : adj U1 B U2
H22 : adj U2 A1 LL1
H23 : is_list KK1
H24 : is_fm A
H25 : is_fm B
H26 : merge U2 KK (A :: B :: KK1)
H27 : is_fm (tens A1 B1)
H28 : mll (tens A1 B1 :: A :: B :: KK1)
H29 : adj KK1 (tens A1 B1) U3
H30 : adj U3 (par A B) L
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 2.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_same_result to H30 H2.
Subgoal 2.1:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 JJ2 U KK2 LL1 U1 U2 U3
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H7 : adj KK B1 K
H8 : mll K *
H12 : adj JJ2 (par A B) JJ1
H13 : merge JJ2 KK KK1
H18 : mll LL1
H19 : adj JJ2 A U1
H21 : adj U1 B U2
H22 : adj U2 A1 LL1
H23 : is_list KK1
H24 : is_fm A
H25 : is_fm B
H26 : merge U2 KK (A :: B :: KK1)
H27 : is_fm (tens A1 B1)
H28 : mll (tens A1 B1 :: A :: B :: KK1)
H29 : adj KK1 (tens A1 B1) U3
H30 : adj U3 (par A B) L
H31 : perm U3 JJ
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 2.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_perm_full to H31 H29.
Subgoal 2.1:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 JJ2 U KK2 LL1 U1 U2 U3 KK3
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H7 : adj KK B1 K
H8 : mll K *
H12 : adj JJ2 (par A B) JJ1
H13 : merge JJ2 KK KK1
H18 : mll LL1
H19 : adj JJ2 A U1
H21 : adj U1 B U2
H22 : adj U2 A1 LL1
H23 : is_list KK1
H24 : is_fm A
H25 : is_fm B
H26 : merge U2 KK (A :: B :: KK1)
H27 : is_fm (tens A1 B1)
H28 : mll (tens A1 B1 :: A :: B :: KK1)
H29 : adj KK1 (tens A1 B1) U3
H30 : adj U3 (par A B) L
H31 : perm U3 JJ
H32 : adj KK3 (tens A1 B1) JJ
H33 : perm KK1 KK3
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 2.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_1_is_list to *H2.
Subgoal 2.1:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 JJ2 U KK2 LL1 U1 U2 U3 KK3
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H7 : adj KK B1 K
H8 : mll K *
H12 : adj JJ2 (par A B) JJ1
H13 : merge JJ2 KK KK1
H18 : mll LL1
H19 : adj JJ2 A U1
H21 : adj U1 B U2
H22 : adj U2 A1 LL1
H23 : is_list KK1
H24 : is_fm A
H25 : is_fm B
H26 : merge U2 KK (A :: B :: KK1)
H27 : is_fm (tens A1 B1)
H28 : mll (tens A1 B1 :: A :: B :: KK1)
H29 : adj KK1 (tens A1 B1) U3
H30 : adj U3 (par A B) L
H31 : perm U3 JJ
H32 : adj KK3 (tens A1 B1) JJ
H33 : perm KK1 KK3
H34 : is_list JJ
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 2.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < assert perm (tens A1 B1 :: A :: B :: KK1) (A :: B :: JJ).
Subgoal 2.1:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 JJ2 U KK2 LL1 U1 U2 U3 KK3
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H7 : adj KK B1 K
H8 : mll K *
H12 : adj JJ2 (par A B) JJ1
H13 : merge JJ2 KK KK1
H18 : mll LL1
H19 : adj JJ2 A U1
H21 : adj U1 B U2
H22 : adj U2 A1 LL1
H23 : is_list KK1
H24 : is_fm A
H25 : is_fm B
H26 : merge U2 KK (A :: B :: KK1)
H27 : is_fm (tens A1 B1)
H28 : mll (tens A1 B1 :: A :: B :: KK1)
H29 : adj KK1 (tens A1 B1) U3
H30 : adj U3 (par A B) L
H31 : perm U3 JJ
H32 : adj KK3 (tens A1 B1) JJ
H33 : perm KK1 KK3
H34 : is_list JJ
H35 : perm (tens A1 B1 :: A :: B :: KK1) (A :: B :: JJ)
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 2.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply mll_perm to H28 H35.
Subgoal 2.1:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 JJ2 U KK2 LL1 U1 U2 U3 KK3
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H7 : adj KK B1 K
H8 : mll K *
H12 : adj JJ2 (par A B) JJ1
H13 : merge JJ2 KK KK1
H18 : mll LL1
H19 : adj JJ2 A U1
H21 : adj U1 B U2
H22 : adj U2 A1 LL1
H23 : is_list KK1
H24 : is_fm A
H25 : is_fm B
H26 : merge U2 KK (A :: B :: KK1)
H27 : is_fm (tens A1 B1)
H28 : mll (tens A1 B1 :: A :: B :: KK1)
H29 : adj KK1 (tens A1 B1) U3
H30 : adj U3 (par A B) L
H31 : perm U3 JJ
H32 : adj KK3 (tens A1 B1) JJ
H33 : perm KK1 KK3
H34 : is_list JJ
H35 : perm (tens A1 B1 :: A :: B :: KK1) (A :: B :: JJ)
H36 : mll (A :: B :: JJ)
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 2.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < assert adj JJ A (A :: JJ).
Subgoal 2.1:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 JJ2 U KK2 LL1 U1 U2 U3 KK3
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H7 : adj KK B1 K
H8 : mll K *
H12 : adj JJ2 (par A B) JJ1
H13 : merge JJ2 KK KK1
H18 : mll LL1
H19 : adj JJ2 A U1
H21 : adj U1 B U2
H22 : adj U2 A1 LL1
H23 : is_list KK1
H24 : is_fm A
H25 : is_fm B
H26 : merge U2 KK (A :: B :: KK1)
H27 : is_fm (tens A1 B1)
H28 : mll (tens A1 B1 :: A :: B :: KK1)
H29 : adj KK1 (tens A1 B1) U3
H30 : adj U3 (par A B) L
H31 : perm U3 JJ
H32 : adj KK3 (tens A1 B1) JJ
H33 : perm KK1 KK3
H34 : is_list JJ
H35 : perm (tens A1 B1 :: A :: B :: KK1) (A :: B :: JJ)
H36 : mll (A :: B :: JJ)
H37 : adj JJ A (A :: JJ)
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 2.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < assert adj (A :: JJ) B (A :: B :: JJ).
Subgoal 2.1:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 JJ2 U KK2 LL1 U1 U2 U3 KK3
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H7 : adj KK B1 K
H8 : mll K *
H12 : adj JJ2 (par A B) JJ1
H13 : merge JJ2 KK KK1
H18 : mll LL1
H19 : adj JJ2 A U1
H21 : adj U1 B U2
H22 : adj U2 A1 LL1
H23 : is_list KK1
H24 : is_fm A
H25 : is_fm B
H26 : merge U2 KK (A :: B :: KK1)
H27 : is_fm (tens A1 B1)
H28 : mll (tens A1 B1 :: A :: B :: KK1)
H29 : adj KK1 (tens A1 B1) U3
H30 : adj U3 (par A B) L
H31 : perm U3 JJ
H32 : adj KK3 (tens A1 B1) JJ
H33 : perm KK1 KK3
H34 : is_list JJ
H35 : perm (tens A1 B1 :: A :: B :: KK1) (A :: B :: JJ)
H36 : mll (A :: B :: JJ)
H37 : adj JJ A (A :: JJ)
H38 : adj (A :: JJ) B (A :: B :: JJ)
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 2.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < search.
Subgoal 2.2:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 KK2
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (tens A1 B1) L
H5 : adj JJ1 A1 J
H6 : mll J *
H7 : adj KK B1 K
H8 : mll K *
H10 : adj KK1 (par A B) LL
H12 : adj KK2 (par A B) KK
H13 : merge JJ1 KK2 KK1
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_swap to *H12 *H7.
Subgoal 2.2:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 KK2 U
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (tens A1 B1) L
H5 : adj JJ1 A1 J
H6 : mll J *
H8 : mll K *
H10 : adj KK1 (par A B) LL
H13 : merge JJ1 KK2 KK1
H14 : adj KK2 B1 U
H15 : adj U (par A B) K
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply IH to *H8 *H15.
Subgoal 2.2:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 KK2 U KK3 LL1
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (tens A1 B1) L
H5 : adj JJ1 A1 J
H6 : mll J *
H10 : adj KK1 (par A B) LL
H13 : merge JJ1 KK2 KK1
H14 : adj KK2 B1 U
H16 : adj U A KK3
H17 : adj KK3 B LL1
H18 : mll LL1
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_swap to *H14 *H16.
Subgoal 2.2:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 KK2 U KK3 LL1 U1
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (tens A1 B1) L
H5 : adj JJ1 A1 J
H6 : mll J *
H10 : adj KK1 (par A B) LL
H13 : merge JJ1 KK2 KK1
H17 : adj KK3 B LL1
H18 : mll LL1
H19 : adj KK2 A U1
H20 : adj U1 B1 KK3
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_swap to *H20 *H17.
Subgoal 2.2:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 KK2 U KK3 LL1 U1 U2
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (tens A1 B1) L
H5 : adj JJ1 A1 J
H6 : mll J *
H10 : adj KK1 (par A B) LL
H13 : merge JJ1 KK2 KK1
H18 : mll LL1
H19 : adj KK2 A U1
H21 : adj U1 B U2
H22 : adj U2 B1 LL1
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_1_is_list to H10.
Subgoal 2.2:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 KK2 U KK3 LL1 U1 U2
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (tens A1 B1) L
H5 : adj JJ1 A1 J
H6 : mll J *
H10 : adj KK1 (par A B) LL
H13 : merge JJ1 KK2 KK1
H18 : mll LL1
H19 : adj KK2 A U1
H21 : adj U1 B U2
H22 : adj U2 B1 LL1
H23 : is_list KK1
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_2_is_o to H19.
Subgoal 2.2:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 KK2 U KK3 LL1 U1 U2
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (tens A1 B1) L
H5 : adj JJ1 A1 J
H6 : mll J *
H10 : adj KK1 (par A B) LL
H13 : merge JJ1 KK2 KK1
H18 : mll LL1
H19 : adj KK2 A U1
H21 : adj U1 B U2
H22 : adj U2 B1 LL1
H23 : is_list KK1
H24 : is_fm A
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_2_is_o to H21.
Subgoal 2.2:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 KK2 U KK3 LL1 U1 U2
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (tens A1 B1) L
H5 : adj JJ1 A1 J
H6 : mll J *
H10 : adj KK1 (par A B) LL
H13 : merge JJ1 KK2 KK1
H18 : mll LL1
H19 : adj KK2 A U1
H21 : adj U1 B U2
H22 : adj U2 B1 LL1
H23 : is_list KK1
H24 : is_fm A
H25 : is_fm B
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < assert merge JJ1 U2 (A :: B :: KK1).
Subgoal 2.2:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 KK2 U KK3 LL1 U1 U2
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (tens A1 B1) L
H5 : adj JJ1 A1 J
H6 : mll J *
H10 : adj KK1 (par A B) LL
H13 : merge JJ1 KK2 KK1
H18 : mll LL1
H19 : adj KK2 A U1
H21 : adj U1 B U2
H22 : adj U2 B1 LL1
H23 : is_list KK1
H24 : is_fm A
H25 : is_fm B
H26 : merge JJ1 U2 (A :: B :: KK1)
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_2_is_o to H3.
Subgoal 2.2:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 KK2 U KK3 LL1 U1 U2
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (tens A1 B1) L
H5 : adj JJ1 A1 J
H6 : mll J *
H10 : adj KK1 (par A B) LL
H13 : merge JJ1 KK2 KK1
H18 : mll LL1
H19 : adj KK2 A U1
H21 : adj U1 B U2
H22 : adj U2 B1 LL1
H23 : is_list KK1
H24 : is_fm A
H25 : is_fm B
H26 : merge JJ1 U2 (A :: B :: KK1)
H27 : is_fm (tens A1 B1)
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < assert mll (tens A1 B1 :: A :: B :: KK1).
Subgoal 2.2:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 KK2 U KK3 LL1 U1 U2
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (tens A1 B1) L
H5 : adj JJ1 A1 J
H6 : mll J *
H10 : adj KK1 (par A B) LL
H13 : merge JJ1 KK2 KK1
H18 : mll LL1
H19 : adj KK2 A U1
H21 : adj U1 B U2
H22 : adj U2 B1 LL1
H23 : is_list KK1
H24 : is_fm A
H25 : is_fm B
H26 : merge JJ1 U2 (A :: B :: KK1)
H27 : is_fm (tens A1 B1)
H28 : mll (tens A1 B1 :: A :: B :: KK1)
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_swap to *H10 *H3.
Subgoal 2.2:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 KK2 U KK3 LL1 U1 U2 U3
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H5 : adj JJ1 A1 J
H6 : mll J *
H13 : merge JJ1 KK2 KK1
H18 : mll LL1
H19 : adj KK2 A U1
H21 : adj U1 B U2
H22 : adj U2 B1 LL1
H23 : is_list KK1
H24 : is_fm A
H25 : is_fm B
H26 : merge JJ1 U2 (A :: B :: KK1)
H27 : is_fm (tens A1 B1)
H28 : mll (tens A1 B1 :: A :: B :: KK1)
H29 : adj KK1 (tens A1 B1) U3
H30 : adj U3 (par A B) L
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_same_result to H30 H2.
Subgoal 2.2:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 KK2 U KK3 LL1 U1 U2 U3
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H5 : adj JJ1 A1 J
H6 : mll J *
H13 : merge JJ1 KK2 KK1
H18 : mll LL1
H19 : adj KK2 A U1
H21 : adj U1 B U2
H22 : adj U2 B1 LL1
H23 : is_list KK1
H24 : is_fm A
H25 : is_fm B
H26 : merge JJ1 U2 (A :: B :: KK1)
H27 : is_fm (tens A1 B1)
H28 : mll (tens A1 B1 :: A :: B :: KK1)
H29 : adj KK1 (tens A1 B1) U3
H30 : adj U3 (par A B) L
H31 : perm U3 JJ
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_perm_full to H31 H29.
Subgoal 2.2:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 KK2 U KK3 LL1 U1 U2 U3 KK4
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H5 : adj JJ1 A1 J
H6 : mll J *
H13 : merge JJ1 KK2 KK1
H18 : mll LL1
H19 : adj KK2 A U1
H21 : adj U1 B U2
H22 : adj U2 B1 LL1
H23 : is_list KK1
H24 : is_fm A
H25 : is_fm B
H26 : merge JJ1 U2 (A :: B :: KK1)
H27 : is_fm (tens A1 B1)
H28 : mll (tens A1 B1 :: A :: B :: KK1)
H29 : adj KK1 (tens A1 B1) U3
H30 : adj U3 (par A B) L
H31 : perm U3 JJ
H32 : adj KK4 (tens A1 B1) JJ
H33 : perm KK1 KK4
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_1_is_list to *H2.
Subgoal 2.2:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 KK2 U KK3 LL1 U1 U2 U3 KK4
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H5 : adj JJ1 A1 J
H6 : mll J *
H13 : merge JJ1 KK2 KK1
H18 : mll LL1
H19 : adj KK2 A U1
H21 : adj U1 B U2
H22 : adj U2 B1 LL1
H23 : is_list KK1
H24 : is_fm A
H25 : is_fm B
H26 : merge JJ1 U2 (A :: B :: KK1)
H27 : is_fm (tens A1 B1)
H28 : mll (tens A1 B1 :: A :: B :: KK1)
H29 : adj KK1 (tens A1 B1) U3
H30 : adj U3 (par A B) L
H31 : perm U3 JJ
H32 : adj KK4 (tens A1 B1) JJ
H33 : perm KK1 KK4
H34 : is_list JJ
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < assert perm (tens A1 B1 :: A :: B :: KK1) (A :: B :: JJ).
Subgoal 2.2:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 KK2 U KK3 LL1 U1 U2 U3 KK4
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H5 : adj JJ1 A1 J
H6 : mll J *
H13 : merge JJ1 KK2 KK1
H18 : mll LL1
H19 : adj KK2 A U1
H21 : adj U1 B U2
H22 : adj U2 B1 LL1
H23 : is_list KK1
H24 : is_fm A
H25 : is_fm B
H26 : merge JJ1 U2 (A :: B :: KK1)
H27 : is_fm (tens A1 B1)
H28 : mll (tens A1 B1 :: A :: B :: KK1)
H29 : adj KK1 (tens A1 B1) U3
H30 : adj U3 (par A B) L
H31 : perm U3 JJ
H32 : adj KK4 (tens A1 B1) JJ
H33 : perm KK1 KK4
H34 : is_list JJ
H35 : perm (tens A1 B1 :: A :: B :: KK1) (A :: B :: JJ)
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply mll_perm to *H28 *H35.
Subgoal 2.2:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 KK2 U KK3 LL1 U1 U2 U3 KK4
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H5 : adj JJ1 A1 J
H6 : mll J *
H13 : merge JJ1 KK2 KK1
H18 : mll LL1
H19 : adj KK2 A U1
H21 : adj U1 B U2
H22 : adj U2 B1 LL1
H23 : is_list KK1
H24 : is_fm A
H25 : is_fm B
H26 : merge JJ1 U2 (A :: B :: KK1)
H27 : is_fm (tens A1 B1)
H29 : adj KK1 (tens A1 B1) U3
H30 : adj U3 (par A B) L
H31 : perm U3 JJ
H32 : adj KK4 (tens A1 B1) JJ
H33 : perm KK1 KK4
H34 : is_list JJ
H36 : mll (A :: B :: JJ)
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < assert adj JJ A (A :: JJ).
Subgoal 2.2:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 KK2 U KK3 LL1 U1 U2 U3 KK4
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H5 : adj JJ1 A1 J
H6 : mll J *
H13 : merge JJ1 KK2 KK1
H18 : mll LL1
H19 : adj KK2 A U1
H21 : adj U1 B U2
H22 : adj U2 B1 LL1
H23 : is_list KK1
H24 : is_fm A
H25 : is_fm B
H26 : merge JJ1 U2 (A :: B :: KK1)
H27 : is_fm (tens A1 B1)
H29 : adj KK1 (tens A1 B1) U3
H30 : adj U3 (par A B) L
H31 : perm U3 JJ
H32 : adj KK4 (tens A1 B1) JJ
H33 : perm KK1 KK4
H34 : is_list JJ
H36 : mll (A :: B :: JJ)
H37 : adj JJ A (A :: JJ)
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < assert adj (A :: JJ) B (A :: B :: JJ).
Subgoal 2.2:
Variables: L JJ A B A1 B1 LL JJ1 KK J K KK1 KK2 U KK3 LL1 U1 U2 U3 KK4
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H5 : adj JJ1 A1 J
H6 : mll J *
H13 : merge JJ1 KK2 KK1
H18 : mll LL1
H19 : adj KK2 A U1
H21 : adj U1 B U2
H22 : adj U2 B1 LL1
H23 : is_list KK1
H24 : is_fm A
H25 : is_fm B
H26 : merge JJ1 U2 (A :: B :: KK1)
H27 : is_fm (tens A1 B1)
H29 : adj KK1 (tens A1 B1) U3
H30 : adj U3 (par A B) L
H31 : perm U3 JJ
H32 : adj KK4 (tens A1 B1) JJ
H33 : perm KK1 KK4
H34 : is_list JJ
H36 : mll (A :: B :: JJ)
H37 : adj JJ A (A :: JJ)
H38 : adj (A :: JJ) B (A :: B :: JJ)
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 3 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < search.
Subgoal 3:
Variables: JJ A B
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) (one :: nil)
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < case H2.
Subgoal 3:
Variables: A B K
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H3 : is_fm one
H4 : adj K (par A B) nil
============================
exists KK LL, adj (one :: K) A KK /\ adj KK B LL /\ mll LL
Subgoal 4 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < case H4.
Subgoal 4:
Variables: L JJ A B A1 B1 LL J K
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (par A1 B1) L
H4 : adj LL A1 J
H5 : adj J B1 K
H6 : mll K *
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_same_result_diff to H2 H3.
Subgoal 4:
Variables: L JJ A B A1 B1 LL J K
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (par A1 B1) L
H4 : adj LL A1 J
H5 : adj J B1 K
H6 : mll K *
H7 : par A B = par A1 B1 /\ perm JJ LL \/ (exists KK, adj KK (par A B) LL)
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_2_is_o to H4.
Subgoal 4:
Variables: L JJ A B A1 B1 LL J K
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (par A1 B1) L
H4 : adj LL A1 J
H5 : adj J B1 K
H6 : mll K *
H7 : par A B = par A1 B1 /\ perm JJ LL \/ (exists KK, adj KK (par A B) LL)
H8 : is_fm A1
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_2_is_o to H5.
Subgoal 4:
Variables: L JJ A B A1 B1 LL J K
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (par A1 B1) L
H4 : adj LL A1 J
H5 : adj J B1 K
H6 : mll K *
H7 : par A B = par A1 B1 /\ perm JJ LL \/ (exists KK, adj KK (par A B) LL)
H8 : is_fm A1
H9 : is_fm B1
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_1_is_list to H2.
Subgoal 4:
Variables: L JJ A B A1 B1 LL J K
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (par A1 B1) L
H4 : adj LL A1 J
H5 : adj J B1 K
H6 : mll K *
H7 : par A B = par A1 B1 /\ perm JJ LL \/ (exists KK, adj KK (par A B) LL)
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < case H7.
Subgoal 4.1:
Variables: L JJ A1 B1 LL J K
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A1 B1) L
H3 : adj LL (par A1 B1) L
H4 : adj LL A1 J
H5 : adj J B1 K
H6 : mll K *
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H11 : perm JJ LL
============================
exists KK LL, adj JJ A1 KK /\ adj KK B1 LL /\ mll LL
Subgoal 4.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < assert perm (A1 :: B1 :: JJ) K.
Subgoal 4.1:
Variables: L JJ A1 B1 LL J K
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A1 B1) L
H3 : adj LL (par A1 B1) L
H4 : adj LL A1 J
H5 : adj J B1 K
H6 : mll K *
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H11 : perm JJ LL
H12 : perm (A1 :: B1 :: JJ) K
============================
exists KK LL, adj JJ A1 KK /\ adj KK B1 LL /\ mll LL
Subgoal 4.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply perm_sym to *H12.
Subgoal 4.1:
Variables: L JJ A1 B1 LL J K
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A1 B1) L
H3 : adj LL (par A1 B1) L
H4 : adj LL A1 J
H5 : adj J B1 K
H6 : mll K *
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H11 : perm JJ LL
H13 : perm K (A1 :: B1 :: JJ)
============================
exists KK LL, adj JJ A1 KK /\ adj KK B1 LL /\ mll LL
Subgoal 4.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply mll_perm to *H6 *H13.
Subgoal 4.1:
Variables: L JJ A1 B1 LL J K
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A1 B1) L
H3 : adj LL (par A1 B1) L
H4 : adj LL A1 J
H5 : adj J B1 K
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H11 : perm JJ LL
H14 : mll (A1 :: B1 :: JJ)
============================
exists KK LL, adj JJ A1 KK /\ adj KK B1 LL /\ mll LL
Subgoal 4.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < search.
Subgoal 4.2:
Variables: L JJ A B A1 B1 LL J K KK
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (par A1 B1) L
H4 : adj LL A1 J
H5 : adj J B1 K
H6 : mll K *
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H11 : adj KK (par A B) LL
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_swap to H11 *H4.
Subgoal 4.2:
Variables: L JJ A B A1 B1 LL J K KK U
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (par A1 B1) L
H5 : adj J B1 K
H6 : mll K *
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H11 : adj KK (par A B) LL
H12 : adj KK A1 U
H13 : adj U (par A B) J
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_swap to *H13 *H5.
Subgoal 4.2:
Variables: L JJ A B A1 B1 LL J K KK U U1
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (par A1 B1) L
H6 : mll K *
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H11 : adj KK (par A B) LL
H12 : adj KK A1 U
H14 : adj U B1 U1
H15 : adj U1 (par A B) K
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply IH to *H6 *H15.
Subgoal 4.2:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (par A1 B1) L
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H11 : adj KK (par A B) LL
H12 : adj KK A1 U
H14 : adj U B1 U1
H16 : adj U1 A KK1
H17 : adj KK1 B LL1
H18 : mll LL1
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_swap to *H14 *H16.
Subgoal 4.2:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (par A1 B1) L
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H11 : adj KK (par A B) LL
H12 : adj KK A1 U
H17 : adj KK1 B LL1
H18 : mll LL1
H19 : adj U A U2
H20 : adj U2 B1 KK1
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_swap to *H20 *H17.
Subgoal 4.2:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2 U3
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (par A1 B1) L
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H11 : adj KK (par A B) LL
H12 : adj KK A1 U
H18 : mll LL1
H19 : adj U A U2
H21 : adj U2 B U3
H22 : adj U3 B1 LL1
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_swap to *H12 *H19.
Subgoal 4.2:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2 U3 U4
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (par A1 B1) L
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H11 : adj KK (par A B) LL
H18 : mll LL1
H21 : adj U2 B U3
H22 : adj U3 B1 LL1
H23 : adj KK A U4
H24 : adj U4 A1 U2
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_swap to *H24 *H21.
Subgoal 4.2:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2 U3 U4 U5
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (par A1 B1) L
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H11 : adj KK (par A B) LL
H18 : mll LL1
H22 : adj U3 B1 LL1
H23 : adj KK A U4
H25 : adj U4 B U5
H26 : adj U5 A1 U3
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_1_is_list to H26.
Subgoal 4.2:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2 U3 U4 U5
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (par A1 B1) L
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H11 : adj KK (par A B) LL
H18 : mll LL1
H22 : adj U3 B1 LL1
H23 : adj KK A U4
H25 : adj U4 B U5
H26 : adj U5 A1 U3
H27 : is_list U5
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < assert mll (par A1 B1 :: U5).
Subgoal 4.2:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2 U3 U4 U5
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (par A1 B1) L
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H11 : adj KK (par A B) LL
H18 : mll LL1
H22 : adj U3 B1 LL1
H23 : adj KK A U4
H25 : adj U4 B U5
H26 : adj U5 A1 U3
H27 : is_list U5
H28 : mll (par A1 B1 :: U5)
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_2_is_o to H23.
Subgoal 4.2:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2 U3 U4 U5
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (par A1 B1) L
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H11 : adj KK (par A B) LL
H18 : mll LL1
H22 : adj U3 B1 LL1
H23 : adj KK A U4
H25 : adj U4 B U5
H26 : adj U5 A1 U3
H27 : is_list U5
H28 : mll (par A1 B1 :: U5)
H29 : is_fm A
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_2_is_o to H25.
Subgoal 4.2:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2 U3 U4 U5
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (par A1 B1) L
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H11 : adj KK (par A B) LL
H18 : mll LL1
H22 : adj U3 B1 LL1
H23 : adj KK A U4
H25 : adj U4 B U5
H26 : adj U5 A1 U3
H27 : is_list U5
H28 : mll (par A1 B1 :: U5)
H29 : is_fm A
H30 : is_fm B
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < assert perm (par A1 B1 :: U5) (A :: B :: JJ).
Subgoal 4.2.1:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2 U3 U4 U5
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (par A1 B1) L
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H11 : adj KK (par A B) LL
H18 : mll LL1
H22 : adj U3 B1 LL1
H23 : adj KK A U4
H25 : adj U4 B U5
H26 : adj U5 A1 U3
H27 : is_list U5
H28 : mll (par A1 B1 :: U5)
H29 : is_fm A
H30 : is_fm B
============================
perm (par A1 B1 :: U5) (A :: B :: JJ)
Subgoal 4.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < unfold.
Subgoal 4.2.1:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2 U3 U4 U5
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (par A1 B1) L
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H11 : adj KK (par A B) LL
H18 : mll LL1
H22 : adj U3 B1 LL1
H23 : adj KK A U4
H25 : adj U4 B U5
H26 : adj U5 A1 U3
H27 : is_list U5
H28 : mll (par A1 B1 :: U5)
H29 : is_fm A
H30 : is_fm B
============================
exists A2 KK LL, adj KK A2 (par A1 B1 :: U5) /\ adj LL A2 (A :: B :: JJ) /\
perm KK LL
Subgoal 4.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < witness B.
Subgoal 4.2.1:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2 U3 U4 U5
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (par A1 B1) L
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H11 : adj KK (par A B) LL
H18 : mll LL1
H22 : adj U3 B1 LL1
H23 : adj KK A U4
H25 : adj U4 B U5
H26 : adj U5 A1 U3
H27 : is_list U5
H28 : mll (par A1 B1 :: U5)
H29 : is_fm A
H30 : is_fm B
============================
exists KK LL, adj KK B (par A1 B1 :: U5) /\ adj LL B (A :: B :: JJ) /\
perm KK LL
Subgoal 4.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < witness par A1 B1 :: U4.
Subgoal 4.2.1:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2 U3 U4 U5
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (par A1 B1) L
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H11 : adj KK (par A B) LL
H18 : mll LL1
H22 : adj U3 B1 LL1
H23 : adj KK A U4
H25 : adj U4 B U5
H26 : adj U5 A1 U3
H27 : is_list U5
H28 : mll (par A1 B1 :: U5)
H29 : is_fm A
H30 : is_fm B
============================
exists LL, adj (par A1 B1 :: U4) B (par A1 B1 :: U5) /\
adj LL B (A :: B :: JJ) /\ perm (par A1 B1 :: U4) LL
Subgoal 4.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < witness A :: JJ.
Subgoal 4.2.1:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2 U3 U4 U5
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (par A1 B1) L
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H11 : adj KK (par A B) LL
H18 : mll LL1
H22 : adj U3 B1 LL1
H23 : adj KK A U4
H25 : adj U4 B U5
H26 : adj U5 A1 U3
H27 : is_list U5
H28 : mll (par A1 B1 :: U5)
H29 : is_fm A
H30 : is_fm B
============================
adj (par A1 B1 :: U4) B (par A1 B1 :: U5) /\
adj (A :: JJ) B (A :: B :: JJ) /\ perm (par A1 B1 :: U4) (A :: JJ)
Subgoal 4.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < split.
Subgoal 4.2.1.1:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2 U3 U4 U5
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (par A1 B1) L
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H11 : adj KK (par A B) LL
H18 : mll LL1
H22 : adj U3 B1 LL1
H23 : adj KK A U4
H25 : adj U4 B U5
H26 : adj U5 A1 U3
H27 : is_list U5
H28 : mll (par A1 B1 :: U5)
H29 : is_fm A
H30 : is_fm B
============================
adj (par A1 B1 :: U4) B (par A1 B1 :: U5)
Subgoal 4.2.1.2 is:
adj (A :: JJ) B (A :: B :: JJ)
Subgoal 4.2.1.3 is:
perm (par A1 B1 :: U4) (A :: JJ)
Subgoal 4.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < search.
Subgoal 4.2.1.2:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2 U3 U4 U5
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (par A1 B1) L
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H11 : adj KK (par A B) LL
H18 : mll LL1
H22 : adj U3 B1 LL1
H23 : adj KK A U4
H25 : adj U4 B U5
H26 : adj U5 A1 U3
H27 : is_list U5
H28 : mll (par A1 B1 :: U5)
H29 : is_fm A
H30 : is_fm B
============================
adj (A :: JJ) B (A :: B :: JJ)
Subgoal 4.2.1.3 is:
perm (par A1 B1 :: U4) (A :: JJ)
Subgoal 4.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < search.
Subgoal 4.2.1.3:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2 U3 U4 U5
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (par A1 B1) L
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H11 : adj KK (par A B) LL
H18 : mll LL1
H22 : adj U3 B1 LL1
H23 : adj KK A U4
H25 : adj U4 B U5
H26 : adj U5 A1 U3
H27 : is_list U5
H28 : mll (par A1 B1 :: U5)
H29 : is_fm A
H30 : is_fm B
============================
perm (par A1 B1 :: U4) (A :: JJ)
Subgoal 4.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < unfold.
Subgoal 4.2.1.3:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2 U3 U4 U5
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (par A1 B1) L
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H11 : adj KK (par A B) LL
H18 : mll LL1
H22 : adj U3 B1 LL1
H23 : adj KK A U4
H25 : adj U4 B U5
H26 : adj U5 A1 U3
H27 : is_list U5
H28 : mll (par A1 B1 :: U5)
H29 : is_fm A
H30 : is_fm B
============================
exists A2 KK LL, adj KK A2 (par A1 B1 :: U4) /\ adj LL A2 (A :: JJ) /\
perm KK LL
Subgoal 4.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < witness A.
Subgoal 4.2.1.3:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2 U3 U4 U5
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (par A1 B1) L
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H11 : adj KK (par A B) LL
H18 : mll LL1
H22 : adj U3 B1 LL1
H23 : adj KK A U4
H25 : adj U4 B U5
H26 : adj U5 A1 U3
H27 : is_list U5
H28 : mll (par A1 B1 :: U5)
H29 : is_fm A
H30 : is_fm B
============================
exists KK LL, adj KK A (par A1 B1 :: U4) /\ adj LL A (A :: JJ) /\ perm KK LL
Subgoal 4.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < witness par A1 B1 :: KK.
Subgoal 4.2.1.3:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2 U3 U4 U5
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (par A1 B1) L
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H11 : adj KK (par A B) LL
H18 : mll LL1
H22 : adj U3 B1 LL1
H23 : adj KK A U4
H25 : adj U4 B U5
H26 : adj U5 A1 U3
H27 : is_list U5
H28 : mll (par A1 B1 :: U5)
H29 : is_fm A
H30 : is_fm B
============================
exists LL, adj (par A1 B1 :: KK) A (par A1 B1 :: U4) /\
adj LL A (A :: JJ) /\ perm (par A1 B1 :: KK) LL
Subgoal 4.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < witness JJ.
Subgoal 4.2.1.3:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2 U3 U4 U5
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (par A1 B1) L
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H11 : adj KK (par A B) LL
H18 : mll LL1
H22 : adj U3 B1 LL1
H23 : adj KK A U4
H25 : adj U4 B U5
H26 : adj U5 A1 U3
H27 : is_list U5
H28 : mll (par A1 B1 :: U5)
H29 : is_fm A
H30 : is_fm B
============================
adj (par A1 B1 :: KK) A (par A1 B1 :: U4) /\ adj JJ A (A :: JJ) /\
perm (par A1 B1 :: KK) JJ
Subgoal 4.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < split.
Subgoal 4.2.1.3.1:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2 U3 U4 U5
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (par A1 B1) L
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H11 : adj KK (par A B) LL
H18 : mll LL1
H22 : adj U3 B1 LL1
H23 : adj KK A U4
H25 : adj U4 B U5
H26 : adj U5 A1 U3
H27 : is_list U5
H28 : mll (par A1 B1 :: U5)
H29 : is_fm A
H30 : is_fm B
============================
adj (par A1 B1 :: KK) A (par A1 B1 :: U4)
Subgoal 4.2.1.3.2 is:
adj JJ A (A :: JJ)
Subgoal 4.2.1.3.3 is:
perm (par A1 B1 :: KK) JJ
Subgoal 4.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < search.
Subgoal 4.2.1.3.2:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2 U3 U4 U5
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (par A1 B1) L
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H11 : adj KK (par A B) LL
H18 : mll LL1
H22 : adj U3 B1 LL1
H23 : adj KK A U4
H25 : adj U4 B U5
H26 : adj U5 A1 U3
H27 : is_list U5
H28 : mll (par A1 B1 :: U5)
H29 : is_fm A
H30 : is_fm B
============================
adj JJ A (A :: JJ)
Subgoal 4.2.1.3.3 is:
perm (par A1 B1 :: KK) JJ
Subgoal 4.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < search.
Subgoal 4.2.1.3.3:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2 U3 U4 U5
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (par A1 B1) L
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H11 : adj KK (par A B) LL
H18 : mll LL1
H22 : adj U3 B1 LL1
H23 : adj KK A U4
H25 : adj U4 B U5
H26 : adj U5 A1 U3
H27 : is_list U5
H28 : mll (par A1 B1 :: U5)
H29 : is_fm A
H30 : is_fm B
============================
perm (par A1 B1 :: KK) JJ
Subgoal 4.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_swap to *H11 *H3.
Subgoal 4.2.1.3.3:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2 U3 U4 U5 U6
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H18 : mll LL1
H22 : adj U3 B1 LL1
H23 : adj KK A U4
H25 : adj U4 B U5
H26 : adj U5 A1 U3
H27 : is_list U5
H28 : mll (par A1 B1 :: U5)
H29 : is_fm A
H30 : is_fm B
H31 : adj KK (par A1 B1) U6
H32 : adj U6 (par A B) L
============================
perm (par A1 B1 :: KK) JJ
Subgoal 4.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_same_result to *H32 *H2.
Subgoal 4.2.1.3.3:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2 U3 U4 U5 U6
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H18 : mll LL1
H22 : adj U3 B1 LL1
H23 : adj KK A U4
H25 : adj U4 B U5
H26 : adj U5 A1 U3
H27 : is_list U5
H28 : mll (par A1 B1 :: U5)
H29 : is_fm A
H30 : is_fm B
H31 : adj KK (par A1 B1) U6
H33 : perm U6 JJ
============================
perm (par A1 B1 :: KK) JJ
Subgoal 4.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < backchain perm_trans with K = U6.
Subgoal 4.2.1.3.3:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2 U3 U4 U5 U6
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H18 : mll LL1
H22 : adj U3 B1 LL1
H23 : adj KK A U4
H25 : adj U4 B U5
H26 : adj U5 A1 U3
H27 : is_list U5
H28 : mll (par A1 B1 :: U5)
H29 : is_fm A
H30 : is_fm B
H31 : adj KK (par A1 B1) U6
H33 : perm U6 JJ
============================
perm (par A1 B1 :: KK) U6
Subgoal 4.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_1_is_list to H31.
Subgoal 4.2.1.3.3:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2 U3 U4 U5 U6
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H18 : mll LL1
H22 : adj U3 B1 LL1
H23 : adj KK A U4
H25 : adj U4 B U5
H26 : adj U5 A1 U3
H27 : is_list U5
H28 : mll (par A1 B1 :: U5)
H29 : is_fm A
H30 : is_fm B
H31 : adj KK (par A1 B1) U6
H33 : perm U6 JJ
H34 : is_list KK
============================
perm (par A1 B1 :: KK) U6
Subgoal 4.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < unfold.
Subgoal 4.2.1.3.3:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2 U3 U4 U5 U6
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H18 : mll LL1
H22 : adj U3 B1 LL1
H23 : adj KK A U4
H25 : adj U4 B U5
H26 : adj U5 A1 U3
H27 : is_list U5
H28 : mll (par A1 B1 :: U5)
H29 : is_fm A
H30 : is_fm B
H31 : adj KK (par A1 B1) U6
H33 : perm U6 JJ
H34 : is_list KK
============================
exists A KK1 LL, adj KK1 A (par A1 B1 :: KK) /\ adj LL A U6 /\ perm KK1 LL
Subgoal 4.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < witness par A1 B1.
Subgoal 4.2.1.3.3:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2 U3 U4 U5 U6
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H18 : mll LL1
H22 : adj U3 B1 LL1
H23 : adj KK A U4
H25 : adj U4 B U5
H26 : adj U5 A1 U3
H27 : is_list U5
H28 : mll (par A1 B1 :: U5)
H29 : is_fm A
H30 : is_fm B
H31 : adj KK (par A1 B1) U6
H33 : perm U6 JJ
H34 : is_list KK
============================
exists KK1 LL, adj KK1 (par A1 B1) (par A1 B1 :: KK) /\
adj LL (par A1 B1) U6 /\ perm KK1 LL
Subgoal 4.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < witness KK.
Subgoal 4.2.1.3.3:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2 U3 U4 U5 U6
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H18 : mll LL1
H22 : adj U3 B1 LL1
H23 : adj KK A U4
H25 : adj U4 B U5
H26 : adj U5 A1 U3
H27 : is_list U5
H28 : mll (par A1 B1 :: U5)
H29 : is_fm A
H30 : is_fm B
H31 : adj KK (par A1 B1) U6
H33 : perm U6 JJ
H34 : is_list KK
============================
exists LL, adj KK (par A1 B1) (par A1 B1 :: KK) /\ adj LL (par A1 B1) U6 /\
perm KK LL
Subgoal 4.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < witness KK.
Subgoal 4.2.1.3.3:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2 U3 U4 U5 U6
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H18 : mll LL1
H22 : adj U3 B1 LL1
H23 : adj KK A U4
H25 : adj U4 B U5
H26 : adj U5 A1 U3
H27 : is_list U5
H28 : mll (par A1 B1 :: U5)
H29 : is_fm A
H30 : is_fm B
H31 : adj KK (par A1 B1) U6
H33 : perm U6 JJ
H34 : is_list KK
============================
adj KK (par A1 B1) (par A1 B1 :: KK) /\ adj KK (par A1 B1) U6 /\ perm KK KK
Subgoal 4.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < split.
Subgoal 4.2.1.3.3.1:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2 U3 U4 U5 U6
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H18 : mll LL1
H22 : adj U3 B1 LL1
H23 : adj KK A U4
H25 : adj U4 B U5
H26 : adj U5 A1 U3
H27 : is_list U5
H28 : mll (par A1 B1 :: U5)
H29 : is_fm A
H30 : is_fm B
H31 : adj KK (par A1 B1) U6
H33 : perm U6 JJ
H34 : is_list KK
============================
adj KK (par A1 B1) (par A1 B1 :: KK)
Subgoal 4.2.1.3.3.2 is:
adj KK (par A1 B1) U6
Subgoal 4.2.1.3.3.3 is:
perm KK KK
Subgoal 4.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < search.
Subgoal 4.2.1.3.3.2:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2 U3 U4 U5 U6
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H18 : mll LL1
H22 : adj U3 B1 LL1
H23 : adj KK A U4
H25 : adj U4 B U5
H26 : adj U5 A1 U3
H27 : is_list U5
H28 : mll (par A1 B1 :: U5)
H29 : is_fm A
H30 : is_fm B
H31 : adj KK (par A1 B1) U6
H33 : perm U6 JJ
H34 : is_list KK
============================
adj KK (par A1 B1) U6
Subgoal 4.2.1.3.3.3 is:
perm KK KK
Subgoal 4.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < search.
Subgoal 4.2.1.3.3.3:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2 U3 U4 U5 U6
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H18 : mll LL1
H22 : adj U3 B1 LL1
H23 : adj KK A U4
H25 : adj U4 B U5
H26 : adj U5 A1 U3
H27 : is_list U5
H28 : mll (par A1 B1 :: U5)
H29 : is_fm A
H30 : is_fm B
H31 : adj KK (par A1 B1) U6
H33 : perm U6 JJ
H34 : is_list KK
============================
perm KK KK
Subgoal 4.2 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < backchain perm_refl.
Subgoal 4.2:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2 U3 U4 U5
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (par A1 B1) L
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H11 : adj KK (par A B) LL
H18 : mll LL1
H22 : adj U3 B1 LL1
H23 : adj KK A U4
H25 : adj U4 B U5
H26 : adj U5 A1 U3
H27 : is_list U5
H28 : mll (par A1 B1 :: U5)
H29 : is_fm A
H30 : is_fm B
H31 : perm (par A1 B1 :: U5) (A :: B :: JJ)
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply mll_perm to *H28 *H31.
Subgoal 4.2:
Variables: L JJ A B A1 B1 LL J K KK U U1 KK1 LL1 U2 U3 U4 U5
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL (par A1 B1) L
H8 : is_fm A1
H9 : is_fm B1
H10 : is_list JJ
H11 : adj KK (par A B) LL
H18 : mll LL1
H22 : adj U3 B1 LL1
H23 : adj KK A U4
H25 : adj U4 B U5
H26 : adj U5 A1 U3
H27 : is_list U5
H29 : is_fm A
H30 : is_fm B
H32 : mll (A :: B :: JJ)
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < search.
Subgoal 5:
Variables: L JJ A B LL
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL bot L
H4 : mll LL *
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_same_result_diff to H2 H3.
Subgoal 5:
Variables: L JJ A B LL
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL bot L
H4 : mll LL *
H5 : par A B = bot /\ perm JJ LL \/ (exists KK, adj KK (par A B) LL)
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_2_is_o to H2.
Subgoal 5:
Variables: L JJ A B LL
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL bot L
H4 : mll LL *
H5 : par A B = bot /\ perm JJ LL \/ (exists KK, adj KK (par A B) LL)
H6 : is_fm (par A B)
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < case H6.
Subgoal 5:
Variables: L JJ A B LL
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL bot L
H4 : mll LL *
H5 : par A B = bot /\ perm JJ LL \/ (exists KK, adj KK (par A B) LL)
H7 : is_fm A
H8 : is_fm B
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < case H5.
Subgoal 5:
Variables: L JJ A B LL KK
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL bot L
H4 : mll LL *
H7 : is_fm A
H8 : is_fm B
H9 : adj KK (par A B) LL
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply IH to *H4 H9.
Subgoal 5:
Variables: L JJ A B LL KK KK1 LL1
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL bot L
H7 : is_fm A
H8 : is_fm B
H9 : adj KK (par A B) LL
H10 : adj KK A KK1
H11 : adj KK1 B LL1
H12 : mll LL1
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_3_is_list to H11.
Subgoal 5:
Variables: L JJ A B LL KK KK1 LL1
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL bot L
H7 : is_fm A
H8 : is_fm B
H9 : adj KK (par A B) LL
H10 : adj KK A KK1
H11 : adj KK1 B LL1
H12 : mll LL1
H13 : is_list LL1
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < assert mll (bot :: LL1).
Subgoal 5:
Variables: L JJ A B LL KK KK1 LL1
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL bot L
H7 : is_fm A
H8 : is_fm B
H9 : adj KK (par A B) LL
H10 : adj KK A KK1
H11 : adj KK1 B LL1
H12 : mll LL1
H13 : is_list LL1
H14 : mll (bot :: LL1)
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_1_is_list to H2.
Subgoal 5:
Variables: L JJ A B LL KK KK1 LL1
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL bot L
H7 : is_fm A
H8 : is_fm B
H9 : adj KK (par A B) LL
H10 : adj KK A KK1
H11 : adj KK1 B LL1
H12 : mll LL1
H13 : is_list LL1
H14 : mll (bot :: LL1)
H15 : is_list JJ
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < assert perm (bot :: LL1) (A :: B :: JJ).
Subgoal 5.1:
Variables: L JJ A B LL KK KK1 LL1
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL bot L
H7 : is_fm A
H8 : is_fm B
H9 : adj KK (par A B) LL
H10 : adj KK A KK1
H11 : adj KK1 B LL1
H12 : mll LL1
H13 : is_list LL1
H14 : mll (bot :: LL1)
H15 : is_list JJ
============================
perm (bot :: LL1) (A :: B :: JJ)
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < unfold.
Subgoal 5.1:
Variables: L JJ A B LL KK KK1 LL1
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL bot L
H7 : is_fm A
H8 : is_fm B
H9 : adj KK (par A B) LL
H10 : adj KK A KK1
H11 : adj KK1 B LL1
H12 : mll LL1
H13 : is_list LL1
H14 : mll (bot :: LL1)
H15 : is_list JJ
============================
exists A1 KK LL, adj KK A1 (bot :: LL1) /\ adj LL A1 (A :: B :: JJ) /\
perm KK LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < witness B.
Subgoal 5.1:
Variables: L JJ A B LL KK KK1 LL1
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL bot L
H7 : is_fm A
H8 : is_fm B
H9 : adj KK (par A B) LL
H10 : adj KK A KK1
H11 : adj KK1 B LL1
H12 : mll LL1
H13 : is_list LL1
H14 : mll (bot :: LL1)
H15 : is_list JJ
============================
exists KK LL, adj KK B (bot :: LL1) /\ adj LL B (A :: B :: JJ) /\ perm KK LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < witness bot :: KK1.
Subgoal 5.1:
Variables: L JJ A B LL KK KK1 LL1
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL bot L
H7 : is_fm A
H8 : is_fm B
H9 : adj KK (par A B) LL
H10 : adj KK A KK1
H11 : adj KK1 B LL1
H12 : mll LL1
H13 : is_list LL1
H14 : mll (bot :: LL1)
H15 : is_list JJ
============================
exists LL, adj (bot :: KK1) B (bot :: LL1) /\ adj LL B (A :: B :: JJ) /\
perm (bot :: KK1) LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < witness A :: JJ.
Subgoal 5.1:
Variables: L JJ A B LL KK KK1 LL1
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL bot L
H7 : is_fm A
H8 : is_fm B
H9 : adj KK (par A B) LL
H10 : adj KK A KK1
H11 : adj KK1 B LL1
H12 : mll LL1
H13 : is_list LL1
H14 : mll (bot :: LL1)
H15 : is_list JJ
============================
adj (bot :: KK1) B (bot :: LL1) /\ adj (A :: JJ) B (A :: B :: JJ) /\
perm (bot :: KK1) (A :: JJ)
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < split.
Subgoal 5.1.1:
Variables: L JJ A B LL KK KK1 LL1
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL bot L
H7 : is_fm A
H8 : is_fm B
H9 : adj KK (par A B) LL
H10 : adj KK A KK1
H11 : adj KK1 B LL1
H12 : mll LL1
H13 : is_list LL1
H14 : mll (bot :: LL1)
H15 : is_list JJ
============================
adj (bot :: KK1) B (bot :: LL1)
Subgoal 5.1.2 is:
adj (A :: JJ) B (A :: B :: JJ)
Subgoal 5.1.3 is:
perm (bot :: KK1) (A :: JJ)
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < search.
Subgoal 5.1.2:
Variables: L JJ A B LL KK KK1 LL1
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL bot L
H7 : is_fm A
H8 : is_fm B
H9 : adj KK (par A B) LL
H10 : adj KK A KK1
H11 : adj KK1 B LL1
H12 : mll LL1
H13 : is_list LL1
H14 : mll (bot :: LL1)
H15 : is_list JJ
============================
adj (A :: JJ) B (A :: B :: JJ)
Subgoal 5.1.3 is:
perm (bot :: KK1) (A :: JJ)
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < search.
Subgoal 5.1.3:
Variables: L JJ A B LL KK KK1 LL1
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL bot L
H7 : is_fm A
H8 : is_fm B
H9 : adj KK (par A B) LL
H10 : adj KK A KK1
H11 : adj KK1 B LL1
H12 : mll LL1
H13 : is_list LL1
H14 : mll (bot :: LL1)
H15 : is_list JJ
============================
perm (bot :: KK1) (A :: JJ)
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < unfold.
Subgoal 5.1.3:
Variables: L JJ A B LL KK KK1 LL1
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL bot L
H7 : is_fm A
H8 : is_fm B
H9 : adj KK (par A B) LL
H10 : adj KK A KK1
H11 : adj KK1 B LL1
H12 : mll LL1
H13 : is_list LL1
H14 : mll (bot :: LL1)
H15 : is_list JJ
============================
exists A1 KK LL, adj KK A1 (bot :: KK1) /\ adj LL A1 (A :: JJ) /\ perm KK LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < witness A.
Subgoal 5.1.3:
Variables: L JJ A B LL KK KK1 LL1
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL bot L
H7 : is_fm A
H8 : is_fm B
H9 : adj KK (par A B) LL
H10 : adj KK A KK1
H11 : adj KK1 B LL1
H12 : mll LL1
H13 : is_list LL1
H14 : mll (bot :: LL1)
H15 : is_list JJ
============================
exists KK LL, adj KK A (bot :: KK1) /\ adj LL A (A :: JJ) /\ perm KK LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < witness bot :: KK.
Subgoal 5.1.3:
Variables: L JJ A B LL KK KK1 LL1
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL bot L
H7 : is_fm A
H8 : is_fm B
H9 : adj KK (par A B) LL
H10 : adj KK A KK1
H11 : adj KK1 B LL1
H12 : mll LL1
H13 : is_list LL1
H14 : mll (bot :: LL1)
H15 : is_list JJ
============================
exists LL, adj (bot :: KK) A (bot :: KK1) /\ adj LL A (A :: JJ) /\
perm (bot :: KK) LL
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < witness JJ.
Subgoal 5.1.3:
Variables: L JJ A B LL KK KK1 LL1
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL bot L
H7 : is_fm A
H8 : is_fm B
H9 : adj KK (par A B) LL
H10 : adj KK A KK1
H11 : adj KK1 B LL1
H12 : mll LL1
H13 : is_list LL1
H14 : mll (bot :: LL1)
H15 : is_list JJ
============================
adj (bot :: KK) A (bot :: KK1) /\ adj JJ A (A :: JJ) /\ perm (bot :: KK) JJ
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < split.
Subgoal 5.1.3.1:
Variables: L JJ A B LL KK KK1 LL1
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL bot L
H7 : is_fm A
H8 : is_fm B
H9 : adj KK (par A B) LL
H10 : adj KK A KK1
H11 : adj KK1 B LL1
H12 : mll LL1
H13 : is_list LL1
H14 : mll (bot :: LL1)
H15 : is_list JJ
============================
adj (bot :: KK) A (bot :: KK1)
Subgoal 5.1.3.2 is:
adj JJ A (A :: JJ)
Subgoal 5.1.3.3 is:
perm (bot :: KK) JJ
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < search.
Subgoal 5.1.3.2:
Variables: L JJ A B LL KK KK1 LL1
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL bot L
H7 : is_fm A
H8 : is_fm B
H9 : adj KK (par A B) LL
H10 : adj KK A KK1
H11 : adj KK1 B LL1
H12 : mll LL1
H13 : is_list LL1
H14 : mll (bot :: LL1)
H15 : is_list JJ
============================
adj JJ A (A :: JJ)
Subgoal 5.1.3.3 is:
perm (bot :: KK) JJ
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < search.
Subgoal 5.1.3.3:
Variables: L JJ A B LL KK KK1 LL1
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL bot L
H7 : is_fm A
H8 : is_fm B
H9 : adj KK (par A B) LL
H10 : adj KK A KK1
H11 : adj KK1 B LL1
H12 : mll LL1
H13 : is_list LL1
H14 : mll (bot :: LL1)
H15 : is_list JJ
============================
perm (bot :: KK) JJ
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_swap to *H9 *H3.
Subgoal 5.1.3.3:
Variables: L JJ A B LL KK KK1 LL1 U
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H7 : is_fm A
H8 : is_fm B
H10 : adj KK A KK1
H11 : adj KK1 B LL1
H12 : mll LL1
H13 : is_list LL1
H14 : mll (bot :: LL1)
H15 : is_list JJ
H16 : adj KK bot U
H17 : adj U (par A B) L
============================
perm (bot :: KK) JJ
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_same_result to *H17 H2.
Subgoal 5.1.3.3:
Variables: L JJ A B LL KK KK1 LL1 U
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H7 : is_fm A
H8 : is_fm B
H10 : adj KK A KK1
H11 : adj KK1 B LL1
H12 : mll LL1
H13 : is_list LL1
H14 : mll (bot :: LL1)
H15 : is_list JJ
H16 : adj KK bot U
H18 : perm U JJ
============================
perm (bot :: KK) JJ
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < backchain perm_trans with K = U.
Subgoal 5.1.3.3:
Variables: L JJ A B LL KK KK1 LL1 U
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H7 : is_fm A
H8 : is_fm B
H10 : adj KK A KK1
H11 : adj KK1 B LL1
H12 : mll LL1
H13 : is_list LL1
H14 : mll (bot :: LL1)
H15 : is_list JJ
H16 : adj KK bot U
H18 : perm U JJ
============================
perm (bot :: KK) U
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply adj_1_is_list to H16.
Subgoal 5.1.3.3:
Variables: L JJ A B LL KK KK1 LL1 U
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H7 : is_fm A
H8 : is_fm B
H10 : adj KK A KK1
H11 : adj KK1 B LL1
H12 : mll LL1
H13 : is_list LL1
H14 : mll (bot :: LL1)
H15 : is_list JJ
H16 : adj KK bot U
H18 : perm U JJ
H19 : is_list KK
============================
perm (bot :: KK) U
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply perm_refl to H19.
Subgoal 5.1.3.3:
Variables: L JJ A B LL KK KK1 LL1 U
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H7 : is_fm A
H8 : is_fm B
H10 : adj KK A KK1
H11 : adj KK1 B LL1
H12 : mll LL1
H13 : is_list LL1
H14 : mll (bot :: LL1)
H15 : is_list JJ
H16 : adj KK bot U
H18 : perm U JJ
H19 : is_list KK
H20 : perm KK KK
============================
perm (bot :: KK) U
Subgoal 5 is:
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < search.
Subgoal 5:
Variables: L JJ A B LL KK KK1 LL1
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL bot L
H7 : is_fm A
H8 : is_fm B
H9 : adj KK (par A B) LL
H10 : adj KK A KK1
H11 : adj KK1 B LL1
H12 : mll LL1
H13 : is_list LL1
H14 : mll (bot :: LL1)
H15 : is_list JJ
H16 : perm (bot :: LL1) (A :: B :: JJ)
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < apply mll_perm to *H14 *H16.
Subgoal 5:
Variables: L JJ A B LL KK KK1 LL1
IH : forall L JJ A B, mll L * -> adj JJ (par A B) L ->
(exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL)
H2 : adj JJ (par A B) L
H3 : adj LL bot L
H7 : is_fm A
H8 : is_fm B
H9 : adj KK (par A B) LL
H10 : adj KK A KK1
H11 : adj KK1 B LL1
H12 : mll LL1
H13 : is_list LL1
H15 : is_list JJ
H17 : mll (A :: B :: JJ)
============================
exists KK LL, adj JJ A KK /\ adj KK B LL /\ mll LL
par_inv < search.
Proof completed.
Abella < Theorem cut :
forall A B JJ J KK K LL, dual A B -> adj JJ A J -> mll J -> adj KK B K ->
mll K -> merge JJ KK LL -> mll LL.
============================
forall A B JJ J KK K LL, dual A B -> adj JJ A J -> mll J -> adj KK B K ->
mll K -> merge JJ KK LL -> mll LL
cut < induction on 1.
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
============================
forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J -> adj KK B K ->
mll K -> merge JJ KK LL -> mll LL
cut < induction on 3.
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
============================
forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J @@ ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
cut < intros.
Variables: A B JJ J KK K LL
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H3 : mll J @@
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
============================
mll LL
cut < case H3.
Subgoal 1:
Variables: A B JJ J KK K LL A1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj (natom A1 :: nil) (atom A1) J
============================
mll LL
Subgoal 2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply adj_same_result_diff to H2 H7.
Subgoal 1:
Variables: A B JJ J KK K LL A1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj (natom A1 :: nil) (atom A1) J
H8 : A = atom A1 /\ perm JJ (natom A1 :: nil) \/
(exists KK, adj KK A (natom A1 :: nil))
============================
mll LL
Subgoal 2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < case H8.
Subgoal 1.1:
Variables: B JJ J KK K LL A1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual (atom A1) B @
H2 : adj JJ (atom A1) J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj (natom A1 :: nil) (atom A1) J
H9 : perm JJ (natom A1 :: nil)
============================
mll LL
Subgoal 1.2 is:
mll LL
Subgoal 2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < case H1.
Subgoal 1.1:
Variables: JJ J KK K LL A1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H2 : adj JJ (atom A1) J
H4 : adj KK (natom A1) K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj (natom A1 :: nil) (atom A1) J
H9 : perm JJ (natom A1 :: nil)
============================
mll LL
Subgoal 1.2 is:
mll LL
Subgoal 2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < case H9.
Subgoal 1.1:
Variables: JJ J KK K LL A1 A2 KK1 LL1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H2 : adj JJ (atom A1) J
H4 : adj KK (natom A1) K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj (natom A1 :: nil) (atom A1) J
H10 : adj KK1 A2 JJ
H11 : adj LL1 A2 (natom A1 :: nil)
H12 : perm KK1 LL1
============================
mll LL
Subgoal 1.2 is:
mll LL
Subgoal 2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < case H11.
Subgoal 1.1.1:
Variables: JJ J KK K LL A1 KK1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H2 : adj JJ (atom A1) J
H4 : adj KK (natom A1) K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj (natom A1 :: nil) (atom A1) J
H10 : adj KK1 (natom A1) JJ
H12 : perm KK1 nil
H13 : is_fm (natom A1)
H14 : is_list nil
============================
mll LL
Subgoal 1.1.2 is:
mll LL
Subgoal 1.2 is:
mll LL
Subgoal 2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply adj_same_result to H2 H7.
Subgoal 1.1.1:
Variables: JJ J KK K LL A1 KK1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H2 : adj JJ (atom A1) J
H4 : adj KK (natom A1) K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj (natom A1 :: nil) (atom A1) J
H10 : adj KK1 (natom A1) JJ
H12 : perm KK1 nil
H13 : is_fm (natom A1)
H14 : is_list nil
H15 : perm JJ (natom A1 :: nil)
============================
mll LL
Subgoal 1.1.2 is:
mll LL
Subgoal 1.2 is:
mll LL
Subgoal 2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < case H15.
Subgoal 1.1.1:
Variables: JJ J KK K LL A1 KK1 A3 KK2 LL2
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H2 : adj JJ (atom A1) J
H4 : adj KK (natom A1) K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj (natom A1 :: nil) (atom A1) J
H10 : adj KK1 (natom A1) JJ
H12 : perm KK1 nil
H13 : is_fm (natom A1)
H14 : is_list nil
H16 : adj KK2 A3 JJ
H17 : adj LL2 A3 (natom A1 :: nil)
H18 : perm KK2 LL2
============================
mll LL
Subgoal 1.1.2 is:
mll LL
Subgoal 1.2 is:
mll LL
Subgoal 2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < case H12.
Subgoal 1.1.1.1:
Variables: JJ J KK K LL A1 A3 KK2 LL2
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H2 : adj JJ (atom A1) J
H4 : adj KK (natom A1) K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj (natom A1 :: nil) (atom A1) J
H10 : adj nil (natom A1) JJ
H13 : is_fm (natom A1)
H14 : is_list nil
H16 : adj KK2 A3 JJ
H17 : adj LL2 A3 (natom A1 :: nil)
H18 : perm KK2 LL2
============================
mll LL
Subgoal 1.1.1.2 is:
mll LL
Subgoal 1.1.2 is:
mll LL
Subgoal 1.2 is:
mll LL
Subgoal 2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < case H10.
Subgoal 1.1.1.1:
Variables: J KK K LL A1 A3 KK2 LL2
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H2 : adj (natom A1 :: nil) (atom A1) J
H4 : adj KK (natom A1) K
H5 : mll K
H6 : merge (natom A1 :: nil) KK LL
H7 : adj (natom A1 :: nil) (atom A1) J
H13 : is_fm (natom A1)
H14 : is_list nil
H16 : adj KK2 A3 (natom A1 :: nil)
H17 : adj LL2 A3 (natom A1 :: nil)
H18 : perm KK2 LL2
H19 : is_fm (natom A1)
H20 : is_list nil
============================
mll LL
Subgoal 1.1.1.2 is:
mll LL
Subgoal 1.1.2 is:
mll LL
Subgoal 1.2 is:
mll LL
Subgoal 2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply merge_move_12 to _ H4 H6.
Subgoal 1.1.1.1:
Variables: J KK K LL A1 A3 KK2 LL2
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H2 : adj (natom A1 :: nil) (atom A1) J
H4 : adj KK (natom A1) K
H5 : mll K
H6 : merge (natom A1 :: nil) KK LL
H7 : adj (natom A1 :: nil) (atom A1) J
H13 : is_fm (natom A1)
H14 : is_list nil
H16 : adj KK2 A3 (natom A1 :: nil)
H17 : adj LL2 A3 (natom A1 :: nil)
H18 : perm KK2 LL2
H19 : is_fm (natom A1)
H20 : is_list nil
H21 : merge nil K LL
============================
mll LL
Subgoal 1.1.1.2 is:
mll LL
Subgoal 1.1.2 is:
mll LL
Subgoal 1.2 is:
mll LL
Subgoal 2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply merge_nil_perm to H21.
Subgoal 1.1.1.1:
Variables: J KK K LL A1 A3 KK2 LL2
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H2 : adj (natom A1 :: nil) (atom A1) J
H4 : adj KK (natom A1) K
H5 : mll K
H6 : merge (natom A1 :: nil) KK LL
H7 : adj (natom A1 :: nil) (atom A1) J
H13 : is_fm (natom A1)
H14 : is_list nil
H16 : adj KK2 A3 (natom A1 :: nil)
H17 : adj LL2 A3 (natom A1 :: nil)
H18 : perm KK2 LL2
H19 : is_fm (natom A1)
H20 : is_list nil
H21 : merge nil K LL
H22 : perm K LL
============================
mll LL
Subgoal 1.1.1.2 is:
mll LL
Subgoal 1.1.2 is:
mll LL
Subgoal 1.2 is:
mll LL
Subgoal 2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < backchain mll_perm.
Subgoal 1.1.1.2:
Variables: JJ J KK K LL A1 KK1 A3 KK2 LL2 A4 KK3 LL3
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H2 : adj JJ (atom A1) J
H4 : adj KK (natom A1) K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj (natom A1 :: nil) (atom A1) J
H10 : adj KK1 (natom A1) JJ
H13 : is_fm (natom A1)
H14 : is_list nil
H16 : adj KK2 A3 JJ
H17 : adj LL2 A3 (natom A1 :: nil)
H18 : perm KK2 LL2
H19 : adj KK3 A4 KK1
H20 : adj LL3 A4 nil
H21 : perm KK3 LL3
============================
mll LL
Subgoal 1.1.2 is:
mll LL
Subgoal 1.2 is:
mll LL
Subgoal 2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < case H20.
Subgoal 1.1.2:
Variables: JJ J KK K LL A1 A2 KK1 K1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H2 : adj JJ (atom A1) J
H4 : adj KK (natom A1) K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj (natom A1 :: nil) (atom A1) J
H10 : adj KK1 A2 JJ
H12 : perm KK1 (natom A1 :: K1)
H13 : is_fm (natom A1)
H14 : adj K1 A2 nil
============================
mll LL
Subgoal 1.2 is:
mll LL
Subgoal 2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < case H14.
Subgoal 1.2:
Variables: A B JJ J KK K LL A1 KK1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj (natom A1 :: nil) (atom A1) J
H9 : adj KK1 A (natom A1 :: nil)
============================
mll LL
Subgoal 2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < case H9.
Subgoal 1.2.1:
Variables: B JJ J KK K LL A1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual (natom A1) B @
H2 : adj JJ (natom A1) J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj (natom A1 :: nil) (atom A1) J
H10 : is_fm (natom A1)
H11 : is_list nil
============================
mll LL
Subgoal 1.2.2 is:
mll LL
Subgoal 2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < case H1.
Subgoal 1.2.2:
Variables: A B JJ J KK K LL A1 K1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj (natom A1 :: nil) (atom A1) J
H10 : is_fm (natom A1)
H11 : adj K1 A nil
============================
mll LL
Subgoal 2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < case H11.
Subgoal 2:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
============================
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply adj_same_result_diff to H2 H7.
Subgoal 2:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H13 : A = tens A1 B1 /\ perm JJ LL1 \/ (exists KK, adj KK A LL1)
============================
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < case H13.
Subgoal 2.1:
Variables: B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual (tens A1 B1) B @
H2 : adj JJ (tens A1 B1) J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : perm JJ LL1
============================
mll LL
Subgoal 2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < case H1.
Subgoal 2.1:
Variables: JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 BB AA
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H2 : adj JJ (tens A1 B1) J
H4 : adj KK (par AA BB) K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : perm JJ LL1
H15 : dual A1 AA *
H16 : dual B1 BB *
============================
mll LL
Subgoal 2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply par_inv to H5 H4.
Subgoal 2.1:
Variables: JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 BB AA KK2 LL2
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H2 : adj JJ (tens A1 B1) J
H4 : adj KK (par AA BB) K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : perm JJ LL1
H15 : dual A1 AA *
H16 : dual B1 BB *
H17 : adj KK AA KK2
H18 : adj KK2 BB LL2
H19 : mll LL2
============================
mll LL
Subgoal 2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply adj_1_is_list to H18.
Subgoal 2.1:
Variables: JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 BB AA KK2 LL2
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H2 : adj JJ (tens A1 B1) J
H4 : adj KK (par AA BB) K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : perm JJ LL1
H15 : dual A1 AA *
H16 : dual B1 BB *
H17 : adj KK AA KK2
H18 : adj KK2 BB LL2
H19 : mll LL2
H20 : is_list KK2
============================
mll LL
Subgoal 2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply adj_1_is_list to H11.
Subgoal 2.1:
Variables: JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 BB AA KK2 LL2
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H2 : adj JJ (tens A1 B1) J
H4 : adj KK (par AA BB) K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : perm JJ LL1
H15 : dual A1 AA *
H16 : dual B1 BB *
H17 : adj KK AA KK2
H18 : adj KK2 BB LL2
H19 : mll LL2
H20 : is_list KK2
H21 : is_list KK1
============================
mll LL
Subgoal 2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply merge_exists to *H21 *H20.
Subgoal 2.1:
Variables: JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 BB AA KK2 LL2 L
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H2 : adj JJ (tens A1 B1) J
H4 : adj KK (par AA BB) K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : perm JJ LL1
H15 : dual A1 AA *
H16 : dual B1 BB *
H17 : adj KK AA KK2
H18 : adj KK2 BB LL2
H19 : mll LL2
H22 : merge KK1 KK2 L
============================
mll LL
Subgoal 2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply IH to H16 H11 H12 H18 H19 H22.
Subgoal 2.1:
Variables: JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 BB AA KK2 LL2 L
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H2 : adj JJ (tens A1 B1) J
H4 : adj KK (par AA BB) K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : perm JJ LL1
H15 : dual A1 AA *
H16 : dual B1 BB *
H17 : adj KK AA KK2
H18 : adj KK2 BB LL2
H19 : mll LL2
H22 : merge KK1 KK2 L
H23 : mll L
============================
mll LL
Subgoal 2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply merge_unadj_2 to H22 H17.
Subgoal 2.1:
Variables: JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 BB AA KK2 LL2 L LL3
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H2 : adj JJ (tens A1 B1) J
H4 : adj KK (par AA BB) K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : perm JJ LL1
H15 : dual A1 AA *
H16 : dual B1 BB *
H17 : adj KK AA KK2
H18 : adj KK2 BB LL2
H19 : mll LL2
H22 : merge KK1 KK2 L
H23 : mll L
H24 : adj LL3 AA L
H25 : merge KK1 KK LL3
============================
mll LL
Subgoal 2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply adj_1_is_list to H24.
Subgoal 2.1:
Variables: JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 BB AA KK2 LL2 L LL3
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H2 : adj JJ (tens A1 B1) J
H4 : adj KK (par AA BB) K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : perm JJ LL1
H15 : dual A1 AA *
H16 : dual B1 BB *
H17 : adj KK AA KK2
H18 : adj KK2 BB LL2
H19 : mll LL2
H22 : merge KK1 KK2 L
H23 : mll L
H24 : adj LL3 AA L
H25 : merge KK1 KK LL3
H26 : is_list LL3
============================
mll LL
Subgoal 2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply adj_1_is_list to H9.
Subgoal 2.1:
Variables: JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 BB AA KK2 LL2 L LL3
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H2 : adj JJ (tens A1 B1) J
H4 : adj KK (par AA BB) K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : perm JJ LL1
H15 : dual A1 AA *
H16 : dual B1 BB *
H17 : adj KK AA KK2
H18 : adj KK2 BB LL2
H19 : mll LL2
H22 : merge KK1 KK2 L
H23 : mll L
H24 : adj LL3 AA L
H25 : merge KK1 KK LL3
H26 : is_list LL3
H27 : is_list JJ1
============================
mll LL
Subgoal 2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply merge_exists to *H27 *H26.
Subgoal 2.1:
Variables: JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 BB AA KK2 LL2 L LL3 L1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H2 : adj JJ (tens A1 B1) J
H4 : adj KK (par AA BB) K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : perm JJ LL1
H15 : dual A1 AA *
H16 : dual B1 BB *
H17 : adj KK AA KK2
H18 : adj KK2 BB LL2
H19 : mll LL2
H22 : merge KK1 KK2 L
H23 : mll L
H24 : adj LL3 AA L
H25 : merge KK1 KK LL3
H28 : merge JJ1 LL3 L1
============================
mll LL
Subgoal 2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply IH to H15 H9 H10 H24 H23 H28.
Subgoal 2.1:
Variables: JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 BB AA KK2 LL2 L LL3 L1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H2 : adj JJ (tens A1 B1) J
H4 : adj KK (par AA BB) K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : perm JJ LL1
H15 : dual A1 AA *
H16 : dual B1 BB *
H17 : adj KK AA KK2
H18 : adj KK2 BB LL2
H19 : mll LL2
H22 : merge KK1 KK2 L
H23 : mll L
H24 : adj LL3 AA L
H25 : merge KK1 KK LL3
H28 : merge JJ1 LL3 L1
H29 : mll L1
============================
mll LL
Subgoal 2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply perm_sym to *H14.
Subgoal 2.1:
Variables: JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 BB AA KK2 LL2 L LL3 L1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H2 : adj JJ (tens A1 B1) J
H4 : adj KK (par AA BB) K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H15 : dual A1 AA *
H16 : dual B1 BB *
H17 : adj KK AA KK2
H18 : adj KK2 BB LL2
H19 : mll LL2
H22 : merge KK1 KK2 L
H23 : mll L
H24 : adj LL3 AA L
H25 : merge KK1 KK LL3
H28 : merge JJ1 LL3 L1
H29 : mll L1
H30 : perm LL1 JJ
============================
mll LL
Subgoal 2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply perm_merge_3 to *H8 *H30.
Subgoal 2.1:
Variables: JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 BB AA KK2 LL2 L LL3 L1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H2 : adj JJ (tens A1 B1) J
H4 : adj KK (par AA BB) K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H15 : dual A1 AA *
H16 : dual B1 BB *
H17 : adj KK AA KK2
H18 : adj KK2 BB LL2
H19 : mll LL2
H22 : merge KK1 KK2 L
H23 : mll L
H24 : adj LL3 AA L
H25 : merge KK1 KK LL3
H28 : merge JJ1 LL3 L1
H29 : mll L1
H31 : merge JJ1 KK1 JJ
============================
mll LL
Subgoal 2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply merge_assoc to *H31 *H25 *H28 *H6.
Subgoal 2.1:
Variables: JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 BB AA KK2 LL2 L LL3 L1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H2 : adj JJ (tens A1 B1) J
H4 : adj KK (par AA BB) K
H5 : mll K
H7 : adj LL1 (tens A1 B1) J
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H15 : dual A1 AA *
H16 : dual B1 BB *
H17 : adj KK AA KK2
H18 : adj KK2 BB LL2
H19 : mll LL2
H22 : merge KK1 KK2 L
H23 : mll L
H24 : adj LL3 AA L
H29 : mll L1
H32 : perm L1 LL
============================
mll LL
Subgoal 2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < backchain mll_perm with K = L1.
Subgoal 2.2:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
============================
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply merge_unadj_3 to H8 H14.
Subgoal 2.2:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H15 : (exists JJ, adj JJ A JJ1 /\ merge JJ KK1 KK2) \/
(exists KK, adj KK A KK1 /\ merge JJ1 KK KK2)
============================
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < case H15.
Subgoal 2.2.1:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
============================
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply adj_swap to H16 H9.
Subgoal 2.2.1:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
============================
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply add_to_merge_left to H18 H17.
Subgoal 2.2.1:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U M
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 M
H21 : adj KK2 A1 M
============================
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < rename M to UKK1.
Subgoal 2.2.1:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
============================
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < ass : assert 0 exists UKK, merge U KK UKK.
Subgoal 2.2.1.1:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
============================
exists UKK, merge U KK UKK
Subgoal 2.2.1 is:
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply adj_1_is_list to H19.
Subgoal 2.2.1.1:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : is_list U
============================
exists UKK, merge U KK UKK
Subgoal 2.2.1 is:
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply adj_1_is_list to H4.
Subgoal 2.2.1.1:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : is_list U
H23 : is_list KK
============================
exists UKK, merge U KK UKK
Subgoal 2.2.1 is:
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply merge_exists to H22 H23.
Subgoal 2.2.1.1:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1 L
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : is_list U
H23 : is_list KK
H24 : merge U KK L
============================
exists UKK, merge U KK UKK
Subgoal 2.2.1 is:
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < search.
Subgoal 2.2.1:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
ass : exists UKK, merge U KK UKK
============================
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < case ass.
Subgoal 2.2.1:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1 UKK
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : merge U KK UKK
============================
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < Hi : apply IH1 to H1 H19 H10 H4 H5 H22.
Subgoal 2.2.1:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1 UKK
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : merge U KK UKK
Hi : mll UKK
============================
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply merge_unadj_1 to H22 H18.
Subgoal 2.2.1:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1 UKK LL2
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 A1 UKK
H24 : merge JJ2 KK LL2
============================
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < ass : assert 0 exists V, merge LL2 KK1 V.
Subgoal 2.2.1.2:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1 UKK LL2
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 A1 UKK
H24 : merge JJ2 KK LL2
============================
exists V, merge LL2 KK1 V
Subgoal 2.2.1 is:
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply adj_1_is_list to H23.
Subgoal 2.2.1.2:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1 UKK LL2
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 A1 UKK
H24 : merge JJ2 KK LL2
H25 : is_list LL2
============================
exists V, merge LL2 KK1 V
Subgoal 2.2.1 is:
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply adj_1_is_list to H11.
Subgoal 2.2.1.2:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1 UKK LL2
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 A1 UKK
H24 : merge JJ2 KK LL2
H25 : is_list LL2
H26 : is_list KK1
============================
exists V, merge LL2 KK1 V
Subgoal 2.2.1 is:
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply merge_exists to H25 H26.
Subgoal 2.2.1.2:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1 UKK LL2 L
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 A1 UKK
H24 : merge JJ2 KK LL2
H25 : is_list LL2
H26 : is_list KK1
H27 : merge LL2 KK1 L
============================
exists V, merge LL2 KK1 V
Subgoal 2.2.1 is:
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < search.
Subgoal 2.2.1:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1 UKK LL2
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 A1 UKK
H24 : merge JJ2 KK LL2
ass : exists V, merge LL2 KK1 V
============================
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < case ass.
Subgoal 2.2.1:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1 UKK LL2 V
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 A1 UKK
H24 : merge JJ2 KK LL2
H25 : merge LL2 KK1 V
============================
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < ass : assert 0 exists VT, adj V (tens A1 B1) VT.
Subgoal 2.2.1.3:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1 UKK LL2 V
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 A1 UKK
H24 : merge JJ2 KK LL2
H25 : merge LL2 KK1 V
============================
exists VT, adj V (tens A1 B1) VT
Subgoal 2.2.1 is:
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply merge_3_is_list to H25.
Subgoal 2.2.1.3:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1 UKK LL2 V
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 A1 UKK
H24 : merge JJ2 KK LL2
H25 : merge LL2 KK1 V
H26 : is_list V
============================
exists VT, adj V (tens A1 B1) VT
Subgoal 2.2.1 is:
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply adj_2_is_o to H7.
Subgoal 2.2.1.3:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1 UKK LL2 V
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 A1 UKK
H24 : merge JJ2 KK LL2
H25 : merge LL2 KK1 V
H26 : is_list V
H27 : is_fm (tens A1 B1)
============================
exists VT, adj V (tens A1 B1) VT
Subgoal 2.2.1 is:
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply adj_exists to H27 H26.
Subgoal 2.2.1.3:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1 UKK LL2 V
M
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 A1 UKK
H24 : merge JJ2 KK LL2
H25 : merge LL2 KK1 V
H26 : is_list V
H27 : is_fm (tens A1 B1)
H28 : adj V (tens A1 B1) M
============================
exists VT, adj V (tens A1 B1) VT
Subgoal 2.2.1 is:
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < search.
Subgoal 2.2.1:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1 UKK LL2 V
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 A1 UKK
H24 : merge JJ2 KK LL2
H25 : merge LL2 KK1 V
ass : exists VT, adj V (tens A1 B1) VT
============================
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < case ass.
Subgoal 2.2.1:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1 UKK LL2 V
VT
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 A1 UKK
H24 : merge JJ2 KK LL2
H25 : merge LL2 KK1 V
H26 : adj V (tens A1 B1) VT
============================
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < assert mll VT.
Subgoal 2.2.1:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1 UKK LL2 V
VT
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 A1 UKK
H24 : merge JJ2 KK LL2
H25 : merge LL2 KK1 V
H26 : adj V (tens A1 B1) VT
H27 : mll VT
============================
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply adj_swap to H14 H7.
Subgoal 2.2.1:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1 UKK LL2 V
VT U1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 A1 UKK
H24 : merge JJ2 KK LL2
H25 : merge LL2 KK1 V
H26 : adj V (tens A1 B1) VT
H27 : mll VT
H28 : adj KK2 (tens A1 B1) U1
H29 : adj U1 A J
============================
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply adj_same_result to H2 *H29.
Subgoal 2.2.1:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1 UKK LL2 V
VT U1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 A1 UKK
H24 : merge JJ2 KK LL2
H25 : merge LL2 KK1 V
H26 : adj V (tens A1 B1) VT
H27 : mll VT
H28 : adj KK2 (tens A1 B1) U1
H30 : perm JJ U1
============================
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply perm_merge_1 to *H6 *H30.
Subgoal 2.2.1:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1 UKK LL2 V
VT U1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 A1 UKK
H24 : merge JJ2 KK LL2
H25 : merge LL2 KK1 V
H26 : adj V (tens A1 B1) VT
H27 : mll VT
H28 : adj KK2 (tens A1 B1) U1
H31 : merge U1 KK LL
============================
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply merge_unadj_1 to H31 H28.
Subgoal 2.2.1:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1 UKK LL2 V
VT U1 LL3
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 A1 UKK
H24 : merge JJ2 KK LL2
H25 : merge LL2 KK1 V
H26 : adj V (tens A1 B1) VT
H27 : mll VT
H28 : adj KK2 (tens A1 B1) U1
H31 : merge U1 KK LL
H32 : adj LL3 (tens A1 B1) LL
H33 : merge KK2 KK LL3
============================
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < assert 0 perm VT LL.
Subgoal 2.2.1.4:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1 UKK LL2 V
VT U1 LL3
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 A1 UKK
H24 : merge JJ2 KK LL2
H25 : merge LL2 KK1 V
H26 : adj V (tens A1 B1) VT
H27 : mll VT
H28 : adj KK2 (tens A1 B1) U1
H31 : merge U1 KK LL
H32 : adj LL3 (tens A1 B1) LL
H33 : merge KK2 KK LL3
============================
perm VT LL
Subgoal 2.2.1 is:
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < unfold.
Subgoal 2.2.1.4:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1 UKK LL2 V
VT U1 LL3
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 A1 UKK
H24 : merge JJ2 KK LL2
H25 : merge LL2 KK1 V
H26 : adj V (tens A1 B1) VT
H27 : mll VT
H28 : adj KK2 (tens A1 B1) U1
H31 : merge U1 KK LL
H32 : adj LL3 (tens A1 B1) LL
H33 : merge KK2 KK LL3
============================
exists A KK LL1, adj KK A VT /\ adj LL1 A LL /\ perm KK LL1
Subgoal 2.2.1 is:
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < witness tens A1 B1.
Subgoal 2.2.1.4:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1 UKK LL2 V
VT U1 LL3
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 A1 UKK
H24 : merge JJ2 KK LL2
H25 : merge LL2 KK1 V
H26 : adj V (tens A1 B1) VT
H27 : mll VT
H28 : adj KK2 (tens A1 B1) U1
H31 : merge U1 KK LL
H32 : adj LL3 (tens A1 B1) LL
H33 : merge KK2 KK LL3
============================
exists KK LL1, adj KK (tens A1 B1) VT /\ adj LL1 (tens A1 B1) LL /\
perm KK LL1
Subgoal 2.2.1 is:
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < witness V.
Subgoal 2.2.1.4:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1 UKK LL2 V
VT U1 LL3
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 A1 UKK
H24 : merge JJ2 KK LL2
H25 : merge LL2 KK1 V
H26 : adj V (tens A1 B1) VT
H27 : mll VT
H28 : adj KK2 (tens A1 B1) U1
H31 : merge U1 KK LL
H32 : adj LL3 (tens A1 B1) LL
H33 : merge KK2 KK LL3
============================
exists LL1, adj V (tens A1 B1) VT /\ adj LL1 (tens A1 B1) LL /\ perm V LL1
Subgoal 2.2.1 is:
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < witness LL3.
Subgoal 2.2.1.4:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1 UKK LL2 V
VT U1 LL3
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 A1 UKK
H24 : merge JJ2 KK LL2
H25 : merge LL2 KK1 V
H26 : adj V (tens A1 B1) VT
H27 : mll VT
H28 : adj KK2 (tens A1 B1) U1
H31 : merge U1 KK LL
H32 : adj LL3 (tens A1 B1) LL
H33 : merge KK2 KK LL3
============================
adj V (tens A1 B1) VT /\ adj LL3 (tens A1 B1) LL /\ perm V LL3
Subgoal 2.2.1 is:
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < split.
Subgoal 2.2.1.4.1:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1 UKK LL2 V
VT U1 LL3
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 A1 UKK
H24 : merge JJ2 KK LL2
H25 : merge LL2 KK1 V
H26 : adj V (tens A1 B1) VT
H27 : mll VT
H28 : adj KK2 (tens A1 B1) U1
H31 : merge U1 KK LL
H32 : adj LL3 (tens A1 B1) LL
H33 : merge KK2 KK LL3
============================
adj V (tens A1 B1) VT
Subgoal 2.2.1.4.2 is:
adj LL3 (tens A1 B1) LL
Subgoal 2.2.1.4.3 is:
perm V LL3
Subgoal 2.2.1 is:
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < search.
Subgoal 2.2.1.4.2:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1 UKK LL2 V
VT U1 LL3
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 A1 UKK
H24 : merge JJ2 KK LL2
H25 : merge LL2 KK1 V
H26 : adj V (tens A1 B1) VT
H27 : mll VT
H28 : adj KK2 (tens A1 B1) U1
H31 : merge U1 KK LL
H32 : adj LL3 (tens A1 B1) LL
H33 : merge KK2 KK LL3
============================
adj LL3 (tens A1 B1) LL
Subgoal 2.2.1.4.3 is:
perm V LL3
Subgoal 2.2.1 is:
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < search.
Subgoal 2.2.1.4.3:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1 UKK LL2 V
VT U1 LL3
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 A1 UKK
H24 : merge JJ2 KK LL2
H25 : merge LL2 KK1 V
H26 : adj V (tens A1 B1) VT
H27 : mll VT
H28 : adj KK2 (tens A1 B1) U1
H31 : merge U1 KK LL
H32 : adj LL3 (tens A1 B1) LL
H33 : merge KK2 KK LL3
============================
perm V LL3
Subgoal 2.2.1 is:
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < assert merge KK1 JJ2 KK2.
Subgoal 2.2.1.4.3.1:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1 UKK LL2 V
VT U1 LL3
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 A1 UKK
H24 : merge JJ2 KK LL2
H25 : merge LL2 KK1 V
H26 : adj V (tens A1 B1) VT
H27 : mll VT
H28 : adj KK2 (tens A1 B1) U1
H31 : merge U1 KK LL
H32 : adj LL3 (tens A1 B1) LL
H33 : merge KK2 KK LL3
============================
merge KK1 JJ2 KK2
Subgoal 2.2.1.4.3 is:
perm V LL3
Subgoal 2.2.1 is:
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < backchain merge_sym.
Subgoal 2.2.1.4.3:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1 UKK LL2 V
VT U1 LL3
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 A1 UKK
H24 : merge JJ2 KK LL2
H25 : merge LL2 KK1 V
H26 : adj V (tens A1 B1) VT
H27 : mll VT
H28 : adj KK2 (tens A1 B1) U1
H31 : merge U1 KK LL
H32 : adj LL3 (tens A1 B1) LL
H33 : merge KK2 KK LL3
H34 : merge KK1 JJ2 KK2
============================
perm V LL3
Subgoal 2.2.1 is:
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < assert merge KK1 LL2 V.
Subgoal 2.2.1.4.3.2:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1 UKK LL2 V
VT U1 LL3
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 A1 UKK
H24 : merge JJ2 KK LL2
H25 : merge LL2 KK1 V
H26 : adj V (tens A1 B1) VT
H27 : mll VT
H28 : adj KK2 (tens A1 B1) U1
H31 : merge U1 KK LL
H32 : adj LL3 (tens A1 B1) LL
H33 : merge KK2 KK LL3
H34 : merge KK1 JJ2 KK2
============================
merge KK1 LL2 V
Subgoal 2.2.1.4.3 is:
perm V LL3
Subgoal 2.2.1 is:
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < backchain merge_sym.
Subgoal 2.2.1.4.3:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1 UKK LL2 V
VT U1 LL3
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 A1 UKK
H24 : merge JJ2 KK LL2
H25 : merge LL2 KK1 V
H26 : adj V (tens A1 B1) VT
H27 : mll VT
H28 : adj KK2 (tens A1 B1) U1
H31 : merge U1 KK LL
H32 : adj LL3 (tens A1 B1) LL
H33 : merge KK2 KK LL3
H34 : merge KK1 JJ2 KK2
H35 : merge KK1 LL2 V
============================
perm V LL3
Subgoal 2.2.1 is:
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < backchain merge_assoc with J = KK1, K = JJ2, L = KK, JK = KK2, KL = LL2.
Subgoal 2.2.1:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 JJ2 U UKK1 UKK LL2 V
VT U1 LL3
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj JJ2 A JJ1
H17 : merge JJ2 KK1 KK2
H18 : adj JJ2 A1 U
H19 : adj U A J1
H20 : merge U KK1 UKK1
H21 : adj KK2 A1 UKK1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 A1 UKK
H24 : merge JJ2 KK LL2
H25 : merge LL2 KK1 V
H26 : adj V (tens A1 B1) VT
H27 : mll VT
H28 : adj KK2 (tens A1 B1) U1
H31 : merge U1 KK LL
H32 : adj LL3 (tens A1 B1) LL
H33 : merge KK2 KK LL3
H34 : perm VT LL
============================
mll LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < backchain mll_perm with K = VT.
Subgoal 2.2.2:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
============================
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply adj_swap to H16 H11.
Subgoal 2.2.2:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
============================
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply add_to_merge_right to H18 H17.
Subgoal 2.2.2:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U M
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U M
H21 : adj KK2 B1 M
============================
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < rename M to UJJ1.
Subgoal 2.2.2:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U UJJ1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U UJJ1
H21 : adj KK2 B1 UJJ1
============================
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < ass : assert 0 exists UKK, merge U KK UKK.
Subgoal 2.2.2.1:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U UJJ1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U UJJ1
H21 : adj KK2 B1 UJJ1
============================
exists UKK, merge U KK UKK
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply adj_1_is_list to H19.
Subgoal 2.2.2.1:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U UJJ1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U UJJ1
H21 : adj KK2 B1 UJJ1
H22 : is_list U
============================
exists UKK, merge U KK UKK
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply adj_1_is_list to H4.
Subgoal 2.2.2.1:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U UJJ1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U UJJ1
H21 : adj KK2 B1 UJJ1
H22 : is_list U
H23 : is_list KK
============================
exists UKK, merge U KK UKK
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply merge_exists to H22 H23.
Subgoal 2.2.2.1:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U UJJ1 L
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U UJJ1
H21 : adj KK2 B1 UJJ1
H22 : is_list U
H23 : is_list KK
H24 : merge U KK L
============================
exists UKK, merge U KK UKK
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < search.
Subgoal 2.2.2:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U UJJ1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U UJJ1
H21 : adj KK2 B1 UJJ1
ass : exists UKK, merge U KK UKK
============================
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < case ass.
Subgoal 2.2.2:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U UJJ1 UKK
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U UJJ1
H21 : adj KK2 B1 UJJ1
H22 : merge U KK UKK
============================
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < Hi : apply IH1 to H1 H19 H12 H4 H5 H22.
Subgoal 2.2.2:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U UJJ1 UKK
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U UJJ1
H21 : adj KK2 B1 UJJ1
H22 : merge U KK UKK
Hi : mll UKK
============================
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply merge_unadj_1 to H22 H18.
Subgoal 2.2.2:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U UJJ1 UKK LL2
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U UJJ1
H21 : adj KK2 B1 UJJ1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 B1 UKK
H24 : merge KK3 KK LL2
============================
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < ass : assert 0 exists V, merge JJ1 LL2 V.
Subgoal 2.2.2.2:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U UJJ1 UKK LL2
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U UJJ1
H21 : adj KK2 B1 UJJ1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 B1 UKK
H24 : merge KK3 KK LL2
============================
exists V, merge JJ1 LL2 V
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply adj_1_is_list to H9.
Subgoal 2.2.2.2:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U UJJ1 UKK LL2
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U UJJ1
H21 : adj KK2 B1 UJJ1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 B1 UKK
H24 : merge KK3 KK LL2
H25 : is_list JJ1
============================
exists V, merge JJ1 LL2 V
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply adj_1_is_list to H23.
Subgoal 2.2.2.2:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U UJJ1 UKK LL2
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U UJJ1
H21 : adj KK2 B1 UJJ1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 B1 UKK
H24 : merge KK3 KK LL2
H25 : is_list JJ1
H26 : is_list LL2
============================
exists V, merge JJ1 LL2 V
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply merge_exists to H25 H26.
Subgoal 2.2.2.2:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U UJJ1 UKK LL2 L
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U UJJ1
H21 : adj KK2 B1 UJJ1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 B1 UKK
H24 : merge KK3 KK LL2
H25 : is_list JJ1
H26 : is_list LL2
H27 : merge JJ1 LL2 L
============================
exists V, merge JJ1 LL2 V
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < search.
Subgoal 2.2.2:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U UJJ1 UKK LL2
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U UJJ1
H21 : adj KK2 B1 UJJ1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 B1 UKK
H24 : merge KK3 KK LL2
ass : exists V, merge JJ1 LL2 V
============================
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < case ass.
Subgoal 2.2.2:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U UJJ1 UKK LL2 V
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U UJJ1
H21 : adj KK2 B1 UJJ1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 B1 UKK
H24 : merge KK3 KK LL2
H25 : merge JJ1 LL2 V
============================
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < ass : assert 0 exists VT, adj V (tens A1 B1) VT.
Subgoal 2.2.2.3:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U UJJ1 UKK LL2 V
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U UJJ1
H21 : adj KK2 B1 UJJ1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 B1 UKK
H24 : merge KK3 KK LL2
H25 : merge JJ1 LL2 V
============================
exists VT, adj V (tens A1 B1) VT
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply merge_3_is_list to H25.
Subgoal 2.2.2.3:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U UJJ1 UKK LL2 V
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U UJJ1
H21 : adj KK2 B1 UJJ1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 B1 UKK
H24 : merge KK3 KK LL2
H25 : merge JJ1 LL2 V
H26 : is_list V
============================
exists VT, adj V (tens A1 B1) VT
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply adj_2_is_o to H7.
Subgoal 2.2.2.3:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U UJJ1 UKK LL2 V
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U UJJ1
H21 : adj KK2 B1 UJJ1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 B1 UKK
H24 : merge KK3 KK LL2
H25 : merge JJ1 LL2 V
H26 : is_list V
H27 : is_fm (tens A1 B1)
============================
exists VT, adj V (tens A1 B1) VT
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply adj_exists to H27 H26.
Subgoal 2.2.2.3:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U UJJ1 UKK LL2 V
M
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U UJJ1
H21 : adj KK2 B1 UJJ1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 B1 UKK
H24 : merge KK3 KK LL2
H25 : merge JJ1 LL2 V
H26 : is_list V
H27 : is_fm (tens A1 B1)
H28 : adj V (tens A1 B1) M
============================
exists VT, adj V (tens A1 B1) VT
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < search.
Subgoal 2.2.2:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U UJJ1 UKK LL2 V
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U UJJ1
H21 : adj KK2 B1 UJJ1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 B1 UKK
H24 : merge KK3 KK LL2
H25 : merge JJ1 LL2 V
ass : exists VT, adj V (tens A1 B1) VT
============================
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < case ass.
Subgoal 2.2.2:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U UJJ1 UKK LL2 V
VT
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U UJJ1
H21 : adj KK2 B1 UJJ1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 B1 UKK
H24 : merge KK3 KK LL2
H25 : merge JJ1 LL2 V
H26 : adj V (tens A1 B1) VT
============================
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < assert mll VT.
Subgoal 2.2.2:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U UJJ1 UKK LL2 V
VT
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U UJJ1
H21 : adj KK2 B1 UJJ1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 B1 UKK
H24 : merge KK3 KK LL2
H25 : merge JJ1 LL2 V
H26 : adj V (tens A1 B1) VT
H27 : mll VT
============================
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply adj_swap to H14 H7.
Subgoal 2.2.2:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U UJJ1 UKK LL2 V
VT U1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U UJJ1
H21 : adj KK2 B1 UJJ1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 B1 UKK
H24 : merge KK3 KK LL2
H25 : merge JJ1 LL2 V
H26 : adj V (tens A1 B1) VT
H27 : mll VT
H28 : adj KK2 (tens A1 B1) U1
H29 : adj U1 A J
============================
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply adj_same_result to H2 *H29.
Subgoal 2.2.2:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U UJJ1 UKK LL2 V
VT U1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U UJJ1
H21 : adj KK2 B1 UJJ1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 B1 UKK
H24 : merge KK3 KK LL2
H25 : merge JJ1 LL2 V
H26 : adj V (tens A1 B1) VT
H27 : mll VT
H28 : adj KK2 (tens A1 B1) U1
H30 : perm JJ U1
============================
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply perm_merge_1 to *H6 *H30.
Subgoal 2.2.2:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U UJJ1 UKK LL2 V
VT U1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U UJJ1
H21 : adj KK2 B1 UJJ1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 B1 UKK
H24 : merge KK3 KK LL2
H25 : merge JJ1 LL2 V
H26 : adj V (tens A1 B1) VT
H27 : mll VT
H28 : adj KK2 (tens A1 B1) U1
H31 : merge U1 KK LL
============================
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply merge_unadj_1 to H31 H28.
Subgoal 2.2.2:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U UJJ1 UKK LL2 V
VT U1 LL3
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U UJJ1
H21 : adj KK2 B1 UJJ1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 B1 UKK
H24 : merge KK3 KK LL2
H25 : merge JJ1 LL2 V
H26 : adj V (tens A1 B1) VT
H27 : mll VT
H28 : adj KK2 (tens A1 B1) U1
H31 : merge U1 KK LL
H32 : adj LL3 (tens A1 B1) LL
H33 : merge KK2 KK LL3
============================
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < assert 0 perm VT LL.
Subgoal 2.2.2.4:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U UJJ1 UKK LL2 V
VT U1 LL3
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U UJJ1
H21 : adj KK2 B1 UJJ1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 B1 UKK
H24 : merge KK3 KK LL2
H25 : merge JJ1 LL2 V
H26 : adj V (tens A1 B1) VT
H27 : mll VT
H28 : adj KK2 (tens A1 B1) U1
H31 : merge U1 KK LL
H32 : adj LL3 (tens A1 B1) LL
H33 : merge KK2 KK LL3
============================
perm VT LL
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < unfold.
Subgoal 2.2.2.4:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U UJJ1 UKK LL2 V
VT U1 LL3
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U UJJ1
H21 : adj KK2 B1 UJJ1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 B1 UKK
H24 : merge KK3 KK LL2
H25 : merge JJ1 LL2 V
H26 : adj V (tens A1 B1) VT
H27 : mll VT
H28 : adj KK2 (tens A1 B1) U1
H31 : merge U1 KK LL
H32 : adj LL3 (tens A1 B1) LL
H33 : merge KK2 KK LL3
============================
exists A KK LL1, adj KK A VT /\ adj LL1 A LL /\ perm KK LL1
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < witness tens A1 B1.
Subgoal 2.2.2.4:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U UJJ1 UKK LL2 V
VT U1 LL3
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U UJJ1
H21 : adj KK2 B1 UJJ1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 B1 UKK
H24 : merge KK3 KK LL2
H25 : merge JJ1 LL2 V
H26 : adj V (tens A1 B1) VT
H27 : mll VT
H28 : adj KK2 (tens A1 B1) U1
H31 : merge U1 KK LL
H32 : adj LL3 (tens A1 B1) LL
H33 : merge KK2 KK LL3
============================
exists KK LL1, adj KK (tens A1 B1) VT /\ adj LL1 (tens A1 B1) LL /\
perm KK LL1
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < witness V.
Subgoal 2.2.2.4:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U UJJ1 UKK LL2 V
VT U1 LL3
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U UJJ1
H21 : adj KK2 B1 UJJ1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 B1 UKK
H24 : merge KK3 KK LL2
H25 : merge JJ1 LL2 V
H26 : adj V (tens A1 B1) VT
H27 : mll VT
H28 : adj KK2 (tens A1 B1) U1
H31 : merge U1 KK LL
H32 : adj LL3 (tens A1 B1) LL
H33 : merge KK2 KK LL3
============================
exists LL1, adj V (tens A1 B1) VT /\ adj LL1 (tens A1 B1) LL /\ perm V LL1
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < witness LL3.
Subgoal 2.2.2.4:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U UJJ1 UKK LL2 V
VT U1 LL3
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U UJJ1
H21 : adj KK2 B1 UJJ1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 B1 UKK
H24 : merge KK3 KK LL2
H25 : merge JJ1 LL2 V
H26 : adj V (tens A1 B1) VT
H27 : mll VT
H28 : adj KK2 (tens A1 B1) U1
H31 : merge U1 KK LL
H32 : adj LL3 (tens A1 B1) LL
H33 : merge KK2 KK LL3
============================
adj V (tens A1 B1) VT /\ adj LL3 (tens A1 B1) LL /\ perm V LL3
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < split.
Subgoal 2.2.2.4.1:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U UJJ1 UKK LL2 V
VT U1 LL3
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U UJJ1
H21 : adj KK2 B1 UJJ1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 B1 UKK
H24 : merge KK3 KK LL2
H25 : merge JJ1 LL2 V
H26 : adj V (tens A1 B1) VT
H27 : mll VT
H28 : adj KK2 (tens A1 B1) U1
H31 : merge U1 KK LL
H32 : adj LL3 (tens A1 B1) LL
H33 : merge KK2 KK LL3
============================
adj V (tens A1 B1) VT
Subgoal 2.2.2.4.2 is:
adj LL3 (tens A1 B1) LL
Subgoal 2.2.2.4.3 is:
perm V LL3
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < search.
Subgoal 2.2.2.4.2:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U UJJ1 UKK LL2 V
VT U1 LL3
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U UJJ1
H21 : adj KK2 B1 UJJ1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 B1 UKK
H24 : merge KK3 KK LL2
H25 : merge JJ1 LL2 V
H26 : adj V (tens A1 B1) VT
H27 : mll VT
H28 : adj KK2 (tens A1 B1) U1
H31 : merge U1 KK LL
H32 : adj LL3 (tens A1 B1) LL
H33 : merge KK2 KK LL3
============================
adj LL3 (tens A1 B1) LL
Subgoal 2.2.2.4.3 is:
perm V LL3
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < search.
Subgoal 2.2.2.4.3:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U UJJ1 UKK LL2 V
VT U1 LL3
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U UJJ1
H21 : adj KK2 B1 UJJ1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 B1 UKK
H24 : merge KK3 KK LL2
H25 : merge JJ1 LL2 V
H26 : adj V (tens A1 B1) VT
H27 : mll VT
H28 : adj KK2 (tens A1 B1) U1
H31 : merge U1 KK LL
H32 : adj LL3 (tens A1 B1) LL
H33 : merge KK2 KK LL3
============================
perm V LL3
Subgoal 2.2.2 is:
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < backchain merge_assoc with J = JJ1, K = KK3, L = KK, JK = KK2, KL = LL2.
Subgoal 2.2.2:
Variables: A B JJ J KK K LL A1 B1 LL1 JJ1 KK1 J1 K1 KK2 KK3 U UJJ1 UKK LL2 V
VT U1 LL3
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H7 : adj LL1 (tens A1 B1) J
H8 : merge JJ1 KK1 LL1
H9 : adj JJ1 A1 J1
H10 : mll J1 **
H11 : adj KK1 B1 K1
H12 : mll K1 **
H14 : adj KK2 A LL1
H16 : adj KK3 A KK1
H17 : merge JJ1 KK3 KK2
H18 : adj KK3 B1 U
H19 : adj U A K1
H20 : merge JJ1 U UJJ1
H21 : adj KK2 B1 UJJ1
H22 : merge U KK UKK
Hi : mll UKK
H23 : adj LL2 B1 UKK
H24 : merge KK3 KK LL2
H25 : merge JJ1 LL2 V
H26 : adj V (tens A1 B1) VT
H27 : mll VT
H28 : adj KK2 (tens A1 B1) U1
H31 : merge U1 KK LL
H32 : adj LL3 (tens A1 B1) LL
H33 : merge KK2 KK LL3
H34 : perm VT LL
============================
mll LL
Subgoal 3 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < backchain mll_perm with K = VT.
Subgoal 3:
Variables: A B JJ KK K LL
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A (one :: nil)
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
============================
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < case H2.
Subgoal 3.1:
Variables: B KK K LL
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual one B @
H4 : adj KK B K
H5 : mll K
H6 : merge nil KK LL
H7 : is_fm one
H8 : is_list nil
============================
mll LL
Subgoal 3.2 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < case H1.
Subgoal 3.1:
Variables: KK K LL
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H4 : adj KK bot K
H5 : mll K
H6 : merge nil KK LL
H7 : is_fm one
H8 : is_list nil
============================
mll LL
Subgoal 3.2 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply merge_nil_perm to H6.
Subgoal 3.1:
Variables: KK K LL
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H4 : adj KK bot K
H5 : mll K
H6 : merge nil KK LL
H7 : is_fm one
H8 : is_list nil
H9 : perm KK LL
============================
mll LL
Subgoal 3.2 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply bot_inv to H5 H4.
Subgoal 3.1:
Variables: KK K LL
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H4 : adj KK bot K
H5 : mll K
H6 : merge nil KK LL
H7 : is_fm one
H8 : is_list nil
H9 : perm KK LL
H10 : mll KK
============================
mll LL
Subgoal 3.2 is:
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < backchain mll_perm with K = KK.
Subgoal 3.2:
Variables: A B KK K LL K1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H4 : adj KK B K
H5 : mll K
H6 : merge (one :: K1) KK LL
H7 : is_fm one
H8 : adj K1 A nil
============================
mll LL
Subgoal 4 is:
mll LL
Subgoal 5 is:
mll LL
cut < case H8.
Subgoal 4:
Variables: A B JJ J KK K LL A1 B1 LL1 J1 K1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (par A1 B1) J
H8 : adj LL1 A1 J1
H9 : adj J1 B1 K1
H10 : mll K1 **
============================
mll LL
Subgoal 5 is:
mll LL
cut < apply adj_same_result_diff to H2 H7.
Subgoal 4:
Variables: A B JJ J KK K LL A1 B1 LL1 J1 K1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (par A1 B1) J
H8 : adj LL1 A1 J1
H9 : adj J1 B1 K1
H10 : mll K1 **
H11 : A = par A1 B1 /\ perm JJ LL1 \/ (exists KK, adj KK A LL1)
============================
mll LL
Subgoal 5 is:
mll LL
cut < case H11.
Subgoal 4.1:
Variables: B JJ J KK K LL A1 B1 LL1 J1 K1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual (par A1 B1) B @
H2 : adj JJ (par A1 B1) J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (par A1 B1) J
H8 : adj LL1 A1 J1
H9 : adj J1 B1 K1
H10 : mll K1 **
H12 : perm JJ LL1
============================
mll LL
Subgoal 4.2 is:
mll LL
Subgoal 5 is:
mll LL
cut < case H1.
Subgoal 4.2:
Variables: A B JJ J KK K LL A1 B1 LL1 J1 K1 KK1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (par A1 B1) J
H8 : adj LL1 A1 J1
H9 : adj J1 B1 K1
H10 : mll K1 **
H12 : adj KK1 A LL1
============================
mll LL
Subgoal 5 is:
mll LL
cut < apply adj_swap to H12 *H8.
Subgoal 4.2:
Variables: A B JJ J KK K LL A1 B1 LL1 J1 K1 KK1 U
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (par A1 B1) J
H9 : adj J1 B1 K1
H10 : mll K1 **
H12 : adj KK1 A LL1
H13 : adj KK1 A1 U
H14 : adj U A J1
============================
mll LL
Subgoal 5 is:
mll LL
cut < apply adj_swap to *H14 *H9.
Subgoal 4.2:
Variables: A B JJ J KK K LL A1 B1 LL1 J1 K1 KK1 U U1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (par A1 B1) J
H10 : mll K1 **
H12 : adj KK1 A LL1
H13 : adj KK1 A1 U
H15 : adj U B1 U1
H16 : adj U1 A K1
============================
mll LL
Subgoal 5 is:
mll LL
cut < ass : assert 0 exists V, merge U1 KK V.
Subgoal 4.2.1:
Variables: A B JJ J KK K LL A1 B1 LL1 J1 K1 KK1 U U1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (par A1 B1) J
H10 : mll K1 **
H12 : adj KK1 A LL1
H13 : adj KK1 A1 U
H15 : adj U B1 U1
H16 : adj U1 A K1
============================
exists V, merge U1 KK V
Subgoal 4.2 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply adj_1_is_list to H16.
Subgoal 4.2.1:
Variables: A B JJ J KK K LL A1 B1 LL1 J1 K1 KK1 U U1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (par A1 B1) J
H10 : mll K1 **
H12 : adj KK1 A LL1
H13 : adj KK1 A1 U
H15 : adj U B1 U1
H16 : adj U1 A K1
H17 : is_list U1
============================
exists V, merge U1 KK V
Subgoal 4.2 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply adj_1_is_list to H4.
Subgoal 4.2.1:
Variables: A B JJ J KK K LL A1 B1 LL1 J1 K1 KK1 U U1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (par A1 B1) J
H10 : mll K1 **
H12 : adj KK1 A LL1
H13 : adj KK1 A1 U
H15 : adj U B1 U1
H16 : adj U1 A K1
H17 : is_list U1
H18 : is_list KK
============================
exists V, merge U1 KK V
Subgoal 4.2 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply merge_exists to H17 H18.
Subgoal 4.2.1:
Variables: A B JJ J KK K LL A1 B1 LL1 J1 K1 KK1 U U1 L
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (par A1 B1) J
H10 : mll K1 **
H12 : adj KK1 A LL1
H13 : adj KK1 A1 U
H15 : adj U B1 U1
H16 : adj U1 A K1
H17 : is_list U1
H18 : is_list KK
H19 : merge U1 KK L
============================
exists V, merge U1 KK V
Subgoal 4.2 is:
mll LL
Subgoal 5 is:
mll LL
cut < search.
Subgoal 4.2:
Variables: A B JJ J KK K LL A1 B1 LL1 J1 K1 KK1 U U1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (par A1 B1) J
H10 : mll K1 **
H12 : adj KK1 A LL1
H13 : adj KK1 A1 U
H15 : adj U B1 U1
H16 : adj U1 A K1
ass : exists V, merge U1 KK V
============================
mll LL
Subgoal 5 is:
mll LL
cut < case ass.
Subgoal 4.2:
Variables: A B JJ J KK K LL A1 B1 LL1 J1 K1 KK1 U U1 V
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (par A1 B1) J
H10 : mll K1 **
H12 : adj KK1 A LL1
H13 : adj KK1 A1 U
H15 : adj U B1 U1
H16 : adj U1 A K1
H17 : merge U1 KK V
============================
mll LL
Subgoal 5 is:
mll LL
cut < Hi : apply IH1 to H1 H16 H10 H4 H5 H17.
Subgoal 4.2:
Variables: A B JJ J KK K LL A1 B1 LL1 J1 K1 KK1 U U1 V
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (par A1 B1) J
H10 : mll K1 **
H12 : adj KK1 A LL1
H13 : adj KK1 A1 U
H15 : adj U B1 U1
H16 : adj U1 A K1
H17 : merge U1 KK V
Hi : mll V
============================
mll LL
Subgoal 5 is:
mll LL
cut < apply merge_unadj_1 to *H17 *H15.
Subgoal 4.2:
Variables: A B JJ J KK K LL A1 B1 LL1 J1 K1 KK1 U U1 V LL2
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (par A1 B1) J
H10 : mll K1 **
H12 : adj KK1 A LL1
H13 : adj KK1 A1 U
H16 : adj U1 A K1
Hi : mll V
H18 : adj LL2 B1 V
H19 : merge U KK LL2
============================
mll LL
Subgoal 5 is:
mll LL
cut < apply merge_unadj_1 to *H19 *H13.
Subgoal 4.2:
Variables: A B JJ J KK K LL A1 B1 LL1 J1 K1 KK1 U U1 V LL2 LL3
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (par A1 B1) J
H10 : mll K1 **
H12 : adj KK1 A LL1
H16 : adj U1 A K1
Hi : mll V
H18 : adj LL2 B1 V
H20 : adj LL3 A1 LL2
H21 : merge KK1 KK LL3
============================
mll LL
Subgoal 5 is:
mll LL
cut < ass : assert 0 exists VV, adj LL3 (par A1 B1) VV.
Subgoal 4.2.2:
Variables: A B JJ J KK K LL A1 B1 LL1 J1 K1 KK1 U U1 V LL2 LL3
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (par A1 B1) J
H10 : mll K1 **
H12 : adj KK1 A LL1
H16 : adj U1 A K1
Hi : mll V
H18 : adj LL2 B1 V
H20 : adj LL3 A1 LL2
H21 : merge KK1 KK LL3
============================
exists VV, adj LL3 (par A1 B1) VV
Subgoal 4.2 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply adj_1_is_list to H20.
Subgoal 4.2.2:
Variables: A B JJ J KK K LL A1 B1 LL1 J1 K1 KK1 U U1 V LL2 LL3
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (par A1 B1) J
H10 : mll K1 **
H12 : adj KK1 A LL1
H16 : adj U1 A K1
Hi : mll V
H18 : adj LL2 B1 V
H20 : adj LL3 A1 LL2
H21 : merge KK1 KK LL3
H22 : is_list LL3
============================
exists VV, adj LL3 (par A1 B1) VV
Subgoal 4.2 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply adj_2_is_o to H7.
Subgoal 4.2.2:
Variables: A B JJ J KK K LL A1 B1 LL1 J1 K1 KK1 U U1 V LL2 LL3
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (par A1 B1) J
H10 : mll K1 **
H12 : adj KK1 A LL1
H16 : adj U1 A K1
Hi : mll V
H18 : adj LL2 B1 V
H20 : adj LL3 A1 LL2
H21 : merge KK1 KK LL3
H22 : is_list LL3
H23 : is_fm (par A1 B1)
============================
exists VV, adj LL3 (par A1 B1) VV
Subgoal 4.2 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply adj_exists to H23 H22.
Subgoal 4.2.2:
Variables: A B JJ J KK K LL A1 B1 LL1 J1 K1 KK1 U U1 V LL2 LL3 M
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (par A1 B1) J
H10 : mll K1 **
H12 : adj KK1 A LL1
H16 : adj U1 A K1
Hi : mll V
H18 : adj LL2 B1 V
H20 : adj LL3 A1 LL2
H21 : merge KK1 KK LL3
H22 : is_list LL3
H23 : is_fm (par A1 B1)
H24 : adj LL3 (par A1 B1) M
============================
exists VV, adj LL3 (par A1 B1) VV
Subgoal 4.2 is:
mll LL
Subgoal 5 is:
mll LL
cut < search.
Subgoal 4.2:
Variables: A B JJ J KK K LL A1 B1 LL1 J1 K1 KK1 U U1 V LL2 LL3
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (par A1 B1) J
H10 : mll K1 **
H12 : adj KK1 A LL1
H16 : adj U1 A K1
Hi : mll V
H18 : adj LL2 B1 V
H20 : adj LL3 A1 LL2
H21 : merge KK1 KK LL3
ass : exists VV, adj LL3 (par A1 B1) VV
============================
mll LL
Subgoal 5 is:
mll LL
cut < case ass.
Subgoal 4.2:
Variables: A B JJ J KK K LL A1 B1 LL1 J1 K1 KK1 U U1 V LL2 LL3 VV
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (par A1 B1) J
H10 : mll K1 **
H12 : adj KK1 A LL1
H16 : adj U1 A K1
Hi : mll V
H18 : adj LL2 B1 V
H20 : adj LL3 A1 LL2
H21 : merge KK1 KK LL3
H22 : adj LL3 (par A1 B1) VV
============================
mll LL
Subgoal 5 is:
mll LL
cut < assert mll VV.
Subgoal 4.2:
Variables: A B JJ J KK K LL A1 B1 LL1 J1 K1 KK1 U U1 V LL2 LL3 VV
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (par A1 B1) J
H10 : mll K1 **
H12 : adj KK1 A LL1
H16 : adj U1 A K1
Hi : mll V
H18 : adj LL2 B1 V
H20 : adj LL3 A1 LL2
H21 : merge KK1 KK LL3
H22 : adj LL3 (par A1 B1) VV
H23 : mll VV
============================
mll LL
Subgoal 5 is:
mll LL
cut < assert 0 perm VV LL.
Subgoal 4.2.3:
Variables: A B JJ J KK K LL A1 B1 LL1 J1 K1 KK1 U U1 V LL2 LL3 VV
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (par A1 B1) J
H10 : mll K1 **
H12 : adj KK1 A LL1
H16 : adj U1 A K1
Hi : mll V
H18 : adj LL2 B1 V
H20 : adj LL3 A1 LL2
H21 : merge KK1 KK LL3
H22 : adj LL3 (par A1 B1) VV
H23 : mll VV
============================
perm VV LL
Subgoal 4.2 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply adj_swap to *H12 *H7.
Subgoal 4.2.3:
Variables: A B JJ J KK K LL A1 B1 LL1 J1 K1 KK1 U U1 V LL2 LL3 VV U2
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H10 : mll K1 **
H16 : adj U1 A K1
Hi : mll V
H18 : adj LL2 B1 V
H20 : adj LL3 A1 LL2
H21 : merge KK1 KK LL3
H22 : adj LL3 (par A1 B1) VV
H23 : mll VV
H24 : adj KK1 (par A1 B1) U2
H25 : adj U2 A J
============================
perm VV LL
Subgoal 4.2 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply adj_same_result to *H2 *H25.
Subgoal 4.2.3:
Variables: A B JJ J KK K LL A1 B1 LL1 J1 K1 KK1 U U1 V LL2 LL3 VV U2
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H10 : mll K1 **
H16 : adj U1 A K1
Hi : mll V
H18 : adj LL2 B1 V
H20 : adj LL3 A1 LL2
H21 : merge KK1 KK LL3
H22 : adj LL3 (par A1 B1) VV
H23 : mll VV
H24 : adj KK1 (par A1 B1) U2
H26 : perm JJ U2
============================
perm VV LL
Subgoal 4.2 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply perm_merge_1 to *H6 *H26.
Subgoal 4.2.3:
Variables: A B JJ J KK K LL A1 B1 LL1 J1 K1 KK1 U U1 V LL2 LL3 VV U2
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H4 : adj KK B K
H5 : mll K
H10 : mll K1 **
H16 : adj U1 A K1
Hi : mll V
H18 : adj LL2 B1 V
H20 : adj LL3 A1 LL2
H21 : merge KK1 KK LL3
H22 : adj LL3 (par A1 B1) VV
H23 : mll VV
H24 : adj KK1 (par A1 B1) U2
H27 : merge U2 KK LL
============================
perm VV LL
Subgoal 4.2 is:
mll LL
Subgoal 5 is:
mll LL
cut < apply merge_unadj_1 to H27 H24.
Subgoal 4.2.3:
Variables: A B JJ J KK K LL A1 B1 LL1 J1 K1 KK1 U U1 V LL2 LL3 VV U2 LL4
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H4 : adj KK B K
H5 : mll K
H10 : mll K1 **
H16 : adj U1 A K1
Hi : mll V
H18 : adj LL2 B1 V
H20 : adj LL3 A1 LL2
H21 : merge KK1 KK LL3
H22 : adj LL3 (par A1 B1) VV
H23 : mll VV
H24 : adj KK1 (par A1 B1) U2
H27 : merge U2 KK LL
H28 : adj LL4 (par A1 B1) LL
H29 : merge KK1 KK LL4
============================
perm VV LL
Subgoal 4.2 is:
mll LL
Subgoal 5 is:
mll LL
cut < unfold.
Subgoal 4.2.3:
Variables: A B JJ J KK K LL A1 B1 LL1 J1 K1 KK1 U U1 V LL2 LL3 VV U2 LL4
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H4 : adj KK B K
H5 : mll K
H10 : mll K1 **
H16 : adj U1 A K1
Hi : mll V
H18 : adj LL2 B1 V
H20 : adj LL3 A1 LL2
H21 : merge KK1 KK LL3
H22 : adj LL3 (par A1 B1) VV
H23 : mll VV
H24 : adj KK1 (par A1 B1) U2
H27 : merge U2 KK LL
H28 : adj LL4 (par A1 B1) LL
H29 : merge KK1 KK LL4
============================
exists A KK LL1, adj KK A VV /\ adj LL1 A LL /\ perm KK LL1
Subgoal 4.2 is:
mll LL
Subgoal 5 is:
mll LL
cut < witness par A1 B1.
Subgoal 4.2.3:
Variables: A B JJ J KK K LL A1 B1 LL1 J1 K1 KK1 U U1 V LL2 LL3 VV U2 LL4
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H4 : adj KK B K
H5 : mll K
H10 : mll K1 **
H16 : adj U1 A K1
Hi : mll V
H18 : adj LL2 B1 V
H20 : adj LL3 A1 LL2
H21 : merge KK1 KK LL3
H22 : adj LL3 (par A1 B1) VV
H23 : mll VV
H24 : adj KK1 (par A1 B1) U2
H27 : merge U2 KK LL
H28 : adj LL4 (par A1 B1) LL
H29 : merge KK1 KK LL4
============================
exists KK LL1, adj KK (par A1 B1) VV /\ adj LL1 (par A1 B1) LL /\
perm KK LL1
Subgoal 4.2 is:
mll LL
Subgoal 5 is:
mll LL
cut < witness LL3.
Subgoal 4.2.3:
Variables: A B JJ J KK K LL A1 B1 LL1 J1 K1 KK1 U U1 V LL2 LL3 VV U2 LL4
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H4 : adj KK B K
H5 : mll K
H10 : mll K1 **
H16 : adj U1 A K1
Hi : mll V
H18 : adj LL2 B1 V
H20 : adj LL3 A1 LL2
H21 : merge KK1 KK LL3
H22 : adj LL3 (par A1 B1) VV
H23 : mll VV
H24 : adj KK1 (par A1 B1) U2
H27 : merge U2 KK LL
H28 : adj LL4 (par A1 B1) LL
H29 : merge KK1 KK LL4
============================
exists LL1, adj LL3 (par A1 B1) VV /\ adj LL1 (par A1 B1) LL /\ perm LL3 LL1
Subgoal 4.2 is:
mll LL
Subgoal 5 is:
mll LL
cut < witness LL4.
Subgoal 4.2.3:
Variables: A B JJ J KK K LL A1 B1 LL1 J1 K1 KK1 U U1 V LL2 LL3 VV U2 LL4
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H4 : adj KK B K
H5 : mll K
H10 : mll K1 **
H16 : adj U1 A K1
Hi : mll V
H18 : adj LL2 B1 V
H20 : adj LL3 A1 LL2
H21 : merge KK1 KK LL3
H22 : adj LL3 (par A1 B1) VV
H23 : mll VV
H24 : adj KK1 (par A1 B1) U2
H27 : merge U2 KK LL
H28 : adj LL4 (par A1 B1) LL
H29 : merge KK1 KK LL4
============================
adj LL3 (par A1 B1) VV /\ adj LL4 (par A1 B1) LL /\ perm LL3 LL4
Subgoal 4.2 is:
mll LL
Subgoal 5 is:
mll LL
cut < split.
Subgoal 4.2.3.1:
Variables: A B JJ J KK K LL A1 B1 LL1 J1 K1 KK1 U U1 V LL2 LL3 VV U2 LL4
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H4 : adj KK B K
H5 : mll K
H10 : mll K1 **
H16 : adj U1 A K1
Hi : mll V
H18 : adj LL2 B1 V
H20 : adj LL3 A1 LL2
H21 : merge KK1 KK LL3
H22 : adj LL3 (par A1 B1) VV
H23 : mll VV
H24 : adj KK1 (par A1 B1) U2
H27 : merge U2 KK LL
H28 : adj LL4 (par A1 B1) LL
H29 : merge KK1 KK LL4
============================
adj LL3 (par A1 B1) VV
Subgoal 4.2.3.2 is:
adj LL4 (par A1 B1) LL
Subgoal 4.2.3.3 is:
perm LL3 LL4
Subgoal 4.2 is:
mll LL
Subgoal 5 is:
mll LL
cut < search.
Subgoal 4.2.3.2:
Variables: A B JJ J KK K LL A1 B1 LL1 J1 K1 KK1 U U1 V LL2 LL3 VV U2 LL4
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H4 : adj KK B K
H5 : mll K
H10 : mll K1 **
H16 : adj U1 A K1
Hi : mll V
H18 : adj LL2 B1 V
H20 : adj LL3 A1 LL2
H21 : merge KK1 KK LL3
H22 : adj LL3 (par A1 B1) VV
H23 : mll VV
H24 : adj KK1 (par A1 B1) U2
H27 : merge U2 KK LL
H28 : adj LL4 (par A1 B1) LL
H29 : merge KK1 KK LL4
============================
adj LL4 (par A1 B1) LL
Subgoal 4.2.3.3 is:
perm LL3 LL4
Subgoal 4.2 is:
mll LL
Subgoal 5 is:
mll LL
cut < search.
Subgoal 4.2.3.3:
Variables: A B JJ J KK K LL A1 B1 LL1 J1 K1 KK1 U U1 V LL2 LL3 VV U2 LL4
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H4 : adj KK B K
H5 : mll K
H10 : mll K1 **
H16 : adj U1 A K1
Hi : mll V
H18 : adj LL2 B1 V
H20 : adj LL3 A1 LL2
H21 : merge KK1 KK LL3
H22 : adj LL3 (par A1 B1) VV
H23 : mll VV
H24 : adj KK1 (par A1 B1) U2
H27 : merge U2 KK LL
H28 : adj LL4 (par A1 B1) LL
H29 : merge KK1 KK LL4
============================
perm LL3 LL4
Subgoal 4.2 is:
mll LL
Subgoal 5 is:
mll LL
cut < backchain merge_perm_det.
Subgoal 4.2:
Variables: A B JJ J KK K LL A1 B1 LL1 J1 K1 KK1 U U1 V LL2 LL3 VV
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 (par A1 B1) J
H10 : mll K1 **
H12 : adj KK1 A LL1
H16 : adj U1 A K1
Hi : mll V
H18 : adj LL2 B1 V
H20 : adj LL3 A1 LL2
H21 : merge KK1 KK LL3
H22 : adj LL3 (par A1 B1) VV
H23 : mll VV
H24 : perm VV LL
============================
mll LL
Subgoal 5 is:
mll LL
cut < backchain mll_perm with K = VV.
Subgoal 5:
Variables: A B JJ J KK K LL LL1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 bot J
H8 : mll LL1 **
============================
mll LL
cut < apply adj_same_result_diff to H2 H7.
Subgoal 5:
Variables: A B JJ J KK K LL LL1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 bot J
H8 : mll LL1 **
H9 : A = bot /\ perm JJ LL1 \/ (exists KK, adj KK A LL1)
============================
mll LL
cut < case H9.
Subgoal 5.1:
Variables: B JJ J KK K LL LL1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual bot B @
H2 : adj JJ bot J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 bot J
H8 : mll LL1 **
H10 : perm JJ LL1
============================
mll LL
Subgoal 5.2 is:
mll LL
cut < case H1.
Subgoal 5.2:
Variables: A B JJ J KK K LL LL1 KK1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 bot J
H8 : mll LL1 **
H10 : adj KK1 A LL1
============================
mll LL
cut < ass : assert 0 exists V, merge KK1 KK V.
Subgoal 5.2.1:
Variables: A B JJ J KK K LL LL1 KK1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 bot J
H8 : mll LL1 **
H10 : adj KK1 A LL1
============================
exists V, merge KK1 KK V
Subgoal 5.2 is:
mll LL
cut < apply adj_1_is_list to H10.
Subgoal 5.2.1:
Variables: A B JJ J KK K LL LL1 KK1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 bot J
H8 : mll LL1 **
H10 : adj KK1 A LL1
H11 : is_list KK1
============================
exists V, merge KK1 KK V
Subgoal 5.2 is:
mll LL
cut < apply adj_1_is_list to H4.
Subgoal 5.2.1:
Variables: A B JJ J KK K LL LL1 KK1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 bot J
H8 : mll LL1 **
H10 : adj KK1 A LL1
H11 : is_list KK1
H12 : is_list KK
============================
exists V, merge KK1 KK V
Subgoal 5.2 is:
mll LL
cut < apply merge_exists to H11 H12.
Subgoal 5.2.1:
Variables: A B JJ J KK K LL LL1 KK1 L
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 bot J
H8 : mll LL1 **
H10 : adj KK1 A LL1
H11 : is_list KK1
H12 : is_list KK
H13 : merge KK1 KK L
============================
exists V, merge KK1 KK V
Subgoal 5.2 is:
mll LL
cut < search.
Subgoal 5.2:
Variables: A B JJ J KK K LL LL1 KK1
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 bot J
H8 : mll LL1 **
H10 : adj KK1 A LL1
ass : exists V, merge KK1 KK V
============================
mll LL
cut < case ass.
Subgoal 5.2:
Variables: A B JJ J KK K LL LL1 KK1 V
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 bot J
H8 : mll LL1 **
H10 : adj KK1 A LL1
H11 : merge KK1 KK V
============================
mll LL
cut < Hi : apply IH1 to H1 H10 H8 H4 H5 H11.
Subgoal 5.2:
Variables: A B JJ J KK K LL LL1 KK1 V
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 bot J
H8 : mll LL1 **
H10 : adj KK1 A LL1
H11 : merge KK1 KK V
Hi : mll V
============================
mll LL
cut < ass : assert 0 exists VV, adj V bot VV.
Subgoal 5.2.2:
Variables: A B JJ J KK K LL LL1 KK1 V
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 bot J
H8 : mll LL1 **
H10 : adj KK1 A LL1
H11 : merge KK1 KK V
Hi : mll V
============================
exists VV, adj V bot VV
Subgoal 5.2 is:
mll LL
cut < apply merge_3_is_list to H11.
Subgoal 5.2.2:
Variables: A B JJ J KK K LL LL1 KK1 V
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 bot J
H8 : mll LL1 **
H10 : adj KK1 A LL1
H11 : merge KK1 KK V
Hi : mll V
H12 : is_list V
============================
exists VV, adj V bot VV
Subgoal 5.2 is:
mll LL
cut < apply adj_exists to _ H12 with A = bot.
Subgoal 5.2.2:
Variables: A B JJ J KK K LL LL1 KK1 V M
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 bot J
H8 : mll LL1 **
H10 : adj KK1 A LL1
H11 : merge KK1 KK V
Hi : mll V
H12 : is_list V
H13 : adj V bot M
============================
exists VV, adj V bot VV
Subgoal 5.2 is:
mll LL
cut < search.
Subgoal 5.2:
Variables: A B JJ J KK K LL LL1 KK1 V
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 bot J
H8 : mll LL1 **
H10 : adj KK1 A LL1
H11 : merge KK1 KK V
Hi : mll V
ass : exists VV, adj V bot VV
============================
mll LL
cut < case ass.
Subgoal 5.2:
Variables: A B JJ J KK K LL LL1 KK1 V VV
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 bot J
H8 : mll LL1 **
H10 : adj KK1 A LL1
H11 : merge KK1 KK V
Hi : mll V
H12 : adj V bot VV
============================
mll LL
cut < assert mll VV.
Subgoal 5.2:
Variables: A B JJ J KK K LL LL1 KK1 V VV
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 bot J
H8 : mll LL1 **
H10 : adj KK1 A LL1
H11 : merge KK1 KK V
Hi : mll V
H12 : adj V bot VV
H13 : mll VV
============================
mll LL
cut < assert 0 perm VV LL.
Subgoal 5.2.3:
Variables: A B JJ J KK K LL LL1 KK1 V VV
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 bot J
H8 : mll LL1 **
H10 : adj KK1 A LL1
H11 : merge KK1 KK V
Hi : mll V
H12 : adj V bot VV
H13 : mll VV
============================
perm VV LL
Subgoal 5.2 is:
mll LL
cut < apply adj_swap to *H10 *H7.
Subgoal 5.2.3:
Variables: A B JJ J KK K LL LL1 KK1 V VV U
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H8 : mll LL1 **
H11 : merge KK1 KK V
Hi : mll V
H12 : adj V bot VV
H13 : mll VV
H14 : adj KK1 bot U
H15 : adj U A J
============================
perm VV LL
Subgoal 5.2 is:
mll LL
cut < apply adj_same_result to *H2 *H15.
Subgoal 5.2.3:
Variables: A B JJ J KK K LL LL1 KK1 V VV U
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H8 : mll LL1 **
H11 : merge KK1 KK V
Hi : mll V
H12 : adj V bot VV
H13 : mll VV
H14 : adj KK1 bot U
H16 : perm JJ U
============================
perm VV LL
Subgoal 5.2 is:
mll LL
cut < apply perm_merge_1 to *H6 *H16.
Subgoal 5.2.3:
Variables: A B JJ J KK K LL LL1 KK1 V VV U
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H4 : adj KK B K
H5 : mll K
H8 : mll LL1 **
H11 : merge KK1 KK V
Hi : mll V
H12 : adj V bot VV
H13 : mll VV
H14 : adj KK1 bot U
H17 : merge U KK LL
============================
perm VV LL
Subgoal 5.2 is:
mll LL
cut < apply merge_unadj_1 to H17 H14.
Subgoal 5.2.3:
Variables: A B JJ J KK K LL LL1 KK1 V VV U LL2
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H4 : adj KK B K
H5 : mll K
H8 : mll LL1 **
H11 : merge KK1 KK V
Hi : mll V
H12 : adj V bot VV
H13 : mll VV
H14 : adj KK1 bot U
H17 : merge U KK LL
H18 : adj LL2 bot LL
H19 : merge KK1 KK LL2
============================
perm VV LL
Subgoal 5.2 is:
mll LL
cut < unfold.
Subgoal 5.2.3:
Variables: A B JJ J KK K LL LL1 KK1 V VV U LL2
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H4 : adj KK B K
H5 : mll K
H8 : mll LL1 **
H11 : merge KK1 KK V
Hi : mll V
H12 : adj V bot VV
H13 : mll VV
H14 : adj KK1 bot U
H17 : merge U KK LL
H18 : adj LL2 bot LL
H19 : merge KK1 KK LL2
============================
exists A KK LL1, adj KK A VV /\ adj LL1 A LL /\ perm KK LL1
Subgoal 5.2 is:
mll LL
cut < witness bot.
Subgoal 5.2.3:
Variables: A B JJ J KK K LL LL1 KK1 V VV U LL2
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H4 : adj KK B K
H5 : mll K
H8 : mll LL1 **
H11 : merge KK1 KK V
Hi : mll V
H12 : adj V bot VV
H13 : mll VV
H14 : adj KK1 bot U
H17 : merge U KK LL
H18 : adj LL2 bot LL
H19 : merge KK1 KK LL2
============================
exists KK LL1, adj KK bot VV /\ adj LL1 bot LL /\ perm KK LL1
Subgoal 5.2 is:
mll LL
cut < witness V.
Subgoal 5.2.3:
Variables: A B JJ J KK K LL LL1 KK1 V VV U LL2
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H4 : adj KK B K
H5 : mll K
H8 : mll LL1 **
H11 : merge KK1 KK V
Hi : mll V
H12 : adj V bot VV
H13 : mll VV
H14 : adj KK1 bot U
H17 : merge U KK LL
H18 : adj LL2 bot LL
H19 : merge KK1 KK LL2
============================
exists LL1, adj V bot VV /\ adj LL1 bot LL /\ perm V LL1
Subgoal 5.2 is:
mll LL
cut < witness LL2.
Subgoal 5.2.3:
Variables: A B JJ J KK K LL LL1 KK1 V VV U LL2
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H4 : adj KK B K
H5 : mll K
H8 : mll LL1 **
H11 : merge KK1 KK V
Hi : mll V
H12 : adj V bot VV
H13 : mll VV
H14 : adj KK1 bot U
H17 : merge U KK LL
H18 : adj LL2 bot LL
H19 : merge KK1 KK LL2
============================
adj V bot VV /\ adj LL2 bot LL /\ perm V LL2
Subgoal 5.2 is:
mll LL
cut < split.
Subgoal 5.2.3.1:
Variables: A B JJ J KK K LL LL1 KK1 V VV U LL2
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H4 : adj KK B K
H5 : mll K
H8 : mll LL1 **
H11 : merge KK1 KK V
Hi : mll V
H12 : adj V bot VV
H13 : mll VV
H14 : adj KK1 bot U
H17 : merge U KK LL
H18 : adj LL2 bot LL
H19 : merge KK1 KK LL2
============================
adj V bot VV
Subgoal 5.2.3.2 is:
adj LL2 bot LL
Subgoal 5.2.3.3 is:
perm V LL2
Subgoal 5.2 is:
mll LL
cut < search.
Subgoal 5.2.3.2:
Variables: A B JJ J KK K LL LL1 KK1 V VV U LL2
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H4 : adj KK B K
H5 : mll K
H8 : mll LL1 **
H11 : merge KK1 KK V
Hi : mll V
H12 : adj V bot VV
H13 : mll VV
H14 : adj KK1 bot U
H17 : merge U KK LL
H18 : adj LL2 bot LL
H19 : merge KK1 KK LL2
============================
adj LL2 bot LL
Subgoal 5.2.3.3 is:
perm V LL2
Subgoal 5.2 is:
mll LL
cut < search.
Subgoal 5.2.3.3:
Variables: A B JJ J KK K LL LL1 KK1 V VV U LL2
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H4 : adj KK B K
H5 : mll K
H8 : mll LL1 **
H11 : merge KK1 KK V
Hi : mll V
H12 : adj V bot VV
H13 : mll VV
H14 : adj KK1 bot U
H17 : merge U KK LL
H18 : adj LL2 bot LL
H19 : merge KK1 KK LL2
============================
perm V LL2
Subgoal 5.2 is:
mll LL
cut < backchain merge_perm_det.
Subgoal 5.2:
Variables: A B JJ J KK K LL LL1 KK1 V VV
IH : forall A B JJ J KK K LL, dual A B * -> adj JJ A J -> mll J ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
IH1 : forall A B JJ J KK K LL, dual A B @ -> adj JJ A J -> mll J ** ->
adj KK B K -> mll K -> merge JJ KK LL -> mll LL
H1 : dual A B @
H2 : adj JJ A J
H4 : adj KK B K
H5 : mll K
H6 : merge JJ KK LL
H7 : adj LL1 bot J
H8 : mll LL1 **
H10 : adj KK1 A LL1
H11 : merge KK1 KK V
Hi : mll V
H12 : adj V bot VV
H13 : mll VV
H14 : perm VV LL
============================
mll LL
cut < backchain mll_perm with K = VV.
Proof completed.
Abella <