Step | Hyp | Ref | Expression |
1 |
|
subltid |
0 < 2 ^ min n a /\ 0 < 1 -> 2 ^ min n a - 1 < 2 ^ min n a |
2 |
1 |
conv upto |
0 < 2 ^ min n a /\ 0 < 1 -> upto (min n a) < 2 ^ min n a |
3 |
|
ian |
0 < 2 ^ min n a -> 0 < 1 -> 0 < 2 ^ min n a /\ 0 < 1 |
4 |
|
powpos |
0 < 2 -> 0 < 2 ^ min n a |
5 |
|
d0lt2 |
0 < 2 |
6 |
4, 5 |
ax_mp |
0 < 2 ^ min n a |
7 |
3, 6 |
ax_mp |
0 < 1 -> 0 < 2 ^ min n a /\ 0 < 1 |
8 |
|
d0lt1 |
0 < 1 |
9 |
7, 8 |
ax_mp |
0 < 2 ^ min n a /\ 0 < 1 |
10 |
2, 9 |
ax_mp |
upto (min n a) < 2 ^ min n a |
11 |
10 |
a1i |
T. -> upto (min n a) < 2 ^ min n a |
12 |
|
lepow2a |
2 != 0 -> min n a <= a -> 2 ^ min n a <= 2 ^ a |
13 |
|
d2ne0 |
2 != 0 |
14 |
12, 13 |
ax_mp |
min n a <= a -> 2 ^ min n a <= 2 ^ a |
15 |
|
minle2 |
min n a <= a |
16 |
14, 15 |
ax_mp |
2 ^ min n a <= 2 ^ a |
17 |
16 |
a1i |
T. -> 2 ^ min n a <= 2 ^ a |
18 |
11, 17 |
ltletrd |
T. -> upto (min n a) < 2 ^ a |
19 |
|
addcan1 |
2 ^ a * upto (n - a) + upto (min n a) + 1 = upto n + 1 <-> 2 ^ a * upto (n - a) + upto (min n a) = upto n |
20 |
|
eqtr |
2 ^ a * upto (n - a) + upto (min n a) + 1 = 2 ^ a * upto (n - a) + (upto (min n a) + 1) ->
2 ^ a * upto (n - a) + (upto (min n a) + 1) = upto n + 1 ->
2 ^ a * upto (n - a) + upto (min n a) + 1 = upto n + 1 |
21 |
|
addass |
2 ^ a * upto (n - a) + upto (min n a) + 1 = 2 ^ a * upto (n - a) + (upto (min n a) + 1) |
22 |
20, 21 |
ax_mp |
2 ^ a * upto (n - a) + (upto (min n a) + 1) = upto n + 1 -> 2 ^ a * upto (n - a) + upto (min n a) + 1 = upto n + 1 |
23 |
|
eqtr4 |
2 ^ a * upto (n - a) + (upto (min n a) + 1) = 2 ^ a * upto (n - a) + 2 ^ min n a ->
upto n + 1 = 2 ^ a * upto (n - a) + 2 ^ min n a ->
2 ^ a * upto (n - a) + (upto (min n a) + 1) = upto n + 1 |
24 |
|
addeq2 |
upto (min n a) + 1 = 2 ^ min n a -> 2 ^ a * upto (n - a) + (upto (min n a) + 1) = 2 ^ a * upto (n - a) + 2 ^ min n a |
25 |
|
uptoadd1 |
upto (min n a) + 1 = 2 ^ min n a |
26 |
24, 25 |
ax_mp |
2 ^ a * upto (n - a) + (upto (min n a) + 1) = 2 ^ a * upto (n - a) + 2 ^ min n a |
27 |
23, 26 |
ax_mp |
upto n + 1 = 2 ^ a * upto (n - a) + 2 ^ min n a -> 2 ^ a * upto (n - a) + (upto (min n a) + 1) = upto n + 1 |
28 |
|
eqtr4 |
upto n + 1 = 2 ^ n -> 2 ^ a * upto (n - a) + 2 ^ min n a = 2 ^ n -> upto n + 1 = 2 ^ a * upto (n - a) + 2 ^ min n a |
29 |
|
uptoadd1 |
upto n + 1 = 2 ^ n |
30 |
28, 29 |
ax_mp |
2 ^ a * upto (n - a) + 2 ^ min n a = 2 ^ n -> upto n + 1 = 2 ^ a * upto (n - a) + 2 ^ min n a |
31 |
|
eqtr3 |
2 ^ min n a * upto (n - a) + 2 ^ min n a * 1 = 2 ^ a * upto (n - a) + 2 ^ min n a ->
2 ^ min n a * upto (n - a) + 2 ^ min n a * 1 = 2 ^ n ->
2 ^ a * upto (n - a) + 2 ^ min n a = 2 ^ n |
32 |
|
addeq |
2 ^ min n a * upto (n - a) = 2 ^ a * upto (n - a) ->
2 ^ min n a * 1 = 2 ^ min n a ->
2 ^ min n a * upto (n - a) + 2 ^ min n a * 1 = 2 ^ a * upto (n - a) + 2 ^ min n a |
33 |
|
eqmin2 |
a <= n -> min n a = a |
34 |
33 |
poweq2d |
a <= n -> 2 ^ min n a = 2 ^ a |
35 |
34 |
muleq1d |
a <= n -> 2 ^ min n a * upto (n - a) = 2 ^ a * upto (n - a) |
36 |
|
mul0 |
2 ^ min n a * 0 = 0 |
37 |
|
muleq2 |
upto (n - a) = 0 -> 2 ^ min n a * upto (n - a) = 2 ^ min n a * 0 |
38 |
36, 37 |
syl6eq |
upto (n - a) = 0 -> 2 ^ min n a * upto (n - a) = 0 |
39 |
|
mul0 |
2 ^ a * 0 = 0 |
40 |
|
muleq2 |
upto (n - a) = 0 -> 2 ^ a * upto (n - a) = 2 ^ a * 0 |
41 |
39, 40 |
syl6eq |
upto (n - a) = 0 -> 2 ^ a * upto (n - a) = 0 |
42 |
38, 41 |
eqtr4d |
upto (n - a) = 0 -> 2 ^ min n a * upto (n - a) = 2 ^ a * upto (n - a) |
43 |
|
upto0 |
upto 0 = 0 |
44 |
|
nlesubeq0 |
~a <= n -> n - a = 0 |
45 |
44 |
uptoeqd |
~a <= n -> upto (n - a) = upto 0 |
46 |
43, 45 |
syl6eq |
~a <= n -> upto (n - a) = 0 |
47 |
42, 46 |
syl |
~a <= n -> 2 ^ min n a * upto (n - a) = 2 ^ a * upto (n - a) |
48 |
35, 47 |
cases |
2 ^ min n a * upto (n - a) = 2 ^ a * upto (n - a) |
49 |
32, 48 |
ax_mp |
2 ^ min n a * 1 = 2 ^ min n a -> 2 ^ min n a * upto (n - a) + 2 ^ min n a * 1 = 2 ^ a * upto (n - a) + 2 ^ min n a |
50 |
|
mul12 |
2 ^ min n a * 1 = 2 ^ min n a |
51 |
49, 50 |
ax_mp |
2 ^ min n a * upto (n - a) + 2 ^ min n a * 1 = 2 ^ a * upto (n - a) + 2 ^ min n a |
52 |
31, 51 |
ax_mp |
2 ^ min n a * upto (n - a) + 2 ^ min n a * 1 = 2 ^ n -> 2 ^ a * upto (n - a) + 2 ^ min n a = 2 ^ n |
53 |
|
eqtr3 |
2 ^ min n a * (upto (n - a) + 1) = 2 ^ min n a * upto (n - a) + 2 ^ min n a * 1 ->
2 ^ min n a * (upto (n - a) + 1) = 2 ^ n ->
2 ^ min n a * upto (n - a) + 2 ^ min n a * 1 = 2 ^ n |
54 |
|
muladd |
2 ^ min n a * (upto (n - a) + 1) = 2 ^ min n a * upto (n - a) + 2 ^ min n a * 1 |
55 |
53, 54 |
ax_mp |
2 ^ min n a * (upto (n - a) + 1) = 2 ^ n -> 2 ^ min n a * upto (n - a) + 2 ^ min n a * 1 = 2 ^ n |
56 |
|
eqtr |
2 ^ min n a * (upto (n - a) + 1) = 2 ^ min n a * 2 ^ (n - a) -> 2 ^ min n a * 2 ^ (n - a) = 2 ^ n -> 2 ^ min n a * (upto (n - a) + 1) = 2 ^ n |
57 |
|
muleq2 |
upto (n - a) + 1 = 2 ^ (n - a) -> 2 ^ min n a * (upto (n - a) + 1) = 2 ^ min n a * 2 ^ (n - a) |
58 |
|
uptoadd1 |
upto (n - a) + 1 = 2 ^ (n - a) |
59 |
57, 58 |
ax_mp |
2 ^ min n a * (upto (n - a) + 1) = 2 ^ min n a * 2 ^ (n - a) |
60 |
56, 59 |
ax_mp |
2 ^ min n a * 2 ^ (n - a) = 2 ^ n -> 2 ^ min n a * (upto (n - a) + 1) = 2 ^ n |
61 |
|
eqtr3 |
2 ^ (min n a + (n - a)) = 2 ^ min n a * 2 ^ (n - a) -> 2 ^ (min n a + (n - a)) = 2 ^ n -> 2 ^ min n a * 2 ^ (n - a) = 2 ^ n |
62 |
|
powadd |
2 ^ (min n a + (n - a)) = 2 ^ min n a * 2 ^ (n - a) |
63 |
61, 62 |
ax_mp |
2 ^ (min n a + (n - a)) = 2 ^ n -> 2 ^ min n a * 2 ^ (n - a) = 2 ^ n |
64 |
|
poweq2 |
min n a + (n - a) = n -> 2 ^ (min n a + (n - a)) = 2 ^ n |
65 |
|
minaddsub |
min n a + (n - a) = n |
66 |
64, 65 |
ax_mp |
2 ^ (min n a + (n - a)) = 2 ^ n |
67 |
63, 66 |
ax_mp |
2 ^ min n a * 2 ^ (n - a) = 2 ^ n |
68 |
60, 67 |
ax_mp |
2 ^ min n a * (upto (n - a) + 1) = 2 ^ n |
69 |
55, 68 |
ax_mp |
2 ^ min n a * upto (n - a) + 2 ^ min n a * 1 = 2 ^ n |
70 |
52, 69 |
ax_mp |
2 ^ a * upto (n - a) + 2 ^ min n a = 2 ^ n |
71 |
30, 70 |
ax_mp |
upto n + 1 = 2 ^ a * upto (n - a) + 2 ^ min n a |
72 |
27, 71 |
ax_mp |
2 ^ a * upto (n - a) + (upto (min n a) + 1) = upto n + 1 |
73 |
22, 72 |
ax_mp |
2 ^ a * upto (n - a) + upto (min n a) + 1 = upto n + 1 |
74 |
19, 73 |
mpbi |
2 ^ a * upto (n - a) + upto (min n a) = upto n |
75 |
74 |
a1i |
T. -> 2 ^ a * upto (n - a) + upto (min n a) = upto n |
76 |
18, 75 |
eqdivmod |
T. -> upto n // 2 ^ a = upto (n - a) /\ upto n % 2 ^ a = upto (min n a) |
77 |
76 |
conv shr |
T. -> shr (upto n) a = upto (n - a) /\ upto n % 2 ^ a = upto (min n a) |
78 |
77 |
trud |
shr (upto n) a = upto (n - a) /\ upto n % 2 ^ a = upto (min n a) |