Доказателство за съществуване и единственост на функциите + алгоритъм за строене (формално доказан):

Строим функционалните стойности по индукция. Нека в даден момент знаем всички f(x) за x не по-голямо от дадено i, също знаем всички g(x) за x <= j.

Базата е f(1) = 1, g(1) = 2, f(2) = 3 (тривиална проверка). Базови i=2, j=1. За всяка ситуация (i,j) имаме i<=f(j). Също така имаме изпълнено f(i) > g(j) (т.е. ще си строим така индукцията, че последното винаги да е вярно).

Освен това като следствие на строгата монотонност на функциите следват директно неравенствата f(x) > x (при x > 1) и g(x) > x за всяко x. Лесно се забелязва свойството f(x+1) >= f(x) + 1. Откъдето имаме g(x+1) = f(f(x+1)) + 1 >= f(f(x) + 1) + 1 >= f(f(x)) + 2 >= g(x) + 1 Сега допускаме, че сме построили решението на задачата до някаква двойка числа (i, j). За да сметнем g(j+1) на нас ни трябва да знаем на колко е равно f(f(j+1)). Сега разглеждаме 2 случая:

* 1 сл.: Ако i = f(j+1) то ние можем да намерим g(j+1) = f(f(j+1)) + 1 = f(i) + 1. И освен това имаме, че g(j+2) = f(f(j+2))+1 >= f(f(j+1)+1) + 1 = f(i+1)+1. Но тъй като g(j+2) != f(i+1) следва, че g(j+2) > f(i+1) + 1 >= f(i)+2. Но стойността f(i)+2, трябва да се получава като стойност на някоя от функциите; следователно ф(i+1) = f(i)+2. Така построяваме решение за двойката (i+1, j+1), директна проверка показва равенството i+1 <= f(j+2), както и f(i+1) > g(j+1).

* 2 сл.: i < f(j+1), от тук следва, че f(i) < f(f(j+1)) = g(j+1)-1, или все едно f(i)+1 < g(j+1). Но тъй като f(i) > g(j), то стойността f(i)+1 е функционална стойност на f(x) и следователно имаме f(i+1) = f(i)+1. При това за двойката числа (i+1, j) са изпълнени свойствата i+1 <= f(j+1), както и f(i+1) > g(j). (проверяват се директно).

Показаната индукция строи две функции f(x) и g(x) отговарящи на условието на задачата (което мисля, че би трябвало да докаже както съществуването така и единствеността на тези функции). Все пак тръгваме от лесно проверима база и докато са изпълнени условията на индукцията строим функционални стойности. При случай 2 се увеличава само стойността на i, но тя може да се изпълни само краен брой пъти преди стойността на i да стане равна на f(j+1), и тогава ще се увеличи и стойността на j.

Сега нека на всяка стъпка от индукцията да разгледаме наредената четворка (i, j, f(i), g(j)), която получаваме. В базата на индукцията (2, 1, 3, 2), имаме изпълнено свойството: i+j = f(i). Лесно се вижда, че от първия случай на индукцията от (i,j,f(i),g(j)) се достига до (i+1,j+1,f(i)+2,f(i)+1), където то отново е изпълнено, а от случай 2 се достига до (i+1,j,f(i)+1,g(j)), където отново е изпълнено. Следователно за всяка стъпка на индукцията имаме i+j=f(i). Нека сега разгледаме всички стъпки на индукцията, при които i=f(j+1). За тях също е изпълнено f(i)=i+j или f(f(j+1))=f(j+1)+j, или все едно g(j+1)-1=f(j+1)+j или g(j+1)=f(j+1)+j+1. Което е изпълнено при всяко j>=1. Или все едно g(j)=f(j)+j, за всяко j>=1 (за j=1 се проверява директно).

Последното е много дълбок извод, които е и очевиден, ако човек гледа редиците. Още в примерния тест се вижда, че g(x) - f(x) = x. Което допълнително улеснява задачата ни.

Другия очевиден резултат от индукцията е, че f(x) се увеличава най-много с 2 на всяка стъпка и поне с единица, или имаме x < f(x) < 2*x.

Сега бихме искали да стесним тази граница. Т.е. ще докажем, че f(x) е линейна функция, в следния смисъл: когато оставим x да клони към безкрайност, f(x)/x = C (константа между 1 и 2).

Линеиността се доказва по-скоро интуитивно:

1. И двете функции са поне линейни, заради изискването за строгото им нарастване, и от това, че са естествени.

2. От какъвто "тип" е f(x), от такъв е и g(x). Т.е. ако f(x) е квадратна, то и g(x) е квадратна. Това е заради g(x) = f(x) + x. Т.е. ако f(x) е със степен по-голяма от единица, то асимптотично тази степен "преборва" самотното x и g(x) е със същата степен като f(x)

3. Заради условие (3) (за всяко z от N има x, такова, че или f(x) = z или g(x) = z) трябва да не са повече от линейни, инак се появяват "дупки" в покритието на множеството на естествените числа (това не знам как да го кажа математически).

Иначе казано, от цялото множество N, определена част го "покрива" f(x), останалата част го покрива g(x). "Частта" на f(x) е точно единица върху Златното Сечение, което човек може да открие чисто статистически.

Оттук до формулата f(x) = floor(x * Златното Сечение) може да се стигне по следния начин. (Като за да са вярни нататъчните разсъждения, оставяме x да клони към безкрайност)::

(*) f(x)/x = C

1<C<2, което открихме по-горе;

добавяме единица от двете страни на (*):

[f(x)+x]/x = C+1

заместваме f(x)+x с g(x):

g(x)/x = C+1

делим на (*):

(**) g(x)/f(x) = (C+1)/C

Нека разпишем g(x)/f(x):

g(x)/f(x) = [f(f(x))+1]/ f(x) = f(f(x))/f(x) + 1 / f(x)

Припомняме си , че x клони към безкрайност => 1/f(x) клони към 0.

Позовавайки се на линейността на f(x) =>

f(f(x))/f(x) = f(x)/x = (от (*)) = C

Комбинираме (*) и (**):

C = (C+1)/C => C е Златното Сечение.

Това е вярно за x клонящо към безкрайност, но може опитно да се провери, че f(x) = floor(x * Златното Сечение) за всяко x. Аз като информатик съм склонен да вярвам на формулата, тъй като не се дъни никъде на първите милиард члена :)

Това е решението. Знам, че е излишно сложно и сигурно ако се пообмисли може да стане и на 5 реда.