HanoiTowers Sections NuprlLIB Doc
IF YOU CAN SEE THIS go to /sfa/Nuprl/Shared/Xindentation_hack_doc.html
Def  s is a Hanoi(n disk) seq on a..z
Def  == x,x':{a...z}.
Def  == x+1 = x'  (k:{1...n}. Moving disk k of n takes s(x) to s(x'))

is mentioned by

Thm*  n:, p,q:Peg.
Thm*  p  q
Thm*  
Thm*  (a:, z:{a...}, s:({a...z}{1...n}Peg).
Thm*  (s is a Hanoi(n disk) seq on a..z & s(a) = (i.p) & s(z) = (i.q)
Thm*  (
Thm*  ((2^n)z-a+1)
[hanoi_sol2_lb]
Thm*  n:, p,q:Peg.
Thm*  p  q
Thm*  
Thm*  (a:, z:{a...}, s:({a...z}{1...n}Peg).
Thm*  (s is a Hanoi(n disk) seq on a..z & s(a) = (i.p) & s(z) = (i.q)
Thm*  (
Thm*  ((x:{a...z-1}, y:{x+1...z}, p',q':Peg.
Thm*  (((u:{a...x}. s(u,n) = p) & (u:{y...z}. s(u,n) = q)
Thm*  ((& s(x) = (i.p')  {1...n-1}Peg & s(y) = (i.q')  {1...n-1}Peg
Thm*  ((& p  p'
Thm*  ((& q  q'))
[hanoi_sol2_analemma]
Thm*  n:, p,q:Peg.
Thm*  p  q
Thm*  
Thm*  (a:. 
Thm*  (z:{a...}, s:({a...z}{1...n}Peg).
Thm*  (s is a Hanoi(n disk) seq on a..z & s(a) = (i.p) & s(z) = (i.q))
[hanoi_sol2_via_general]
Thm*  n:, f,g:({1...n}Peg), a:.
Thm*  z:{a...}, s:({a...z}{1...n}Peg).
Thm*  s is a Hanoi(n disk) seq on a..z & s(a) = f & s(z) = g
[hanoi_general_exists]
Thm*  n:, p,q:Peg.
Thm*  p  q
Thm*  
Thm*  (a:. 
Thm*  (HanoiSTD(n disks; from: p; to: q; indexing from: a)/z,s.
Thm*  (s is a Hanoi(n disk) seq on a..z
Thm*  (& s(a) = (i.p)  {1...n}Peg
Thm*  (& s(z) = (i.q)  {1...n}Peg)
[hanoi_sol2_ala_generalPROGworks]
Thm*  n:, p,q:Peg.
Thm*  p  q
Thm*  
Thm*  (a:. 
Thm*  (z:{a...}, s:({a...z}{1...n}Peg).
Thm*  (s is a Hanoi(n disk) seq on a..z & s(a) = (i.p) & s(z) = (i.q))
[hanoi_sol2_ala_general]
Thm*  n:, p,q:Peg.
Thm*  p  q
Thm*  
Thm*  (z:{1...}, s:({1...z}{1...n}Peg).
Thm*  (s is a Hanoi(n disk) seq on 1..z & s(1) = (i.p) & s(z) = (i.q))
[hanoi_sol2_via_permshift]
Thm*  n:, a:, z:{a...}, m:{a...z-1}, f,g:({1...n}Peg).
Thm*  f(n)  g(n)
Thm*  
Thm*  (s1:({a...m}{1...n-1}Peg), s2:({m+1...z}{1...n-1}Peg).
Thm*  (s1 is a Hanoi(n-1 disk) seq on a..m
Thm*  (& s1(a) = f  {1...n-1}Peg
Thm*  (& s2 is a Hanoi(n-1 disk) seq on m+1..z
Thm*  (& s2(z) = g  {1...n-1}Peg
Thm*  (& s1(m) = s2(m+1)
Thm*  (& (i:{1...n-1}. s1(m,i)  f(n) & s2(m+1,i)  g(n))
Thm*  (
Thm*  ((HanoiHelper(n; s1; f; s2; g)/r1,r2.
Thm*  (((r1 @(m) r2) is a Hanoi(n disk) seq on a..z & r1(a) = f & r2(z) = g))
[hanoi_general_exists_lemma2PROGworks]
Thm*  n:, a:, z:{a...}, m:{a...z-1}, f,g:({1...n}Peg).
Thm*  f(n)  g(n)
Thm*  
Thm*  (s1:({a...m}{1...n-1}Peg), s2:({m+1...z}{1...n-1}Peg).
Thm*  (s1 is a Hanoi(n-1 disk) seq on a..m
Thm*  (& s1(a) = f  {1...n-1}Peg
Thm*  (& s2 is a Hanoi(n-1 disk) seq on m+1..z
Thm*  (& s2(z) = g  {1...n-1}Peg
Thm*  (& s1(m) = s2(m+1)
Thm*  (& (i:{1...n-1}. s1(m,i)  f(n) & s2(m+1,i)  g(n)))
Thm*  
Thm*  (r1:({a...m}{1...n}Peg), r2:({m+1...z}{1...n}Peg).
Thm*  ((r1 @(m) r2) is a Hanoi(n disk) seq on a..z & r1(a) = f & r2(z) = g)
[hanoi_general_exists_lemma2]
Thm*  n:, f,g:({1...n}Peg).
Thm*  f(n) = g(n)
Thm*  
Thm*  (a:, z:{a...}.
Thm*  ((s:({a...z}{1...n-1}Peg). 
Thm*  ((s is a Hanoi(n-1 disk) seq on a..z
Thm*  ((& s(a) = f  {1...n-1}Peg
Thm*  ((& s(z) = g  {1...n-1}Peg)
Thm*  (
Thm*  ((s:({a...z}{1...n}Peg). 
Thm*  ((s is a Hanoi(n disk) seq on a..z & s(a) = f & s(z) = g))
[hanoi_general_exists_lemma1]
Thm*  n:, a,z:, m:{a...z-1}, s1:({a...m}{1...n}Peg),
Thm*  s2:({m+1...z}{1...n}Peg).
Thm*  (k:{1...n}. Moving disk k of n takes s1(m) to s2(m+1))
Thm*  
Thm*  s1 is a Hanoi(n disk) seq on a..m
Thm*  
Thm*  s2 is a Hanoi(n disk) seq on m+1..z
Thm*  
Thm*  (s1 @(m) s2) is a Hanoi(n disk) seq on a..z
[hanoi_seq_join_seq]
Thm*  n':, n:{n'...}, a:, z:{a...}, s:({a...z}{1...n}Peg).
Thm*  s is a Hanoi(n disk) seq on a..z
Thm*  
Thm*  (x:{a...z}, i:{n'+1...n}. s(a,i) = s(x,i))
Thm*  
Thm*  s is a Hanoi(n' disk) seq on a..z
[hanoi_seq_shallower]
Thm*  n:, a,z:, s:({a...z}{1...n}Peg).
Thm*  s is a Hanoi(n disk) seq on a..z
Thm*  
Thm*  (a',z':{a...z}. s is a Hanoi(n disk) seq on a'..z')
[hanoi_subseq]
Thm*  n:, a,z,d:, s:({a...z}{1...n}Peg).
Thm*  s is a Hanoi(n disk) seq on a..z
Thm*  
Thm*  (x.s(x-d)) is a Hanoi(n disk) seq on a+d..z+d
[hanoi_seq_shift]
Thm*  a,z:, n:, s:({a...z}{1...n}Peg), n':.
Thm*  nn'
Thm*  
Thm*  (h:({n+1...n'}Peg). 
Thm*  (s is a Hanoi(n disk) seq on a..z
Thm*  (
Thm*  ((s(?) {to n}  h {to n'}) is a Hanoi(n' disk) seq on a..z)
[hanoi_seq_deepen_seq]
Thm*  n:, a,z:, s:({a...z}{1...n}Peg).
Thm*  s is a Hanoi(n disk) seq on a..z
Thm*  
Thm*  (f:(PegPeg). 
Thm*  (Inj(Peg; Peg; f)  (x,i. f(s(x,i))) is a Hanoi(n disk) seq on a..z)
[hanoi_seq_permutepegs]
Thm*  n':, n:{n'...}, a,z:, s:({a...z}{1...n}Peg).
Thm*  s is a Hanoi(n disk) seq on a..z
Thm*  
Thm*  (a',z':{a...z}.
Thm*  ((x:{a'...z'}, i:{n'+1...n}. s(a',i) = s(x,i))
Thm*  (
Thm*  (s is a Hanoi(n' disk) seq on a'..z')
[hanoi_seq_core]

IF YOU CAN SEE THIS go to /sfa/Nuprl/Shared/Xindentation_hack_doc.html

HanoiTowers Sections NuprlLIB Doc