| Step | Hyp | Ref | Expression |
| 1 |
|
elArray |
L e. Array (Array A n) m <-> L e. List (Array A n) /\ len L = m |
| 2 |
|
elArray |
ljoin L e. Array A (n * m) <-> ljoin L e. List A /\ len (ljoin L) = n * m |
| 3 |
|
ljoinT |
L e. List (List A) <-> ljoin L e. List A |
| 4 |
|
ssel |
List (Array A n) C_ List (List A) -> L e. List (Array A n) -> L e. List (List A) |
| 5 |
|
Listss |
Array A n C_ List A -> List (Array A n) C_ List (List A) |
| 6 |
|
ArrayssList |
Array A n C_ List A |
| 7 |
5, 6 |
ax_mp |
List (Array A n) C_ List (List A) |
| 8 |
4, 7 |
ax_mp |
L e. List (Array A n) -> L e. List (List A) |
| 9 |
8 |
anwl |
L e. List (Array A n) /\ len L = m -> L e. List (List A) |
| 10 |
3, 9 |
sylib |
L e. List (Array A n) /\ len L = m -> ljoin L e. List A |
| 11 |
|
id |
_1 = L -> _1 = L |
| 12 |
11 |
eleq1d |
_1 = L -> (_1 e. List (Array A n) <-> L e. List (Array A n)) |
| 13 |
11 |
ljoineqd |
_1 = L -> ljoin _1 = ljoin L |
| 14 |
13 |
leneqd |
_1 = L -> len (ljoin _1) = len (ljoin L) |
| 15 |
11 |
leneqd |
_1 = L -> len _1 = len L |
| 16 |
15 |
muleq2d |
_1 = L -> n * len _1 = n * len L |
| 17 |
14, 16 |
eqeqd |
_1 = L -> (len (ljoin _1) = n * len _1 <-> len (ljoin L) = n * len L) |
| 18 |
12, 17 |
imeqd |
_1 = L -> (_1 e. List (Array A n) -> len (ljoin _1) = n * len _1 <-> L e. List (Array A n) -> len (ljoin L) = n * len L) |
| 19 |
|
id |
_1 = 0 -> _1 = 0 |
| 20 |
19 |
eleq1d |
_1 = 0 -> (_1 e. List (Array A n) <-> 0 e. List (Array A n)) |
| 21 |
19 |
ljoineqd |
_1 = 0 -> ljoin _1 = ljoin 0 |
| 22 |
21 |
leneqd |
_1 = 0 -> len (ljoin _1) = len (ljoin 0) |
| 23 |
19 |
leneqd |
_1 = 0 -> len _1 = len 0 |
| 24 |
23 |
muleq2d |
_1 = 0 -> n * len _1 = n * len 0 |
| 25 |
22, 24 |
eqeqd |
_1 = 0 -> (len (ljoin _1) = n * len _1 <-> len (ljoin 0) = n * len 0) |
| 26 |
20, 25 |
imeqd |
_1 = 0 -> (_1 e. List (Array A n) -> len (ljoin _1) = n * len _1 <-> 0 e. List (Array A n) -> len (ljoin 0) = n * len 0) |
| 27 |
|
id |
_1 = a2 -> _1 = a2 |
| 28 |
27 |
eleq1d |
_1 = a2 -> (_1 e. List (Array A n) <-> a2 e. List (Array A n)) |
| 29 |
27 |
ljoineqd |
_1 = a2 -> ljoin _1 = ljoin a2 |
| 30 |
29 |
leneqd |
_1 = a2 -> len (ljoin _1) = len (ljoin a2) |
| 31 |
27 |
leneqd |
_1 = a2 -> len _1 = len a2 |
| 32 |
31 |
muleq2d |
_1 = a2 -> n * len _1 = n * len a2 |
| 33 |
30, 32 |
eqeqd |
_1 = a2 -> (len (ljoin _1) = n * len _1 <-> len (ljoin a2) = n * len a2) |
| 34 |
28, 33 |
imeqd |
_1 = a2 -> (_1 e. List (Array A n) -> len (ljoin _1) = n * len _1 <-> a2 e. List (Array A n) -> len (ljoin a2) = n * len a2) |
| 35 |
|
id |
_1 = a1 : a2 -> _1 = a1 : a2 |
| 36 |
35 |
eleq1d |
_1 = a1 : a2 -> (_1 e. List (Array A n) <-> a1 : a2 e. List (Array A n)) |
| 37 |
35 |
ljoineqd |
_1 = a1 : a2 -> ljoin _1 = ljoin (a1 : a2) |
| 38 |
37 |
leneqd |
_1 = a1 : a2 -> len (ljoin _1) = len (ljoin (a1 : a2)) |
| 39 |
35 |
leneqd |
_1 = a1 : a2 -> len _1 = len (a1 : a2) |
| 40 |
39 |
muleq2d |
_1 = a1 : a2 -> n * len _1 = n * len (a1 : a2) |
| 41 |
38, 40 |
eqeqd |
_1 = a1 : a2 -> (len (ljoin _1) = n * len _1 <-> len (ljoin (a1 : a2)) = n * len (a1 : a2)) |
| 42 |
36, 41 |
imeqd |
_1 = a1 : a2 -> (_1 e. List (Array A n) -> len (ljoin _1) = n * len _1 <-> a1 : a2 e. List (Array A n) -> len (ljoin (a1 : a2)) = n * len (a1 : a2)) |
| 43 |
|
eqtr |
len (ljoin 0) = len 0 -> len 0 = n * len 0 -> len (ljoin 0) = n * len 0 |
| 44 |
|
leneq |
ljoin 0 = 0 -> len (ljoin 0) = len 0 |
| 45 |
|
ljoin0 |
ljoin 0 = 0 |
| 46 |
44, 45 |
ax_mp |
len (ljoin 0) = len 0 |
| 47 |
43, 46 |
ax_mp |
len 0 = n * len 0 -> len (ljoin 0) = n * len 0 |
| 48 |
|
eqtr4 |
len 0 = 0 -> n * len 0 = 0 -> len 0 = n * len 0 |
| 49 |
|
len0 |
len 0 = 0 |
| 50 |
48, 49 |
ax_mp |
n * len 0 = 0 -> len 0 = n * len 0 |
| 51 |
|
eqtr |
n * len 0 = n * 0 -> n * 0 = 0 -> n * len 0 = 0 |
| 52 |
|
muleq2 |
len 0 = 0 -> n * len 0 = n * 0 |
| 53 |
52, 49 |
ax_mp |
n * len 0 = n * 0 |
| 54 |
51, 53 |
ax_mp |
n * 0 = 0 -> n * len 0 = 0 |
| 55 |
|
mul02 |
n * 0 = 0 |
| 56 |
54, 55 |
ax_mp |
n * len 0 = 0 |
| 57 |
50, 56 |
ax_mp |
len 0 = n * len 0 |
| 58 |
47, 57 |
ax_mp |
len (ljoin 0) = n * len 0 |
| 59 |
58 |
a1i |
0 e. List (Array A n) -> len (ljoin 0) = n * len 0 |
| 60 |
|
elListS |
a1 : a2 e. List (Array A n) <-> a1 e. Array A n /\ a2 e. List (Array A n) |
| 61 |
|
anr |
a1 e. Array A n /\ a2 e. List (Array A n) -> a2 e. List (Array A n) |
| 62 |
|
eqeq |
len (ljoin (a1 : a2)) = len a1 + len (ljoin a2) ->
n * len (a1 : a2) = n * len a2 + n ->
(len (ljoin (a1 : a2)) = n * len (a1 : a2) <-> len a1 + len (ljoin a2) = n * len a2 + n) |
| 63 |
|
eqtr |
len (ljoin (a1 : a2)) = len (a1 ++ ljoin a2) -> len (a1 ++ ljoin a2) = len a1 + len (ljoin a2) -> len (ljoin (a1 : a2)) = len a1 + len (ljoin a2) |
| 64 |
|
leneq |
ljoin (a1 : a2) = a1 ++ ljoin a2 -> len (ljoin (a1 : a2)) = len (a1 ++ ljoin a2) |
| 65 |
|
ljoinS |
ljoin (a1 : a2) = a1 ++ ljoin a2 |
| 66 |
64, 65 |
ax_mp |
len (ljoin (a1 : a2)) = len (a1 ++ ljoin a2) |
| 67 |
63, 66 |
ax_mp |
len (a1 ++ ljoin a2) = len a1 + len (ljoin a2) -> len (ljoin (a1 : a2)) = len a1 + len (ljoin a2) |
| 68 |
|
appendlen |
len (a1 ++ ljoin a2) = len a1 + len (ljoin a2) |
| 69 |
67, 68 |
ax_mp |
len (ljoin (a1 : a2)) = len a1 + len (ljoin a2) |
| 70 |
62, 69 |
ax_mp |
n * len (a1 : a2) = n * len a2 + n -> (len (ljoin (a1 : a2)) = n * len (a1 : a2) <-> len a1 + len (ljoin a2) = n * len a2 + n) |
| 71 |
|
eqtr |
n * len (a1 : a2) = n * suc (len a2) -> n * suc (len a2) = n * len a2 + n -> n * len (a1 : a2) = n * len a2 + n |
| 72 |
|
muleq2 |
len (a1 : a2) = suc (len a2) -> n * len (a1 : a2) = n * suc (len a2) |
| 73 |
|
lenS |
len (a1 : a2) = suc (len a2) |
| 74 |
72, 73 |
ax_mp |
n * len (a1 : a2) = n * suc (len a2) |
| 75 |
71, 74 |
ax_mp |
n * suc (len a2) = n * len a2 + n -> n * len (a1 : a2) = n * len a2 + n |
| 76 |
|
mulS2 |
n * suc (len a2) = n * len a2 + n |
| 77 |
75, 76 |
ax_mp |
n * len (a1 : a2) = n * len a2 + n |
| 78 |
70, 77 |
ax_mp |
len (ljoin (a1 : a2)) = n * len (a1 : a2) <-> len a1 + len (ljoin a2) = n * len a2 + n |
| 79 |
|
addeq1 |
len (ljoin a2) = n * len a2 -> len (ljoin a2) + n = n * len a2 + n |
| 80 |
79 |
eqeq2d |
len (ljoin a2) = n * len a2 -> (len a1 + len (ljoin a2) = len (ljoin a2) + n <-> len a1 + len (ljoin a2) = n * len a2 + n) |
| 81 |
|
addcom |
len a1 + len (ljoin a2) = len (ljoin a2) + len a1 |
| 82 |
|
elArray |
a1 e. Array A n <-> a1 e. List A /\ len a1 = n |
| 83 |
|
anr |
a1 e. List A /\ len a1 = n -> len a1 = n |
| 84 |
82, 83 |
sylbi |
a1 e. Array A n -> len a1 = n |
| 85 |
84 |
anwl |
a1 e. Array A n /\ a2 e. List (Array A n) -> len a1 = n |
| 86 |
85 |
addeq2d |
a1 e. Array A n /\ a2 e. List (Array A n) -> len (ljoin a2) + len a1 = len (ljoin a2) + n |
| 87 |
81, 86 |
syl5eq |
a1 e. Array A n /\ a2 e. List (Array A n) -> len a1 + len (ljoin a2) = len (ljoin a2) + n |
| 88 |
80, 87 |
syl5ibcom |
a1 e. Array A n /\ a2 e. List (Array A n) -> len (ljoin a2) = n * len a2 -> len a1 + len (ljoin a2) = n * len a2 + n |
| 89 |
78, 88 |
syl6ibr |
a1 e. Array A n /\ a2 e. List (Array A n) -> len (ljoin a2) = n * len a2 -> len (ljoin (a1 : a2)) = n * len (a1 : a2) |
| 90 |
61, 89 |
eimd |
a1 e. Array A n /\ a2 e. List (Array A n) -> (a2 e. List (Array A n) -> len (ljoin a2) = n * len a2) -> len (ljoin (a1 : a2)) = n * len (a1 : a2) |
| 91 |
90 |
com12 |
(a2 e. List (Array A n) -> len (ljoin a2) = n * len a2) -> a1 e. Array A n /\ a2 e. List (Array A n) -> len (ljoin (a1 : a2)) = n * len (a1 : a2) |
| 92 |
60, 91 |
syl5bi |
(a2 e. List (Array A n) -> len (ljoin a2) = n * len a2) -> a1 : a2 e. List (Array A n) -> len (ljoin (a1 : a2)) = n * len (a1 : a2) |
| 93 |
18, 26, 34, 42, 59, 92 |
listind |
L e. List (Array A n) -> len (ljoin L) = n * len L |
| 94 |
93 |
anwl |
L e. List (Array A n) /\ len L = m -> len (ljoin L) = n * len L |
| 95 |
|
anr |
L e. List (Array A n) /\ len L = m -> len L = m |
| 96 |
95 |
muleq2d |
L e. List (Array A n) /\ len L = m -> n * len L = n * m |
| 97 |
94, 96 |
eqtrd |
L e. List (Array A n) /\ len L = m -> len (ljoin L) = n * m |
| 98 |
10, 97 |
iand |
L e. List (Array A n) /\ len L = m -> ljoin L e. List A /\ len (ljoin L) = n * m |
| 99 |
2, 98 |
sylibr |
L e. List (Array A n) /\ len L = m -> ljoin L e. Array A (n * m) |
| 100 |
1, 99 |
sylbi |
L e. Array (Array A n) m -> ljoin L e. Array A (n * m) |