<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<!--}}}-->
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected{color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
.readOnly {background:[[ColorPalette::TertiaryPale]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity=60)';}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0px; top:0px;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0 0; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

.fieldsetFix {border:0; padding:0; margin:1px 0px;}

.sparkline {line-height:1em;}
.sparktick {outline:0;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;}
#displayArea {margin: 1em 1em 0em;}
noscript {display:none;} /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
}
/*}}}*/
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<!--}}}-->
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in your browser

Your username for signing your edits. Write it as a [[WikiWord]] (eg [[JoeBloggs]])

<<option txtUserName>>
<<option chkSaveBackups>> [[SaveBackups]]
<<option chkAutoSave>> [[AutoSave]]
<<option chkRegExpSearch>> [[RegExpSearch]]
<<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]]
<<option chkAnimate>> [[EnableAnimations]]

----
Also see [[AdvancedOptions]]
<<importTiddlers>>
!!Dual Surgery
An elementary cobordism from $M$ to $M'$ of index $m$ $(W;M,M')=(M\times I;M, M)\cup (W;M,M')\cup (M'\times I;M',M')$ can also be viewed in the opposite direction by interchanging $M$ and $M'$. In this case, we egard the handle $D^{n+1}\times D^{m-n}$ as  $(m-n)$-handle attached to $M'\times I$. We get an elementary cobordism of index $m-n$.
!!Effect of the surgery on $\pi_*$ and $H_*$ of $W$
Let $f:S^n\times D^{m-n}\to M^m$ be a framed $n$-embedding and let's denote by $\overline{f}\in\pi_n(M)$ the homotopy class represented by $f|S^n\times\{ 0\}:S^n\to M^m$. Denote by $(W;M,M')$ the trace of the surgery along $f$ and by $<\overline{f}>$ the normal subgroup in $\pi_n(M)$ generated by $\overline{f}$. Then using homology exact sequence of the pair and the [[Relative Hurewicz Theorem]] we get the following:
$$
\pi_i(W)\left\{\begin{array}{ l r}
\pi_i(M) &i<n \\
\pi_n(M)/<\overline{f}> & i=n\\
\end{array}\right.
$$
and 
$$
H_i(W,M)=\left\{\begin{array}{ l r}
0&i\neq n+1\\
{\mathbb Z}& i=n+1\\
\end{array}\right.
$$
and apply [[Relative Hurewicz Theorem]] to
$$
\cdots\to H_{i+1}(W)\to H_{i+1}(W,M)\to H_i(M)\to H_i(W)\to\cdots
$$
For the dual cobordism we get
$$
\pi_i(W)\left\{\begin{array}{ l r}
\pi_i(M') &i<m-n-1 \\
\pi_n(M')/<\overline{f'}> & i=m-n-1\\
\end{array}\right.
$$
and 
$$
H_i(W,M')=\left\{\begin{array}{ l r}
0&i\neq m-n\\
{\mathbb Z}& i=m-n\\
\end{array}\right.
$$
where $f':S^{m-n-1}\times D^{n+1}\to M'$ is the dual framed embedding and $\overline{f'}\in\pi_{m-n-1}(M')$  is the homotopy class represented by $f'|S^{m-n-1}\times\{0\}$.
It follows that if ''$n<m-n-1$ (i.e. $m>2n+1$)'' then
$$
\pi_i(M')\left\{\begin{array}{ l r}
\pi_i(M) &i<n \\
\pi_n(M)/<\overline{f}> & i=n\\
\end{array}\right.
$$
As a result , if $n\leq \frac{m-1}{2}$ (below the middle dimension) $n$ -surgery simplifies the $n$-th homotopy group of $M$, $\pi_n(M)$.
However, if $m=2n$ or $m=2n_1$,  it needs not to be true that $n$-surgery improves the homotopy groups.
E.g. if $m=2n+1$, one can only conclude ${\pi_n(M)/<\overline{f}>}\cong \pi_n(M')/<\overline{f'}>$.
*We may compare these with the procedure of killing homotopy groups of ~CW-complexes when building $K(G,n)$. One simplifies homotopy (and homology) by attaching $(n+1)$-cells remaining within the ~CW-category.
But, by doing this (attaching a cell along its boundary) on a manifold $M^m$, $2n+1<m$, we shall, of course, change $H_m(M)$ and $H_{m+1}(M)$. But this will not affect $H_{m-n}(M)$ or $H_{m-n-1}(M)$. We will not have Poincare Duality and hence not a manifold. This is the reason why an $(m-n)$-cell is first removed and the attached another $n$-cell.
!!!Def
Let $X$ be a $1$-connected ~CW-complex. A manifold structure on $X$ is $(M,f)$ where $f$ is a h.e.; $f:M\to X$ and $M$ is a closed manifold.
We will say $(M,f)\sim (M',f')$ are equivalent if there exists an h-cobordism $W$ and a map $F:W\to X$ so that $F|M=f$ and $F'|M'=f'$.
!!!Def 
The ''Structure Set'' $S(X)$ is the set of all equivalence classes of the manifold structures on $X$ as described above $S(X)=\{(M,f)\}/\sim$.
*A natural definition of the structure set is to say $(M,f)\sim' (M',f')$ if there is $g:M\to M'$ a diffeomorphism so that $f'g\simeq f$ are homotopic. By the h-cobordism theorem, under our general assumptions, both descriptions are equivalent.
*The key two questions concerning $S(X)$ are:
**Is $S(X($ emty?
**If $S(X)\neq\emptyset$, then how can be computed or determined?
!!!Def
An $n$-dimensional simply connected ''Poincare complex'' is by definition a finite $1$-connected ~CW-complex $X$ with an element $[X]\in H_n(X)$ (with coefficients in ${\mathbb Z}$) called the ''fundamental class'' such that the pairing:
$$
[X]\cup-:H^k(X)\to H_{m-k}(X)
$$
must be an isomorphism for all $k<n$.
*Consider any embedding of $M$ in a large enough $\mathbb R^k$. Then $M$ has a natural normal bundle. Since, in large enough dimension all embeddings are isotopic,  the classes of normal bundles is unique. It is called ''the stable normal bundle''.
!!!Def
A ''$k$-dimensional spherical fibration'' over $X$ will be a pair $(\chi,\pi)$, where $\pi:\chi\to X$ fits into a fibration $S^{k-1}\to\chi\to X$.
Two such $(\chi,\pi)$ and $(\chi',\pi')$ are said to be ''equivalent'' (or isomorphic) if there exists $f:\chi\to \chi'$ a h.e. so that $\pi' f\simeq \chi$ are homotopic. We shall write $\chi\cong\chi'$.
*If ${p:E}{\to}B$ is a vector bundle (with some j=kind of metric on it) there is a corresponding disk bundle $D$ where $D=\{v\in E/ ||v||\leq 1\}$, and a sphere bundle $S=\{v\in E/ ||v||=1\}$ which will be called the spherical fibration associated to ${p:}E{\to}B$ and denoted by $J(E)$.
!!!Def
A trivial spherical bundle $\epsilon^k$ is the fibre homotopy equivalent class of the fibrations $\pi_2:S^{k-1}\times X\to X$.
*Consider a spherical fibration $S^{k-1}\to\chi{\to}^p X$ and the mapping cylinder of $\pi$ denoted by $D(\chi)$. This yields, in a natural way, a fibration of pairs
$$
(D^k,S^{k-1})\to (D(\chi),\chi)\to X
$$
getting a disk bundle associated to the given spherical bundle.

Historically Busemann Conjecture came first but we shall start out with ~Bing-Borsuk Conjecture.
!~Bing-Borsuk Conjecture (1965).BBC.
<part Bing-Borsuk>Suppose $X$ is a $n$-dimensional homogeneous ANR, then $X$ is a manifold.
The authors proved the conjecture for $n=1,2$ and posed the question for higher dimensions.</part>
!Busemann Conjecture (1955).BC.
<part Busemann>Suppose $X$ is a (finite dimensional) $G$-space. Then $X$ is a manifold.

The author first posed the question on his book and proved it true for $n=1,2$. It is known for $n\leq 4$. To this day it is still unknown whether finite dimensionality is required. No infinite fimensional $G$-space is known so far.</part>
**The key fact is that BBC implies BC. The level of difficulty of BBC can be appreciated by noticing that BBC for $n=3$ implies the Poincare Conjecture for $n=3$, recently proven by Perelmann.

----
!Topological Homogeneity
!!!Def 1
Let $X$ be a topological space. It is said to be __homogeneous__ if
$$
\forall x_1,x_2\in X\quad \exists h:(X,x_1)\to (X,x_2)\text{ homeomorphism }
$$
The first definitionwas given by Sierpinski, 1920's.
!!!Def 2
$X$ is said to be __local homogeneous__, or microhomogeneous, if 
$$
\forall x_1,x_2\in X\quad \exists \text{ neighborhoods } U_1\ni x_1, U_2\ni x_2 / \exists h:(U_1,x_1)\to (U_2,x_2)\text{ homeomorphism }
$$

Clearly, if $X$ is h. then it is l.h. But the opposite is not true. Take $X=S^2\sqcup T^2$, $x_1\in S^2$ and $x_2\in T^2$.
!!!Def 3 
$X$ is said to be __bihomogeneous__ if 
$$
\forall x_1,x_2\in X\quad  \exists h:(X,x_1,x_2)\to (X,x_2,x_1)\text{ homeomorphism }
$$
Clearly, bih. imply h. but not the other way around. Sierpinski gave an example that the converse fails.
Let $A$ be the set of real numbers of the form $\frac{k}{3^n}$ where $0<k\leq 3^n$ such that when expressed in ternary system digit $1$ is not used.
Next, for all $i\geq 1$, let $A_i\subset A$ be the subset of all numbers such that $\frac{2}{3^i}\leq x\leq \frac{1}{3^{i-1}}$. Notice thet center of symmetry of $A_i$ is $\frac{5}{2}\frac{1}{3^i}$.
Let $C_0$ be the set of all half circles centered at $\frac{1}{2}$ connecting symmetric points in $A$ and $C_i$ set of all half circles centered at $\frac{5}{2}\frac{1}{3^i}$ connecting symmetric points in $A_i$. The set in question is $X=(\cup_{i=0}^\infty C_i)-\{0\}$. This set $X$ is homogeneous but but bihomogeneous. In fact, no pair of points $a,b\in X$ can be exchanged.

Already van Danzig proved that all three homogeneous properties are preserved by products.
**''Example'': The Cantor set is homogeneous (lh and bih). Recall that $C$ can be seen as $\prod_{i=0}^\infty \{0,1\}$.
<part Cantorhomogeneous>
!!!Def 4
$X$ is said to be __$k$-homogeneous__ ($k\in\mathbb N$) if a homemorphism $h:X\to X$ such that $h(x_i)=y_i$.{/part>
!!!Def 5
$X$ is said to be __Cantor homogeneous__ if for any two Cantor sets $D_1,D_2\subset X$ there exits a homeomorphism $h:X\to X$ such that $h(D_1)=D_2$.
**''Folklore fact'': Any two Cantor sets on the plane are equivalently embedded. But already for $n\geq 3$, $\mathbb R^n$ is not C-homogeneous because of the existence of wild Cantor sets.
!!Theorem (H. Patkowska, 1993)
If $X$ is $LC^1$-compact metric space and Cantor homogeneous, then $X$ is a closed surface.
!!@@color(red):Conjecture@@
The Pontryagin $2$-sphere is Cantor homogeneous. 
[img(45%+,auto+)[http://db.tt/E6ypsGJ]]
This is built, on each step, by triangulating the corresponding space and replacing the $2$-cell by the attachment of a Möbius band. So
$\mathbb R^4\supset X=\underset{\longleftarrow}{lim}\{P_i,\alpha_{i,i+1}\}$. The bonding maps are defined by collapsing the Möbius band to a point and keeping a collar of the attaching $S^1$ untouched. The construction can be mimic by using the Möbius band of degree $p$, the cilinder of a degree $p$ map $S^1\to S^1$.
Another [[construction|RM P-sphere]] by Repovs and Mitchell.
!!!Question (Patkkowska)
Does there exist a Cantor homogeneous $n$-dimensional compactum (compact metric space) with $n\geq 3$?
**[[Cell-like Map Problem|Cell-like]]
It is easy to see that all linear spaces are always homogeneous (bih) and that all closed manifolds are also homogeneous. The question is whether or no homogeneity is a poperty characterizing manifold.
***Regarding the preservation og (bi)-homogeneity under product we must point that he converse is not true. There is an example in dimension $5$. Let $X_1$ be be a [[generalized 3-manifold|generalized manifold]] with exactly one singular point and let $X_2=\mathbb R^2$ . By ~Edwards-Quinn-Davermann we have that $X_1\times X_2$ is a $5$-manifold without boundary, and hence homogeneous. For $X_1$ consider $\pi:\mathbb R^3\to \mathbb R^3/FA=X_1$ where $FA$ is the ~Fox-Artin wild arc and $\pi$ is the decomposition.
***At the original paper by Bing and Borsuk it seems that their conjecture was slightly different:
''Modified BB Conjecture'' by ~Bryant-Ferry-Mio-Weinberger
Let $X$ be an $n$-dimensional homogeneous ANR. Then $X$ is a [[generalized n-manifold|generalized manifold]].
----
!!!Some examples of homogeneous and not homogeneous spaces.
**Sierpinski carpet.
[img(15%+,auto+)[http://mathforum.org/advanced/robertd/carpet.gif]]
This is a universal place for planar curves. It is not homogeneous (?).
**Menger cube (sponge).
[img(15%+,auto+)[http://daviddarling.info/images/Menger_sponge.jpg]]
It was shown by RH Anderson to be homogeneous. It is the universal space for $1$-dimensional continua space.
**van Danzig's [[solenoids|http://en.wikipedia.org/wiki/Solenoid_%28mathematics%29]].
[img(15%+,auto+)[http://upload.wikimedia.org/wikipedia/en/4/42/Solenoid.png]]
Given a sequence $\{n_i\}$ of integers consider $\Sigma(n_i)$ the inverse limit of
$$
\dots \to S^1\to^{f_3} S^1\to^{f_2} S^1\to^{f_1} S^1
$$
where $f_i(z)=z^{n_i}$, $z\in\mathbb C$. In particular, the dyadic solenoid can be seen as $D=\Sigma (2)=\cap_1^\infty T_i$ where $T_i\subset T_{i+1}$ and $T_i$ is wrapped twice inside of $T_{i+1}$. The $\Sigma$ are homogeneus compactum.
**Pseudoarc.
[img(10%+,auto+)[http://upload.wikimedia.org/wikipedia/commons/thumb/9/98/ContinuBJK.svg/150px-ContinuBJK.svg.png]]
[img(20%+,auto+)[http://db.tt/3qiRMI0]]
In 1920 B. Knaster and K. Kuratowski asked if every non-degenerate homogeneus continuum, connected compact metric space, in the plane must be a Jordan curve. In 1948, RH Bing constructed a counterexample. He was motivated by 1922 [[Knaster's|http://en.wikipedia.org/wiki/Knaster_continuum]] construction of the [[pseudoarc|http://en.wikipedia.org/wiki/Pseudo-arc]]. This is a homogeneus continuum. More detais on the pseudoarc can be found at W.Lewis "Pseudoarc" and in S.Nadler's book "Continuum Theory".
*Hilbert Cube.
The Hilbert cube $Q=\prod_1^\infty [0,1]$ with the following metric $d(x,y)=\sum_1^\infty\frac{|x_i-y_i|}{2^i}$ for $x=(x_i),y=(y_i)\in Q$ is an infinite dimensional example of a homogeneous space. O.Keller (1930) showed that the Hilbert cube is homogeneous. A. Hohti (1985) showed that the Hilbert cube is Lipschtiz homogeneous.
[img(15%+,auto+)[http://www.cs.berkeley.edu/~sequin/ART/Valencia2006/HilbertCube512.JPG]](It is not a Hilbert cube.. see [[here|http://www.cs.berkeley.edu/~sequin/ART/Valencia2006/]]).
!!Th (P.Krupski, 1999)
For $n=1,2$, a continuum $X$ is a closed $n$-manifold iff $X$ is homogeneous and $X$ does not have DAP.
!!!Def
$X$ has DAP, disjoint disk property, if for all $\epsilon>0$ and $f_1,f_2:I\to X$ there exist $f_1',f_2':I\to X$ $\epsilon$-closed $d(f_i,f_i')<\epsilon$ with $f_1'(I)\cap f_2'(I)=\emptyset$.
!!Prajs Continua Problem List
*Problem 1: Does there exists a homogeneous [[Peano Continuum]] $X$, $dim X=2$, $X\subset\mathbb R^3$ and $X$ is neither a closed surface and nor the Pontrjagin $2$-sphere?
(They assume $\mathbb S^2$ is homogeneous which is not known yet).
A negative answer to Problem 1 would give a complete characterization of [[Peano Continua|Peano Continuum]] in $\mathbb R^3$. Historically, Mazurkiewicz showed the only non-degenerate homogeneous planar Peano Continua is the SCC, simple closed curve. Next, it was shown by Mazurkiewicz and Tynchatyn that $1$-dimensional homogeneous Peano Continua are characterized as the SCC and the Menger universal curve $\mu^1$.
On the other hand, an affirmative answer to this question coul not be ANR or contain a $2$-cell.
*Problem 2: Suppose $X\mathbb R^3$ is non-degenerate, simply connected (meaning arc-connected and $\pi_1=0$) homogneous [[Peano Continuum]]. Must it be $S^2$?
Some other problems on [[Continuum Theory|http://web.mst.edu/~continua/]].
!!Cannon's question
Does there exist a $2$-dimensional sphere $\Sigma\subset\mathbb R^3$ such that
*There are $U_1, U_2$ open neighborhood in $\mathbb R^3$ for $x_1,x_2$ and an homemorphism $h:(U_1,U_1\cap \Sigma,x_1)\to (U_2,U_2\cap\Sigma,x_2)$, i.e. $\Sigma$ is l. homogeneous in $\mathbb R^3$.
*Given anyl $x\in\Sigma$ there is no $U\subset\mathbb R^3$ neighborhood of $x$ in $\mathbb R^3$ with an homemorphism $h:(U,U\cap \Sigma,x)\to (\mathbb R^3,\mathbb R^2\times\{0\},0)$, i.e., it is not locally flat.

----
!!Smooth homogeneity
!!!Th (~R-Skopenkov-Scepin)
Let $K$ in $\mathbb R^n$ be a locally compact subset , possibly non-closed,. Then $K$ is $C^1$-homogeneous iff $K$ is a $C^1$-submanifold of $\mathbb R^n$.
Notice that Theorem by ~R-S-S does not hold for TOP ambient homogeneity e.g. Cantor set is an example.
!!!Question (Scepin, 1993)
Can Lipschitz ambient homogeneity in $\mathbb R^n$, $n\geq 3$, detect tameness of Cantor sets embeddings?
This is still open for $n\geq 4$. For $n=3$, the answer is no. (~Malesic-Repovs, 1995). This done using Antoine neclace type of construction together with Sher's result.

----
!!!Def (Brower 1920)
A topological space $X$ has the __invariance of domain property___ if for any pair of homeomorphic subsets $U\cong V\subset X$ the following is true.
$$
U\text{ is open in }X\text{ iff } U\text{ is open in }X
$$
Brower showed TOP manifolds verify this property. But this is not sufficient for characterizing manifolds. Actuall,
!!!Th (Lysko 1976)
Every homogeneous generalized manifold has invariance of domain property.

----
!!!Def (PS Uryshon 1925)
An $n$-dimensional compact metric space $X$ is called ___Cantor $n$-manifold___ if whenever $X=X_1\cup X_2$, $X_i\subset X$ proper closed subsets, then $dim X_1\cap X_2\geq n-1$.
He proved every TOP manifold is Cantor manifold. But this does not characterizes manifolds. In fact,
!!!Th (Lysko 1976)
Let $X$ be a $n$-dimensional homogeneous ANR, then $X$ is a Cantor $n$-manifold.

----
<part recognitionth>
!!Recognition Th (~Edwards-Quinn)
Let $X$ be a generalized $n$-manifold, $n\geq 5$. Then $X$ is a TOP manifold iff $X$ satisfies
***$i(X)=1\in 8\mathbb Z+1$, (Quinn index). $X$ has a cell-like resolution.
***$X$ has DDP, disjoint disk property.
</part>
Actually DDP corresponds to [[disjoint $(2,2)$-cell property|disjoint (k,m)-cell property]] as defined by Krupski.
!!!Th (Krupski 1993)
Let $X$ be a homogeneous locally compact compact space. Then:
***If $X$ is an ANR of dimension $\geq 3$, then $X$ will posses the disjoint $(0,2)$-cell property.
***If $dim X=n>0$ and $X$ has the disjoint $(0,n-1)$-cell property and $X$ is $LC^{n-1}$-space, then the local homology satisfies
$$
H_k(X,X-\{ x\};\mathbb Z)=\left\{\begin{matrix} 0 & k<n \\ \neq 0 & k=n\end{matrix}\right.
$$
!!!Th (Bredon 1970) (Georgian Conference Proceedings)
Let $X$ be a $n$-dimensional homogeneous ANR and suppose that for some, and hence for all, $x\in X$ the groups $\{H_k(X,X-\{x\};\mathbb Z\}_k$ are finitely generated. Then $X$ must be a generalized $n$-manifold.
!!!!Question (Bryant 2007 at Oberwolfach's seminar)
Is the fg condition on Bredon's theorem necessary?
!!!Th (Yokoi 2003)
Let $X$ be a $n$-dimensional ANR continuum such that $\overset{v}{H^n}(X;\mathbb Z)\neq 0$. Then no compact subset $X$ wich is acyclic in dimention $n-1$ can separate $X$.

----
<part alternativeBBC>
!!Alternative BB Conjecture
~Daverman-Husch proved the modified BB conjecture is equivalent to the following statement.
Suppose $X$ is nicely embedded in $\mathbb R^{n+m}$ for some $m\geq 3$ so that it has the mapping cylinder neighborhood $N=C_phi$ where $\phi:\partial N\to X$ with the projection $\pi:N\to X$. Then $\pi$ is an [[approximate fibration]]. (In particular, $X$ is a generalized manifold).
</part>

----
*Another Borsuk conjecture: there is no finite dimensional compact AR. (The Hilbert cube is AR but infinite dimensiona).
*''Conjecture 1'' (~Bryant-Ferry-Mio-Weinberger, 2007)
Let $X$ be a generalized $n$-manifold, $n\geq 7$, with DDP. Then $X$ is homogeneous.
<part modifiedBBC>
*''Conjecture 2'' (~Bryant-Ferry-Mio-Weinberger, 2007)
Let $X$ be a $n$-dimensional homogeneous ANR. Then $X$ is $n$-dimensional generalized manifold.

This is the modified ~Bing-Borsuk Conjecture.</part>
!!~Hilbert-Smith Conjecture
Only Lie groups act effectively on a ~TOP-manifolds.

This is equivalent to the fact that $p$-adic integers cannot act effectively on ~TOP-manifolds.
!!!Th (~Repov-Scepin)
The Lipschitz case of the ~H-S Conjecture is true for Riemannian manifolds.

----
!!!Th (Lysko, 1976)
Let $X$ be a finite dimensional ANR. Then $X$ has IDP.
!!!Example
* The hypothesis about finite dimensionality is necessary. 
Take $X=\prod_1^\infty [0,1]$, the Hilbert cube, which is homogeneous but has not IDP. For this take $U=X$, which is open and $V\subset X$  with $V=\{x=(x_i)_i\ x_1=0\}$ which is not open. Then $h:U\to V$ given by $h(x_1,x_2,\dots)=(0, x_1,\dots)$ and $g:V\to U$ given by $g(x_1,x_2,\dots)=(x_2,x_3,\dots )$ are homeomorphisms.
*The hypothesis of ANR cannot be omitted.
Let $X$ be the planar pseudoarc  constructed by Ed. Moise (1948). This satisfies:
***it is $1$-dimensional planar continuum;
*** it is hereditary indecomposable and
*** for all non-degenerate subcontinuum $X_0$ there is $h:X\to X_0$ homeomorphism.
Then taking $U=X$ and $V=X_0$ for some proper subcontinuum. $U$ is open but $V$ cannot be because $X$ is connected.

----
!!!Question 1 (Lysko)
Let $X$ be $n$-dimensional homogeneous ANR. Does $X$ satisfies any (or all) duality theorems?
!!!Question 2 (Lysko)
Let $X$ be $n$-dimensional homogeneous ANR.  Is then $X$ a $\mathbb Z$-homology manifold?
!!!Question 3 (Anderson)
Are the Hilbert cube and the one-point space the only homogeneous compact AR?
!!!Th (Borsuk)
Let $X$ be $n$-dimensional homogeneous ANR.  and suppose it contains an Euclidean $n$-cell. Then $X$ is an $n$-manifold.
!!!Question 4
Does there exist a homogeneous compactum $X$ such that $X=X_1\times X_2$ and (at least ) one of them is not homogeneous with $n\leq 3$? If both are not homogeneous with $n\leq 5$?

----
!!!Def (de Groot)
Let $X$ be a topological space. It is said to be absolute suspension, AS, iff for all $x_1,x_2\in X$ there is $Y\subset X$ so that $X\cong \Sigma_{x_1,x_2} Y$, homeomorphic.
!!!!de Groot conjecture
Let $X$ be an $n$-dimensional compactum then if $X$ is AS then $X$ is homeomorphic to $S^n$.
!!!Th (Szymanski, 1972)
The de Groot AS Conjecture is true for $n\leq 3$.

Symanski's proof uses classical results in the [[Recognition Problem for Manifolds]].
!!!Th (WJR Mitchell, 1978)
Le $X$ be a $n$-dimensional compactum aand AS space. Then:
***$X$ is homogeneous generalized $n$-manifold.
***$X$ is h.e. to $S^n$.
*** Any time $Y\subset X$ with $X=\Sigma Y$ then $Y$ is a $\mathbb Z$-homology $(n-1)$-manifold and $Y$ h.e. to $S^{n-1}$.

----
!!!Def (de Groot)
Let $X$ be a topological space. It is said to be absolute suspension, AC, iff for all $x\in X$ then there is $Y\subset X$ so that $X\cong C_x Y$, homeomorphic.
!!!!de Groot conjecture
If $X$ is AC then $X\cong B^n$.
!!!Th (Guilbault, 2007)
de Groot AC conjecture is true for $n\leq 4$ and false for $n\geq 5$.

Note: For $n=4$, it is equivalent to the classical Poincare Conjecture.
----
H. Patkrowska (about 1993) defined __arc-wise homogeneity__ and [[__Cantor homogeneity__|Cantorhomogeneus/20 September 2010]] and proved the following.
!!!Th
Let $X$ be a continuum such that either $dim X=1$ or $X$ is $LC^1$. Then $X$ is Cantor homogeneous iff $X$ is $S^1$ or $X$ is a surface.
!!!Th
Let $X$ be a an arc-wise connected continuum such that either $dim X=1$ or $X$ is $LC^1$. Then $X$ is arc-wise homogeneous iff $X$ is $S^1$ or $X$ is a surface.
!!!!Question
**Does there exist a continuum of dimension $\geq 3$ which is Cantor homogeneous?
**Similarly, does there exist an arc-wise connected continuum of dimension $\geq 3$ which is arc-wise homogeneous? Notice such a continuum cannot be $LC^1$.
!!!!Corollary
Jakobsche's example $W^3$ is not Cantor homogeneous because it is ANR (hence $LC^1$) and $2$-dimensional, but homogeneous (by Jakobshe's paper).
In Jakobsche's proof of homogeneity of $W^3$ is crucial the use of the following result.
!!!Def (Torunczyk)
Let $\mathcal Z$ be a family of $3$-cells in $M^3$ and denote by $S(\mathcal Z)=\cup_{Z\in\mathcal Z}int Z$. It is said to be __good__ if
***$z_i\cap z_j=\emptyset $ iff $i\neq j$.
***all $Z_i$ are tame $3$-cell,i.e., $(M,Z_i)$ is a polyhedral pair.
***$\mathcal Z$ is a mesh family (i.e. $dim Z_i\overset{i\to'infty}{\to} 0$).
***$\mathcal Z$ is a dense family in $M$.
<part Torunczyk>
!!!Lemma (Torunczyk)
Given $h:M\to N$ a homeomorphism (orientation preserving) of $3$-manifolds (possibly with boundary) and given good families of $3$-cells $\mathcal Y$ and $\mathcal Z$ in the interior of $M$ and $N$ respectively andgiven a correspondence from $\mathcal Y$ to $\mathcal Z$ as follows
$$
\forall (Y,Z)\in\mathcal Y\times \mathcal Z\quad\exists \varphi_Y^Z:\partial Y\to\partial Z \text{ orientation preserving homemorphism }
$$
Then there exists a bijection $p:\mathcal Y\to\mathcal Z$ and a homemorphism $h':M-S(\mathcal Y)\to N-S(\mathcal Z)$ such that $h'|\partial M\equiv h|\partial M$ and also $h'|\partial Y\equiv\varphi^{p(Y)}_Y$ for all $Y\in\mathcal Y$.</part>
"Surgery on manifolds: a classification tool for high dimensional manifolds" by D. Repovs.

$M^n$ will be a smooth closed $n$-manifold, where closed is meant as connected, compact and boundaryless manifold and smooth should be understood as having a $C^{\infty}$-atlas.
~PL- and ~TOP-manifolds will also be mentioned along the talks.
!History (for high dimensional case, i.e. $n\geq 5$)
*It all started with J. Milnor (1956) with the construction of exotic smooth structures on the differentialbe $7$-sphere. Asa result there are $7$-dimensional  smooth manifolds with the porperty of being ~TOP-equivalent but not ~DIFF-equivalent.
| dim $n$ | 1 to 6 | 7 | 8 | 9 | 10 | 11 | 12 | 15 |
|number of spheres | 1 | 28 | 2 | 8 | 6 | 992 | 1 | >6000 |
*M. Kervaire and J. Milnor (1963?) reduced the classification problem for smooth manifolds which are homotopy equivalent to $S^n$ with $n\geq 5$  to a homotopy theory problem: The calculation of the homotopy groups of spheres $\pi_*(S^k)$. But these groups are hard to compute.
This sets the foundation of the $1$-connected surgery.
----
*S.P. Novikov (1964) and W. Browder (1972) generiled the work by Kervaire and ~MiInor to handle all types of manifolds by reducing the classification problem for the class of $1$-connected manifolds to the study of the homotopy groups of the classifying  space $G/O$.
''Note:''In the ~PL-case we study $G/PL$.
*CTC Wall (1970) generalized Novikov and Browder' s work to the classification of smooth manifolds with arbitrary fundamental group.
This takes on account for the smooth category with $n\geq 5$.
----
~PL- and ~DIFF-categories are not that different but ~TOP-case is totally different.
*R. Kirby and LC Siebenmann (1977) developed surgery theory for ~TOP-manifolds, $n\geq 5$.
----
*$n=4$
##M.H. Freedman and A. Casson (1982) developed surgery theory for $1$-connected ~TOP-$4$-manifolds .
##F. Quinn (2004-2005) attempted a surgery theory for any ~TOP-$4$-manifold.
----
*$n=3$
##G. Perelman and R. Hamilton (2000's) proved the Poincare Conjecture for $n=3$.
##W. Thurston Geometrization Conjecture for $3$-dimensional manifolds is believed to be implied by Perelman's work.
''Note:'' Noticed that ~DIFF=~TOP for $n=3$ by E. Moise and RH Bing (1950). For $n=1$ there exists a unique manifold $S^1$ and for $n=2$ these are classified by its orientability and genus.
''Fact:'' Any f.p. group $G$ and $n\geq 4$ there exists an $n$-manifold $M$ with $\pi_1(M)\cong G$. AA Markov (1950) showed that the class fp groups is undecidable. This implies we have the same problem with manifolds: if $M\cong N$ h.e. then $\pi_1(M)\cong \pi_1(N)$ iso. So the same holds for the classification problem of $n$-manifolds, $n\geq 4$.
----
!!Roadmap
Given $X$ a finite ~CW-complex, we want:
#determine if $\exists \ X\cong M$ h.e., with $M$ smooth $n$-manifold.
#if so, then condsider the set of all such manifolds and classify them up to diffeomorphism.
!!!Existence question
Basic properties: any space $X$ which is h.e. to a closed manifold:
#$X$ has the homotopy type of a finite ~CW-complex. (The problem of finding which are finite ~CW-complexes was solved by CTC Wall using algebraic $K$-theory).
#$X$ homologically behaves as a manifold. In particular, $X$ must be a ~PD-complex.
#Every ~PD-complex $X$, must have a normal bundle compatible with the given ~PD-structure.
!!!Uniqueness structure
Given a h.e. $f:M\to N$ of closed manifolds. Does there exists $g:M\to N$, $g\simeq f$ homotopic, where $g$ is a diffeomorphism?
There are $3$ basic properties wich must be satisfied:
#A diffomorpism is a simple h.e.
#We shall need h-cobordisms.
#Use the h-cobordism theorem (in the $1$-connected case).
----
!!Handle theory
Decomposing manifolds using handles.
*In the ~TOP-case we use the theroy of regular neighborhoods developed by Whitehead, (Rourke and Anderson's book)
*In the ~DIFF-case we use the handles defined by Morse theory. (Milnor's book "Morse theory").
----
!!Def (h-cobordism)
An ''h-cobordism'' is a triple $(W^{n+1}, M^n,N^n)$ of manifolds where the inclusions $M\to W$ and $N\to W$ are homotopy equivalences. Recall $\partial W=M\sqcup N$.
''Note:'' Recall [[Structure Set]].
!!Th (h-cobordism theorem)
If $(W^{n+1}, M^n,N^n)$ is simply connected smooth manifold with $n\geq 4$ then $W\underset{DIFF}{\cong}M\times I$.
As a consequence, $M\underset{DIFF}{\cong}N$.
''Note: (Generalized Poincare Conjecture proved by Smale)'' Sup $M^{n\geq 5}$ is a ~DIFF-manifold h.e. to $S^n$ then he showed there exists an h-cobordism from $S^n$ to $M^n$.
Hence the classification problem for $1$-connected smooth manifolds is the same as the classification problem for h-cobordisms.
If $\pi_1\neq 1$ there are troubles: there are non-diffeomorphic smooth manifolds which are h-cobordant.
!!Def 
A $f:M\to N$ h.e is said to be a ''simple'' if its Whitehead torsion $\tau(f)\in Wh(\mathbb Z\pi_1)$ vanishes, where $pi_1=pi_1(M)=\pi_1(N)$.
!!!!Note
Notice $Wh(\mathbb Z)=0$. It follows any h.e. betwen simply connected manifolds is simple.
!!Th s-cobordism theorem (by ~Barden-Mazur-Stallings)
For an h-cobordism $(W^{k+1}, M^k,N^k)$, with $k\geq 5$, $W\underset{DIFF}{\cong} M\times I$ if and only if the inclusions $M\to W$ and $N\to W$ are simple homotpy equivalences.
So, again, the classification problem goes into the classification of cobordisms. Hence the study of cobordisms theory and simple h.e. enter here.



We continue with Jakobsch's proof og the homogeneity of his example. 
$$
K=\underset{\leftarrow}{lim}\{K_1\leftarrow K_2\leftarrow\dots\}
$$
Besides [[Torunczyk's Lemma|Torunczyk/27 September 2010]], the following are used.
!!!Lemma 5
If $\mathcal Z$ is a good family in $int M$ then $M/\mathcal Z\cong M$, homeomorphism. (This is a consequence of Mayer, 1963).
!!!Lemma 6
Let $h:M\to N$ be an orientation preserving homeomorphism, $X_1\in M^*, X_2\in N^*$. Then there is $\overline{h}:X_1\to X_2$ homeomorphism such that $\overline{h}|\partial M\equiv h|\partial M$.
!!!Def
Given $M$, $M^*$ is the family of metric spaces $X$, so that $X\in M^*$ iff there is a good family of $3$-cells in $\mathcal Z$ in $M$ so that $X=(M-S(\mathcal Z))\cup (\cup \tilde{F}_\sigma)$.
Here $\tilde{F}_\sigma=\alpha_i^{-1}(F_\sigma)$ for $\sigma\in K_{i-1}$ are the lifts of fake cubes in the construction of $K$.
!!!Lemma 7
Let $P\subset K_n$ be a any subpolyhedra for $n\in\mathbb N$ in the sequence defining $K$, such that $P$ is a $3$-manifold. Then $\alpha_n^{-1}(P)\in P^*$. In particular, $\alpha_n^{-1}(_n)\in K_n^*$.
!!!Lemma 8 
For all orientable $3$-manifold $M$, if $X\in M^*$, $X\in (M\# H_0)^*$ where $H_0$ is a homotopy sphere.
*1970 Sullivan applied localization of homotopy type to compute the homotopy $G/PL$. (Published by MIT and avaible at Ranicki's).
*1977 Kirby and Siebenmann showed the existence of the fibration
$$
K(G,3)\to G/PL\to G/TOP
$$
and so homotopy groups of $G/TOP$ could be computed.
*1965 Novikov proved the topological invariant of rationa Pontrjagrin classes.
*1977 Siebenmann disproved the Manifold Haptvermutung for $n\geq 5$.( Though it is true for $n\leq 3$).
*1980's Donaldson  disproved the Manifold  Hauptvemutung for $n=4$.
----
!!!Def 
A ''cobordism'' $W^{n+1}$ is a smooth manifold with boundary so that $\partial W=M\sqcup N$ where $M$ and $N$ are closed manifolds.
This induces an equivalent relation: we say $M\sim N$ iff there is a cobordism $W$ with $\partial W=M\sqcup N$.
''Note:''Recall [[Structure Set]].
!!General Position\Transversality (on DIFF)
Let $M^n$ be a smooth manifold, we denote by $T_xM$ the real vector space of tangent vectors. (We are assuming that everything is embedded in a sufficiently high dimensional euclidean space). We denote by $TM=\sqcup_{x\in M} T_xM=\bigcup_{x\in M} \{x\}\times T_xM$ the tangent bundle , which happends to be an $2n$-dimensional smooth manifold. We have cannonical projections $\pi:TM\to M$.
$TM$ is the protoptype of a vector bundle. This is a fibre bundle whose fibre are vector spaces.
$$
F\to E \overset{p}{\to} B
$$
(Reference: Hussemueller).
A section of $TM$ is a vector field on $M$.
!!!Def
*A manifold $M$ is said to be ''parallelizable'' if $TM$ is trivial.
$S^1$ is parallelizable since $TS^1=S^1\times \mathbb R$. Moebius band is not. This is the reason not to be embeddable into $\mathbb R^2$.
*A manifold $M$ is said to be framed if $TM$ is stably trivial,i.e. there is $\chi$ a trivial bundle such that the Whitney sum $TM\oplus\chi$ is a trivial bundle.
!!!!Example
$S^n$ is framed for all $n$, however $S^n$ is parallelizable only for $n=1,3,7$. (~Bott-Milnor, Kervaire).
(Reference: ~Guillman-Polack "Diff. Topology", ~Broecken-Jaenich "Diff. Topology").
The main application is to define the derivative of a smooth function. Given $f:M\to N$ a smoth map, then the derivative of $f$ is the smooth fucntion $Df:TM\to TN$.
*Two submanifodls $M_1,M_2\subset N$ are said to be transversal, or intersect transversally, $M_1\cap|M_2$ if at every point $x\in M_1\cap M_2$ their separate tangent spaces $T_xM_1$ and $T_xM_2$ generate the tangent space $T_xM=T_xM_1+T_xM_2$. and $dim M_1\cap M_2\leq dim M_1+dim M_2 -dim N$.
!!!!Fact
Let $N$ be a smooth manifold, $S\subset N$ a submanifold of codimension $k$ and $M$ another smooth manifold which is mapped into $N$ by $f:M\to N$ a smooth map. Then:
**If $f(M)\cap| S$, then $f^{-1}(S)$ is a smooth manifold of $M$ of dimension $m-k$. (Use implicit theorem. Also true for ~PL).
**If$\nu^k$ is the normal bundle of $S$ in $N$ then the pull-back $f^*(\nu)$ is isomorphic to the normal bundle of $f^{-1}(S)$ in $M$.
!!!Thom Transversality Th.
Let $S$ be a smooth manifold and $f:M\to N$ be any continuous function. Then $f$ is always homotopic by arbitrary samll homotopies to a smooth map $g;M\to N$ which also satisfies $g(M)\cap | S$. Futhermore, if $A\subset M$ is a closed subset so that $f|A$ is already smooth and $f(U)$ is transverse to $S$ where $U$ is an open neighborhood of $A$, the the homotopy above can be taken to be relative to $A$.
(~PL is true: Zeeman's simplicial approximation theorem for the relative case).
!!!Whitney [[Immersion]] Th. (WIT)
Let $f:M\to N$ be a continuous map between smooth manifolds with $2m\leq n$, then $f$ is homotopic to an immersion by arbitrary small homotopies. Futhermore, this immersion can be taken so that all self intersections are transverse and doble points.
We were not on strike.
!!!~Dydak-Walsch Homology Manifolds Recognition Theorem
Let $Y$ be a locally compact metrizable such that
**$Y$ is homologically loally connected with respect to singular homology, $lc^\infty_{\mathbb Z}$.
**$cdim_{\mathbb Z} Y=n$, i.e., for each non-empty open set $U\subset Y$ $H_c^k(U;\mathbb Z)=0$ for all $k>n$ and there is $V\subset Y$ open for which $H_c^n(U;\mathbb Z)\neq 0$.
**The local Steenrod homology groups are isomorphic: ${}^SH_k (Y, Y-\{x\};\mathbb Z)\cong {}^SH_k (Y,Y-\{y\};\mathbb Z)$ for all $k$.
**Each Steenrod local group ${}^SH_k (Y, Y-\{x\};\mathbb Z)\$ is fg.
Then $Y$ is a $\mathbb Z$-homology $n$-manifold.
----
!!!Th (J.Bryant 1987)
Let $X$ be a locally compact ENR, $dim X\geq 3$. Then $X$ admits an embedding $\mathbb R^{m+1}$, for large enough $m\in\mathbb N$, such that $\mathbb R^{m+1}-X$ is locally $1$-connected for all $x\in X$ and $X$ has a mapping cylinder neighborhood $N=C_f$ in $\mathbb R^{m+1}$ where $C_f$ is the mapping cylinder of a proper map $f:M\to X$ where $M$ is some manifold $M^m\subset\mathbb R^{m+1}$: $N-X\cong\partial N\times [0,1)$ and $\pi:N\to X$ is the natural projection.
!!!Th (F.Raymond 1965)
$\forall x\in X\forall p\in\mathbb N\quad H_p(X,-\{x\};\mathbb Z)\cong \tilde{\overset{\vee}{H}}^{m-p}(f^{-1}(x);\mathbb Z)$.
!!!Th (J.Bryant 1987)
If $h:X\to X$ is any homeomorphism and $n\leq\frac{m-1}{2}$ then for all $x\in X\quad Sh(f^{-1}(x))=Sh(f^{-1}(h(x)))$.
!!!Th (J.Bryant 1987)
If $X$ is an homogeneous ANR and suppose local homology $H_k(X,-\{x\};\mathbb Z)$ is fg , then there is an approximate fibration $f:M\to X$. (This by ~Davermann-Husch 1984 implies $X$ is a generalized manifold).
!!!!Corollary
Let $X$ be a non-degenerate compact finite dimensional ~AR with the property $\forall p\in\mathbb N\exists x\in X /H_p(X,-\{x\};\mathbb Z)$ is fg, then $X$ cannot be homogeneous.

----

!!!!Def (Quinn 2003)
$X$ is said to be __hoologically arc-homogeneous__ if for any path $\alpha:[0,1]\to X$ the inclusions induce isomorphisms
$$
H_k(X\times\{ 0 \},X\times\{ 0 \}-(\alpha(0),0))\to H_k(X\times I, X\times I-\Gamma(\alpha))
$$
where $\Gamma(\alpha)\subset I\times I$ is the graph of $\alpha$.
!!!Th (Bryant 2006)
Let $X$ be an $n$-dimensional homologically arc-homogeneous ENR, then $X$ is a $\mathbb Z$-homology manifold. (Hence it is a generalized manifold).

----

!!!Th (Jakobsche 1991)
Let $\mathcal M$ be a countable family of irreducible $\mathbb Z$-homology $3$-spheres (such that their fundamental groups are non-trivials and pairwise non-isomorphic). Then using Pontryagin inverse limit construction one can get uncountable family of pairwise distinct homogeneous $\mathbb Z$-cohomology $3$-manifolds non-homeomoprhic between them.
!!Whitney Weak Embedding Theorem
*$\forall n\geq 2m+1$, $\forall f:M\to N$ is homotopic to an embedding.
*$\forall n\geq 2m+2$, $f\cong g:M\to N$ homotopic are isotopic.
!!Whitney Strong Embedding Theorem
If $M^m$ , $N^n$ are smooth manifolds and $\pi_1(N)=0$, $n\geq 2m\geq 6$ then $\forall f:M\to N$ is homotopic to an embedding.
!!!Proof
Use Whitney trick and high codimension.
!!Handle Decompositions
!!Def
Let $(M.\partial M)$ a smoth manifold, $D^m=D^k\times D^{m-k}$ a disk and consider an embedding 
$$
f:\partial D^k\times D^{m-k}\to M^n
$$
and define $M'=M\underset{f}{\bigcup}D^m=M\underset{f}{\bigcup}(D^k\times D^{m-k})$ and say $M'$ is obtained from $M$ by attaching a $k$-handle to $M$. Also $D^k\times D^{m-k}$ is a $k$-handle of $M'$.
''Remarks:''
*Attaching $0$-handles means taking disjoint union with $n$-cells.
*Attaching $m$-handles means taking an $m$-cell and identifying its boundary with one of the boundary components of $\partial M$, which should happend to be an sphere.
*These attachments can allways be smooth and, moreover, all the possible smoothings are equivalent.
*Also, from the homotopic point of view, attaching a $k$-handle only means attaching a $k$-cell along its boundary.
----
Consider an arbitrary cobordism $W;M,M')$, then attaching a handle in $W$ will mean to attch a handle along an embedding $f:\partial D^k\times D^{m-k}\to W$ with $IM(f)\subset M'$. We get so a new cobordism $(W';M,M''($ where $M''$ is obtained from $M'$ by attaching a handle.
!!Def
An ''elementary cobordism of index $i$'' is a cobordism $(W;M,M')$ which is obtained by attaching a handle of index $i$ to the trivial cobordism $(M\times I;M,M)$.
Given any two cobordisms, they can be added up just by taking the union. (If one of them finishes where theo other starts!)
A particularly ''nice'' is a handle decomposition $(W;M,M')$ as a union of elementary cobordisms with ascending indexes.
!!Def 
A handle decomposition of some cobordism $(W;M,M')$ is any presentation of the following type:
$$
(W;M,M')=W;M_0,M_k)=(M_0\times I;M_0,M_0)\cup (W_1;M_0,M_1)\cup\dots\cup(W_k;M_{k-1},M_k)\cup (M_k\times I; M_k,M_k)
$$
where each $(W_i;M_{i-1},M_i)$ is an elementary cobordism.(Here $(W_i;M_{i-1},M_i)=((M_{i-1}\times I; M_{i-1}, M_{i-1})+\text{ handle }$).
!!Th
Every cobordism $(W;M,M')$ admits a handle decomposition.
!Surgery on a manifold
Terminology: $M^m$, $N^n$ are smooth manifolds.
*A ''framed'' embedding of $N$ into $M$ is an embedding $f:N^n\times D^{m-n}\to M^m$. ($N$ plus a fixed trivialization of the normal bundle).
*An ''$n$-embedding'' into $M$ is an embedding $S^n\to M$.
*A ''framed'' ''$n$-embedding'' into $M$ is an embedding $S^n\times D^{m-n}\to M$.
!!Def
We describe surgery on $M^m$ (here $\partial M\neq \emptyset$ might be possible). Consider an arbitrary framed $n$-embedding $f:S^n\times D^{m-n}\to M^m$ and let $B\subset M$ be such that:
$$
\partial(\overline{M^m-Im(f)})=\partial M\sqcup (S^n\times S^%{M-n-1})=\partial M\sqcup B
$$
The operation of cutting out $S^n\times D^{m-n}$ and then glueing  in $D^{n+1}\times S^{m-n-1}$ is then called an ''$n$-surgery'' on $f(S^n\times D^{m-n})\subset M$. The new manifold is
$$
\overline{M-f(S^n\times D^{m-n})}\underset{S^n\times S^{m-n-1}}{\bigcup}(D^{m+1}\times S^{m-n-1})
$$
called the effect of this surgery and
$$
\overline{f}=f|S^n\times\{ 0\}\in\pi_n(M)
$$
is said to be killed by this surgery.
''Note:'' Notice that the new manifold has the same boundary as the old one had.
----
Consider the following elementary cobordism:
$(W^{m+1};M,M')$ obtained by attaching $(n_1)$-handle $D^{m+1}\times D^{m-n}$ to the trivial cobordism $(M^m\times I; M,M)$. We have $W=M\times I\underset{(S^n\times D^{m-n})\times\{ 1\}}{\bigcup}(D^{m+1}\times D^{m-n})$. Therefore $\partial W=(M\sqcup \overline{M-S^n\times D^{m-n}})\underset{S^n\times S^{m-n-1}}{\bigcup}(D^{n+1}\times S^{m-n-1})$. Thus $M'$ is the effect of the surgery performed on $M$ and also $M'$ is cobordant to $M$. $W$ is called the ''trace'' of the surgery performed on $M$.
Herbert Busemann (1905-1994) introduced already in his Göttingen thesis the notion of $G$-spaces ($G$ for geodesics), though it is not until his book [["Geometry of geodesics" (1955)|http://books.google.com/books?id=t22O0XBtyJsC&lpg=PA129&ots=Pza56v1Bqh&dq=busemann%20G-spaces%20have%20geodesics&pg=PA32#v=onepage&q=length%20of%20an%20arc&f=false]] when such spaces are named so. The class of $G$-spaces contains all of complete Riemannian spaces and many of the so-called Finler spaces. To this day  it is unknown whether or not infinite dimensional $G$-spaces exist.
!!!Def
A separable metric space $(X,d)$ is a $G$-spaces if it satisfies:
*''Menger Convexity'':
$$
\forall x\neq y\text{ in } X\quad \exists z\in X-\{x,y\} / d(x,z+d(z,y)=d(x,y)
$$
****Example 1: $\mathbb R^2-\{0\}$ fails to have Menger convexity property.
*''Finite Compactness'':
Every $d$-bounded set $A\subset X$ must have an accumulation point.
****Example 2: $\mathbb R-\{0\}$ fails to satisfy finite compactness property.
*''Local Extendibility'':
$$
\forall w\in X\quad\exists \rho>0 \text{ with the property that } \forall x,y\in\overset{\circ}{B}(w;\rho)\exists z\in \overset{\circ}{B}(w;\rho)-\{x,y\} / d(x,y)+d(y,z)=d(x,z)
$$
****Example 3: Take $X=$ a narrow cone.  It does not satisfies the local extendibility.
*''Uniqueness of Extensions'':
$$
\text{ If } x\neq y \text{ in } X\quad \exists z_1,z_2\in X-\{x,y\} / d(x,y)+d(y,z_1)=d(x,z_1), d(x,y)+d(y,z_2)=d(x,z_2), d(y,z_1)=d(y,z_2)\Rightarrow z_1=z_2
$$
****Example 4: Take $X=$ a narrow cone. It does not satisfies the uniqueness of extensions.
----
!!!Busemann Conjecture
If $X$ is a $G$-space and $n-dim X$ is finite, then $X$ is an $n$-manifold.
**$n=1,2$ was proved by Busemann in 1955. The full proof is in his book.
**$n=3$ was proved by Krakus in 1968.
**$n=4$ was proved by P. Thurston in 1996.
----
!!On Kraku's
Krakus' proof is based on using the basic consequences on $G$-spaces definition in order to show that each point has a neighborhood $U$ which is homeomorphic to a cone over its boundary $\partial U$. This set $\partial U$ is shown to satisfies the hypothesis in Borsuk's theorem and hence it is homeomorphic to $S^2$.
!!Th (Borsuk, 1936)
Let $X$ be a Peano continuum such that:
****1: $X$ is cyclic, i.e., $H_n(X)\neq 0$, where $n=dim X$.
****2: $X$ is unicoherent.
****3: $\forall x\in X$ $\exists$ arbitrarly small neighborhood $U\subset X$ of $x$ such that $X-U$ is acyclic, i.e., $H_*(X-U)=0$.
****4: $n=dim X<3$
Then $X\cong S^2$..
!!!!Note
None of the conditions above may be omitted:
****Conditions 1,2,and 3 are satisfied by any homology $3$-sphere.
****Conditions 1, 3 and 4 is satisfied by $S^1$.
****Conditions 1, 2 and 4 are satisfied by closed surfaces.
!!!Def (unicoherence)
If $X$ is a topological space, it is called __unicoherent__ if for any pair $A,B\subset X$ of closed connected such that $X=A\cup B$ then $A\cap B$ is connected.
----
!!Properties of $G$-spaces
Let $(X,d)$ be a $G$-space, then the following are satisfied.
***1. $(X,d)$ is a locally compact complete inner metric space. (A metric is inner if $d(x,y)=inf\{\text{ length of paths from } x \text{ to }y\}$ where [[length of an arc|http://en.wikipedia.org/wiki/Rectifiable_curve]] is measured as usual over rectifiable curves).
***2. $\forall x,y\in X$ can be joined by a geodesic curve.
***3. $\forall w\in X, \quad\exists\rho_w >0 \forall x\neq y \text{ in } B(w;\rho_w)\quad \exists ! \text{ segment joining } x \text{ and } y$.
***4. $\forall x\in X\exists \epsilon_x>0$ so that the closed metric ball $B(x,\epsilon_x)=\{y\in X/ d(x,y)\leq \epsilon_x\}$ there exists a homeomorphism $B(x,\epsilon_x)\cong C(\partial B)=C(S(x,\epsilon_x))$, where $S(x,\epsilon_x)$ is the metric sphere.
***5. $X$ is homogeneous. Moreover every homeomorphism $h:(X,x)\to (X,y)$ is isotopic to the identity on $X$.
Points 4 and 5 imply that every finite dimensional $G$-space is a homogeneous ENR. e have the following corollary.
!!!!Corollary
The ~Bing-Borsuk Conjecture implies the Busemann Conjecture.
----
!!!Th (V. Berestowski, 2002)
If $n=dim X\geq 5$ and $X$ is a $G$-space with Alexandrov curvature bounded above then $X$ is a $n$-manifold.
The proof runs nto the differential topology realm.
!!!!Def
$X$ is said to have bounded Alexandrov curvature $AC\leq k$if geodesic triangles in $X$ are at most as "fat" as the corresponding triangle on a surface $S_K$ which has constant curvature $K$.
----
!!Some results by Thurston
!!!Th (Thurston 1996)
Let $X$ be an $n$-dimensional $G$-space, $n\in \mathbb N$.
**If $n=4$, then $X$ is a topological $4$-manifold.
**$\forall n\in\mathbb N$, $X$ is a generalized $n$-manifold.
**For all sufficiently small radii $r>0$, the closed metric $n$-dimensional balls $B(x;r)$ are homology $n$-manifolds with boundary $S(x;r)$, the metric sphere, which is itself a homology $(n-1)$-manifold without boundary.
!!!!Def
A locally compact Hausdorff space $X$ is a $\mathbb Z$-homology $n$-manifold with boundary if $X-A\cup B$ with $A\cap B=\emptyset$ if
**$\forall a\in A\quad H_*(X,X-\{a\};\mathbb Z)=H_*(\mathbb R^n,\mathbb R^n-\{0\};\mathbb Z)$.
**$\forall b\in B\quad H_*(X,X-\{b\};\mathbb Z)=0$.
Then $A=int X$ and $B=\partial X$.
WRJ Mitchel proved the definition is good and that $\partial X$ is a $(n-1)$-dimensional $\mathbb Z$-homology manifold without boundary.

!!!!Def
Let $S^{k-1}\to\chi\overset{\pi}{\to} Y$ be a $k$-sphehrical fibration over $Y$ and $f:X\to Y$ a map, then the pull-back of this spherical fibration $(\chi,\pi)$ is $f^*(\chi)=\{(x,s)\in X\times \chi/ f(x)=\pi)s)\}$.
!!!!Def
Let us say we have $S^{k-1}\to\chi\overset{\pi}{\to} X$ and $S^{l-1}\to\chi'\overset{\pi'}{\to} Y$ two spherical fibrations of dimension $k$ and $l$ respectively..  We define a $(k+l)$-dimensional spherical fibration over $X\times Y$ by taking the boundary of the product ot the respective associated disk fibrations, mapping cylinders of $\pi$ and $\pi'$:
$$
S^{k+l-1}\to (D(\chi\times \chi')\cup (\chi\times D(\chi'))\overset{\pi\times\pi'}{\to} X\times Y
$$
!!!!Def 
Let $(\chi,\pi)$ and $(\chi',\pi')$ be spherial fibrations of dimension $k$ and $l$, respectively, on $X$. Let $\Delta:X\times \to X\times X$ be the usual diagonal map. We define the ''Whitney sum'' $\chi\oplus\chi'$ as the pull-back along $\Delta$ of the spherical fibration $S^{k+l-1}\to (D(\chi\times \chi')\cup (\chi\times D(\chi'))\overset{\pi\times\pi'}{\to} X\times X$.
*It can be shown, for $f$ a suitable map and $E$ and $E'$ vector bundles, the following equivalities:
** $f^*(J(E))=J(f^*(E))$;
**$J(E\oplus E')=J(E)\oplus J(E')$.
Recall [[pull-back]] in general.
----
*There is an analogue of the stable vector bundle for spherical fibrations.
!!!!Def
Suppose $(\chi,\pi)$ and $(\chi',\pi')$ are $k$-dimensional spherical fibrations  over $X$. Then we say they are ''stable fibre homotopy equivalent'' if the following happends: there are $\epsilon^n$ and $\epsilon^m$ trivial sphere bundles associated to $m$ and $n$-dimensional trivial vector bundles so that $\chi\oplus\epsilon^m\cong\chi'\oplus\epsilon^n$. 
The equivalence class of this stable fiber homotopy equivalence is called the ''stable spherical fibration''. All operations we have defined above on spherical bundles are well-defined for the category of stable spherical fibrations.
*Next, we need the notion of vector bundle reduction of a spherical fibration.
!!!!Def
Let $\chi\to^\pi X$ be a spherical fibration. Then a ''vector bundle reduction'' $E\to X$ of this fibration $(\chi,\pi)$ is a fibre h.e. $\Phi:J(E)\to X$, where $J(E)$ is the associated spherical fibration to the vector bundle $E\to X$.
----
!!!Spivak Normal Fibration
Let $M^m$ be a smooth manifold embedded into $\mathbb R^n$ for $n>>m$ by Whitney Embedding Theorem. Notice that any two such embeddings are isotopic. Hence, for $n>>m$, $M^m$ has a well-defined normal bundle $N_M^{n-m}\subset S^n$. Futhermore, $N_M^{n-m}\oplus\epsilon'\cong N_M^{n-m+1}$; hence we have the notion of ''stable normal bundle'' of $M$, which we will denote by $N_M$.

''Note:'' Notice that $N_M$ depends on the smooth type of $M$ which we can avoid by taking the stable spherical fibration associated to $N_M$, which only depends on the homotopy type of $M$.
!!!!Th (Spivak, 1972)
Let $X$ be a simply connected $k$-dimensional finite ~CW-complex ($X\subset S^n$) and consider a tubular neighborhood $N$ in $S^n$ of $X$. Consider the map
$$
\partial N\to N\cong X
$$
Then this map has a homotopy fibre $S^{n-k-1}$ if and only if $X$ is a Poincare complex. Moreover, if $X$ is indeed a Poincare complex and we treat this spherical fibration as a stable spherical fibration then its fibre h.e. class is independent of the embedding of $X$ into $S^n$ and only depends on the homotopy type of $X$. We call this spherical fibration
$$
S^{n-k-1}\to \partial N\to X
$$
the ''Spivak normal fibration'' of $X$, $\nu_X$.
*Now, if $X$ is a Poincare complex which is h.e. to $M^m$, i.e. $\exists f:X\to M$ h.e., it follows that $f^*(\nu_M)\cong \nu_X$. Hence, $f^*(N_M)$ is the stable vector bundle reduction of the Spivak normal fibration$\nu_X$. Since $M$ is manifold $N_M$ and $\nu_M$ are stably h.e.
*This gives us a bundle theoretical property that any Poincare complex $X$ with $S(X)\neq \emptyset$ should satisfy.
!!!!Th
Let $X$ be any Poincare complex and suppose $S(X)\neq\emptyset$. Then the Spivak normal fibration, $\nu_X$, of $X$
$$
S^{k-1}\to \nu_X\to X
$$
admits a bundle reduction to a ''stable vector bundle''.
(This is a necessary condition to $S(X)\neq\emptyset$).
----

We will show next how a vector bundle reduction of the Spivak normal fibration $\nu_X$ of a Poincare complex $X$ gives us a candidate for an element of $S(X)$.

Given $S^{k-1}\to \nu_X\to X$ consider the following vector bundle $F\to E\to X$ whose associated spherical bundle $J(E)$ is isomorphic to $\nu_X$.
!!!!Def
If $X$ is a Poincare complex and $M^m$ a manifold. Then $f:M\to X$ is called a ''normal map'' if $f^*\nu_X=\nu_M$.
$$
\begin{array}{ r l c l l}
{N_M}&\supseteq J(N_M)&\cong \nu_M=f^*\nu_X&\to &\nu_X\\
\downarrow&&\downarrow&&\downarrow\\
M&&M&\to^f&X\\
\end{array}
$$
Most of the times, normal maps are denoted by $(\nu,b)$ where $b$ is the induced map between the total spaces of the normal fibrations.
!!!!Def
Two normal maps $(f,b)$ and $(f',b')$ are said to be ''normally bordant'' if there exists a cobordism $(W;M,M')$ and a normal map $(F,B):(W;M,M')\to (X\times I;X\times\{0\},X\times\{1\})$ so that $(F,B)|M\equiv (f,b)$ and $(F,B)|M'\equiv (f',b')$.
In other words, ''normal cobordism'' is a bordism which preserves the normal structure.
----
*So the question is when are then normal fibrations equivalent or bordant.
The ''normal structure set'' $\mathcal N(X)$ is the set of all normal bordism classes of [[degree one]] normal maps $f:M\to X$.

!!!Th
Any element $(M,f)\in S(X)$ is a degree $1$-normal map to some $(X,E)$ where $X$ is a Poincare complex and $E$ is a stable vector bundle rediction of thr Spivak normal fibration $\nu_X$ of $X$.
''Note'': Roughly $S(X)\hookrightarrow {\mathcal N}(X))$.
!!!Th
There exists a one to one correspondence between the isomorphisms classes of stable vector bundles reductions of $\nu_X$ and the normal cobordism classes of degree $1$-normal maps.
''Note'':$\mathcal N(X)\equiv\{\text{ stanle vector bundle reductions of }\nu_X\}/\{\text{ isomorphisms }\}$
*This reduces the question of whether there exists $(M,f)\in S(X)$ whose reduction $E=N_M$ to the question whether the corresponding normal bordism class (to $E$) contains a h.e.
!!Surgery
We have learned:
*there exist a unique bordism class of degree $1$-normal maps corresponding to 
*every stable vector bundle reduction of $\nu_X$ for any arbitrary $1$-connected Poincare complex $X$, and
*every element of $S(X)$ lies in one of these normal classes.
----
We shall see later on how to enumerate all stable vector bundle reductions of $\nu_X$. This reduces the calculation of $S(X)$ to the following questions:
**determination of when a normal bordism class contains a h.e.;
**how many distincts h.e. contains.
----
Starting with a degree $1$-normal map $f:M\to X$, it will be produced a normal bordism $(F,B):(W;M,M')\to (X\times I; X\times\{ 0\},X\times \{ 1\})$.
Observe, if $f:X\to Y$ is an inclusion then one can 'meassure' the deviation of $f$ to be a h.e. by $\pi_*(X,Y)$, $H_*(X,Y)$ and $H^*(X,Y)$. However, in the homotopy category one can consider every map $f:X\to Y$ as an inclusion via the mapping cylinder construction $M_f=X\times I\cup_f Y$. Recall $M_f\to Y$ deform retracts.
!!!!Def
Homotopy (homology, cohomology) of $f:X\to Y$ are defined as follows
$$
\pi_k(f)=\pi_k(M_f,X) \quad H_k(f)=\pi_k(M_f,X)  \quad H^k(f)=\pi_k(M_f,X) 
$$
We say $f$ is a ''simply connected  map'' if $\pi_k(f)=0$ for $k=0,1$. Analogously, $f$ is said to be $n$-connected if $\pi_k(f)=0$ for $0\leq k\leq n$.
!!!Th
*A map $f:X\to Y$ is a h.e. iff $\pi_k(f)=0$ for all $k\geq 0$. (Assuming we are withing the ~CW-category so to apply Whitehead Th).
*Suppose $X^n$ and $Y^m$ are ~CW-complexes and $f:X\to Y$ a map so that all of them are $1$-connected. If, in addition, $f$- is $n$-connected , then $H_*(f)=0$ for $0\leq *\leq n$ and the Hurewicz map $h_{n+1}:\pi_{n+1}(f)\to H_{n+1}(f)$ is an isomorphism. (Direct application of [[Relative Hurewicz Theorem]]).
''Fact:'' We get the classical long exact sequences on homotopy, homology and cohomology.
----
*The homology and cphomology groups of $f$ behave nicely with respect to the Poincare duality map in the case $f$ is a degree $1$-normal map  of $1$-connecetd Poincare complexes.
!!!Th
Let $K_*(f)=H_{*+1}(f)$ and $K^*(f)=H^{*+1}(f)$.  Suppose $f:X\to Y$ is a degree $1$-normal map of simply connected Poincare complexes. Then
$$
H_*(X)\cong K_*(f)\oplus H_*(Y)
$$
and
$$
H^*(X)\cong K^*(f)\oplus H^*(Y)
$$
Moreover, this decomposition of $H_*(X)$ and $H^*(X)$ respects the poincare duality map on $X$.
$$ 
[X]\cap-:K^k(f)\to K_{m-k}(f)
$$
is an isomorphism.
!!!!Proof (a sketch)
Use the following diagram, classical long exact sequneces and diagram chasing to get the splittings.
$$
\begin{array}{ c c c }
H_k (X)&\overset{\overset{f_*}{\longrightarrow}}{\underset{f^!}{\longleftarrow}}&H_k(Y)\\
\downarrow_p\uparrow^q&&\downarrow_p\uparrow^q\\
{{H}^{n-k}(X)}&\overset{\overset{f^!}{\longrightarrow}}{\underset{f^*}{\longleftarrow}}&H^{n-k}(Y)\\
\end{array}
$$
The maps $f^!$ and $f_!$ are the so called [[Umkehr maps]].
----

It follows that if we consider a map of pairs $(f,\partial f):(M,\partial M)\to (X,\partial X)$ then the ''relative groups'' $K_*(f,\partial f)=H_{*+1}(f,\partial f)$ and $K^{*}(f,\partial f)=H^{*+1}(f,\partial f)$ fit into the following exact sequences:
$$
\cdots\to K_{n+1}(M,\partial M)\to K_n(\partial M)\to K_n(M)\to K_{n-1}(M,\partial M)\to\cdots
$$
and
$$
\cdots\to K^{n}(M,\partial M)\to K_n( M)\to K_n(\partial M)\to K_{n+1}(M,\partial M)\to\cdots
$$
----
!Surgery on normal maps
Recall that surgery is relatively easy on manifolds up to $[\frac{n}{2}]-1$. The goal is to find a normal bordism which effectively kill the homotopy groups of $f$, $\pi_*(f)$. We need:
**develop surgery on a map, and
**ensure that surgery respects the normal structure of $f$.
We will get then a stronger result for manifold surgery. We show 
**every degree $1$-normal map is shown to be normally bordant to a map which is $([\frac{n}{2}]-1)$-connected degree $1$-normal map.
**there exists well -defined obstructions for the map, which will vanish if and only if the map $f$ is normally bordant to a h.e.
!!!!Def
Let $f:M^m\to X$ be a map with $X$ a Poincare complex.
*A ''$n$-embedding $(\alpha,\beta)$ into $f$'' is an element of $\pi_{n+1}(f)=\pi_{n+1}(M_f,M)$, where $\alpha$ is an embedding.
$$
\begin{array}{ r c l }
{{S}^{n}}&\overset{\alpha}{\hookrightarrow}&M^m\\
\downarrow&&\downarrow_f\\
D^{n+1}&\underset{\beta}{\to}&X\\
\end{array}
$$
*A ''framed $n$-embedding $(\tilde{\alpha},\tilde{\beta})$ into $f$'' is an element as the one above but with $\tilde{\alpha}$ being a framed embedding.
$$
\begin{array}{ c l l }
{{{S}^{n}}\times D^{m-n}}&\overset{\tilde{\alpha}}{\hookrightarrow}&M^m\\
\downarrow&&\downarrow_f\\
D^{n+1}\times D^{m-n}&\underset{\tilde{\beta}}{\to}&X\\
\end{array}
$$
----

We wold like to surger a framed embedding. The result will be a bordism between $f:M\to X$ to some $f':M'\to X$.
Now, since $\tilde{\alpha}$ gives us a framed $n$-embedding of $S^n$ into $M^m$, we can construct a cobordism $(W;M,M')$ by performing surgery on $M$ along $\tilde{\alpha}$.
$$
W=(M\times I)\bigcup_{\tilde{\alpha}\times\{1\}}(D^{n+1}\times D^{m-n})\quad\text{ trace of the surgery }
$$
We need $F:W\to X\times I$ in order to have a bordism. For this purpose, we can use $f\times 1$ on $M\times I$ and extend it over the handle $D^{n+1}\times D^{m-n}$. This is determined by $\tilde{\beta}$. The bordism
$$
(F,B);(W;M,M')\to (X\times I;X\times\{0\},X\times\{1\})
$$
is given by $F|M\times\equiv f\times 1$ and $F|D^{n+1}\times D^{m-n}\equiv (\tilde{\beta},1)$ and it is called ''the trace of the surgery on $f$ along $(\tilde{\alpha},\tilde{\beta})$''. We say $(\alpha,\beta)\in\pi_{n+1}(f)=\pi_{n+1}(M_f,M)$ is said to have been killed by this surgery. For this we require the $n$-embedding to be normal framed $n$-embedding as described below.



!!!Def
A ''normal framed $n$-embedding into a normal map $(f,b)$'' is a framed $n$-embedding $(\tilde{\alpha},\tilde{\beta})$ into $(f,b)$ along with an extension $B$ of the trace of the surgery on $f$ along $\tilde{\alpha},\tilde{\beta})$. We call the normal bordism $(F,B):(W;M,M')\to X\times I$  the ''trace'' of the normal surgery along this $n$-embedding and the restriction $(f',b')=(F,B)?M'$ is called the ''effect'' of this surgery.
''Note:'' Every normal $n$-surgery has a ''dual'' $(m-n-1)$-surgery defined in the obvious way along the analogue of the dual $n$-surgery.

*These definitions give rise to
**Q1: When can an $n$-embedding into a map be extended into a framed $n$-embedding?
**Q2:  When can a framed $n$-embedding into a normal map be extended to a normal framed $n$-embedding?

**Answer Q1: We are given an embedding $\alpha:S^n\to M^m$ and want to extend it to $S^n\times D^{m-n}\to M^m$. By the Tubular Regular Neighborhood Theorem such maps are in one to one correspondence with the framings (i.e. trivializations) of the normal bundle $N_\alpha^m$ of $\alpha$. We can represent $N_\alpha^m$ as a map $N_\alpha:S^n\to BO(m-n)$, (the [[Classifying Space]] of all $(m-n)$-bundles). Then the required condition is this map being null-homotopic  or the trivial element in $\pi_n(BO(m-n))$. The element $N_\alpha$ is called ''the framing obstruction'' $O(\alpha,\beta)$.
**Answer Q2: After a hard work one gets the existence of a map $\gamma$ which fits into the following commutative diagram:
$$
\begin{array}{ r c l }
{S^{n}}&\overset{N_\alpha}{\to}&BO(m-n)\\
\downarrow&&\downarrow\\
D^{n+1}&\overset{\gamma}{\to}&BO\\
\end{array}
$$
!!!!Def
The element $(\gamma,N_\alpha)\in\pi_{n+1}(BO,BO(m-n))$ is called the ''$b$-framing obstruction'' $O_b(\alpha,\beta)$ of the pair $(\alpha,\beta)$.
!!!!Th
Let $f:M*m\to X$ be a map with $M$ a manifold and $X$ a Poincare complex. Given any $(\alpha,\beta)\in\pi_{n+1}(f)$ $n$-embedding into $f$. Then the following are true:
**The $(\alpha,\beta)$ extends to a framed $n$-embedding if and only if $O(\alpha,\beta)\in \pi_n(BO(m-n))$ vanishes.
**If $f$ is a normal map, $(\alpha,\beta)$ will be extending to a normal framed embedding if and only if the $b$-embedding obstruction $O_b(\alpha,\beta)\in\pi_{n+1}(BO,BO(m-n))$ is zero.
----
*For $m\leq 2n$, the standard fibration theory and standard exact sequence arguments yield rather 'easily' the groups.
!!!Th
$$
\pi_{n+1}(BO,BO(m-n))=\left\{\begin{array}{ c l }
0 &\text{ if } 2n+1\leq m\\
\mathbb Z & \text{ if } m=2n \text{ and } n \text{ even }\\
\mathbb Z_2& \text{ if } m=2n \text{ and } n \text{ odd }\\
\end{array}\right.
$$
!!!Th
Let  $(\alpha,\beta)\in\pi_{n+1}(f)$ be an embedding into $f:M\to X$ with $M$ a manifold, $X$ a Poincare space and both of them simply connected which extends to a framed $n$-embedding $(\tilde{\alpha},\tilde{\beta})$.
Let $<(\alpha,\beta)>$ be the normal subgroup generated by $(\alpha,\beta)$ and let $(F,B):(W;M,M')\to (X\times I;X\times\{ 0\},X\times\{ 1\})$ be the trace of the surgery along $(\tilde{\alpha},\tilde{\beta})$.
Let $(\gamma,\delta)\in\pi_{m-n}(f')$ be the element which is killed by the dual $(m-n-1)$-surgery. Denote by  $<(\gamma,\delta)>$ the coresponding normal subgroup in $\pi_{m-n}(f')$. Then:
$$
\pi_{i}(F)=\left\{\begin{array}{ c l }
\pi_i(f) &\text{ if } i<n+1\\
\pi_{n+1}/<(\alpha,\beta)> & \text{ if } i=n+1\\
\end{array}\right.=
\left\{\begin{array}{ c l }
\pi_i(f') &\text{ if } i<m-n\\
\pi_{m-n}(f')/<(\gamma,\delta)> & \text{ if } i=m-n\\
\end{array}\right.
$$
$$
K_{i}(F,f)=\left\{\begin{array}{ c l }
0 &\text{ if } i\neq n+1\\
\mathbb Z& \text{ if } i=n+1\\
\end{array}\right.\quad 
K_{i}(F,f')=\left\{\begin{array}{ c l }
0 &\text{ if } i\neq m-n\\
\mathbb Z & \text{ if } i=m-n\\
\end{array}\right.
$$
In particular, if $m>2n+1$, i.e. we are below the middle dimension. Then
$$
\pi_{i}(f')=\left\{\begin{array}{ c l }
\pi_i(f) &\text{ if } i<n+1\\
\pi_{n+1}(f)/<(\alpha,\beta)> & \text{ if } i=n+1\\
\end{array}\right.
$$
Finally, if $m=2n+1$ then $\pi_i(f)=\pi_i(f')$ for $i<n+1$ but $\pi_{n+1}(f)/<(\alpha,\beta)>=\pi_{n+1}(f')/<(\gamma,\delta)>$.


----
!!Surgery on normal maps below the middle dimension.
We start out with $f:M\to X$ a degree $1$-normal map. In order to obtain $f'$ which is a h.e. we shall first produce $f'$ which should be normally bordant to $f$ and so that $\pi_i(f')=0$ for all $i\leq [\frac{m}{2}]$. By standar arguments (the Hurewicz Theorem, Universal Coefficients Theorem, etc) we conclude:
$$
K^{i-1}(f)=K_{i-1}(f)=\pi_i(f)=0\quad\forall i\leq  [\frac{m}{2}]
$$
Next, we invoke Poincare duality and get
$$
K_{m-i+1}(f)=K^{m-i+1}(f)=0\quad\forall i\leq  [\frac{m}{2}]
$$
*This leaves us with possibly non-zero $K_{\frac{m}{2}}(f)$ if $m$ is even or $K_{\frac{m\pm 1}{2}}(f)$ in case $m$ is odd. In both cases, it is only necessary to kill only one more homotopy group. If we succeed, hen $\pi_*(f')=0$ and $f'$ is a h.e.

 
!!!Th
Let $f:M^m\to X$ be a normal map, $m\geq 5$, between $M^m$ a manifold and $X$ a Poincare space. Suppose $X$ is connected and $\pi_1(M)=\pi_1(X)=0$. Then $f$ is normally bordant to a $[\frac{m}{2}]$-connected $f':M'\to X$.
Notice we are assuming $deg(f)=1$. Recall the [[degree|degree one]] definition.
Proof (a draft).
!!Surgery in $[\frac{m}{2}]$.
In order to kill the homtopy away $[\frac{m}{2}]$, the middle dimension, we rely on:
*all b-framing obstrucyions are in trivial groups.
*the $n$-surgery always simplifies the next homotopy group, $\pi_{n+1}(f)$.
This is no longer true in middle dimension. In fact, we must distinguish two cases.
**$m$ is odd, $m=2n+1$.
In this case, b-framing obstruction $O_b(\alpha,\beta)$ still vanishes. Hoewer, when performing $n$-surgery along a framed $n$-embedding $g\in\pi_{n+1}(f)$ with dual embedding $g'\in\pi_{n+1}(f')$ then $\pi_{n+1}(f)/<g>\cong \pi_{n+1}(f')/<g'>$. Nevertheless, in this case we can still simplify $\pi_{n+1}$.
**$m$ is even, $m=2n$.
In this case the two points above can fail, so it may happend that $\pi_{n+1}$ never simplifies to a trivial group.
!!!Fundamental Theorem of Surgery
Let $f:M\to X$ a degree $1$-normal  map from $M^m$, a manifold, to $X$, a Poincare space. Then there exists a well-defined obstruction $\sigma(f)$ such that:
$\sigma(f)=0$ if and only if $f$ is normally bordant to a h.e.
Moreover, if $m$ is odd then $\sigma(f)=0$.

----

*Let us analyze the even dimensional case, where $f:M\to X$ is a degree $1$-normal map, $m\geq 5$ and $m=2n$. Suppose also $f$ is $n$-connected. It follows, $\pi_{n+1}(f)=H_{n+1}(f)=H^{n+1}(f)=K_n(f)=K^n(f)$. Recall [[$K_*(f)$|6 October 2009]].

The crux of $1$-connected surgery in the middle dimension $\frac{m}{2}=n$ is the relationship between the ''geometric condition'' that the b-framing obstruction $O_b(\alpha,\beta)$ of a given element $(\alpha,\beta)\in\pi_{n+1}(f)=K_n(f)$ vanishes and the ''algebraic condition'' that a certain quadratic form evaluates to zero on this element $(\alpha,\beta)$.

Given $m$ is even, recall that the b-framing obstruction $O_b(\alpha,\beta)\in\pi_{n+1}(BO,BO(n))=\left\{\begin{array}{ c  c }\mathbb Z & m=4k\\ \mathbb Z_2&m=4k+2\\ \end{array}\right.$. Therefore we will have to treat these two cases separately.

----
!!The Kernel forms
We have $f:M\to X$ an $n$-connected degree $1$-normal map, $m\geq 5$ and $m$ is even. ($m=2n$). Recall [[quadratic forms|Quadratic forms]].
*Consider the following bilinear form given by Poincare Duality:
$$
(-,-):H_*(X)\times H_*(X)\to\mathbb Z(\cong H^n(X))
$$
given by $(x,y)=PD(x)\cup PD(y)$. Next, by Poincare Duality $K_*(f)=H_{*+1}(f)=H_{*+1}(M_f,X)$.
If $m=4k$, then $K_i(f)=0$ for all $i\neq n$ and $K_n(f)$ is a (free?) $\mathbb Z$-module. Hence the bilinear form above defined will restrict, recall the [[decomposition|6 October 2009]], to a non-degenerate bilinear form on $K_n(f)$:
$$
(-,-):K_n(f)\times K_n(f)\to \mathbb Z
$$
If $m=4k$, this form is symmetric , i.e. $(a,b)=(b,a)$. If $m=4k+2$, the form is skew-symmetric, i.e. $(a,b)=-(b,a)$. 

In the case $m=4k+2$, we pass from $K_n(f)=K_n(f,\mathbb Z)$ to $K_n(f,\mathbb Z_2)$ on which $(-,-)$ induces now a symmetric bilinear form over $\mathbb Z_2$
$$
(-,-):K_n(f,\mathbb Z_2)\times K_n(f,\mathbb Z_2)\to\mathbb Z_2
$$


Now, for both cases, we define the quadratic forms $K_{2k}(f,\mathbb Z)$ and $K_{2k+1}(f,\mathbb Z_2)$ as follows.
*$K_{2k}(f,\mathbb Z)$
Let $q_{2k}:K_{2k}(f,\mathbb Z)\to\mathbb Z$ be given by $q_{2k}(x)=(x,x)$.
*$K_{2k+1}(f,\mathbb Z_2)$
Let $q_{2k+1}:K_{2k+1}(f,\mathbb Z_2)\to\mathbb Z_2$ is defined by means of functional Steenrod squares. (Defined by Browder).

!!!Properties of Kernel Forms.
Let $x=(\alpha,\beta)\in K_n(f)$ be any normal $n$-embedding into $f$. Then:
*If $m=4k=2n$, then $O_b(x)\in\pi_{n+1}(BO,BO(n))\cong\mathbb Z$ is zero if and only if $q_n(x)=(x,x)=0$.
*If $m=2n=4k+2$ and $x^{(2)}$ is the image of $x$ in $K_n(f,\mathbb Z_2)$ then $O_b(\alpha,\beta)\in\pi_{n+1}(BO,BO(n))\cong\mathbb Z_2$ is zero if and only if $q_n(x^{(2)})=(x^{(2)},x^{(2)})=0$.
!!!!Def
*$m=4k$.
Then we define the surgery obstruction $\sigma(f)=\frac{1}{8} I(q_n)\in\mathbb Z$.
*$m=4k+2$.
Then we define the surgery obstruction $\sigma(f)=c(q_n)\in\mathbb Z_2$.
*$m$ is odd.
Then we define the surgery obstruction $\sigma(f)=0$.

Hence, if we set
$$
L_M(\mathbb Z [\{1\}])=\left\{\begin{array}{ c c}
\mathbb Z& \text{ if } m\equiv 0 mod 4\\
\mathbb Z_2 & \text{ if } m\equiv 2 mod 4\\
0& & \text{ if } m\text{ is odd }\\
\end{array}\right.
$$
we have $\sigma(f)\in L_M(\mathbb Z [\{1\}])$.

!!~Browder-Novikov-Sullivan-Wall Surgery Theorem.
*''Existence'': Let $f:M\to X$ be a degree $1$-normal map, $m\geq 5$ and $M$ and $X$ are simply connected, then $f$ is normally bordant to a h.e. $f':M'\to X$ if and only if $\sigma(f)=0\in L_M(\mathbb Z [\{1\}])$.
*''Structure Set'': Let $X$ be a simply connected Poincare complex of $dim X\geq 5$. Then $S(X)$ is not empty if and only if there is a degree $1$-normal map $(f,b)$ into $X$ such that $\sigma (f,b)=0\in L_M(\mathbb Z [\{1\}])$.
*''Surgery sequence'': Let $M$ be a $1$-connected $m$-manifold, $m\geq 5$, then there exists an exact sequence of pointed sets,
$$
\cdots\to L_{m+1}(\mathbb Z )\overset{w}{\to} S(M)\overset{\eta}{\to}\mathcal N(M)\overset{\sigma}{\to} L_m(\mathbb Z)\to\cdots
$$
where $w$ is defined by the action of $L_{m+1}(\mathbb Z )$ on $S(M)$, $\eta$ is just the obvious map given by associating  the normal bordism class and $\sigma$ is the surgery obstruction just defined above.


!@@color(red):~BING-BORSUK AND BUSEMANN CONJECTURES@@
by Dušan Repovš
Faculty of Mathematics and Physics
University of Ljubljana
Ljubljana, Slovenia



''Summary:''                                           
Beginning in 1942, Busemann developed the notion of a G-space as a way of putting a Riemannian like geometry on a metric space (and also in an attempt to obtain a ”synthetic description” of Finsler’s spaces). A Busemann G-space is a metric space that satisfies four basic axioms on a metric space. These axioms imply the existence of geodesics, local uniqueness of geodesics, and local extension properties. These axioms also infer homogeneity and a cone structure for small metric balls. In 1943, Busemann proved that Busemann G-spaces of dimension n = 1, 2 are manifolds. Busemann then proposed the following conjecture: Every n-dimensional G-space is a topological n-manifold. The Busemann conjecture is  a manifold recognition problem, and is in fact a special case of the Bing-Borsuk Conjecture which asserts that all finite-dimensional homogeneous absolute neighborhood retracts are topological manifolds. Related to the Busemann conjecture are three other famous problems: two de Groot conjectures and the Moore conjecture. In this series of lectures we shall present this problem, its current status and related open problems and conjectures.

''Timetable of Lectures'':
*First week:
Lecture 1.  Various types of  topological homogeneity
Lecture 2.  [[Bing-Borsuk Conjecture|Bing-Borsuk]] in dimensions < 3
Lecture 3.  [[Bing-Borsuk Conjecture|Bing-Borsuk]] in dimension 3
Lecture 4.  [[Bing-Borsuk Conjecture|Bing-Borsuk]] in dimensions > 3
Lecture 5.  Busemann conjecture in dimensions < 4
*Second week:
Lecture 6.  Busemann conjecture in dimension 4
Lecture 7.  Busemann conjecture in dimensions > 4
Lecture 8.  de Groot Conjectures and  Moore Conjecture
Lecture 9.  Open problems and conjectures


''References'': 
1. V. N.Berestovski˘i, Busemann spaces with upper-bounded Aleksandrov curvature, St. Petersburg Math. J. 14(2003), 713–723.
2. H. Busemann, The geometry of Geodesics, Academic Press, New York, 1955.
3. D. M.Halverson, D. Repovš, The Bing-Borsuk and the Busemann Conjectures, Math. Comm. 13:2  (2008), 163-184.
4. B. Krakus, Any 3-dimensional G-space is a manifold, Bull. Acad. Pol. Sci. 16 (1968), 737–740.
5. A. V. Pogorelov, Busemann Regular G-Spaces, Harwood Academic Press, Amsterdam, 1998
6. P. Thurston, 4-dimensional Busemann G-spaces are 4-manifolds, Diff.Geom. Appl. 6 (1996), 245–270.

Las conferencias serán impartidas del 20 al 30 de Septiembre de 2010  de 10:30 a 12:30 en el Seminario del  Departamento de Geometría y Topología (3ª Planta de la Facultad de Matemáticas). 
 
An on-line [[poster|https://docs.google.com/document/edit?id=1qE6cmuoKaWXECJwPaAXzznSV-5kg8fyH4FC-SvqWJ78&hl=en&authkey=CLfbhfsD&pli=1#]].

!@@color(red):SURGERY ON MANIFOLDS@@
by Dušan Repovš
Faculty of Mathematics and Physics
University of Ljubljana
Ljubljana, Slovenia


''Summary:''
 This will be an introductory course on surgery theory on topological manifolds. Surgery has been and is a very successful and well established theory in modern mathematics. It is one of the main tools in the classification of higher dimensional manifolds (n>4). It was intitiated and developed by W. Browder, M. Kervaire, J.W. Milnor, S.P. Novikov, D. Sullivan, C.T.C. Wall, and others and is still a very active research area of modern topology of manifolds.

 We shall attempt to give the participants an access to the field and to present at least a small part of the most important results which have grown out of (higher-dimensional) surgery theory. We shall have to mostly work in the simply-connected case, since the general (compact) case is a much more complex subject. In the final part of the lectures we shall discuss, in as much as time will permit, the very special 4-dimensional situation, which was revolutionarized in the 1980's by the seminal work of M.H. Freedman, F.S. Quinn, and others. In conclusion, we shall present selected open problems and conjectures.

''List of Lectures:''
Lecture 1. Thom Transversality Theorem. Whitney Immersion and Embedding Theorems.
Lecture 2. Handle Decompositions. Cobordisms.
Lecture 3. h-Cobordism Theorem. Homotopy Spheres. Exotic Spheres.
Lecture 4. Manifold Structures. Poincare Complexes. Structure Sets.
Lecture 5. Spherical Fibrations. Normal Maps.
Lecture 6. Surgery on Normal Maps.
Lecture 7. Surgery Obstruction. Surgery Exact Sequence.
Lecture 8. 4-Dimensional Surgery. Open problems and conjectures

''References:''
[1]  W. Browder, Surgery on ~Simply-Connected Manifolds, ~Springer-Verlag, Berlin, 1972.
[2]  A. Cavicchioli, F. Hegenbarth and  D. Repovš, Higher-dimensional Generalized Manifolds: Surgery and Constructions, European Math. Soc. Lect. Notes, to appear.
[3]  M. Freedman and F. Quinn, The Topology of 4-Manifolds, Princeton Univ. Press, Princeton,  NJ., 1990.
[4]  F. Hegenbarth and D. Repovš, Applications of controlled surgery in dimension 4: Examples,  J. Math. Soc. Japan 58 (2006), 1151-1162.
[5]  W. Lueck, A Basic Introduction To Surgery Theory, Topology of ~High-Dimensional Manifolds (Edited by F.T. Farrell, L. Goettshe and W. Lueck), ICTP Lecture Notes Series, Volume 9,  Parts 1 and 2, Trieste, 2002.
[6] C. T. C. Wall, Surgery on Compact Manifolds, Second Edition, Edited by A. A. Ranicki,  American Mathematical Society, Providence, R.I., 1999. 
!~Bing-Borsuk Conjecture (1965).BBC.
<part Bing-Borsuk>Suppose $X$ is a $n$-dimensional homogeneous ANR, then $X$ is a manifold.
The authors proved the conjecture for $n=1,2$ and posed the question for higher dimensions.</part>
[img(25%+,auto+)[http://farm5.static.flickr.com/4124/5057054996_7242e696b0_b_d.jpg]]
[[20 September 2010]]
[[21 September 2010]]
[[22 September 2010]]
[[23 September 2010]]
[[24 September 2010]]
[[27 September 2010]]
[[28 September 2010]]
[[29 September 2010]]
[[30 September 2010]]
[[Bing-Borsuk and Busemann conjectures: 2009 Bucharest Talks Presentation |http://www.imar.ro/~purice/Inst/2009/Bucharest_Talk_2009.pdf]]

''Note:'' The page is @@color(red):~UTF-8@@ encoded and best viewed by [[downloading|http://www.math.union.edu/~dpvc/jsMath/download/jsMath-fonts.html]] the jsMath fonts. Any inquiries to mcard@us.es . Thanks to [[tiddlyspot|http://tiddlyspot.com/]] for hosting this page.
Let $X$ be a Peano continuum such that:
*no points separate $X$;
*for all $x\in X$ there is a small neighborhood $U$ so that $X-U$ is compact;
*there is no retraction from $X$ to a simple closed curve contained in $X$; and
*$dim X=2$.
Then $X$ is homeomorphic to $S^2$.
Set of talks given by Denise Halverson from Bringham Young University, Utah, USA.
Obviously, all mistakes and nonsenses that follow are solely mine.
*11/03/13 [[Talk I|Halverson1]]: Fundamental properties and the Busemann conjecture for $n<4$.
*12/03/13 [[Talk II|Halverson2]]: Critical developments in Topology.
*13/03/13 [[Talk III|Halverson3]]: The Busemann Conjecture in $n=4$.
*14/03/13 [[Talk IV|Halverson4]]: The Busemann Conjecture for dimensions $n>4$.
*15/03/13 [[Talk V|Halverson5]]: Related conjectures. Open problems.
!!!Def
Given $f:M^n\to X$ a map from a topological $n$-manifold called cell-like map if  for all $x\in X$, $f^{-1}(x)$ is a cell-like set which means it has the shape of a point. Having the shape of a point means that any of its neighborhoods shrinks to a point within the neighborhood.
!!!!Cell-like Mapping Problem
Given $f:M^n\to X$ a cell-like map, is it true $dim X<\infty$?
This is unknown for $n=4$, it is resolved positively for $n\leq 3$ and negatively for $n\geq 5$.
!!!Th (~Mitchell-Repovs-Scepin)
Under the hypothesis above the answer in $dim n=4$ is yes iff $X$ has the disjoint Pontrjagin Triples Property:
$$
\forall \epsilon>0, \forall f_1,f_2,f_3:\mathbb D^2\to X\text{ then }\exists f_i':\mathbb D^2\to X / d(f_i,f_i')<\epsilon\text{ for }i=1,2,3\text{ so that }\cap_1^3f_i'(\mathbb D^2)=\emptyset
$$

----
Some recognition results [[Recognition Problem for Manifolds]].
*$O(n)$ is the group of all orthogonal $(n\times n)$-matrices ($det(M)=\pm 1$) and $SO(n)$ are those in $O(n)$ with $det(M)=1$. Observe that for each $n$,
$$
\begin{array}{  c c }
O(n)&\hookrightarrow & O(n+1)\\
M_{n\times n}&\mapsto &\left(\begin{matrix}
 M&0\\
0&1\\
\end{matrix}\right)\\
\end{array}
$$
and let $O=\underset{\longrightarrow}{Lim} O(n)$ be the ''stable orthogonal group'' (or infinite orthogonal group).
*Let $G(n)$ be the set of all $f:S^{n-1}\to S^{n-1}$ h.e. This is a ''monoid'' under composition (algebraic structure with single binary operation with identity element). We topologize with the compact-open topology. For each $n$,
$$
\begin{array}{  c c }
G(n)&\hookrightarrow & G(n+1)\\
f&\mapsto &\Sigma f\\
\end{array}
$$
and let $G=\underset{\longrightarrow}{Lim} G(n)$.
*Next consider the quotient $G(n)/O(n)$ by looking at the inclusion $O(n)\hookrightarrow G(n)$ which is given by considering $S^{n-1}$ as the unit $(n-1)$-sphere in $\mathbb R^n$. Define $G/O=\underset{\longrightarrow}{Lim} G(n)/O(n)$.
!!!Th
*There are classifying spaces $BO(k)$ and $BO$ such that the isomorphism classes of ''$k$-dimensional vector bundles'' on a finite ~CW-complex are in a natural one to one correspondence with the homotopy classes $[X,BO(k)]$, and similarly for ''finite-dimensional stable vector bundles'' there is a one to one correspondence with $[X,BO]$.
*There are classifying spaces $BG(k)$ and $BG$ such that the isomorphism classes of ''$k$-dimensional spherical bundles'' on a finite ~CW-complex are in a natural one to one correspondence with the homotopy classes $[X,BG(k)]$, and similarly for ''finite-dimensional stable spherical bundles'' there is a one to one correspondence with $[X,BG]$.
*There is a map
$$
J:BO\to BG
$$
called the $J$-homomorphism such that if $\alpha:X\to BO$ is a vector bundle then $J\alpha:X\to BG$ is he associated sphere bundle.
*$G/O$ is the homotopy fiber of $J:BO\to BG$. Hence we have a fibration:
$$
G/O\to BO\overset{J}{\to} BG
$$
*This extends to the right giving us a fibration sequence
$$
G/O\overset{r}{\to}BO\overset{J}{\to} BG\to B(G/O)
$$
As a result, there exists an exact sequence of pointed sets
$$
[X,G/O]\overset{r_*}{\to}[X,BO]\overset{J_*}{\to}[X,BG]\to [X,B(G/O)]
$$

[[Index]]
Morris Gray has very nice lists of how to do ASCII symbols, Greek and Latin symbols, HTML entities and Math symbols at his wonderful TW Help site. To see these lists at his site, [[click here|http://twhelp.tiddlyspot.com/#Entities-Codes]].
''Line-by-line blockquotes:''
{{{>level 1}}}
{{{>level 1}}}
{{{>>level 2}}}
{{{>>level 2}}}
{{{>>>level 3}}}
{{{>>>level 3}}}
{{{>>level 2}}}
{{{>level 1}}}

produces:
>level 1
>level 1
>>level 2
>>level 2
>>>level 3
>>>level 3
>>level 2
>level 1

''Extended blockquotes:''
{{{<<<}}}
{{{Extended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotes}}}
{{{<<<}}} 

produces:
<<<
Extended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotes
<<<

|bgcolor(#dddddd):Links with wikiwords|EnchiLada (inactive link - no tiddler yet)<br>WikiWord (active link to tiddler)|{{{EnchiLada}}}<br>{{{WikiWord}}}|
|bgcolor(#dddddd):~De-Wikify a ~WikiWord|~WikiWord, ~EnchiLada|{{{~WikiWord, ~EnchiLada}}}|
|bgcolor(#dddddd):Links with brackets|[[How to add background images]]|{{{[[How to add background images]]}}}|
|bgcolor(#dddddd):Pretty links|[[display text|ColorSchemes]] - links to the tiddler of color schemes|{{{[[display text|ColorSchemes]]}}}|
|bgcolor(#dddddd):External links work the same way:|http://groups.google.com/group/TiddlyWiki <br><br>[[TiddlyWiki Google group|http://groups.google.com/group/TiddlyWiki]]|{{{http://groups.google.com/group/TiddlyWiki}}} <br><br> {{{[[TiddlyWiki Google group|http://groups.google.com/group/TiddlyWiki]]}}}|
|bgcolor(#dddddd):Links to local files|To a file on a CD in your D drive: <br><br>To a file on your USB stick on your e drive: <br><br>To a file in your hard drive:|{{{file:///D:/filename.doc/}}}<br><br>{{{file:///E:/filename.doc/}}}<br><br>{{{file:///C:/filepath/filename.doc/}}}| 

''Images:''
{{{[img[http://farm1.static.flickr.com/39/122259544_6913ca58f3_m.jpg]]}}} is the formatting for:

[img[http://farm1.static.flickr.com/39/122259544_6913ca58f3_m.jpg]]

''A tip from Jeremy Hodge:''
"...[You] may add an image as a local file with the following: {{{[img[.\filepath\filename.jpg]]}}} which adds a picture from the directory that is contained within the same directory as TW. This is very useful for me or anyone who carries their own TW on a USB drive such as myself."
''Numbered lists:''
{{{#item one }}}
{{{##Item 1a}}}
{{{###Item 1ai}}} 

produces:
#item one   
##Item 1a 
###Item 1ai 
''Bulleted lists:''
{{{*Bullet one}}}
{{{**Bullet two}}}
{{{***Bullet three}}}
 
produces:
*Bullet one    
**Bullet two    
***Bullet level three    
!This is the formatting:

{{{|!Table header|!Column Two|}}}
{{{|>| colspan |}}}
{{{| rowspan |left aligned|}}}
{{{|~| right aligned|}}}
{{{|bgcolor(#DC1A1A):colored| centered |}}}
{{{||*lists<br>*within<br>*tables<br><br>and double-spaced too|}}}
{{{|caption|c}}}

!This is the result:

|!Table header|!Column Two|
|>| colspan |
| rowspan |left aligned|
|~| right aligned|
|bgcolor(#DC1A1A):colored| centered |
||*lists<br>*within<br>*tables<br><br>and double-spaced too|
|caption|c

[[More information on tables]]
!Format text
|!Format|!It will look like this...|!...if you format it like this...|
|Bold-faced type|''text''|{{{''text''}}}|
|Italic text|//text//|{{{//text//}}}|
|Underlined text|__text__|{{{__text__}}}|
|Strike-through text|--text--|{{{--text--}}}|
|Colored text|@@color(green):green colored@@|{{{@@color(green):green colored@@}}}|
|Text with colored background|@@bgcolor(#ff0000):color(#ffffff):red colored@@|{{{@@bgcolor(#ff0000):color(#ffffff):red colored@@}}}|
|Highlighting|@@text@@|{{{@@text@@}}}|
|Superscript|2^^3^^=8|{{{2^^3^^=8}}}|
|Subscript|a~~ij~~ = -a~~ji~~|{{{a~~ij~~ = -a~~ji~~}}}|

!Make the first letter of a paragraph extra large
(from Morris Gray's TW Help)

''Sample'':

{{firstletter{
 @@color:#bbbbbb;O@@}}}kay, so you know how to use ~TiddlyWiki, but now you want more. You want to change the color or layout. You want to add features to it. As the subtitle says, this is an entry-level introduction, so I am not going to show you how to do every possible thing you can do with ~TiddlyWiki. I probably don't know half of what can be done. Advanced documentation such as that found at http://www.tiddlywiki.org/wiki and http://tiddlyspot.com/twhelp/ can hopefully expand your horizons. 

''How to do it:''

1. Add the following code to your StyleSheet:

 {{{
.firstletter{ float:left; width:0.75em; font-size:400%; font-family:times,arial; line-height:60%; }
}}}

2. Add the following code to your tiddler at the place where your enlarged letter would go (replacing "O" with the appropriate letter):
{{{
{{firstletter{
 @@color:#c06;O@@
 }}}
}}}
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
Visit [[ToDoTiddler]].
The intention of Prof. Busemann with his $G$-spaces was to recreate Riemannian geometry on metric spaces. (It is a kind of generalization of the set-up for surfaces within $\mathbb R^3$). On his time the impact of Riemannian geometry was enormous: relativity theory, group theory, etc. But Prof. Finsler (?) showed that there were other interesting metrics besides the Riemannian one to be imposed on smooth manifolds. Busemann (1942) studied how to impose Riemannian or Fiensler geometry on metric spaces and looked for the simpliest conditions so that the space has geodesics and locally these are unique.

!!!Def
A metric space $(X,d)$ is a __Busemann G-space__ if the following axioms are satisfied.
*Menger Convexity: For any given distinct point $x,y\in X$, there is $z\in X-\{x,y\}$ such that $d(x,z)+ d(z,y)=d(x,y)$;
*Finiteness  Compactness: Every $d$-bounded infinite set has an acumulation point;
*Local Extendibility: For every point $w\in X$, there exists a adius $\rho_w>0$, such that for any $x\neq y$ in the open ball $B(w,\rho_w)$, there is a point $z\in B(w,\rho_w)-\{x,y\}$ so that $d(x,y)+d(y,z)=d(x,z)$; and
*Uniqueness of Extensions: Given distinct points $x,y\in X$, if there are points $z_1,z_2\in X$ for which 
$$
i=1,2\quad d(x,y)+d(y,z_i)=d(x,z_i)
$$
and
$$
d(y,z_1)=d(y,z_2)
$$
then $z_1=z_2$.
!!!!Direct consequences
If $(X,d)$ is a Busemann $G$-space then it satisfies the following properties:
*Complete Inner Metric:
*Existence of Geodesics:
*Geodesics are locally extendable:
*Local Uniqueness of Joins:
*Local Cones:
**Note: Any space having uniqueness of joins has local cones.
*Topological Homogeneity:
!!Th: $1$- and $2$-dimensional $G$-spaces are TOP-manifolds.
These were shown by Busemann himself. The proof for the case $n=2$ is based on the used of a local version of the [[axiom of Pasch|http://en.wikipedia.org/wiki/Pasch%27s_axiom]] on $\mathbb R^2$.
!!Bausmann $G$-spaces conjecture
Bausmann conjectured that for all $n$ any $G$-space is a manifold. The case $n=3$ was shown by Krakus on 1968 using [[Borsuk's recognition criteria for the topological $2$-sphere|Borsuk2sphere]]. <<slider chkBorsuk2sphere [[Borsuk2sphere]] "Show" "Show">>
!!!Further consequences (Krakus)
Let $x\in X$, let $\epsilon_1>0$ be a cone radius about $x$ and $0<\epsilon_2<\epsilon_1/2$. Use the radial segments to define a continuous retraction $r:B_{\epsilon_1}(x)-\{x\}\to S_{\epsilon_2}$. Points $a,b\in S_{\epsilon(x)_2}$ are said to be antipodal if $x$ lies on the unique antipodal segment joining $a$ to $b$.
Let $a,b\in S_{\epsilon(x)_2}$ be non-antipodal points and let $y$ be in te interior of a segment joining $a$ to $b$. Then
*First retraction inequality: $d(y,r(y))<d(y,a)$.
*Second retraction inequality: $d(b,r(y))<d(a,b)$.
{{center{[img(25%+,auto+)[http://dl.dropbox.com/u/3298444/krakus.jpg]]}}}
!!Th: $3$-dimensional $G$-spaces are TOP-manifolds.
The case $n=3$ was shown by Krakus on 1968 using [[Borsuk's recognition criteria for the topological $2$-sphere|Borsuk2sphere]]. <<slider chkBorsuk2sphere [[Borsuk2sphere]] "Show" "Show">>
-s-
For $n=4$ it was needed to wait until Freedman-Quinn developed their techniques in 1970's so that Thurston on 1994 showed it. Under strong conditions the conjecture was shown for $n\geq 5$ on 2002 by Berestoskii.
**Note: More details [[here|http://www.pef.uni-lj.si/repovs/clanki/2011/sdarticle3.pdf]] and [[here|http://www.netegrate.com/index_files/Research%20Library/Catalogue/Quantitative%20Analysis/Topology/4-dimensional%20Busemann%20G-spaces%20are%204-manifolds%20%28Thurston%29.pdf]].
The main question is how to detect manifolds between those topological spaces which locally are $\mathbb R^n$.
This result was proved by [[Paul Thurston in 1993|http://www.netegrate.com/index_files/Research%20Library/Catalogue/Quantitative%20Analysis/Topology/4-dimensional%20Busemann%20G-spaces%20are%204-manifolds%20%28Thurston%29.pdf]]. The startegy for the proof can be divided into the following steps.
*Step 1: Finite doimensional $G$-spaces are ANR homology manifolds.
*Step 2: $4$-dimensional $G$-spaces have sufficiently small embeded $2$-spheres, $3$-cells and $3$-spheres.
*Step 3: Show Quinn's obstruction for resolution vanishes for $4$-dimensional $G$-spaces.
*Step 4: Establish specific shrinking theorem.
For $n\geq 5$ and bounded above (below) Alexandrov curvature the Busemann conjecture was shown in 2002 (1994) by Borestovskii.
Actually [[Busemann conjecture is a special case of the Bing-Borsuk Conjecture|20 September 2010]]: finite dimensional homogeneous ANR's are manifolds. It is importanta to recall that $G$-spaces are strongly homogeneous. In case of finite dimensional $G$-spaces, we know they are:
*ANR;
*homology manifold; and,
*locally conned.
Basically, $G$-spaces are manifolds iff small metric spheres are codimension $1$ manifold factors.
!!!Strategy for $n>4$
#Show finite dimensional $G$-spaces are resolvable.
#Show that small metric spheres are codimension $1$ manifold factors. (See [[here|http://arxiv.org/pdf/0909.3166.pdf]] and [[here|http://www.math.utk.edu/~dydak/00STS2012/Repovs7.pdf]]).

By Thurston's work we have that small metric spheres are homology manifolds. 
Also, by Krupski (1993), we have  that locally compact homogeneous ANR with dimension $n>2$ have $(0,2)$-ddp. 
So homogeneity of small metric spheres is an important topic to be studied.
!!!!Star-like sets in $G$-spaces
We say $Z$ is __star-like__ with respect to $x$ if $Z$ is the geodesic cone $x\star \partial Z$. We will say it is stably star-like if there is $\delta>0$ so that $Z$ is star-like for every $y\in B(x;\delta)$. Finally we will say it is $G$-homogeneous if there is $\epsilon>0$ so that for every $x$, $B(x;\epsilon)$ is stably star-like.
!!!Th
If $X$ is locally $G$-homogeneous, then small metric spheres are strongly homogeneous.
-s-
Hence the question is clear: Is $G$-homogeneity equivalent to bounded Alexandrov curvature?
Not really, bounded Alexandrov curvature implies strong convexity of small metric balls and this implies $G$-homogeneity. But, by a theorem by Gribonova, we have that $G$-homogeneity does not imply strong convexity of small metric balls. It is unclear whether or not strong convexity of small metric balls implies bounded Alexandrov curvature.
There are some questions which would be interesting to answer.
#Is every $G$-space locally $G$-homogeneous?
#Is there a finite dimensional locally $G$-homogeneous Busemann $G$-space with arbitrary small non-manifold metric spheres?
#Is any small metric sphere in Busemann $G$-spaces codimension $1$ manifold factors?
-s-
More data [[here|http://arxiv.org/pdf/1105.1439.pdf]].
!!!Detecting codimension one manifold factors with general position properties. A [[survey|http://www.math.utk.edu/~dydak/00STS2012/Repovs7.pdf]], using [[path concordances|http://arxiv.org/pdf/0903.3055.pdf]].
!!!!Th (Halverson)
If $X$ is a resolvable generalized $n$-manifold satisfying the piecewise disjoint arc-disk property, then $X\times \mathbb R$ is an $(n_1)$-manifold.
!!!!Th (Halverson&Repovs)
$X$ has disjoint topography iff $X\times\mathbb R$ has ddp.
-s-
Some last remarks:
*Totally wild flow. (Cannon-Daverman)
*Review chapter 17 on Daverman's book, specially Corollary 17.12.B

!Here some  links to check:
*[[TiddlyWiki para todos|http://www.giffmex.org/twfortherestofus.html]]
*[[La casa de TiddlyWiki|http://tiddlywiki.com/]]
*[[A GTD based on TiddlyWiki|http://www.dcubed.ca/Welcome_to_d-cubed.html]]
*[[Como pasar TiddlyWiki a Español|http://www.giffmex.org/twtutorialespanol.html#[[El%20Tiddler%20que%20convierte%20los%20men%C3%BAes%20al%20espa%C3%B1ol]]
*[[Todo sobre JsMath|http://www.math.union.edu/~dpvc/jsMath/]] o ~LaTex en el ~TiddlyWiki.
*[[JsMath en TiddlyWiki|http://bob.mcelrath.org/tiddlyjsmath-2.0.3.html]]
!Formatting
*[[TiddlyWiki Markup]]
*[[Special formatting]]
*[[More on formatting|http://tiddlywiki.org/wiki/TiddlyWiki_Markup]]
!Some tips and tricks
*[[Launch an application within TiddlyWiki|http://www.remotely-helpful.com/TiddlyWiki/LaunchApplication.html]]
*Example of embedding a flash resource
<html><div align="center"> <object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/L_aDpmfAzxI"></param><param name="wmode" value="transparent"></param><embed src="file:///home/olmy/Documents/clases/ensemble_homotopic.swf" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object></div></html>
!Utilities
*[[On-line stopwatch|http://www.online-stopwatch.com/large-stopwatch/]] for talks at conferences.
*[[A time-travel game|http://www.kongregate.com/games/Scarybug/chronotron]]
!History (for high dimensional case, i.e. $n\geq 5$)
*It all started with J. Milnor (1956) with the construction of exotic smooth structures on the differentialbe $7$-sphere. Asa result there are $7$-dimensional  smooth manifolds with the porperty of being ~TOP-equivalent but not ~DIFF-equivalent.
| dim $n$ | 1 to 6 | 7 | 8 | 9 | 10 | 11 | 12 | 15 |
|number of spheres | 1 | 28 | 2 | 8 | 6 | 992 | 1 | >6000 |
*M. Kervaire and J. Milnor (1963?) reduced the classification problem for smooth manifolds which are homotopy equivalent to $S^n$ with $n\geq 5$  to a homotopy theory problem: The calculation of the homotopy groups of spheres $\pi_*(S^k)$. But these groups are hard to compute.
This sets the foundation of the $1$-connected surgery.
----
*S.P. Novikov (1964) and W. Browder (1972) generiled the work by Kervaire and ~MiInor to handle all types of manifolds by reducing the classification problem for the class of $1$-connected manifolds to the study of the homotopy groups of the classifying  space $G/O$.
''Note:''In the ~PL-case we study $G/PL$.
*CTC Wall (1970) generalized Novikov and Browder' s work to the classification of smooth manifolds with arbitrary fundamental group.
This takes on account for the smooth category with $n\geq 5$.
----
~PL- and ~DIFF-categories are not that different but ~TOP-case is totally different.
*R. Kirby and LC Siebenmann (1977) developed surgery theory for ~TOP-manifolds, $n\geq 5$.
----
*$n=4$
##M.H. Freedman and A. Casson (1982) developed surgery theory for $1$-connected ~TOP-$4$-manifolds .
##F. Quinn (2004-2005) attempted a surgery theory for any ~TOP-$4$-manifold.
----
*$n=3$
##G. Perelman and R. Hamilton (2000's) proved the Poincare Conjecture for $n=3$.
##W. Thurston Geometrization Conjecture for $3$-dimensional manifolds is believed to be implied by Perelman's work.
''Note:'' Noticed that ~DIFF=~TOP for $n=3$ by E. Moise and RH Bing (1950). For $n=1$ there exists a unique manifold $S^1$ and for $n=2$ these are classified by its orientability and genus.
''Fact:'' Any f.p. group $G$ and $n\geq 4$ there exists an $n$-manifold $M$ with $\pi_1(M)\cong G$. AA Markov (1950) showed that the class fp groups is undecidable. This implies we have the same problem with manifolds: if $M\cong N$ h.e. then $\pi_1(M)\cong \pi_1(N)$ iso. So the same holds for the classification problem of $n$-manifolds, $n\geq 4$.
----
*1970 Sullivan applied localization of homotopy type to compute the homotopy $G/PL$. (Published by MIT and avaible at Ranicki's).
*1977 Kirby and Siebenmann showed the existence of the fibration
$$
K(G,3)\to G/PL\to G/TOP
$$
and so homotopy groups of $G/TOP$ could be computed.
*1965 Novikov proved the topological invariant of rationa Pontrjagrin classes.
*1977 Siebenmann disproved the Manifold Haptvermutung for $n\geq 5$.( Though it is true for $n\leq 3$).
*1980's Donaldson  disproved the Manifold  Hauptvemutung for $n=4$.
----
/***
|Name|ImageSizePlugin|
|Source|http://www.TiddlyTools.com/#ImageSizePlugin|
|Version|1.2.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|adds support for resizing images|
This plugin adds optional syntax to scale an image to a specified width and height and/or interactively resize the image with the mouse.
!!!!!Usage
<<<
The extended image syntax is:
{{{
[img(w+,h+)[...][...]]
}}}
where ''(w,h)'' indicates the desired width and height (in CSS units, e.g., px, em, cm, in, or %). Use ''auto'' (or a blank value) for either dimension to scale that dimension proportionally (i.e., maintain the aspect ratio). You can also calculate a CSS value 'on-the-fly' by using a //javascript expression// enclosed between """{{""" and """}}""". Appending a plus sign (+) to a dimension enables interactive resizing in that dimension (by dragging the mouse inside the image). Use ~SHIFT-click to show the full-sized (un-scaled) image. Use ~CTRL-click to restore the starting size (either scaled or full-sized).
<<<
!!!!!Examples
<<<
{{{
[img(100px+,75px+)[images/meow2.jpg]]
}}}
[img(100px+,75px+)[images/meow2.jpg]]
{{{
[<img(34%+,+)[images/meow.gif]]
[<img(21% ,+)[images/meow.gif]]
[<img(13%+, )[images/meow.gif]]
[<img( 8%+, )[images/meow.gif]]
[<img( 5% , )[images/meow.gif]]
[<img( 3% , )[images/meow.gif]]
[<img( 2% , )[images/meow.gif]]
[img(  1%+,+)[images/meow.gif]]
}}}
[<img(34%+,+)[images/meow.gif]]
[<img(21% ,+)[images/meow.gif]]
[<img(13%+, )[images/meow.gif]]
[<img( 8%+, )[images/meow.gif]]
[<img( 5% , )[images/meow.gif]]
[<img( 3% , )[images/meow.gif]]
[<img( 2% , )[images/meow.gif]]
[img(  1%+,+)[images/meow.gif]]
{{tagClear{
}}}
<<<
!!!!!Revisions
<<<
2009.02.24 [1.2.1] cleanup width/height regexp, use '+' suffix for resizing
2009.02.22 [1.2.0] added stretchable images
2008.01.19 [1.1.0] added evaluated width/height values
2008.01.18 [1.0.1] regexp for "(width,height)" now passes all CSS values to browser for validation
2008.01.17 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.ImageSizePlugin= {major: 1, minor: 2, revision: 1, date: new Date(2009,2,24)};
//}}}
//{{{
var f=config.formatters[config.formatters.findByField("name","image")];
f.match="\\[[<>]?[Ii][Mm][Gg](?:\\([^,]*,[^\\)]*\\))?\\[";
f.lookaheadRegExp=/\[([<]?)(>?)[Ii][Mm][Gg](?:\(([^,]*),([^\)]*)\))?\[(?:([^\|\]]+)\|)?([^\[\]\|]+)\](?:\[([^\]]*)\])?\]/mg;
f.handler=function(w) {
	this.lookaheadRegExp.lastIndex = w.matchStart;
	var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
	if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
		var floatLeft=lookaheadMatch[1];
		var floatRight=lookaheadMatch[2];
		var width=lookaheadMatch[3];
		var height=lookaheadMatch[4];
		var tooltip=lookaheadMatch[5];
		var src=lookaheadMatch[6];
		var link=lookaheadMatch[7];

		// Simple bracketted link
		var e = w.output;
		if(link) { // LINKED IMAGE
			if (config.formatterHelpers.isExternalLink(link)) {
				if (config.macros.attach && config.macros.attach.isAttachment(link)) {
					// see [[AttachFilePluginFormatters]]
					e = createExternalLink(w.output,link);
					e.href=config.macros.attach.getAttachment(link);
					e.title = config.macros.attach.linkTooltip + link;
				} else
					e = createExternalLink(w.output,link);
			} else 
				e = createTiddlyLink(w.output,link,false,null,w.isStatic);
			addClass(e,"imageLink");
		}

		var img = createTiddlyElement(e,"img");
		if(floatLeft) img.align="left"; else if(floatRight) img.align="right";
		if(width||height) {
			var x=width.trim(); var y=height.trim();
			var stretchW=(x.substr(x.length-1,1)=='+'); if (stretchW) x=x.substr(0,x.length-1);
			var stretchH=(y.substr(y.length-1,1)=='+'); if (stretchH) y=y.substr(0,y.length-1);
			if (x.substr(0,2)=="{{")
				{ try{x=eval(x.substr(2,x.length-4))} catch(e){displayMessage(e.description||e.toString())} }
			if (y.substr(0,2)=="{{")
				{ try{y=eval(y.substr(2,y.length-4))} catch(e){displayMessage(e.description||e.toString())} }
			img.style.width=x.trim(); img.style.height=y.trim();
			config.formatterHelpers.addStretchHandlers(img,stretchW,stretchH);
		}
		if(tooltip) img.title = tooltip;

		// GET IMAGE SOURCE
		if (config.macros.attach && config.macros.attach.isAttachment(src))
			src=config.macros.attach.getAttachment(src); // see [[AttachFilePluginFormatters]]
		else if (config.formatterHelpers.resolvePath) { // see [[ImagePathPlugin]]
			if (config.browser.isIE || config.browser.isSafari) {
				img.onerror=(function(){
					this.src=config.formatterHelpers.resolvePath(this.src,false);
					return false;
				});
			} else
				src=config.formatterHelpers.resolvePath(src,true);
		}
		img.src=src;
		w.nextMatch = this.lookaheadRegExp.lastIndex;
	}
}

config.formatterHelpers.addStretchHandlers=function(e,stretchW,stretchH) {
	e.title=((stretchW||stretchH)?'DRAG=stretch/shrink, ':'')
		+'SHIFT-CLICK=show full size, CTRL-CLICK=restore initial size';
	e.statusMsg='width=%0, height=%1';
	e.style.cursor='move';
	e.originalW=e.style.width;
	e.originalH=e.style.height;
	e.minW=Math.max(e.offsetWidth/20,10);
	e.minH=Math.max(e.offsetHeight/20,10);
	e.stretchW=stretchW;
	e.stretchH=stretchH;
	e.onmousedown=function(ev) { var ev=ev||window.event;
		this.sizing=true;
		this.startX=!config.browser.isIE?ev.pageX:(ev.clientX+findScrollX());
		this.startY=!config.browser.isIE?ev.pageY:(ev.clientY+findScrollY());
		this.startW=this.offsetWidth;
		this.startH=this.offsetHeight;
		return false;
	};
	e.onmousemove=function(ev) { var ev=ev||window.event;
		if (this.sizing) {
			var s=this.style;
			var currX=!config.browser.isIE?ev.pageX:(ev.clientX+findScrollX());
			var currY=!config.browser.isIE?ev.pageY:(ev.clientY+findScrollY());
			var newW=(currX-this.offsetLeft)/(this.startX-this.offsetLeft)*this.startW;
			var newH=(currY-this.offsetTop )/(this.startY-this.offsetTop )*this.startH;
			if (this.stretchW) s.width =Math.floor(Math.max(newW,this.minW))+'px';
			if (this.stretchH) s.height=Math.floor(Math.max(newH,this.minH))+'px';
			clearMessage(); displayMessage(this.statusMsg.format([s.width,s.height]));
		}
		return false;
	};
	e.onmouseup=function(ev) { var ev=ev||window.event;
		if (ev.shiftKey) { this.style.width=this.style.height=''; }
		if (ev.ctrlKey)  { this.style.width=this.originalW; this.style.height=this.originalH; }
		this.sizing=false;
		clearMessage();
		return false;
	};
	e.onmouseout=function(ev) { var ev=ev||window.event;
		this.sizing=false;
		clearMessage();
		return false;
	};
}
//}}}
!!!Def
An ''immersion'' $f:M\to N$ is a smooth map whose derivative $D_xf:T_xM\to T_{f(x)}N$ is injective for all $x\in M$. Equivalently $f$ is an immersion iff $rank k=dim M$ is constant.
''Note:''$f$ itself needs not to be injective.
*In our case, immersions are local embeddings with transversal intersections.
''Remarks:''Obstructions to immersability $M\to\mathbb R^N$ are detected by characteristics clases. (Notably, ~Stiefel-Whitney classes).
(Reference: ~Milnor-Stasheff's book).
[img(25%+,auto+)[http://farm1.static.flickr.com/5/5403268_233d8be02e.jpg]]
**September 2009: [[Surgery]]
**September 2010: [[Bing-Borsuk and Busemann conjectures]]
**September 2011:[[Rigidity]] and [[the Generalized Moore Conjecture]]
**March 2013:[[Busemann G-spaces]]
''Note:'' The page is @@color(red):~UTF-8@@ encoded and best viewed by [[downloading|http://www.math.union.edu/~dpvc/jsMath/download/jsMath-fonts.html]] the jsMath fonts. Any inquiries to mcard@us.es . Thanks to [[tiddlyspot|http://tiddlyspot.com/]] for hosting this page.

Para empezar con este TiddlyWiki vacío, necesitará modificar los siguientes tiddlers:
* SiteTitle & SiteSubtitle: El título y subtítulo del sitio, mostrados en el encabezado (después de guardar, también aparecerán en la barra del título de su navegador web)
* MainMenu: El menú principal que funciona como tabla de contenido para el usuario (generalmente este menú se encuentra a la izquierda)
* DefaultTiddlers: Contiene los nombres de los tiddlers que aparecerán cuando el archivo TiddlyWiki se abre
Además, necesitará ingresar su nombre usuario para firmar sus cambios posteriores al archivo: <<option txtUserName>>
/***
|Name|InlineJavascriptPlugin|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Documentation|http://www.TiddlyTools.com/#InlineJavascriptPluginInfo|
|Version|1.9.5|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Insert Javascript executable code directly into your tiddler content.|
''Call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.
!!!!!Documentation
>see [[InlineJavascriptPluginInfo]]
!!!!!Revisions
<<<
2009.04.11 [1.9.5] pass current tiddler object into wrapper code so it can be referenced from within 'onclick' scripts
2009.02.26 [1.9.4] in $(), handle leading '#' on ID for compatibility with JQuery syntax
|please see [[InlineJavascriptPluginInfo]] for additional revision details|
2005.11.08 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.InlineJavascriptPlugin= {major: 1, minor: 9, revision: 5, date: new Date(2009,4,11)};

config.formatters.push( {
	name: "inlineJavascript",
	match: "\\<script",
	lookahead: "\\<script(?: src=\\\"((?:.|\\n)*?)\\\")?(?: label=\\\"((?:.|\\n)*?)\\\")?(?: title=\\\"((?:.|\\n)*?)\\\")?(?: key=\\\"((?:.|\\n)*?)\\\")?( show)?\\>((?:.|\\n)*?)\\</script\\>",

	handler: function(w) {
		var lookaheadRegExp = new RegExp(this.lookahead,"mg");
		lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = lookaheadRegExp.exec(w.source)
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			var src=lookaheadMatch[1];
			var label=lookaheadMatch[2];
			var tip=lookaheadMatch[3];
			var key=lookaheadMatch[4];
			var show=lookaheadMatch[5];
			var code=lookaheadMatch[6];
			if (src) { // external script library
				var script = document.createElement("script"); script.src = src;
				document.body.appendChild(script); document.body.removeChild(script);
			}
			if (code) { // inline code
				if (show) // display source in tiddler
					wikify("{{{\n"+lookaheadMatch[0]+"\n}}}\n",w.output);
				if (label) { // create 'onclick' command link
					var link=createTiddlyElement(w.output,"a",null,"tiddlyLinkExisting",wikifyPlainText(label));
					var fixup=code.replace(/document.write\s*\(/gi,'place.bufferedHTML+=(');
					link.code="function _out(place,tiddler){"+fixup+"\n};_out(this,this.tiddler);"
					link.tiddler=w.tiddler;
					link.onclick=function(){
						this.bufferedHTML="";
						try{ var r=eval(this.code);
							if(this.bufferedHTML.length || (typeof(r)==="string")&&r.length)
								var s=this.parentNode.insertBefore(document.createElement("span"),this.nextSibling);
							if(this.bufferedHTML.length)
								s.innerHTML=this.bufferedHTML;
							if((typeof(r)==="string")&&r.length) {
								wikify(r,s,null,this.tiddler);
								return false;
							} else return r!==undefined?r:false;
						} catch(e){alert(e.description||e.toString());return false;}
					};
					link.setAttribute("title",tip||"");
					var URIcode='javascript:void(eval(decodeURIComponent(%22(function(){try{';
					URIcode+=encodeURIComponent(encodeURIComponent(code.replace(/\n/g,' ')));
					URIcode+='}catch(e){alert(e.description||e.toString())}})()%22)))';
					link.setAttribute("href",URIcode);
					link.style.cursor="pointer";
					if (key) link.accessKey=key.substr(0,1); // single character only
				}
				else { // run script immediately
					var fixup=code.replace(/document.write\s*\(/gi,'place.innerHTML+=(');
					var c="function _out(place,tiddler){"+fixup+"\n};_out(w.output,w.tiddler);";
					try	 { var out=eval(c); }
					catch(e) { out=e.description?e.description:e.toString(); }
					if (out && out.length) wikify(out,w.output,w.highlightRegExp,w.tiddler);
				}
			}
			w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
		}
	}
} )
//}}}

// // Backward-compatibility for TW2.1.x and earlier
//{{{
if (typeof(wikifyPlainText)=="undefined") window.wikifyPlainText=function(text,limit,tiddler) {
	if(limit > 0) text = text.substr(0,limit);
	var wikifier = new Wikifier(text,formatter,null,tiddler);
	return wikifier.wikifyPlain();
}
//}}}

// // GLOBAL FUNCTION: $(...) -- 'shorthand' convenience syntax for document.getElementById()
//{{{
if (typeof($)=='undefined') { function $(id) { return document.getElementById(id.replace(/^#/,'')); } }
//}}}
/***
|''Name:''|LoadRemoteFileThroughProxy (previous LoadRemoteFileHijack)|
|''Description:''|When the TiddlyWiki file is located on the web (view over http) the content of [[SiteProxy]] tiddler is added in front of the file url. If [[SiteProxy]] does not exist "/proxy/" is added. |
|''Version:''|1.1.0|
|''Date:''|mar 17, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#LoadRemoteFileHijack|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0|
***/
//{{{
version.extensions.LoadRemoteFileThroughProxy = {
 major: 1, minor: 1, revision: 0, 
 date: new Date("mar 17, 2007"), 
 source: "http://tiddlywiki.bidix.info/#LoadRemoteFileThroughProxy"};

if (!window.bidix) window.bidix = {}; // bidix namespace
if (!bidix.core) bidix.core = {};

bidix.core.loadRemoteFile = loadRemoteFile;
loadRemoteFile = function(url,callback,params)
{
 if ((document.location.toString().substr(0,4) == "http") && (url.substr(0,4) == "http")){ 
 url = store.getTiddlerText("SiteProxy", "/proxy/") + url;
 }
 return bidix.core.loadRemoteFile(url,callback,params);
}
//}}}
[[WelcomeToTiddlyspot]] [[GettingStarted]] [[Help]] [[Announcement of the talks]] [[Surgery]] [[Bing-Borsuk and Busemann conjectures]][[Rigidity]]<<toggleSideBar '' '' hide>>
''Simple indenting:''

{{{ {{indent{text }}} produces:

{{indent{text


''Headlines'':

{{{!Text}}} produces:
!Text
{{{!!Text}}} produces:
!!Text
{{{!!!Text}}} produces:
!!!Text
and so on.


''Dotted horizontal lines:'' 

{{{----}}} produces the following line:
----


<!--{{{-->
<div class='header'>
     <div class='gradient' macro='gradient vert #FF8614 #DA4A0D '>
	<div class='titleLine' >
                <span class='searchBar' macro='search'></span>
		<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
		<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
	</div>
<div id='topMenu' refresh='content' tiddler='MainMenu'></div>
    </div>
</div>
<div id='bodywrapper'>
<div id='sidebar'>
	<div id='sidebarOptions' refresh='content' 	tiddler='SideBarOptions'></div>
	<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>
<div id='displayArea'>
	<div id='messageArea'></div>
	<div id='tiddlerDisplay'></div>
</div>
<div id='contentFooter' refresh='content' tiddler='contentFooter'></div>
</div>

<!--}}}-->
/***
|<html><a name="Top"/></html>''Name:''|PartTiddlerPlugin|
|''Version:''|1.0.9 (2007-07-14)|
|''Source:''|http://tiddlywiki.abego-software.de/#PartTiddlerPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license]]|
|''CoreVersion:''|2.1.3|
|''Browser:''|Firefox 1.0.4+; InternetExplorer 6.0|
!Table of Content<html><a name="TOC"/></html>
* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Description',null, event)">Description, Syntax</a></html>
* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Applications',null, event)">Applications</a></html>
** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('LongTiddler',null, event)">Refering to Paragraphs of a Longer Tiddler</a></html>
** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Citation',null, event)">Citation Index</a></html>
** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('TableCells',null, event)">Creating "multi-line" Table Cells</a></html>
** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Tabs',null, event)">Creating Tabs</a></html>
** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Sliders',null, event)">Using Sliders</a></html>
* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Revisions',null, event)">Revision History</a></html>
* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Code',null, event)">Code</a></html>
!Description<html><a name="Description"/></html>
With the {{{<part aPartName> ... </part>}}} feature you can structure your tiddler text into separate (named) parts. 
Each part can be referenced as a "normal" tiddler, using the "//tiddlerName//''/''//partName//" syntax (e.g. "About/Features").  E.g. you may create links to the parts (e.g. {{{[[Quotes/BAX95]]}}} or {{{[[Hobbies|AboutMe/Hobbies]]}}}), use it in {{{<<tiddler...>>}}} or {{{<<tabs...>>}}} macros etc.


''Syntax:'' 
|>|''<part'' //partName// [''hidden''] ''>'' //any tiddler content// ''</part>''|
|//partName//|The name of the part. You may reference a part tiddler with the combined tiddler name "//nameOfContainerTidder//''/''//partName//. <<br>>If you use a partName containing spaces you need to quote it (e.g. {{{"Major Overview"}}} or {{{[[Shortcut List]]}}}).|
|''hidden''|When defined the content of the part is not displayed in the container tiddler. But when the part is explicitly referenced (e.g. in a {{{<<tiddler...>>}}} macro or in a link) the part's content is displayed.|
|<html><i>any&nbsp;tiddler&nbsp;content</i></html>|<html>The content of the part.<br>A part can have any content that a "normal" tiddler may have, e.g. you may use all the formattings and macros defined.</html>|
|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|
<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>

!Applications<html><a name="Applications"/></html>
!!Refering to Paragraphs of a Longer Tiddler<html><a name="LongTiddler"/></html>
Assume you have written a long description in a tiddler and now you want to refer to the content of a certain paragraph in that tiddler (e.g. some definition.) Just wrap the text with a ''part'' block, give it a nice name, create a "pretty link" (like {{{[[Discussion Groups|Introduction/DiscussionGroups]]}}}) and you are done.

Notice this complements the approach to first writing a lot of small tiddlers and combine these tiddlers to one larger tiddler in a second step (e.g. using the {{{<<tiddler...>>}}} macro). Using the ''part'' feature you can first write a "classic" (longer) text that can be read "from top to bottom" and later "reuse" parts of this text for some more "non-linear" reading.

<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>

!!Citation Index<html><a name="Citation"/></html>
Create a tiddler "Citations" that contains your "citations". 
Wrap every citation with a part and a proper name. 

''Example''
{{{
<part BAX98>Baxter, Ira D. et al: //Clone Detection Using Abstract Syntax Trees.// 
in //Proc. ICSM//, 1998.</part>

<part BEL02>Bellon, Stefan: //Vergleich von Techniken zur Erkennung duplizierten Quellcodes.// 
Thesis, Uni Stuttgart, 2002.</part>

<part DUC99>Ducasse, Stéfane et al: //A Language Independent Approach for Detecting Duplicated Code.// 
in //Proc. ICSM//, 1999.</part>
}}}

You may now "cite" them just by using a pretty link like {{{[[Citations/BAX98]]}}} or even more pretty, like this {{{[[BAX98|Citations/BAX98]]}}}.

<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>

!!Creating "multi-line" Table Cells<html><a name="TableCells"/></html>
You may have noticed that it is hard to create table cells with "multi-line" content. E.g. if you want to create a bullet list inside a table cell you cannot just write the bullet list
{{{
* Item 1
* Item 2
* Item 3
}}}
into a table cell (i.e. between the | ... | bars) because every bullet item must start in a new line but all cells of a table row must be in one line.

Using the ''part'' feature this problem can be solved. Just create a hidden part that contains the cells content and use a {{{<<tiddler >>}}} macro to include its content in the table's cell.

''Example''
{{{
|!Subject|!Items|
|subject1|<<tiddler ./Cell1>>|
|subject2|<<tiddler ./Cell2>>|

<part Cell1 hidden>
* Item 1
* Item 2
* Item 3
</part>
...
}}}

Notice that inside the {{{<<tiddler ...>>}}} macro you may refer to the "current tiddler" using the ".".

BTW: The same approach can be used to create bullet lists with items that contain more than one line.

<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>

!!Creating Tabs<html><a name="Tabs"/></html>
The build-in {{{<<tabs ...>>}}} macro requires that you defined an additional tiddler for every tab it displays. When you want to have "nested" tabs you need to define a tiddler for the "main tab" and one for every tab it contains. I.e. the definition of a set of tabs that is visually displayed at one place is distributed across multiple tiddlers.

With the ''part'' feature you can put the complete definition in one tiddler, making it easier to keep an overview and maintain the tab sets.

''Example''
The standard tabs at the sidebar are defined by the following eight tiddlers:
* SideBarTabs
* TabAll
* TabMore
* TabMoreMissing
* TabMoreOrphans
* TabMoreShadowed
* TabTags
* TabTimeline

Instead of these eight tiddlers one could define the following SideBarTabs tiddler that uses the ''part'' feature:
{{{
<<tabs txtMainTab 
    Timeline Timeline SideBarTabs/Timeline 
    All 'All tiddlers' SideBarTabs/All 
    Tags 'All tags' SideBarTabs/Tags 
    More 'More lists' SideBarTabs/More>>
<part Timeline hidden><<timeline>></part>
<part All hidden><<list all>></part>
<part Tags hidden><<allTags>></part>
<part More hidden><<tabs txtMoreTab 
    Missing 'Missing tiddlers' SideBarTabs/Missing 
    Orphans 'Orphaned tiddlers' SideBarTabs/Orphans 
    Shadowed 'Shadowed tiddlers' SideBarTabs/Shadowed>></part>
<part Missing hidden><<list missing>></part>
<part Orphans hidden><<list orphans>></part>
<part Shadowed hidden><<list shadowed>></part>
}}}

Notice that you can easily "overwrite" individual parts in separate tiddlers that have the full name of the part.

E.g. if you don't like the classic timeline tab but only want to see the 100 most recent tiddlers you could create a tiddler "~SideBarTabs/Timeline" with the following content:
{{{
<<forEachTiddler 
		sortBy 'tiddler.modified' descending 
		write '(index < 100) ? "* [["+tiddler.title+"]]\n":""'>>
}}}
<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>

!!Using Sliders<html><a name="Sliders"/></html>
Very similar to the build-in {{{<<tabs ...>>}}} macro (see above) the {{{<<slider ...>>}}} macro requires that you defined an additional tiddler that holds the content "to be slid". You can avoid creating this extra tiddler by using the ''part'' feature

''Example''
In a tiddler "About" we may use the slider to show some details that are documented in the tiddler's "Details" part.
{{{
...
<<slider chkAboutDetails About/Details details "Click here to see more details">>
<part Details hidden>
To give you a better overview ...
</part>
...
}}}

Notice that putting the content of the slider into the slider's tiddler also has an extra benefit: When you decide you need to edit the content of the slider you can just doubleclick the content, the tiddler opens for editing and you can directly start editing the content (in the part section). In the "old" approach you would doubleclick the tiddler, see that the slider is using tiddler X, have to look for the tiddler X and can finally open it for editing. So using the ''part'' approach results in a much short workflow.

<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>

!Revision history<html><a name="Revisions"/></html>
* v1.0.9 (2007-07-14)
** Bugfix: Error when using the SideBarTabs example and switching between "More" and "Shadow". Thanks to cmari for reporting the issue.
* v1.0.8 (2007-06-16)
** Speeding up display of tiddlers containing multiple pard definitions. Thanks to Paco Rivière for reporting the issue.
** Support "./partName" syntax inside <<tabs ...>> macro
* v1.0.7 (2007-03-07)
** Bugfix: <<tiddler "./partName">> does not always render correctly after a refresh (e.g. like it happens when using the "Include" plugin). Thanks to Morris Gray for reporting the bug.
* v1.0.6 (2006-11-07)
** Bugfix: cannot edit tiddler when UploadPlugin by Bidix is installed. Thanks to José Luis González Castro for reporting the bug.
* v1.0.5 (2006-03-02)
** Bugfix: Example with multi-line table cells does not work in IE6. Thanks to Paulo Soares for reporting the bug.
* v1.0.4 (2006-02-28)
** Bugfix: Shadow tiddlers cannot be edited (in TW 2.0.6). Thanks to Torsten Vanek for reporting the bug.
* v1.0.3 (2006-02-26)
** Adapt code to newly introduced Tiddler.prototype.isReadOnly() function (in TW 2.0.6). Thanks to Paulo Soares for reporting the problem.
* v1.0.2 (2006-02-05)
** Also allow other macros than the "tiddler" macro use the "." in the part reference (to refer to "this" tiddler)
* v1.0.1 (2006-01-27)
** Added Table of Content for plugin documentation. Thanks to RichCarrillo for suggesting.
** Bugfix: newReminder plugin does not work when PartTiddler is installed. Thanks to PauloSoares for reporting.
* v1.0.0 (2006-01-25)
** initial version
<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>

!Code<html><a name="Code"/></html>
<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
***/
//{{{
//============================================================================
//                           PartTiddlerPlugin

// Ensure that the PartTiddler Plugin is only installed once.
//
if (!version.extensions.PartTiddlerPlugin) {



version.extensions.PartTiddlerPlugin = {
    major: 1, minor: 0, revision: 9,
    date: new Date(2007, 6, 14), 
    type: 'plugin',
    source: "http://tiddlywiki.abego-software.de/#PartTiddlerPlugin"
};

if (!window.abego) window.abego = {};
if (version.major < 2) alertAndThrow("PartTiddlerPlugin requires TiddlyWiki 2.0 or newer.");

//============================================================================
// Common Helpers

// Looks for the next newline, starting at the index-th char of text. 
//
// If there are only whitespaces between index and the newline 
// the index behind the newline is returned, 
// otherwise (or when no newline is found) index is returned.
//
var skipEmptyEndOfLine = function(text, index) {
	var re = /(\n|[^\s])/g;
	re.lastIndex = index;
	var result = re.exec(text);
	return (result && text.charAt(result.index) == '\n') 
			? result.index+1
			: index;
}


//============================================================================
// Constants

var partEndOrStartTagRE = /(<\/part>)|(<part(?:\s+)((?:[^>])+)>)/mg;
var partEndTagREString = "<\\/part>";
var partEndTagString = "</part>";

//============================================================================
// Plugin Specific Helpers

// Parse the parameters inside a <part ...> tag and return the result.
//
// @return [may be null] {partName: ..., isHidden: ...}
//
var parseStartTagParams = function(paramText) {
	var params = paramText.readMacroParams();
	if (params.length == 0 || params[0].length == 0) return null;
	
	var name = params[0];
	var paramsIndex = 1;
	var hidden = false;
	if (paramsIndex < params.length) {
		hidden = params[paramsIndex] == "hidden";
		paramsIndex++;
	}
	
	return {
		partName: name, 
		isHidden: hidden
	};
}

// Returns the match to the next (end or start) part tag in the text, 
// starting the search at startIndex.
// 
// When no such tag is found null is returned, otherwise a "Match" is returned:
// [0]: full match
// [1]: matched "end" tag (or null when no end tag match)
// [2]: matched "start" tag (or null when no start tag match)
// [3]: content of start tag (or null if no start tag match)
//
var findNextPartEndOrStartTagMatch = function(text, startIndex) {
	var re = new RegExp(partEndOrStartTagRE);
	re.lastIndex = startIndex;
	var match = re.exec(text);
	return match;
}

//============================================================================
// Formatter

// Process the <part ...> ... </part> starting at (w.source, w.matchStart) for formatting.
//
// @return true if a complete part section (including the end tag) could be processed, false otherwise.
//
var handlePartSection = function(w) {
	var tagMatch = findNextPartEndOrStartTagMatch(w.source, w.matchStart);
	if (!tagMatch) return false;
	if (tagMatch.index != w.matchStart || !tagMatch[2]) return false;

	// Parse the start tag parameters
	var arguments = parseStartTagParams(tagMatch[3]);
	if (!arguments) return false;
	
	// Continue processing
	var startTagEndIndex = skipEmptyEndOfLine(w.source, tagMatch.index + tagMatch[0].length);
	var endMatch = findNextPartEndOrStartTagMatch(w.source, startTagEndIndex);
	if (endMatch && endMatch[1]) {
		if (!arguments.isHidden) {
			w.nextMatch = startTagEndIndex;
			w.subWikify(w.output,partEndTagREString);
		}
		w.nextMatch = skipEmptyEndOfLine(w.source, endMatch.index + endMatch[0].length);
		
		return true;
	}
	return false;
}

config.formatters.push( {
    name: "part",
    match: "<part\\s+[^>]+>",
	
	handler: function(w) {
		if (!handlePartSection(w)) {
			w.outputText(w.output,w.matchStart,w.matchStart+w.matchLength);
		}
	}
} )

//============================================================================
// Extend "fetchTiddler" functionality to also recognize "part"s of tiddlers 
// as tiddlers.

var currentParent = null; // used for the "." parent (e.g. in the "tiddler" macro)

// Return the match to the first <part ...> tag of the text that has the
// requrest partName.
//
// @return [may be null]
//
var findPartStartTagByName = function(text, partName) {
	var i = 0;
	
	while (true) {
		var tagMatch = findNextPartEndOrStartTagMatch(text, i);
		if (!tagMatch) return null;

		if (tagMatch[2]) {
			// Is start tag
	
			// Check the name
			var arguments = parseStartTagParams(tagMatch[3]);
			if (arguments && arguments.partName == partName) {
				return tagMatch;
			}
		}
		i = tagMatch.index+tagMatch[0].length;
	}
}

// Return the part "partName" of the given parentTiddler as a "readOnly" Tiddler 
// object, using fullName as the Tiddler's title. 
//
// All remaining properties of the new Tiddler (tags etc.) are inherited from 
// the parentTiddler.
// 
// @return [may be null]
//
var getPart = function(parentTiddler, partName, fullName) {
	var text = parentTiddler.text;
	var startTag = findPartStartTagByName(text, partName);
	if (!startTag) return null;
	
	var endIndexOfStartTag = skipEmptyEndOfLine(text, startTag.index+startTag[0].length);
	var indexOfEndTag = text.indexOf(partEndTagString, endIndexOfStartTag);

	if (indexOfEndTag >= 0) {
		var partTiddlerText = text.substring(endIndexOfStartTag,indexOfEndTag);
		var partTiddler = new Tiddler();
		partTiddler.set(
						fullName,
						partTiddlerText,
						parentTiddler.modifier,
						parentTiddler.modified,
						parentTiddler.tags,
						parentTiddler.created);
		partTiddler.abegoIsPartTiddler = true;
		return partTiddler;
	}
	
	return null;
}

// Hijack the store.fetchTiddler to recognize the "part" addresses.
//
var hijackFetchTiddler = function() {
	var oldFetchTiddler = store.fetchTiddler ;
	store.fetchTiddler = function(title) {
		var result = oldFetchTiddler.apply(this, arguments);
		if (!result && title) {
			var i = title.lastIndexOf('/');
			if (i > 0) {
				var parentName = title.substring(0, i);
				var partName = title.substring(i+1);
				var parent = (parentName == ".") 
						? store.resolveTiddler(currentParent)
						: oldFetchTiddler.apply(this, [parentName]);
				if (parent) {
					return getPart(parent, partName, parent.title+"/"+partName);
				}
			}
		}
		return result;	
	};
};

// for debugging the plugin is not loaded through the systemConfig mechanism but via a script tag. 
// At that point in the "store" is not yet defined. In that case hijackFetchTiddler through the restart function.
// Otherwise hijack now.
if (!store) {
	var oldRestartFunc = restart;
	window.restart = function() {
		hijackFetchTiddler();
		oldRestartFunc.apply(this,arguments);
	};
} else
	hijackFetchTiddler();




// The user must not edit a readOnly/partTiddler
//

config.commands.editTiddler.oldIsReadOnlyFunction = Tiddler.prototype.isReadOnly;

Tiddler.prototype.isReadOnly = function() {
	// Tiddler.isReadOnly was introduced with TW 2.0.6.
	// For older version we explicitly check the global readOnly flag
	if (config.commands.editTiddler.oldIsReadOnlyFunction) {
		if (config.commands.editTiddler.oldIsReadOnlyFunction.apply(this, arguments)) return true;
	} else {
		if (readOnly) return true;
	}

	return this.abegoIsPartTiddler;
}

config.commands.editTiddler.handler = function(event,src,title)
{
	var t = store.getTiddler(title);
	// Edit the tiddler if it either is not a tiddler (but a shadowTiddler)
	// or the tiddler is not readOnly
	if(!t || !t.abegoIsPartTiddler)
		{
		clearMessage();
		story.displayTiddler(null,title,DEFAULT_EDIT_TEMPLATE);
		story.focusTiddler(title,"text");
		return false;
		}
}

// To allow the "./partName" syntax in macros we need to hijack 
// the invokeMacro to define the "currentParent" while it is running.
// 
var oldInvokeMacro = window.invokeMacro;
function myInvokeMacro(place,macro,params,wikifier,tiddler) {
	var oldCurrentParent = currentParent;
	if (tiddler) currentParent = tiddler;
	try {
		oldInvokeMacro.apply(this, arguments);
	} finally {
		currentParent = oldCurrentParent;
	}
}
window.invokeMacro = myInvokeMacro;

// To correctly support the "./partName" syntax while refreshing we need to hijack 
// the config.refreshers.tiddlers to define the "currentParent" while it is running.
// 
(function() {
	var oldTiddlerRefresher= config.refreshers.tiddler;
	config.refreshers.tiddler = function(e,changeList) {
		var oldCurrentParent = currentParent;
		try {
			currentParent = e.getAttribute("tiddler");
			return oldTiddlerRefresher.apply(this,arguments);
		} finally {
			currentParent = oldCurrentParent;
		}
	};
})();

// Support "./partName" syntax inside <<tabs ...>> macro
(function() {
	var extendRelativeNames = function(e, title) {
		var nodes = e.getElementsByTagName("a");
		for(var i=0; i<nodes.length; i++) {
			var node = nodes[i];
			var s = node.getAttribute("content");
			if (s && s.indexOf("./") == 0)
				node.setAttribute("content",title+s.substr(1));
		}
	};
	var oldHandler = config.macros.tabs.handler;
	config.macros.tabs.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
		var result = oldHandler.apply(this,arguments);
		if (tiddler)
			extendRelativeNames(place, tiddler.title);
		return result;
	};
})();

// Scroll the anchor anchorName in the viewer of the given tiddler visible.
// When no tiddler is defined use the tiddler of the target given event is used.
window.scrollAnchorVisible = function(anchorName, tiddler, evt) {
	var tiddlerElem = null;
	if (tiddler) {
		tiddlerElem = document.getElementById(story.idPrefix + tiddler);
	}
	if (!tiddlerElem && evt) {
		var target = resolveTarget(evt);
		tiddlerElem = story.findContainingTiddler(target);
	}
	if (!tiddlerElem) return;

	var children = tiddlerElem.getElementsByTagName("a");
	for (var i = 0; i < children.length; i++) {
		var child = children[i];
		var name = child.getAttribute("name");
		if (name == anchorName) {
			var y = findPosY(child);
			window.scrollTo(0,y);
			return;
		}
	}
}

} // of "install only once"
//}}}

/***
<html><sub><a href="javascript:;" onclick="scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>

!Licence and Copyright
Copyright (c) abego Software ~GmbH, 2006 ([[www.abego-software.de|http://www.abego-software.de]])

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.

Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.

Neither the name of abego Software nor the names of its contributors may be
used to endorse or promote products derived from this software without specific
prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.

<html><sub><a href="javascript:;" onclick="scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
***/
/***
|''Name:''|PasswordOptionPlugin|
|''Description:''|Extends TiddlyWiki options with non encrypted password option.|
|''Version:''|1.0.2|
|''Date:''|Apr 19, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#PasswordOptionPlugin|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0 (Beta 5)|
***/
//{{{
version.extensions.PasswordOptionPlugin = {
	major: 1, minor: 0, revision: 2, 
	date: new Date("Apr 19, 2007"),
	source: 'http://tiddlywiki.bidix.info/#PasswordOptionPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	license: '[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D]]',
	coreVersion: '2.2.0 (Beta 5)'
};

config.macros.option.passwordCheckboxLabel = "Save this password on this computer";
config.macros.option.passwordInputType = "password"; // password | text
setStylesheet(".pasOptionInput {width: 11em;}\n","passwordInputTypeStyle");

merge(config.macros.option.types, {
	'pas': {
		elementType: "input",
		valueField: "value",
		eventName: "onkeyup",
		className: "pasOptionInput",
		typeValue: config.macros.option.passwordInputType,
		create: function(place,type,opt,className,desc) {
			// password field
			config.macros.option.genericCreate(place,'pas',opt,className,desc);
			// checkbox linked with this password "save this password on this computer"
			config.macros.option.genericCreate(place,'chk','chk'+opt,className,desc);			
			// text savePasswordCheckboxLabel
			place.appendChild(document.createTextNode(config.macros.option.passwordCheckboxLabel));
		},
		onChange: config.macros.option.genericOnChange
	}
});

merge(config.optionHandlers['chk'], {
	get: function(name) {
		// is there an option linked with this chk ?
		var opt = name.substr(3);
		if (config.options[opt]) 
			saveOptionCookie(opt);
		return config.options[name] ? "true" : "false";
	}
});

merge(config.optionHandlers, {
	'pas': {
 		get: function(name) {
			if (config.options["chk"+name]) {
				return encodeCookie(config.options[name].toString());
			} else {
				return "";
			}
		},
		set: function(name,value) {config.options[name] = decodeCookie(value);}
	}
});

// need to reload options to load passwordOptions
loadOptionsCookie();

/*
if (!config.options['pasPassword'])
	config.options['pasPassword'] = '';

merge(config.optionsDesc,{
		pasPassword: "Test password"
	});
*/
//}}}
$X$ is a Peano Continuum if it is locally connected continuum ( compact connected metric space).
*Examples
**The Hawaiian Ring is a Peano Continuum.
**The usual $X=[0,1]\times \{\frac{1}{n}\}_{n\geq 1}\cup \{0\}\times [0,1]$ is not.
/***
|Name|Plugin: jsMath|
|Created by|BobMcElrath|
|Email|my first name at my last name dot org|
|Location|http://bob.mcelrath.org/tiddlyjsmath.html|
|Version|1.5.1|
|Requires|[[TiddlyWiki|http://www.tiddlywiki.com]] &ge; 2.0.3, [[jsMath|http://www.math.union.edu/~dpvc/jsMath/]] &ge; 3.0|
!Description
LaTeX is the world standard for specifying, typesetting, and communicating mathematics among scientists, engineers, and mathematicians.  For more information about LaTeX itself, visit the [[LaTeX Project|http://www.latex-project.org/]].  This plugin typesets math using [[jsMath|http://www.math.union.edu/~dpvc/jsMath/]], which is an implementation of the TeX math rules and typesetting in javascript, for your browser.  Notice the small button in the lower right corner which opens its control panel.
!Installation
In addition to this plugin, you must also [[install jsMath|http://www.math.union.edu/~dpvc/jsMath/download/jsMath.html]] on the same server as your TiddlyWiki html file.  If you're using TiddlyWiki without a web server, then the jsMath directory must be placed in the same location as the TiddlyWiki html file.

I also recommend modifying your StyleSheet use serif fonts that are slightly larger than normal, so that the math matches surrounding text, and \\small fonts are not unreadable (as in exponents and subscripts).
{{{
.viewer {
  line-height: 125%;
  font-family: serif;
  font-size: 12pt;
}
}}}

If you had used a previous version of [[Plugin: jsMath]], it is no longer necessary to edit the main tiddlywiki.html file to add the jsMath <script> tag.  [[Plugin: jsMath]] now uses ajax to load jsMath.
!History
* 11-Nov-05, version 1.0, Initial release
* 22-Jan-06, version 1.1, updated for ~TW2.0, tested with jsMath 3.1, editing tiddlywiki.html by hand is no longer necessary.
* 24-Jan-06, version 1.2, fixes for Safari, Konqueror
* 27-Jan-06, version 1.3, improved error handling, detect if ajax was already defined (used by ZiddlyWiki)
* 12-Jul-06, version 1.4, fixed problem with not finding image fonts
* 26-Feb-07, version 1.5, fixed problem with Mozilla "unterminated character class".
* 27-Feb-07, version 1.5.1, Runs compatibly with TW 2.1.0+, by Bram Chen
!Examples
|!Source|!Output|h
|{{{The variable $x$ is real.}}}|The variable $x$ is real.|
|{{{The variable \(y\) is complex.}}}|The variable \(y\) is complex.|
|{{{This \[\int_a^b x = \frac{1}{2}(b^2-a^2)\] is an easy integral.}}}|This \[\int_a^b x = \frac{1}{2}(b^2-a^2)\] is an easy integral.|
|{{{This $$\int_a^b \sin x = -(\cos b - \cos a)$$ is another easy integral.}}}|This $$\int_a^b \sin x = -(\cos b - \cos a)$$ is another easy integral.|
|{{{Block formatted equations may also use the 'equation' environment \begin{equation}  \int \tan x = -\ln \cos x \end{equation} }}}|Block formatted equations may also use the 'equation' environment \begin{equation}  \int \tan x = -\ln \cos x \end{equation}|
|{{{Equation arrays are also supported \begin{eqnarray} a &=& b \\ c &=& d \end{eqnarray} }}}|Equation arrays are also supported \begin{eqnarray} a &=& b \\ c &=& d \end{eqnarray} |
|{{{I spent \$7.38 on lunch.}}}|I spent \$7.38 on lunch.|
|{{{I had to insert a backslash (\\) into my document}}}|I had to insert a backslash (\\) into my document|
!Code
***/
//{{{

// AJAX code adapted from http://timmorgan.org/mini
// This is already loaded by ziddlywiki...
if(typeof(window["ajax"]) == "undefined") {
  ajax = {
      x: function(){try{return new ActiveXObject('Msxml2.XMLHTTP')}catch(e){try{return new ActiveXObject('Microsoft.XMLHTTP')}catch(e){return new XMLHttpRequest()}}},
      gets: function(url){var x=ajax.x();x.open('GET',url,false);x.send(null);return x.responseText}
  }
}

// Load jsMath
jsMath = {
  Setup: {inited: 1},          // don't run jsMath.Setup.Body() yet
  Autoload: {root: new String(document.location).replace(/[^\/]*$/,'jsMath/')}  // URL to jsMath directory, change if necessary
};
var jsMathstr;
try {
  jsMathstr = ajax.gets(jsMath.Autoload.root+"jsMath.js");
} catch(e) {
  alert("jsMath was not found: you must place the 'jsMath' directory in the same place as this file.  "
       +"The error was:\n"+e.name+": "+e.message);
  throw(e);  // abort eval
}
try {
  window.eval(jsMathstr);
} catch(e) {
  alert("jsMath failed to load.  The error was:\n"+e.name + ": " + e.message + " on line " + e.lineNumber);
}
jsMath.Setup.inited=0;  //  allow jsMath.Setup.Body() to run again

// Define wikifers for latex
config.formatterHelpers.mathFormatHelper = function(w) {
    var e = document.createElement(this.element);
    e.className = this.className;
    var endRegExp = new RegExp(this.terminator, "mg");
    endRegExp.lastIndex = w.matchStart+w.matchLength;
    var matched = endRegExp.exec(w.source);
    if(matched) {
        var txt = w.source.substr(w.matchStart+w.matchLength, 
            matched.index-w.matchStart-w.matchLength);
        if(this.keepdelim) {
          txt = w.source.substr(w.matchStart, matched.index+matched[0].length-w.matchStart);
        }
        e.appendChild(document.createTextNode(txt));
        w.output.appendChild(e);
        w.nextMatch = endRegExp.lastIndex;
    }
}

config.formatters.push({
  name: "displayMath1",
  match: "\\\$\\\$",
  terminator: "\\\$\\\$\\n?", // 2.0 compatibility
  termRegExp: "\\\$\\\$\\n?",
  element: "div",
  className: "math",
  handler: config.formatterHelpers.mathFormatHelper
});

config.formatters.push({
  name: "inlineMath1",
  match: "\\\$", 
  terminator: "\\\$", // 2.0 compatibility
  termRegExp: "\\\$",
  element: "span",
  className: "math",
  handler: config.formatterHelpers.mathFormatHelper
});

var backslashformatters = new Array(0);

backslashformatters.push({
  name: "inlineMath2",
  match: "\\\\\\\(",
  terminator: "\\\\\\\)", // 2.0 compatibility
  termRegExp: "\\\\\\\)",
  element: "span",
  className: "math",
  handler: config.formatterHelpers.mathFormatHelper
});

backslashformatters.push({
  name: "displayMath2",
  match: "\\\\\\\[",
  terminator: "\\\\\\\]\\n?", // 2.0 compatibility
  termRegExp: "\\\\\\\]\\n?",
  element: "div",
  className: "math",
  handler: config.formatterHelpers.mathFormatHelper
});

backslashformatters.push({
  name: "displayMath3",
  match: "\\\\begin\\{equation\\}",
  terminator: "\\\\end\\{equation\\}\\n?", // 2.0 compatibility
  termRegExp: "\\\\end\\{equation\\}\\n?",
  element: "div",
  className: "math",
  handler: config.formatterHelpers.mathFormatHelper
});

// These can be nested.  e.g. \begin{equation} \begin{array}{ccc} \begin{array}{ccc} ...
backslashformatters.push({
  name: "displayMath4",
  match: "\\\\begin\\{eqnarray\\}",
  terminator: "\\\\end\\{eqnarray\\}\\n?", // 2.0 compatibility
  termRegExp: "\\\\end\\{eqnarray\\}\\n?",
  element: "div",
  className: "math",
  keepdelim: true,
  handler: config.formatterHelpers.mathFormatHelper
});

// The escape must come between backslash formatters and regular ones.
// So any latex-like \commands must be added to the beginning of
// backslashformatters here.
backslashformatters.push({
    name: "escape",
    match: "\\\\.",
    handler: function(w) {
        w.output.appendChild(document.createTextNode(w.source.substr(w.matchStart+1,1)));
        w.nextMatch = w.matchStart+2;
    }
});

config.formatters=backslashformatters.concat(config.formatters);

window.wikify = function(source,output,highlightRegExp,tiddler)
{
    if(source && source != "") {
        if(version.major == 2 && version.minor > 0) {
            var wikifier = new Wikifier(source,getParser(tiddler),highlightRegExp,tiddler);
            wikifier.subWikifyUnterm(output);
        } else {
            var wikifier = new Wikifier(source,formatter,highlightRegExp,tiddler);
            wikifier.subWikify(output,null);
        }
        jsMath.ProcessBeforeShowing();
    }
}
//}}}
!!Quadratic forms over $\mathbb Z$.
!!!!Def
Let $V$ be a free $\mathbb Z$-module. A ''quadratic form'' on $V$ is a linear map $q:V\to \mathbb Z$ so that for all $x\in V$, $q(x)=(x,x)$ for some symmetric bilinear form over $\mathbb Z$:
$$
(-,-):V\times V\to V
$$
which is called the form associated to the quadratic form $q$. Notice that symmetric bilinear forms and quadratic forms over $\mathbb Z$ are in one to one correspondence. (This is not true over $\mathbb Z_2$).
!!!!Def
A quadratic form is said to be ''non-singular'' if its associated bilinear form has determinant $\pm 1$.
Any such $q$ naturally gives rise to a quadratic form over $\mathbb Q$: 
$$
q_{\mathbb Q}:V\otimes\mathbb Q\to\mathbb Q
$$
Now, every quadratic form over $\mathbb Q$ diagonalizes (by sylvester Theorem) hence can define the signature $I(q)$, the signature of the rationalizatiopn of $q_{\mathbb Q}$ over $\mathbb Q$.
!!!Th
Let $q$ be a non-singular quadratic form, neither positive nor negative definitive; then there exists $x\in $ with $q(x)=0$.
!!!!Def
A quadratic form $q:V\to\mathbb Z$ is called ''even'' if for every $x\in V$, $q(x)\in 2\mathbb Z$.
!!!Th
The signature of every even non-singular quadratic form $q:V\to\mathbb Z$ is divisible by $8$.

----

!!Quadratic forms over $\mathbb Z_2$.
!!!!Def
Let $V$ be a vector space over $\mathbb Z_2$. A ''quadratic form'' on $V$ is a linear map $q:V\to\mathbb Z_2$ such that the associated non-degenerate bilinear form $(-,-):V\times V\to\mathbb Z_2$ satisfies $(x,x)=0$ for all $x\in V$ and so that $(x,y)=q(x+y)-q(x)-q(y)$ for all $x,y\in V$. We say $q$ is ''non-singular'' if its associated bilinear form has determinant $1$.

One can show that every linear quadratic form $q:V\to \mathbb Z_2$ has a ''symplectic basis'' $\{a_1,a_2,\dots , a_n,b_1,\dots , b_n\}$ with $(a_i,a_j)=0$, $(b_i,b_j)=0$ and $(a_i, b_j)=\delta_{i,j}$.
!!!!Def
Let $q:V\to \mathbb Z_2$, $\{a_i, b_i\}_{i=1}^n$ a symplectic  basis then the ''Arf invariant'' of $q$, denoted by
$$
c(q)=\sum_{i=1}^n q(a_i)q(b_i)\in\mathbb Z_2
$$
is well-defined.
!!!Th
There exists exactly two isomorphism classes of quadratic forms $q:V\to\mathbb Z_2$ on any even dimensional $\mathbb Z_2$-vector space $V$ and they are completely determined by the Arf invariant $c(q)$.


[img(45%+,auto+)[http://db.tt/lEaJl3X]]
RM Pontrjagin sphere is obtained as $\mathbb S^2=\mathbb D^2\cup_{\partial \mathbb D^2}\mathbb D^2$, where $\mathbb D^2$ is a Pontrjagin disk. This is built, on each step, by triangulating the corresponding space and replacing the $2$-cell by the attachment of a $1$-handle; $\mathbb R^3\supset\mathbb D^2=\underset{\longleftarrow}{lim}\{P_i,\alpha_{i,i+1}\}$. The bonding maps are defined by collapsing the handle to a point and keeping the collar of the attaching $S^1$.  The "disk" $\mathbb D^2$ is not homogeneous, but locally homogeneous, fractal, compact $2$-dimensional locally conncected and $LC^1$.


!!Classical results
*Th (Moore)
$S^1$ is characterized as the only continuum $X$ with the following property no point separates whereas any two points do.
*Th ([[Kline|http://en.wikipedia.org/wiki/Kline_sphere_characterization]])
$S^2$ is characterized as the only $2$-dimensional continuum $X$ satisfying that any $S^0\subset X$ does not separate but any $S^1\subset X$ does.

This was proven by Bing.
[[Recognition Theorem|recognitionth/23 September 2010]] by Edwards and Quinn.
Let $(X,A)$ be a topological pair $(n-1)$-connected with $X$ and $A$ connected spaces. Then $H_n(X,A)=0$ for $k<n$ and $H_n(X,A)$ is obtained from $\pi_n(X,A)$ by factoring out the action of $\pi_1(A)$.

!!!Definition 
A subset $K\subset \mathbb R^n$ is rigid (or rigidly embedded) if for any $h:K\to K$ homeomorphism  such that it extends to $H:(\mathbb R^n,K)\to (\mathbb R^n,K)$ then necessarily $h\equiv id_K$.
**Note: There is no $n$-dimensional subset of $\mathbb R^n$ which is rigid: if $dim K=n=dim \mathbb R^n$ then by Alexander's th ther is a ball $B^n\subset K$!!
!!The case $n=3$
!!For $k=0$
Arnold [[Shilepsky|http://0-www.ams.org.fama.us.es/mathscinet-getitem?mr=345110]] based on R. [[Sher|http://0-www.ams.org.fama.us.es/mathscinet-getitem?mr=234438]] defined nested families of solid unknotted tori
$$
\mathcal M_0=\{T_0\}, \mathcal M_1,\dots
$$
where $\mathcal M_j=\{T_j^i\}_{j=0}^{n_i}$ satisfies:
***$T_j^i\subset int\ T_l^{i-1}$
*** torii $T_j^i$ and $T_s^k$ are linked iff $|j-s|=1$
*** the winding number of each chain in the $n$ level is always $1$.
*Th (Sher) based on Hedenson's [[Strong Dehn Lemma]]
If $X,Y$ are Antoine Cantor Sets, then $X\sim Y$, meaning there is a homoemorphism $(\mathbb R^3, X)\to (\mathbb R^3,Y)$, iff there is $h:\mathbb R^3\to\mathbb R^3$ homeomorphism so that for each $i$ $h$ maps torii in $\mathcal M_i(X)$ to the corresponding torii in $\mathcal M_i(Y)$.

Sher's construction consists on using a different number of torii on every stage and never use the same one again.
*Th (D. Wright's [["Rigid sets in $E^n$"|http://0-projecteuclid.org.fama.us.es/DPubS?service=UI&version=1.0&verb=Display&handle=euclid.pjm/1102702810]])
Let $W\subset S^{n-1}\subset\mathbb R^n$, $n\geq 4$, without any isolated points. Then there are uncountably many inequivalent embeddings $\varphi_\lambda:W\to \mathbb R^n$ where $\varphi_\lambda(X)$ is rigid.

Using ideas from Shilepsky or Blankenship's construction of wild Cantor sets in $\mathbb R^n$ for $n\geq 4$, one may get uncountably many inequivalent Cantor sets in $\mathbb R^n$ for $n\geq 4$ one may get uncountably many inequivalent Cantor sets in $\mathbb R^n$, $n\geq 4$.
!!!!Remark
 All rigid Cantor sets by Shilepsky and Wrigth in $\mathbb R^3$ had non-simply connected complements. So it was an open question if one can get a rigid Cantor set with $1$-connected complement. In 2010 Garity-Wright showed there are uncountably many of such examples. The following are related questions:
*Let $G$ be a group and $X\subset S^3$ a Cantor set so that $G\cong\pi_1(S^3-X)$. What can be said a bout $G$?
*For every Cantor set group (a group as described above), are there uncountably many inequivalent Cantor sets with this group?
!!For $k=1$
*[[H.G. Böthe (1966)|http://0-www.ams.org.fama.us.es/mathscinet-getitem?mr=236898]] constructed a simple closed curve $K$ in $\mathbb R^3$ which is rigid. In an earlier paper Antonie constructed a wild scc $K$ so that any self-homeomorphism of $K$ extends to $S^3$.
!!For $k=2$
*[[J. Martin|file:///home/ramkikura/Desktop/tiddly/work/repovs/pontrjagynsphere/FundMath66.pdf]] constructed a rigid $2$-sphere by using inequivalent wild arcs $A_i$ (as those by [[Alford and Ball|http://0-www.ams.org.fama.us.es/mathscinet-getitem?mr=144312]]) enclosed in pillboxes located over a countable collection of open sets of $S^2$.
!!Cannon's question
Does there exist a wild homogeneous $2$-sphere?
*Launch application
<<LaunchApplicationButton "Acroread" "Acroread" "file:///usr/bin/acroread">>
<<LaunchApplicationLink "C Drive" "Folder" "file:///home/olmy/">>
<<LaunchApplicationLink "LocalProgram" "Program relative to Tiddly html file" "localDir/bin/emacs">>

*[[un pdf|file:///home/olmy/Desktop/beamer_guide.pdf]]
*[[otro pdf|./../beamer_guide.pdf]]
*[[otro mas|./data/beamerplhomotopy.pdf]]
<html><div align="center"> <object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/L_aDpmfAzxI"></param><param name="wmode" value="transparent"></param><embed src="./data/animations/ensemble_homotopic.swf" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object></div></html>
*Does ~jsMathwork?
$$
\pi_3(S^2)\cong\mathbb Z
$$
*Does xy-matrix work?
$$
\xymatrix{
X\ar[r]&Y
}
$$
/***
This CSS by DaveBirss.
***/
/*{{{*/


.tabSelected {
 background: #fff;
}

.tabUnselected {
 background: #eee;
}

#sidebar {
 color: #000;
 background: transparent; 
}

#sidebarOptions {
 background: #fff;
}

#sidebarOptions input {
	border: 1px solid #ccc;
}

#sidebarOptions input:hover, #sidebarOptions input:active,  #sidebarOptions input:focus {
	border: 1px solid #000;
}

#sidebarOptions .button {
 color: #999;
}

#sidebarOptions .button:hover {
 color: #000;
 background: #fff;
 border-color:white;
}

#sidebarOptions .button:active {
 color: #000;
 background: #fff;
}

#sidebarOptions .sliderPanel {
 background: transparent;
}

#sidebarOptions .sliderPanel A {
 color: #999;
}

#sidebarOptions .sliderPanel A:hover {
 color: #000;
 background: #fff;
}

#sidebarOptions .sliderPanel A:active {
 color: #000;
 background: #fff;
}

.sidebarSubHeading {
 color: #000;
}

#sidebarTabs {`
 background: #fff
}

#sidebarTabs .tabSelected {
 color: #000;
 background: #fff;
 border-top: solid 1px #ccc;
 border-left: solid 1px #ccc;
 border-right: solid 1px #ccc;
 border-bottom: none;
}

#sidebarTabs .tabUnselected {
 color: #999;
 background: #eee;
 border-top: solid 1px #ccc;
 border-left: solid 1px #ccc;
 border-right: solid 1px #ccc;
 border-bottom: none;
}

#sidebarTabs .tabContents {
 background: #fff;
}


#sidebarTabs .txtMoreTab .tabSelected {
 background: #fff;
}

#sidebarTabs .txtMoreTab .tabUnselected {
 background: #eee;
}

#sidebarTabs .txtMoreTab .tabContents {
 background: #fff;
}

#sidebarTabs .tabContents .tiddlyLink {
 color: #999;
 border:none;
}

#sidebarTabs .tabContents .tiddlyLink:hover {
 background: #fff;
 color: #000;
 border:none;
}

#sidebarTabs .tabContents {
 color: #000;
}

#sidebarTabs .button {
 color: #666;
}

#sidebarTabs .tabContents .button:hover {
 color: #000;
 background: #fff;
}

#sidebar {color:#999;}
/*}}}*/
Based on Dr. [[Dušan Repovš|http://en.wikipedia.org/wiki/Du%C5%A1an_Repov%C5%A1]] and Dr. [[Dennise Halverson's|https://math.byu.edu/~deniseh/]] courses "Surgery on manifolds" and "~Bing-Borsuk and Busemann conjectures".
My SeminarsWiki
*[[Format text]]
*[[Format links and images]]
*[[Format lists]]
*[[Format tables]]
*[[Format blockquotes]]
*[[Miscellaneous formats]]
*[[Format ASCII symbols, foreign symbols, math symbols]]
This is PL. For every $f:D^2\to M^3$ Dehn disk embedding and any $U$, neighborhood of the singular set of $f$, there exists an embedding $g:D^2\to f(D^2)\cup U$ so that $g|S^1\equiv f|S^1$.
Given a finite ~CW-complex $X$, consider the set of h.e. $f:M\to X$ from a $n$-manifold to $X$. We will say $(M,f)\sim (N,g)$ if there is an h-cobordism $W$ and $F:W\to X$ so that $\partial W=M\sqcup N$, $F|M\simeq f$ and $F|N\simeq g$.

[[SideBarWG]]

#topMen br {display:none;}
/***
!Top Menu Styles
***/
/*{{{*/
#topMenu br {display:none; }
#topMenu { background: #000 ; color:#fff;padding: 1em 1em;}
/*}}}*/

/***
!General
***/
/*{{{*/
body {
 background: #444;
 margin: 0 auto;
}

 #contentWrapper{
 background: #fff;
 border: 0;
 margin: 0 1em;

 padding:0;
}
/*}}}*/

/***
!Header rules
***/
/*{{{*/
.titleLine{
 margin: 68px 3em 0em 0em;
margin-left:1.7em;
margin-bottom: 28px;
 padding: 0;
 text-align: left;
 color: #fff;
}

.siteTitle {
	font-size: 2em;
        font-weight: bold;
}

.siteSubtitle {
	font-size: 1.1em;
        display: block;
        margin: .5em auto 1em;
}

.gradient {margin: 0 auto;}



.header {
 background: #fff; 
 margin: 0 0em;
 padding:0 12px;

}
/*}}}*/

/***
!Display Area
***/
/*{{{*/
#bodywrapper {margin:0 12px; padding:0;background:#fff; height:1%}

#displayArea{
 margin: 0em 16em 0em 1em;
 text-align: left;
}

.tiddler {
	padding: 1em 1em 0em 0em;
}

h1,h2,h3,h4,h5 { color: #000; background: transparent; padding-bottom:2px; border-bottom: 1px dotted #666; }
.title {color:black; font-size:1.8em; border-bottom:1px solid #333; padding-bottom:0.3px;}
.subtitle { font-size:90%; color:#ccc; padding-left:0.25em; margin-top:0.1em; }

.shadow .title {
	color: #aaa;
}

.tagClear{
	clear: none; 
}

* html .viewer pre {
	margin-left: 0em;
}

* html .editor textarea, * html .editor input {
	width: 98%;
}

.tiddler {margin-bottom:1em; padding-bottom:0em;}


.toolbar .button {color:#bbb; border:none;}
.toolbar .button:hover, .toolbar .highlight, .toolbar .marked, .toolbar a.button:active {background:transparent; color:#111; border:none; text-decoration:underline;}

#sidebar .highlight, #sidebar .marked {background:transparent;}

.tagging, .tagged {
	border: 1px solid #eee;
	background-color: #F7F7F7;
}

.selected .tagging, .selected .tagged {
	background-color: #eee;
	border: 1px solid #bbb;
}

 .tagging .listTitle, .tagged .listTitle {
	color: #bbb;
}

.selected .tagging .listTitle, .selected .tagged .listTitle {
	color: #222; 
}


.tagging .button:hover, .tagged .button:hover {
		border: none; background:transparent; text-decoration:underline; color:#000;
}

.tagging .button, .tagged .button {
		color:#aaa;
}

.selected .tagging .button, .selected .tagged .button {
		color:#000;
}

.viewer blockquote {
	border-left: 3px solid #000;
}

.viewer pre, .viewer code {
	border: 1px dashed #ccc;
	background: #eee;}

.viewer hr {
	border: 0;
	border-top: solid 1px #333;
 margin: 0 8em;
	color: #333;
}

.highlight, .marked {background:transparent; color:#111; border:none; text-decoration:underline;}

.viewer .highlight, .viewer .marked {text-decoration:none;}

#sidebarTabs .highlight, #sidebarTabs .marked {color:#000; text-decoration:none;}

.tabSelected {
 color: #000;
 background: #fff;
 border-top: solid 1px #ccc;
 border-left: solid 1px #ccc;
 border-right: solid 1px #ccc;
 border-bottom: none;
}

.viewer .tabSelected:hover{color:#000;}

.viewer .tabSelected {font-weight:bold;}

.tabUnselected {
 color: #999;
 background: #eee;
 border-top: solid 1px #ccc;
 border-left: solid 1px #ccc;
 border-right: solid 1px #ccc;
 border-bottom: solid 1px #ccc;
 padding-bottom:1px;
}

.tabContents {
 background: #fff;
  color: #000;
}
/*}}}*/
/***
!!!Tables
***/
/*{{{*/
.viewer table {
	border: 1px solid #000;
}

.viewer th, thead td {
	background: #000;
	border: 1px solid #000;
	color: #fff;
}

.viewer td, .viewer tr {
	border: 1px solid #111; padding:4px;
}
/*}}}*/


/***
!!!Editor area
***/
/*{{{*/
.editor input, .editor textarea {
	border: 1px solid #ccc;
}

.editor {padding-top:0.3em;}

.editor textarea:focus, .editor input:focus {
	border: 1px solid #333;
}
/*}}}*/

/***
!Sidebar
***/
/*{{{*/
#sidebar{
position:relative;
float:right;
margin-bottom:1em;
display:inline;
width: 16em;
}

#sidebarOptions .sliderPanel {
	background: #eee; border:1px solid #ccc;
}

/*}}}*/

/***
!Body Footer rules
***/
/*{{{*/
#contentFooter {
 text-align: center;
 clear: both;
 color:#fff;
 background: #000;
 padding: 1em 2em;
font-weight:bold;
}

/*}}}*/
/***
!Link Styles
***/
/*{{{*/
a{
	color: #930;
}

a:hover{
        color: #FF6600;
        background:#fff;
}


.button {
	color: #000;
	border: 1px solid #fff;
}

.button:hover {
	color: #fff;
	background: #ff8614;
	border-color: #000;
}

.button:active {
	color: #fff;
	background: #ff8614;
	border: 1px solid #000;
}

.tiddlyLink {border-bottom: 1px dotted #000;}
.tiddlyLink:hover {border-bottom: 1px dotted #FF6600;} 

.titleLine a {border-bottom: 1px dotted #FF9900;}

.titleLine a:hover {border-bottom: 1px dotted #fff;}

.siteTitle a, .siteSubtitle a{
 color: #fff;
}

.viewer .button {border: 1px solid #ff8614; font-weight:bold;}
.viewer .button:hover, .viewer .marked, .viewer .highlight{background:#ff8614; color:#fff; font-weight:bold; border: 1px solid #000;}

#topMenu .button, #topMenu .tiddlyLink {
 margin-left:0.5em; margin-right:0.5em;
 padding-left:3px; padding-right:3px;
 color:white; font-weight:bold;
}
#topMenu .button:hover, #topMenu .tiddlyLink:hover { background:#000; color:#FF8814}

#topMenu a{border:none;}
/*}}}*/

/***
!Message Area /%=================================================%/
***/
/*{{{*/
#messageArea {
	border: 4px dotted #ff8614;
	background: #000;
	color: #fff;
        font-size:90%;
}

#messageArea .button {
	padding: 0.2em;
	color: #000;
	background: #fff;
        text-decoration:none;
        font-weight:bold;
        border:1px solid #000; 
}

#messageArea a {color:#fff;}

#messageArea a:hover {color:#ff8614; background:transparent;}

#messageArea .button:hover {background: #FF8614; color:#fff; border:1px solid #fff; }

/*}}}*/

/***
!Popup /%=================================================%/
***/
/*{{{*/
.popup {
	background: #ff8814;
	border: 1px solid #333;
}

.popup hr {
	color: #333;
	background: #333;
	border-bottom: 1px;
}

.popup li.disabled {
	color: #333;
}

.popup li a, .popup li a:visited {
	color: #eee;
	border: none;
}

.popup li a:hover {
	background: #ff8614;
	color: #fff;
	border: none;
        text-decoration:underline;
}

.searchBar {float:right; font-size:1em;}
.searchBar .button {display:block; border:none; color:#ccc; }
.searchBar .button:hover{border:none; color:#eee;}

.searchBar input{
 border: 1px inset #000; background:#EFDFD1; width:10em; margin:0;
}

.searchBar input:focus {
 border: 1px inset #000; background:#fff;
}

*html .titleLine {margin-right:1.3em;}

*html .searchBar .button {margin-left:1.7em;}

 .HideSideBarButton {float:right;} 
/*}}}*/

.blog h2, .blog h3, .blog h4{
  margin:0;
  padding:0;
border-bottom:none;
}
.blog {margin-left:1.5em;}  


.blog .excerpt {
  margin:0;
margin-top:0.3em;
  padding: 0;
  margin-left:1em;
  padding-left:1em;
  font-size:90%;
  border-left:1px solid #ddd;
}

#tiddlerWhatsNew h1, #tiddlerWhatsNew h2 {border-bottom:none;}
div[tags~="RecentUpdates"], div[tags~="lewcidExtension"] {margin-bottom: 2em;}

#hoverMenu  .button, #hoverMenu  .tiddlyLink {border:none; font-weight:bold; background:#f37211; color:#fff; padding:0 5px; float:right; margin-bottom:4px;}
#hoverMenu .button:hover, #hoverMenu .tiddlyLink:hover {font-weight:bold; border:none; color:#f37211; background:#000; padding:0 5px; float:right; margin-bottom:4px;}

#topMenu .fontResizer {float:right;}

#topMenu .fontResizer .button{border:1px solid #000;}
#topMenu .fontResizer .button:hover {border:1px solid #f37211; color:#fff;}
#sidebarTabs .txtMainTab .tiddlyLinkExisting {
 font-weight: normal;
 font-style: normal;
}

#sidebarTabs .txtMoreTab .tiddlyLinkExisting {
 font-weight: bold;
 font-style: normal;
}

.block a{display:block;}
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;}
#displayArea {margin: 1em 1em 0em;}
noscript {display:none;} /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
}
/*}}}*/
[img(50%+,auto+)[http://farm5.static.flickr.com/4018/4493804297_4ac2d99616.jpg]]
[[History]]
[[28 September 2009]]
[[29 September 2009]]
[[30 September 2009]]
[[1 October 2009]]
[[5 October 2009]]
[[6 October 2009]]
[[7 October 2009]]
[[8 October 2009]]
''Note:'' The page is @@color(red):~UTF-8@@ encoded and best viewed by [[downloading|http://www.math.union.edu/~dpvc/jsMath/download/jsMath-fonts.html]] the jsMath fonts. Any inquiries to mcard@us.es . Thanks to [[tiddlyspot|http://tiddlyspot.com/]] for hosting this page.
/***
|''Name:''|TiddlersBarPlugin|
|''Description:''|A bar to switch between tiddlers through tabs (like browser tabs bar).|
|''Version:''|1.2.5|
|''Date:''|Jan 18,2008|
|''Source:''|http://visualtw.ouvaton.org/VisualTW.html|
|''Author:''|Pascal Collin|
|''License:''|[[BSD open source license|License]]|
|''~CoreVersion:''|2.1.0|
|''Browser:''|Firefox 2.0; InternetExplorer 6.0, others|
!Demos
On [[homepage|http://visualtw.ouvaton.org/VisualTW.html]], open several tiddlers to use the tabs bar.
!Installation
#import this tiddler from [[homepage|http://visualtw.ouvaton.org/VisualTW.html]] (tagged as systemConfig)
#save and reload
#''if you're using a custom [[PageTemplate]]'', add {{{<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>}}} before {{{<div id='tiddlerDisplay'></div>}}}
#optionally, adjust StyleSheetTiddlersBar
!Tips
*Doubleclick on the tiddlers bar (where there is no tab) create a new tiddler.
*Tabs include a button to close {{{x}}} or save {{{!}}} their tiddler.
*By default, click on the current tab close all others tiddlers.
!Configuration options 
<<option chkDisableTabsBar>> Disable the tabs bar (to print, by example).
<<option chkHideTabsBarWhenSingleTab >> Automatically hide the tabs bar when only one tiddler is displayed. 
<<option txtSelectedTiddlerTabButton>> ''selected'' tab command button.
<<option txtPreviousTabKey>> previous tab access key.
<<option txtNextTabKey>> next tab access key.
!Code
***/
//{{{
config.options.chkDisableTabsBar = config.options.chkDisableTabsBar ? config.options.chkDisableTabsBar : false;
config.options.chkHideTabsBarWhenSingleTab  = config.options.chkHideTabsBarWhenSingleTab  ? config.options.chkHideTabsBarWhenSingleTab  : true;
config.options.txtSelectedTiddlerTabButton = config.options.txtSelectedTiddlerTabButton ? config.options.txtSelectedTiddlerTabButton : "closeOthers";
config.options.txtPreviousTabKey = config.options.txtPreviousTabKey ? config.options.txtPreviousTabKey : "";
config.options.txtNextTabKey = config.options.txtNextTabKey ? config.options.txtNextTabKey : "";
config.macros.tiddlersBar = {
	tooltip : "see ",
	tooltipClose : "click here to close this tab",
	tooltipSave : "click here to save this tab",
	promptRename : "Enter tiddler new name",
	currentTiddler : "",
	previousState : false,
	previousKey : config.options.txtPreviousTabKey,
	nextKey : config.options.txtNextTabKey,	
	tabsAnimationSource : null, //use document.getElementById("tiddlerDisplay") if you need animation on tab switching.
	handler: function(place,macroName,params) {
		var previous = null;
		if (config.macros.tiddlersBar.isShown())
			story.forEachTiddler(function(title,e){
				if (title==config.macros.tiddlersBar.currentTiddler){
					var d = createTiddlyElement(null,"span",null,"tab tabSelected");
					config.macros.tiddlersBar.createActiveTabButton(d,title);
					if (previous && config.macros.tiddlersBar.previousKey) previous.setAttribute("accessKey",config.macros.tiddlersBar.nextKey);
					previous = "active";
				}
				else {
					var d = createTiddlyElement(place,"span",null,"tab tabUnselected");
					var btn = createTiddlyButton(d,title,config.macros.tiddlersBar.tooltip + title,config.macros.tiddlersBar.onSelectTab);
					btn.setAttribute("tiddler", title);
					if (previous=="active" && config.macros.tiddlersBar.nextKey) btn.setAttribute("accessKey",config.macros.tiddlersBar.previousKey);
					previous=btn;
				}
				var isDirty =story.isDirty(title);
				var c = createTiddlyButton(d,isDirty ?"!":"x",isDirty?config.macros.tiddlersBar.tooltipSave:config.macros.tiddlersBar.tooltipClose, isDirty ? config.macros.tiddlersBar.onTabSave : config.macros.tiddlersBar.onTabClose,"tabButton");
				c.setAttribute("tiddler", title);
				if (place.childNodes) {
					place.insertBefore(document.createTextNode(" "),place.firstChild); // to allow break line here when many tiddlers are open
					place.insertBefore(d,place.firstChild); 
				}
				else place.appendChild(d);
			})
	}, 
	refresh: function(place,params){
		removeChildren(place);
		config.macros.tiddlersBar.handler(place,"tiddlersBar",params);
		if (config.macros.tiddlersBar.previousState!=config.macros.tiddlersBar.isShown()) {
			story.refreshAllTiddlers();
			if (config.macros.tiddlersBar.previousState) story.forEachTiddler(function(t,e){e.style.display="";});
			config.macros.tiddlersBar.previousState = !config.macros.tiddlersBar.previousState;
		}
	},
	isShown : function(){
		if (config.options.chkDisableTabsBar) return false;
		if (!config.options.chkHideTabsBarWhenSingleTab) return true;
		var cpt=0;
		story.forEachTiddler(function(){cpt++});
		return (cpt>1);
	},
	selectNextTab : function(){  //used when the current tab is closed (to select another tab)
		var previous="";
		story.forEachTiddler(function(title){
			if (!config.macros.tiddlersBar.currentTiddler) {
				story.displayTiddler(null,title);
				return;
			}
			if (title==config.macros.tiddlersBar.currentTiddler) {
				if (previous) {
					story.displayTiddler(null,previous);
					return;
				}
				else config.macros.tiddlersBar.currentTiddler=""; 	// so next tab will be selected
			}
			else previous=title;
			});		
	},
	onSelectTab : function(e){
		var t = this.getAttribute("tiddler");
		if (t) story.displayTiddler(null,t);
		return false;
	},
	onTabClose : function(e){
		var t = this.getAttribute("tiddler");
		if (t) {
			if(story.hasChanges(t) && !readOnly) {
				if(!confirm(config.commands.cancelTiddler.warning.format([t])))
				return false;
			}
			story.closeTiddler(t);
		}
		return false;
	},
	onTabSave : function(e) {
		var t = this.getAttribute("tiddler");
		if (!e) e=window.event;
		if (t) config.commands.saveTiddler.handler(e,null,t);
		return false;
	},
	onSelectedTabButtonClick : function(event,src,title) {
		var t = this.getAttribute("tiddler");
		if (!event) event=window.event;
		if (t && config.options.txtSelectedTiddlerTabButton && config.commands[config.options.txtSelectedTiddlerTabButton])
			config.commands[config.options.txtSelectedTiddlerTabButton].handler(event, src, t);
		return false;
	},
	onTiddlersBarAction: function(event) {
		var source = event.target ? event.target.id : event.srcElement.id; // FF uses target and IE uses srcElement;
		if (source=="tiddlersBar") story.displayTiddler(null,'New Tiddler',DEFAULT_EDIT_TEMPLATE,false,null,null);
	},
	createActiveTabButton : function(place,title) {
		if (config.options.txtSelectedTiddlerTabButton && config.commands[config.options.txtSelectedTiddlerTabButton]) {
			var btn = createTiddlyButton(place, title, config.commands[config.options.txtSelectedTiddlerTabButton].tooltip ,config.macros.tiddlersBar.onSelectedTabButtonClick);
			btn.setAttribute("tiddler", title);
		}
		else
			createTiddlyText(place,title);
	}
}

story.coreCloseTiddler = story.coreCloseTiddler? story.coreCloseTiddler : story.closeTiddler;
story.coreDisplayTiddler = story.coreDisplayTiddler ? story.coreDisplayTiddler : story.displayTiddler;

story.closeTiddler = function(title,animate,unused) {
	if (title==config.macros.tiddlersBar.currentTiddler)
		config.macros.tiddlersBar.selectNextTab();
	story.coreCloseTiddler(title,false,unused); //disable animation to get it closed before calling tiddlersBar.refresh
	var e=document.getElementById("tiddlersBar");
	if (e) config.macros.tiddlersBar.refresh(e,null);
}

story.displayTiddler = function(srcElement,tiddler,template,animate,unused,customFields,toggle){
	story.coreDisplayTiddler(config.macros.tiddlersBar.tabsAnimationSource,tiddler,template,animate,unused,customFields,toggle);
	var title = (tiddler instanceof Tiddler)? tiddler.title : tiddler;  
	if (config.macros.tiddlersBar.isShown()) {
		story.forEachTiddler(function(t,e){
			if (t!=title) e.style.display="none";
			else e.style.display="";
		})
		config.macros.tiddlersBar.currentTiddler=title;
	}
	var e=document.getElementById("tiddlersBar");
	if (e) config.macros.tiddlersBar.refresh(e,null);
}

var coreRefreshPageTemplate = coreRefreshPageTemplate ? coreRefreshPageTemplate : refreshPageTemplate;
refreshPageTemplate = function(title) {
	coreRefreshPageTemplate(title);
	if (config.macros.tiddlersBar) config.macros.tiddlersBar.refresh(document.getElementById("tiddlersBar"));
}

ensureVisible=function (e) {return 0} //disable bottom scrolling (not useful now)

config.shadowTiddlers.StyleSheetTiddlersBar = "/*{{{*/\n";
config.shadowTiddlers.StyleSheetTiddlersBar += "#tiddlersBar .button {border:0}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += "#tiddlersBar .tab {white-space:nowrap}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += "#tiddlersBar {padding : 1em 0.5em 2px 0.5em}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += ".tabUnselected .tabButton, .tabSelected .tabButton {padding : 0 2px 0 2px; margin: 0 0 0 4px;}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += ".tiddler, .tabContents {border:1px [[ColorPalette::TertiaryPale]] solid;}\n";
config.shadowTiddlers.StyleSheetTiddlersBar +="/*}}}*/";
store.addNotification("StyleSheetTiddlersBar", refreshStyles);

config.refreshers.none = function(){return true;}
config.shadowTiddlers.PageTemplate=config.shadowTiddlers.PageTemplate.replace(/<div id='tiddlerDisplay'><\/div>/m,"<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>\n<div id='tiddlerDisplay'></div>");

//}}}
!Inline Formatting
|!Option|!Syntax|!Output|
|bold font|{{{''bold''}}}|''bold''|
|italic type|{{{//italic//}}}|//italic//|
|underlined text|{{{__underlined__}}}|__underlined__|
|strikethrough text|{{{--strikethrough--}}}|--strikethrough--|
|superscript text|{{{^^super^^script}}}|^^super^^script|
|subscript text|{{{~~sub~~script}}}|~~sub~~script|
|highlighted text|{{{@@highlighted@@}}}|@@highlighted@@|
|preformatted text|<html><code>{{{preformatted}}}</code></html>|{{{preformatted}}}|
!Block Elements
!!Headings
{{{
!Heading 1
!!Heading 2
!!!Heading 3
!!!!Heading 4
!!!!!Heading 5
}}}
<<<
!Heading 1
!!Heading 2
!!!Heading 3
!!!!Heading 4
!!!!!Heading 5
<<<
!!Lists
{{{
* unordered list, level 1
** unordered list, level 2
*** unordered list, level 3

# ordered list, level 1
## ordered list, level 2
### unordered list, level 3

; definition list, term
: definition list, description
}}}
<<<
* unordered list, level 1
** unordered list, level 2
*** unordered list, level 3

# ordered list, level 1
## ordered list, level 2
### unordered list, level 3

; definition list, term
: definition list, description
<<<
!!Blockquotes
{{{
> blockquote, level 1
>> blockquote, level 2
>>> blockquote, level 3

<<<
blockquote
<<<
}}}
<<<
> blockquote, level 1
>> blockquote, level 2
>>> blockquote, level 3

> blockquote
<<<
!!Preformatted Text
<html><pre>
{{{
preformatted (e.g. code)
}}}
</pre></html>
<<<
{{{
preformatted (e.g. code)
}}}
<<<
!!Tables
{{{
|CssClass|k
|!heading column 1|!heading column 2|
|row 1, column 1|row 1, column 2|
|row 2, column 1|row 2, column 2|
|>|COLSPAN|
|ROWSPAN| … |
|~| … |
|CssProperty:value;…| … |
|caption|c
}}}
''Annotation:''
* The {{{>}}} marker creates a "colspan", causing the current cell to merge with the one to the right.
* The {{{~}}} marker creates a "rowspan", causing the current cell to merge with the one above.
<<<
|CssClass|k
|!heading column 1|!heading column 2|
|row 1, column 1|row 1, column 2|
|row 2, column 1|row 2, column 2|
|>|COLSPAN|
|ROWSPAN| … |
|~| … |
|CssProperty:value;…| … |
|caption|c
<<<
!!Images /% TODO %/
cf. [[TiddlyWiki.com|http://www.tiddlywiki.com/#EmbeddedImages]]
!Hyperlinks
* [[WikiWords|WikiWord]] are automatically transformed to hyperlinks to the respective tiddler
** the automatic transformation can be suppressed by preceding the respective WikiWord with a tilde ({{{~}}}): {{{~WikiWord}}}
* [[PrettyLinks]] are enclosed in square brackets and contain the desired tiddler name: {{{[[tiddler name]]}}}
** optionally, a custom title or description can be added, separated by a pipe character ({{{|}}}): {{{[[title|target]]}}}<br>'''N.B.:''' In this case, the target can also be any website (i.e. URL).
!Custom Styling
* {{{@@CssProperty:value;CssProperty:value;…@@}}}<br>''N.B.:'' CSS color definitions should use lowercase letters to prevent the inadvertent creation of WikiWords.
* <html><code>{{customCssClass{…}}}</code></html>
* raw HTML can be inserted by enclosing the respective code in HTML tags: {{{<html> … </html>}}}
!Special Markers
* {{{<br>}}} forces a manual line break
* {{{----}}} creates a horizontal ruler
* [[HTML entities|http://www.tiddlywiki.com/#HtmlEntities]]
* {{{<<macroName>>}}} calls the respective [[macro|Macros]]
* To hide text within a tiddler so that it is not displayed, it can be wrapped in {{{/%}}} and {{{%/}}}.<br/>This can be a useful trick for hiding drafts or annotating complex markup.
* To prevent wiki markup from taking effect for a particular section, that section can be enclosed in three double quotes: e.g. {{{"""WikiWord"""}}}.
<script>jQuery('div.tagged', story.findContainingTiddler(place) ).css("display", "none");
   if (!config.options.foo) {
	config.options.foo=true;
	config.options.chktodotiddlerform = false;
	}
</script>Gestione siti da visitare:  I comandi inseriscono il testo in coda. Viene inserito anche il codice per eliminare il testo. 
<<slider chktodotiddlerform {{tiddler.title+"##edit"}} "aggiungi »">>
/%
|Name|ToDoTiddler|
|Source|http://tiziano.tiddlyspot.com/#ToDoTiddler|
|Version|0.0.1|
|Author|Tiziano|
|License|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.5|
|Type|HTML+script|
|Requires|InlineJavaScriptPlugin|
|Overrides||
|Description|Simple quick ToDo List with optional web URL reference|
%/
/%
hidden sections 

--------------------
Template for todo item. 
$0 = URL
$1 = description
$2 = identifier
--------------------
!template
<html><hr/>
<input type="checkbox" title="rimuovi" id=$2 onclick="window.removeMe(this)"/> $1 <a href='$0' target="_blank"> $0 </a> 
</html>
!endtemplate

--------------------
Input form slider 
--------------------
!edit
{{annotation{
<html>
<form id="todotiddlerform" action="javascript:;" style="display:inline">
url: <br/>
<input type="text" style='font-size:0.7em; border: 1px solid; margin: 2px; width: 80%; padding: 3px;' name="url" title="url"><br/>

commento: <br/>
<textarea name="descrizione" title="descrizione" rows=3 style="width:80%;"></textarea><br/>

<input type="button" value="Aggiungi" onclick="form.onrecordChanges()">
</form>
</html>}}}
!endedit


%/<script>
var form=jQuery('form#todotiddlerform').get(0);

form.onrecordChanges = function() {
	var x0= store.getTiddlerText(tiddler.title+'##template');
	x0=x0.replace(/\$\x30/g,form.url.value);
	x0=x0.replace(/\$\x31/g,form.descrizione.value);
	x0=x0.replace(/\$\x32/g,
		new Date().convertToYYYYMMDDHHMMSSMMM());
	tiddler.text+=x0;
	story.saveTiddler(tiddler);
	config.options.foo=false;
	story.refreshTiddler(tiddler.title,null,true);
	return false;
}

window.removeMe = function (place) {
	var xid= place.id; var sp='<html><hr\/>';
	var parts=tiddler.text.split(sp);
	var txt=parts[0]; 
	for (var i=1; i<parts.length; i++) {
		if (parts[i].indexOf(xid) == -1) txt+=sp+parts[i];
	};
	tiddler.text=txt;
	story.saveTiddler(tiddler);
	story.refreshTiddler(tiddler.title,null,true);
	return false;
}
</script>/% begin of data %/<html><hr/>
<input type="checkbox" title="rimuovi" id=20100918.0949300928 onclick="window.removeMe(this)"/> Interesting, to read every morning... <a href='http://groups.google.com/group/TiddlyWiki' target="_blank"> http://groups.google.com/group/TiddlyWiki </a> 
</html><html><hr/>
<input type="checkbox" title="rimuovi" id=20100918.0950240289 onclick="window.removeMe(this)"/> this is only a note, no URL <a href='' target="_blank">  </a> 
</html><html><hr/>
<input type="checkbox" title="rimuovi" id=20100918.0951110945 onclick="window.removeMe(this)"/> check if this site exist <a href='www.nowere.xx' target="_blank"> www.nowere.xx </a> 
</html><html><hr/>
<input type="checkbox" title="rimuovi" id=20100918.0953110430 onclick="window.removeMe(this)"/> guide for italian people <a href='http://pollio.maurizio.googlepages.com/MiniGuidaTiddlyWiki.html' target="_blank"> http://pollio.maurizio.googlepages.com/MiniGuidaTiddlyWiki.html </a> 
</html><html><hr/>
<input type="checkbox" title="rimuovi" id=20100924.0802217550 onclick="window.removeMe(this)"/> Gotten from here. <a href='http://tiziano.tiddlyspot.com/#ToDoTiddler' target="_blank"> http://tiziano.tiddlyspot.com/#ToDoTiddler </a> 
</html>
/***

|Name|ToggleSideBarMacro|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#ToggleSideBarMacro|
|Version|1.0|
|Requires|~TW2.x|
!Description:
Provides a button for toggling visibility of the SideBar. You can choose whether the SideBar should initially be hidden or displayed.

!Demo
<<toggleSideBar "Toggle Sidebar">>

!Usage:
{{{<<toggleSideBar>>}}} <<toggleSideBar>>
additional options:
{{{<<toggleSideBar label tooltip show/hide>>}}} where:
label = custom label for the button,
tooltip = custom tooltip for the button,
show/hide = use one or the other, determines whether the sidebar is shown at first or not.
(default is to show the sidebar)

You can add it to your tiddler toolbar, your MainMenu, or where you like really.
If you are using a horizontal MainMenu and want the button to be right aligned, put the following in your StyleSheet:
{{{ .HideSideBarButton {float:right;} }}}

!History
*23-07-06: version 1.0: completely rewritten, now works with custom stylesheets too, and easier to customize start behaviour. 
*20-07-06: version 0.11
*27-04-06: version 0.1: working.

!Code
***/
//{{{
config.macros.toggleSideBar={};

config.macros.toggleSideBar.settings={
         styleHide :  "#sidebar { display: none;}\n"+"#contentWrapper #displayArea { margin-right: 1em;}\n"+"",
         styleShow : " ",
         arrow1: "«",
         arrow2: "»"
};

config.macros.toggleSideBar.handler=function (place,macroName,params,wikifier,paramString,tiddler)
{
          var tooltip= params[1]||'toggle sidebar';
          var mode = (params[2] && params[2]=="hide")? "hide":"show";
          var arrow = (mode == "hide")? this.settings.arrow1:this.settings.arrow2;
          var label= (params[0]&&params[0]!='.')?params[0]+" "+arrow:arrow;
          var theBtn = createTiddlyButton(place,label,tooltip,this.onToggleSideBar,"button HideSideBarButton");
          if (mode == "hide")
             { 
             (document.getElementById("sidebar")).setAttribute("toggle","hide");
              setStylesheet(this.settings.styleHide,"ToggleSideBarStyles");
             }
};

config.macros.toggleSideBar.onToggleSideBar = function(){
          var sidebar = document.getElementById("sidebar");
          var settings = config.macros.toggleSideBar.settings;
          if (sidebar.getAttribute("toggle")=='hide')
             {
              setStylesheet(settings.styleShow,"ToggleSideBarStyles");
              sidebar.setAttribute("toggle","show");
              this.firstChild.data= (this.firstChild.data).replace(settings.arrow1,settings.arrow2);
              }
          else
              {    
               setStylesheet(settings.styleHide,"ToggleSideBarStyles");
               sidebar.setAttribute("toggle","hide");
               this.firstChild.data= (this.firstChild.data).replace(settings.arrow2,settings.arrow1);
              }

     return false;
}

setStylesheet(".HideSideBarButton .button {font-weight:bold; padding: 0 5px;}\n","ToggleSideBarButtonStyles");

//}}}
/***
Description: Contains the stuff you need to use Tiddlyspot
Note, you also need UploadPlugin, PasswordOptionPlugin and LoadRemoteFileThroughProxy
from http://tiddlywiki.bidix.info for a complete working Tiddlyspot site.
***/
//{{{

// edit this if you are migrating sites or retrofitting an existing TW
config.tiddlyspotSiteId = 'mcard';

// make it so you can by default see edit controls via http
config.options.chkHttpReadOnly = false;
window.readOnly = false; // make sure of it (for tw 2.2)
window.showBackstage = true; // show backstage too

// disable autosave in d3
if (window.location.protocol != "file:")
	config.options.chkGTDLazyAutoSave = false;

// tweak shadow tiddlers to add upload button, password entry box etc
with (config.shadowTiddlers) {
	SiteUrl = 'http://'+config.tiddlyspotSiteId+'.tiddlyspot.com';
	SideBarOptions = SideBarOptions.replace(/(<<saveChanges>>)/,"$1<<tiddler TspotSidebar>>");
	OptionsPanel = OptionsPanel.replace(/^/,"<<tiddler TspotOptions>>");
	DefaultTiddlers = DefaultTiddlers.replace(/^/,"[[WelcomeToTiddlyspot]] ");
	MainMenu = MainMenu.replace(/^/,"[[WelcomeToTiddlyspot]] ");
}

// create some shadow tiddler content
merge(config.shadowTiddlers,{

'WelcomeToTiddlyspot':[
 "This document is a ~TiddlyWiki from tiddlyspot.com.  A ~TiddlyWiki is an electronic notebook that is great for managing todo lists, personal information, and all sorts of things.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //What now?// &nbsp;&nbsp;@@ Before you can save any changes, you need to enter your password in the form below.  Then configure privacy and other site settings at your [[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]] (your control panel username is //" + config.tiddlyspotSiteId + "//).",
 "<<tiddler TspotControls>>",
 "See also GettingStarted.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Working online// &nbsp;&nbsp;@@ You can edit this ~TiddlyWiki right now, and save your changes using the \"save to web\" button in the column on the right.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Working offline// &nbsp;&nbsp;@@ A fully functioning copy of this ~TiddlyWiki can be saved onto your hard drive or USB stick.  You can make changes and save them locally without being connected to the Internet.  When you're ready to sync up again, just click \"upload\" and your ~TiddlyWiki will be saved back to tiddlyspot.com.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Help!// &nbsp;&nbsp;@@ Find out more about ~TiddlyWiki at [[TiddlyWiki.com|http://tiddlywiki.com]].  Also visit [[TiddlyWiki.org|http://tiddlywiki.org]] for documentation on learning and using ~TiddlyWiki. New users are especially welcome on the [[TiddlyWiki mailing list|http://groups.google.com/group/TiddlyWiki]], which is an excellent place to ask questions and get help.  If you have a tiddlyspot related problem email [[tiddlyspot support|mailto:support@tiddlyspot.com]].",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Enjoy :)// &nbsp;&nbsp;@@ We hope you like using your tiddlyspot.com site.  Please email [[feedback@tiddlyspot.com|mailto:feedback@tiddlyspot.com]] with any comments or suggestions."
].join("\n"),

'TspotControls':[
 "| tiddlyspot password:|<<option pasUploadPassword>>|",
 "| site management:|<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . .  " + config.tiddlyspotSiteId + ">>//(requires tiddlyspot password)//<br>[[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]], [[download (go offline)|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download]]|",
 "| links:|[[tiddlyspot.com|http://tiddlyspot.com/]], [[FAQs|http://faq.tiddlyspot.com/]], [[blog|http://tiddlyspot.blogspot.com/]], email [[support|mailto:support@tiddlyspot.com]] & [[feedback|mailto:feedback@tiddlyspot.com]], [[donate|http://tiddlyspot.com/?page=donate]]|"
].join("\n"),

'TspotSidebar':[
 "<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . .  " + config.tiddlyspotSiteId + ">><html><a href='http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download' class='button'>download</a></html>"
].join("\n"),

'TspotOptions':[
 "tiddlyspot password:",
 "<<option pasUploadPassword>>",
 ""
].join("\n")

});
//}}}
Given the following commutative diagram
$$
\begin{array}{ c c c }
H_k (X)&\overset{\overset{f_*}{\longrightarrow}}{\underset{f^!}{\longleftarrow}}&H_k(Y)\\
\downarrow_p\uparrow^q&&\downarrow_p\uparrow^q\\
{{H}^{n-k}(X)}&\overset{\overset{f^!}{\longrightarrow}}{\underset{f^*}{\longleftarrow}}&H^{n-k}(Y)\\
\end{array}
$$
where $p$ and $q$ are the Poincare duality isomorphism and its inverse, let $f^!=qf^* p$ and $f_!=pf_* q$. It is easy to check that $f^!f_*=1$ and $f^*f_!=1$.

| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |
| 14/03/2013 08:58:49 | Cárdenas | [[/|http://mcard.tiddlyspot.com/#%5B%5BBusemann%20G-spaces%5D%5D]] | [[store.cgi|http://mcard.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mcard.tiddlyspot.com/index.html]] | . |
| 14/03/2013 20:14:57 | Cárdenas | [[/|http://mcard.tiddlyspot.com/#%5B%5BBusemann%20G-spaces%5D%5D]] | [[store.cgi|http://mcard.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mcard.tiddlyspot.com/index.html]] | . | ok |
| 14/03/2013 20:15:23 | Cárdenas | [[/|http://mcard.tiddlyspot.com/#%5B%5BBusemann%20G-spaces%5D%5D]] | [[store.cgi|http://mcard.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mcard.tiddlyspot.com/index.html]] | . | ok |
| 14/03/2013 20:18:07 | Cárdenas | [[/|http://mcard.tiddlyspot.com/#%5B%5BBusemann%20G-spaces%5D%5D]] | [[store.cgi|http://mcard.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mcard.tiddlyspot.com/index.html]] | . | ok |
| 14/03/2013 20:18:39 | Cárdenas | [[/|http://mcard.tiddlyspot.com/#%5B%5BBusemann%20G-spaces%5D%5D]] | [[store.cgi|http://mcard.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mcard.tiddlyspot.com/index.html]] | . | ok |
| 14/03/2013 20:21:57 | Cárdenas | [[/|http://mcard.tiddlyspot.com/#%5B%5BBusemann%20G-spaces%5D%5D]] | [[store.cgi|http://mcard.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mcard.tiddlyspot.com/index.html]] | . | ok |
| 14/03/2013 20:24:09 | Cárdenas | [[/|http://mcard.tiddlyspot.com/#%5B%5BBusemann%20G-spaces%5D%5D]] | [[store.cgi|http://mcard.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mcard.tiddlyspot.com/index.html]] | . | ok |
| 14/03/2013 20:28:23 | Cárdenas | [[/|http://mcard.tiddlyspot.com/#%5B%5BBusemann%20G-spaces%5D%5D]] | [[store.cgi|http://mcard.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mcard.tiddlyspot.com/index.html]] | . | ok |
| 14/03/2013 20:31:55 | Cárdenas | [[/|http://mcard.tiddlyspot.com/#%5B%5BBusemann%20G-spaces%5D%5D]] | [[store.cgi|http://mcard.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mcard.tiddlyspot.com/index.html]] | . |
| 17/03/2013 20:03:20 | Cárdenas | [[/|http://mcard.tiddlyspot.com/#%5B%5BBusemann%20G-spaces%5D%5D]] | [[store.cgi|http://mcard.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mcard.tiddlyspot.com/index.html]] | . |
/***
|''Name:''|UploadPlugin|
|''Description:''|Save to web a TiddlyWiki|
|''Version:''|4.1.3|
|''Date:''|Feb 24, 2008|
|''Source:''|http://tiddlywiki.bidix.info/#UploadPlugin|
|''Documentation:''|http://tiddlywiki.bidix.info/#UploadPluginDoc|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0|
|''Requires:''|PasswordOptionPlugin|
***/
//{{{
version.extensions.UploadPlugin = {
	major: 4, minor: 1, revision: 3,
	date: new Date("Feb 24, 2008"),
	source: 'http://tiddlywiki.bidix.info/#UploadPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	coreVersion: '2.2.0'
};

//
// Environment
//

if (!window.bidix) window.bidix = {}; // bidix namespace
bidix.debugMode = false;	// true to activate both in Plugin and UploadService
	
//
// Upload Macro
//

config.macros.upload = {
// default values
	defaultBackupDir: '',	//no backup
	defaultStoreScript: "store.php",
	defaultToFilename: "index.html",
	defaultUploadDir: ".",
	authenticateUser: true	// UploadService Authenticate User
};
	
config.macros.upload.label = {
	promptOption: "Save and Upload this TiddlyWiki with UploadOptions",
	promptParamMacro: "Save and Upload this TiddlyWiki in %0",
	saveLabel: "save to web", 
	saveToDisk: "save to disk",
	uploadLabel: "upload"	
};

config.macros.upload.messages = {
	noStoreUrl: "No store URL in parmeters or options",
	usernameOrPasswordMissing: "Username or password missing"
};

config.macros.upload.handler = function(place,macroName,params) {
	if (readOnly)
		return;
	var label;
	if (document.location.toString().substr(0,4) == "http") 
		label = this.label.saveLabel;
	else
		label = this.label.uploadLabel;
	var prompt;
	if (params[0]) {
		prompt = this.label.promptParamMacro.toString().format([this.destFile(params[0], 
			(params[1] ? params[1]:bidix.basename(window.location.toString())), params[3])]);
	} else {
		prompt = this.label.promptOption;
	}
	createTiddlyButton(place, label, prompt, function() {config.macros.upload.action(params);}, null, null, this.accessKey);
};

config.macros.upload.action = function(params)
{
		// for missing macro parameter set value from options
		if (!params) params = {};
		var storeUrl = params[0] ? params[0] : config.options.txtUploadStoreUrl;
		var toFilename = params[1] ? params[1] : config.options.txtUploadFilename;
		var backupDir = params[2] ? params[2] : config.options.txtUploadBackupDir;
		var uploadDir = params[3] ? params[3] : config.options.txtUploadDir;
		var username = params[4] ? params[4] : config.options.txtUploadUserName;
		var password = config.options.pasUploadPassword; // for security reason no password as macro parameter	
		// for still missing parameter set default value
		if ((!storeUrl) && (document.location.toString().substr(0,4) == "http")) 
			storeUrl = bidix.dirname(document.location.toString())+'/'+config.macros.upload.defaultStoreScript;
		if (storeUrl.substr(0,4) != "http")
			storeUrl = bidix.dirname(document.location.toString()) +'/'+ storeUrl;
		if (!toFilename)
			toFilename = bidix.basename(window.location.toString());
		if (!toFilename)
			toFilename = config.macros.upload.defaultToFilename;
		if (!uploadDir)
			uploadDir = config.macros.upload.defaultUploadDir;
		if (!backupDir)
			backupDir = config.macros.upload.defaultBackupDir;
		// report error if still missing
		if (!storeUrl) {
			alert(config.macros.upload.messages.noStoreUrl);
			clearMessage();
			return false;
		}
		if (config.macros.upload.authenticateUser && (!username || !password)) {
			alert(config.macros.upload.messages.usernameOrPasswordMissing);
			clearMessage();
			return false;
		}
		bidix.upload.uploadChanges(false,null,storeUrl, toFilename, uploadDir, backupDir, username, password); 
		return false; 
};

config.macros.upload.destFile = function(storeUrl, toFilename, uploadDir) 
{
	if (!storeUrl)
		return null;
		var dest = bidix.dirname(storeUrl);
		if (uploadDir && uploadDir != '.')
			dest = dest + '/' + uploadDir;
		dest = dest + '/' + toFilename;
	return dest;
};

//
// uploadOptions Macro
//

config.macros.uploadOptions = {
	handler: function(place,macroName,params) {
		var wizard = new Wizard();
		wizard.createWizard(place,this.wizardTitle);
		wizard.addStep(this.step1Title,this.step1Html);
		var markList = wizard.getElement("markList");
		var listWrapper = document.createElement("div");
		markList.parentNode.insertBefore(listWrapper,markList);
		wizard.setValue("listWrapper",listWrapper);
		this.refreshOptions(listWrapper,false);
		var uploadCaption;
		if (document.location.toString().substr(0,4) == "http") 
			uploadCaption = config.macros.upload.label.saveLabel;
		else
			uploadCaption = config.macros.upload.label.uploadLabel;
		
		wizard.setButtons([
				{caption: uploadCaption, tooltip: config.macros.upload.label.promptOption, 
					onClick: config.macros.upload.action},
				{caption: this.cancelButton, tooltip: this.cancelButtonPrompt, onClick: this.onCancel}
				
			]);
	},
	options: [
		"txtUploadUserName",
		"pasUploadPassword",
		"txtUploadStoreUrl",
		"txtUploadDir",
		"txtUploadFilename",
		"txtUploadBackupDir",
		"chkUploadLog",
		"txtUploadLogMaxLine"		
	],
	refreshOptions: function(listWrapper) {
		var opts = [];
		for(i=0; i<this.options.length; i++) {
			var opt = {};
			opts.push();
			opt.option = "";
			n = this.options[i];
			opt.name = n;
			opt.lowlight = !config.optionsDesc[n];
			opt.description = opt.lowlight ? this.unknownDescription : config.optionsDesc[n];
			opts.push(opt);
		}
		var listview = ListView.create(listWrapper,opts,this.listViewTemplate);
		for(n=0; n<opts.length; n++) {
			var type = opts[n].name.substr(0,3);
			var h = config.macros.option.types[type];
			if (h && h.create) {
				h.create(opts[n].colElements['option'],type,opts[n].name,opts[n].name,"no");
			}
		}
		
	},
	onCancel: function(e)
	{
		backstage.switchTab(null);
		return false;
	},
	
	wizardTitle: "Upload with options",
	step1Title: "These options are saved in cookies in your browser",
	step1Html: "<input type='hidden' name='markList'></input><br>",
	cancelButton: "Cancel",
	cancelButtonPrompt: "Cancel prompt",
	listViewTemplate: {
		columns: [
			{name: 'Description', field: 'description', title: "Description", type: 'WikiText'},
			{name: 'Option', field: 'option', title: "Option", type: 'String'},
			{name: 'Name', field: 'name', title: "Name", type: 'String'}
			],
		rowClasses: [
			{className: 'lowlight', field: 'lowlight'} 
			]}
};

//
// upload functions
//

if (!bidix.upload) bidix.upload = {};

if (!bidix.upload.messages) bidix.upload.messages = {
	//from saving
	invalidFileError: "The original file '%0' does not appear to be a valid TiddlyWiki",
	backupSaved: "Backup saved",
	backupFailed: "Failed to upload backup file",
	rssSaved: "RSS feed uploaded",
	rssFailed: "Failed to upload RSS feed file",
	emptySaved: "Empty template uploaded",
	emptyFailed: "Failed to upload empty template file",
	mainSaved: "Main TiddlyWiki file uploaded",
	mainFailed: "Failed to upload main TiddlyWiki file. Your changes have not been saved",
	//specific upload
	loadOriginalHttpPostError: "Can't get original file",
	aboutToSaveOnHttpPost: 'About to upload on %0 ...',
	storePhpNotFound: "The store script '%0' was not found."
};

bidix.upload.uploadChanges = function(onlyIfDirty,tiddlers,storeUrl,toFilename,uploadDir,backupDir,username,password)
{
	var callback = function(status,uploadParams,original,url,xhr) {
		if (!status) {
			displayMessage(bidix.upload.messages.loadOriginalHttpPostError);
			return;
		}
		if (bidix.debugMode) 
			alert(original.substr(0,500)+"\n...");
		// Locate the storeArea div's 
		var posDiv = locateStoreArea(original);
		if((posDiv[0] == -1) || (posDiv[1] == -1)) {
			alert(config.messages.invalidFileError.format([localPath]));
			return;
		}
		bidix.upload.uploadRss(uploadParams,original,posDiv);
	};
	
	if(onlyIfDirty && !store.isDirty())
		return;
	clearMessage();
	// save on localdisk ?
	if (document.location.toString().substr(0,4) == "file") {
		var path = document.location.toString();
		var localPath = getLocalPath(path);
		saveChanges();
	}
	// get original
	var uploadParams = new Array(storeUrl,toFilename,uploadDir,backupDir,username,password);
	var originalPath = document.location.toString();
	// If url is a directory : add index.html
	if (originalPath.charAt(originalPath.length-1) == "/")
		originalPath = originalPath + "index.html";
	var dest = config.macros.upload.destFile(storeUrl,toFilename,uploadDir);
	var log = new bidix.UploadLog();
	log.startUpload(storeUrl, dest, uploadDir,  backupDir);
	displayMessage(bidix.upload.messages.aboutToSaveOnHttpPost.format([dest]));
	if (bidix.debugMode) 
		alert("about to execute Http - GET on "+originalPath);
	var r = doHttp("GET",originalPath,null,null,username,password,callback,uploadParams,null);
	if (typeof r == "string")
		displayMessage(r);
	return r;
};

bidix.upload.uploadRss = function(uploadParams,original,posDiv) 
{
	var callback = function(status,params,responseText,url,xhr) {
		if(status) {
			var destfile = responseText.substring(responseText.indexOf("destfile:")+9,responseText.indexOf("\n", responseText.indexOf("destfile:")));
			displayMessage(bidix.upload.messages.rssSaved,bidix.dirname(url)+'/'+destfile);
			bidix.upload.uploadMain(params[0],params[1],params[2]);
		} else {
			displayMessage(bidix.upload.messages.rssFailed);			
		}
	};
	// do uploadRss
	if(config.options.chkGenerateAnRssFeed) {
		var rssPath = uploadParams[1].substr(0,uploadParams[1].lastIndexOf(".")) + ".xml";
		var rssUploadParams = new Array(uploadParams[0],rssPath,uploadParams[2],'',uploadParams[4],uploadParams[5]);
		var rssString = generateRss();
		// no UnicodeToUTF8 conversion needed when location is "file" !!!
		if (document.location.toString().substr(0,4) != "file")
			rssString = convertUnicodeToUTF8(rssString);	
		bidix.upload.httpUpload(rssUploadParams,rssString,callback,Array(uploadParams,original,posDiv));
	} else {
		bidix.upload.uploadMain(uploadParams,original,posDiv);
	}
};

bidix.upload.uploadMain = function(uploadParams,original,posDiv) 
{
	var callback = function(status,params,responseText,url,xhr) {
		var log = new bidix.UploadLog();
		if(status) {
			// if backupDir specified
			if ((params[3]) && (responseText.indexOf("backupfile:") > -1))  {
				var backupfile = responseText.substring(responseText.indexOf("backupfile:")+11,responseText.indexOf("\n", responseText.indexOf("backupfile:")));
				displayMessage(bidix.upload.messages.backupSaved,bidix.dirname(url)+'/'+backupfile);
			}
			var destfile = responseText.substring(responseText.indexOf("destfile:")+9,responseText.indexOf("\n", responseText.indexOf("destfile:")));
			displayMessage(bidix.upload.messages.mainSaved,bidix.dirname(url)+'/'+destfile);
			store.setDirty(false);
			log.endUpload("ok");
		} else {
			alert(bidix.upload.messages.mainFailed);
			displayMessage(bidix.upload.messages.mainFailed);
			log.endUpload("failed");			
		}
	};
	// do uploadMain
	var revised = bidix.upload.updateOriginal(original,posDiv);
	bidix.upload.httpUpload(uploadParams,revised,callback,uploadParams);
};

bidix.upload.httpUpload = function(uploadParams,data,callback,params)
{
	var localCallback = function(status,params,responseText,url,xhr) {
		url = (url.indexOf("nocache=") < 0 ? url : url.substring(0,url.indexOf("nocache=")-1));
		if (xhr.status == 404)
			alert(bidix.upload.messages.storePhpNotFound.format([url]));
		if ((bidix.debugMode) || (responseText.indexOf("Debug mode") >= 0 )) {
			alert(responseText);
			if (responseText.indexOf("Debug mode") >= 0 )
				responseText = responseText.substring(responseText.indexOf("\n\n")+2);
		} else if (responseText.charAt(0) != '0') 
			alert(responseText);
		if (responseText.charAt(0) != '0')
			status = null;
		callback(status,params,responseText,url,xhr);
	};
	// do httpUpload
	var boundary = "---------------------------"+"AaB03x";	
	var uploadFormName = "UploadPlugin";
	// compose headers data
	var sheader = "";
	sheader += "--" + boundary + "\r\nContent-disposition: form-data; name=\"";
	sheader += uploadFormName +"\"\r\n\r\n";
	sheader += "backupDir="+uploadParams[3] +
				";user=" + uploadParams[4] +
				";password=" + uploadParams[5] +
				";uploaddir=" + uploadParams[2];
	if (bidix.debugMode)
		sheader += ";debug=1";
	sheader += ";;\r\n"; 
	sheader += "\r\n" + "--" + boundary + "\r\n";
	sheader += "Content-disposition: form-data; name=\"userfile\"; filename=\""+uploadParams[1]+"\"\r\n";
	sheader += "Content-Type: text/html;charset=UTF-8" + "\r\n";
	sheader += "Content-Length: " + data.length + "\r\n\r\n";
	// compose trailer data
	var strailer = new String();
	strailer = "\r\n--" + boundary + "--\r\n";
	data = sheader + data + strailer;
	if (bidix.debugMode) alert("about to execute Http - POST on "+uploadParams[0]+"\n with \n"+data.substr(0,500)+ " ... ");
	var r = doHttp("POST",uploadParams[0],data,"multipart/form-data; ;charset=UTF-8; boundary="+boundary,uploadParams[4],uploadParams[5],localCallback,params,null);
	if (typeof r == "string")
		displayMessage(r);
	return r;
};

// same as Saving's updateOriginal but without convertUnicodeToUTF8 calls
bidix.upload.updateOriginal = function(original, posDiv)
{
	if (!posDiv)
		posDiv = locateStoreArea(original);
	if((posDiv[0] == -1) || (posDiv[1] == -1)) {
		alert(config.messages.invalidFileError.format([localPath]));
		return;
	}
	var revised = original.substr(0,posDiv[0] + startSaveArea.length) + "\n" +
				store.allTiddlersAsHtml() + "\n" +
				original.substr(posDiv[1]);
	var newSiteTitle = getPageTitle().htmlEncode();
	revised = revised.replaceChunk("<title"+">","</title"+">"," " + newSiteTitle + " ");
	revised = updateMarkupBlock(revised,"PRE-HEAD","MarkupPreHead");
	revised = updateMarkupBlock(revised,"POST-HEAD","MarkupPostHead");
	revised = updateMarkupBlock(revised,"PRE-BODY","MarkupPreBody");
	revised = updateMarkupBlock(revised,"POST-SCRIPT","MarkupPostBody");
	return revised;
};

//
// UploadLog
// 
// config.options.chkUploadLog :
//		false : no logging
//		true : logging
// config.options.txtUploadLogMaxLine :
//		-1 : no limit
//      0 :  no Log lines but UploadLog is still in place
//		n :  the last n lines are only kept
//		NaN : no limit (-1)

bidix.UploadLog = function() {
	if (!config.options.chkUploadLog) 
		return; // this.tiddler = null
	this.tiddler = store.getTiddler("UploadLog");
	if (!this.tiddler) {
		this.tiddler = new Tiddler();
		this.tiddler.title = "UploadLog";
		this.tiddler.text = "| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |";
		this.tiddler.created = new Date();
		this.tiddler.modifier = config.options.txtUserName;
		this.tiddler.modified = new Date();
		store.addTiddler(this.tiddler);
	}
	return this;
};

bidix.UploadLog.prototype.addText = function(text) {
	if (!this.tiddler)
		return;
	// retrieve maxLine when we need it
	var maxLine = parseInt(config.options.txtUploadLogMaxLine,10);
	if (isNaN(maxLine))
		maxLine = -1;
	// add text
	if (maxLine != 0) 
		this.tiddler.text = this.tiddler.text + text;
	// Trunck to maxLine
	if (maxLine >= 0) {
		var textArray = this.tiddler.text.split('\n');
		if (textArray.length > maxLine + 1)
			textArray.splice(1,textArray.length-1-maxLine);
			this.tiddler.text = textArray.join('\n');		
	}
	// update tiddler fields
	this.tiddler.modifier = config.options.txtUserName;
	this.tiddler.modified = new Date();
	store.addTiddler(this.tiddler);
	// refresh and notifiy for immediate update
	story.refreshTiddler(this.tiddler.title);
	store.notify(this.tiddler.title, true);
};

bidix.UploadLog.prototype.startUpload = function(storeUrl, toFilename, uploadDir,  backupDir) {
	if (!this.tiddler)
		return;
	var now = new Date();
	var text = "\n| ";
	var filename = bidix.basename(document.location.toString());
	if (!filename) filename = '/';
	text += now.formatString("0DD/0MM/YYYY 0hh:0mm:0ss") +" | ";
	text += config.options.txtUserName + " | ";
	text += "[["+filename+"|"+location + "]] |";
	text += " [[" + bidix.basename(storeUrl) + "|" + storeUrl + "]] | ";
	text += uploadDir + " | ";
	text += "[[" + bidix.basename(toFilename) + " | " +toFilename + "]] | ";
	text += backupDir + " |";
	this.addText(text);
};

bidix.UploadLog.prototype.endUpload = function(status) {
	if (!this.tiddler)
		return;
	this.addText(" "+status+" |");
};

//
// Utilities
// 

bidix.checkPlugin = function(plugin, major, minor, revision) {
	var ext = version.extensions[plugin];
	if (!
		(ext  && 
			((ext.major > major) || 
			((ext.major == major) && (ext.minor > minor))  ||
			((ext.major == major) && (ext.minor == minor) && (ext.revision >= revision))))) {
			// write error in PluginManager
			if (pluginInfo)
				pluginInfo.log.push("Requires " + plugin + " " + major + "." + minor + "." + revision);
			eval(plugin); // generate an error : "Error: ReferenceError: xxxx is not defined"
	}
};

bidix.dirname = function(filePath) {
	if (!filePath) 
		return;
	var lastpos;
	if ((lastpos = filePath.lastIndexOf("/")) != -1) {
		return filePath.substring(0, lastpos);
	} else {
		return filePath.substring(0, filePath.lastIndexOf("\\"));
	}
};

bidix.basename = function(filePath) {
	if (!filePath) 
		return;
	var lastpos;
	if ((lastpos = filePath.lastIndexOf("#")) != -1) 
		filePath = filePath.substring(0, lastpos);
	if ((lastpos = filePath.lastIndexOf("/")) != -1) {
		return filePath.substring(lastpos + 1);
	} else
		return filePath.substring(filePath.lastIndexOf("\\")+1);
};

bidix.initOption = function(name,value) {
	if (!config.options[name])
		config.options[name] = value;
};

//
// Initializations
//

// require PasswordOptionPlugin 1.0.1 or better
bidix.checkPlugin("PasswordOptionPlugin", 1, 0, 1);

// styleSheet
setStylesheet('.txtUploadStoreUrl, .txtUploadBackupDir, .txtUploadDir {width: 22em;}',"uploadPluginStyles");

//optionsDesc
merge(config.optionsDesc,{
	txtUploadStoreUrl: "Url of the UploadService script (default: store.php)",
	txtUploadFilename: "Filename of the uploaded file (default: in index.html)",
	txtUploadDir: "Relative Directory where to store the file (default: . (downloadService directory))",
	txtUploadBackupDir: "Relative Directory where to backup the file. If empty no backup. (default: ''(empty))",
	txtUploadUserName: "Upload Username",
	pasUploadPassword: "Upload Password",
	chkUploadLog: "do Logging in UploadLog (default: true)",
	txtUploadLogMaxLine: "Maximum of lines in UploadLog (default: 10)"
});

// Options Initializations
bidix.initOption('txtUploadStoreUrl','');
bidix.initOption('txtUploadFilename','');
bidix.initOption('txtUploadDir','');
bidix.initOption('txtUploadBackupDir','');
bidix.initOption('txtUploadUserName','');
bidix.initOption('pasUploadPassword','');
bidix.initOption('chkUploadLog',true);
bidix.initOption('txtUploadLogMaxLine','10');


// Backstage
merge(config.tasks,{
	uploadOptions: {text: "upload", tooltip: "Change UploadOptions and Upload", content: '<<uploadOptions>>'}
});
config.backstageTasks.push("uploadOptions");


//}}}

$p:E\to B$ is an approximate fibration if it has the approximate homotopy property lifting.
!!!!Def
Let $f:X\to Y$ be a map of connected $n$-dimensional Poincare complexes and $[x]$ and $[Y]$ their respective fundamental classes. Then there is an integer $k\in\mathbb Z$ so that $f_*([X])=k[Y]$,, which is called the ''degree'' of $f$, $deg(f)$.
Clearly if $f$ is a h.e. then $deg(f)=\pm 1$, because its multiplicative character. In such a case, we may always assume $def(f)=1$.

!!!Def (Krupski 1993)
A metric space $X$ has disjoint $(k,m)$-cell property, $k,m\in\mathbb N$ if for all $f:D^k\to X$ and all $g:D^m\to X$ andfor all $\epsilon >0$ then there exist $f':D^k\to X$, $g':D^m\to X$ so that $d(f,f')<\epsilon$, $d(g,g')<\epsilon$ and $f'(D^k)\cap g'(D^m)=\emptyset$.
**1930's R.Wilden introduced the topic
**1960's A.Borel and R.Moore.
**1970's J.Cannon et al.
!!Def
$X$ is an $n$-dimensional generalized manifold if
****$X$ is a separable metric space,
****$X$ is ENR and
****$X$ is a $\mathbb Z$-homology manifold,i.e. $H_*(X,X-\{p\};\mathbb Z)\cong H_*(\mathbb R^n,\mathbb R^n-\{0\};\mathbb Z)$.
The singular set $S(X)\subset X$ of all pointswhich have not an euclidean neighborhood is closed. Hence $M(X)=X-S(X)$ is open.

Generalized manifolds appear as
****Quotient spaces of cell-like usc-decompositions of $\mathbb R^n$ (more generally , of topological manifolds). However not all generalized manifolds , for $n\geq 6$, arise in this way.
****End compactifications of open manifolds.
****Suspensions of topological manifolds.
****Inverse limits of manifolds.
****Orbit spaces of actions of groups on manifolds.
Notice that if $X^k\times Y^l$ is a generalized $(k+l)$-manifold then $X$ is a generalized $k$-manifold and $Y$ is a generalized $l$-manifold.
[[Obewolfach Miniseminar|http://www.msp.warwick.ac.uk/gtm/2006/09/]]
<<formTiddler NewPluginTemplate>><data>{"author":"Bob McElrath (Bob's)","link":"http://bob.mcelrath.org/plugins.html#systemConfig","format":"Plugin","category":"Scientific and mathematical notation","description":"LaTeX is the world standard for specifying, typesetting, and communicating mathematics among scientists, engineers, and mathematicians. For more information aboutLaTeX itself, visit the LaTeX Project. This plugin typesets math using jsMath, which is an implementation of the TeX math rules and typesetting in javascript, for your browser. Notice the small button in the lower right corner which opens its control panel.","twversion":"2.0.3"}</data>
<<closeAll>><<permaview>><<newTiddler>><<newJournal 'DD MMM YYYY'>><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel 'options »' 'Change TiddlyWiki advanced options'>>
!!!Def
Let $p:E\to B$ be a vector bundle and $f:B'\to B$ be a map. Then the pull-back $f^*(E)$ is the set $\{(b',e)\in B'\times E/ f(b')=p(e)\}$. If $p:E^k\to X$ and $p':E^l\to X$ are $k$- and $l$-dimensional vector bundles, respectively, over $X$; define the $(k+l)$-plane vector bundle $E\oplus E'$ as the vector bundle with total space $E(E\oplus E')=\{(u,u')\in E\times E'/ p(u)=p'(u')\}$ with fibres $(E\oplus E')_x=E_x\oplus E'_x$, for all $x\in B$.