Carrollin taikatempun tutkistelua

Edellisessä tarinassani https://mikonfysiikka.wordpress.com/2019/12/17/lewis-carrollin-taikatemppu/ kerroin Lewis Carrollin taikatempusta. Tempussa valitaan jokin salainen luonnollinen luku a. Sen jälkeen luvulle suoritetaan erilaisia laskutoimituksia, näiden lopputulokset ovat b, c, …, h ja i. Taikurille kerrotaan alkuperäisen luvun a ja kolmannen c luvun parillisuudesta ja saatu viimeinen luku i. Taikuri pystyy parin laskutoimituksen avulla päättelemään alkuperäisen luvun a.

Ongelman määrittely

Minua kiinnostaa onko ongelma yksikäsitteinen siinä mielessä, että tuottaako taikatempun algoritmi yksikäsitteiset lopputulokset. Tietysti minua kiinnostaa myös millaisen kuvan saan aikaiseksi kolmiulotteiseen avaruuteen. Jos olet jaksanut lukea edes tähän saakka, niin  ymmärrät, että tämä menetelmä ei ole matemaattinen todistus, tässä tutkitaan ”kokeellisesti” matemaattista ilmiötä.

Merkitään alkuperäisen luvun n jakojäännöstä kahdella jaettaessa aa:lla ja luvun c (eli kolmas luku taikatempussa, kun ensimmäinen luku on n) jakojäännöstä kahdella jaettaessa cc:llä. Olkoon N luonnollisten lukujen joukko ja joukko CC algoritmin tuottamien pisteiden (aan, ccn, in) joukko, missä n on luonnollinen luku..

Haluan siis tietää vastaako jokaista luonnollista lukua n, joukon CC:n piste (in, aan, ccn) ja päinvastoin eli onko kuvaus N -> CC bijektio.

Satunnaisuus

Taikatempussa on vaiheita, jossa voidaan valita eri lukuja tyyliin

  • Jos b on
    • pariton, niin lisää joko 5 tai 9. Jaa luku kahdella ja lisää 1. Annetaan luvun nimeksi c.
    • parillinen, niin vähennä siitä 2 tai 6, jaa luku kahdella ja sitten lisää 29 tai 33 tai 37. Annetaan luvulle nimeksi c.

Yksinkertaistan ongelmaa siten, että jätän eri vaihtoehtojen tutkimisen tulevaan artikkeliin, niinpä valitsen taikatempun vaihtoehdoista aina pienimmän luvun tässä tarinassa. Eli edellinen kohta on tässä jutussa:

  • Jos b on
    • pariton, niin lisää 5. Jaa luku kahdella ja lisää 1. Annetaan luvun nimeksi c.
    • parillinen, niin vähennä siitä 2, jaa luku kahdella ja sitten lisää 29. Annetaan luvulle nimeksi c.

Suunnitelma

Ajatuksena on tuottaa GeoGebra 6:lla (onnistuu myös GeoGebra 5:llä ja GeoGebra 3D:llä) sovellus, jossa luodaan funktio c7(x), joka laskee taikatempun algoritmin tuottaman lopullisen luvin i. Koska GeoGebrassa ei voi rajoittaa lähtöjoukkoa vain luonnollisiksi luvuiksi, pitää ottaa huomioon kaikki reaaliluvut x ≥ 0. Tuotetun funktion ja lukujen a ja c parillisuuden avulla tuotetaan taulukkolaskennan avulla 3D pisteet. Nämä yhdistetään janoilla alkuperäisiin a arvoihin. Näin saadaan kuva kuvauksesta.

Kirjoitan komennot GeoGebra 6:n syöttökenttään.

Parillisuusfunktio

GeoGebralla voidaan luvun n parillisuus selvittää käyttämällä jakojäännöstä komennolla mod(n, 2). Esimerkiksi mod(13, 2) antaa tulokseksi 1.

Valitettavasti komento mod(x, 2) ei tuota funktiota. Niinpä tarvitsen funktion, joka antaa arvoksi 0, jos annetun luvun kokonaisosa on parillinen ja 1 jos se on pariton. Funktion luonti onnistuu käyttämällä floor-komentoa, joka tuottaa arvoksi luvun kokonaisosan. Esimerkiksi floor(13.6) tuottaa arvoksi 13. Muutaman kokeilun jälkeen havaitsin, että seuraava toimii. Määritellään syöttökentässä funktio

paril(x) = floor(2 (x / 2 - floor(x / 2)))
Kuva, joka sisältää kohteen sisä, shoji

Kuvaus luotu automaattisesti

Carroll-funktio

Muutetaan taikatempun laskutoimitukset funktioiksi. Ohjeen resepti b tuottaa funktion c1(x) ja c vastaavasti c2(x) ja niin edelleen. Viimeinen kohta ohjeessa eli i on funktio c7(x). Kirjoitetaan syöttökenttään komennot:

c1(x) = 3 x
c2(x) = Jos(paril(c1(x)) == 1,(c1(x)+5)/(2)+1,(c1(x)-2)/(2)+29)
c3(x) = 3 c2(x)
c4(x) = Jos(paril(c3(x)) == 1,(c3(x)+5)/(2)+1,(c3(x)-2)/(2)+29)
c5(x) = (x+19)*10+c4(x)
c6(x) = floor(c5(x)/7)
c7(x) = floor(c6(x)/7)

GeoGebra sieventää sisäkkäisten funktioiden lausekkeet, näin ollen funktion c7 lauseke on aika monimutkaisen näköinen.

Kuva, joka sisältää kohteen näyttökuva

Kuvaus luotu automaattisesti

Tietysti kuvaajakin on aika eksoottinen.

3D-pisteet taulukkolaskennalla

Lasketaan muutamia funktion c7 arvoja luonnollisilla luvuilla. Samalla lasketaan ensimmäisen luvun a ja kolmannen luvun c eli funktion c2 arvojen parillisuus. Teen tämän taulukkolaskennalla, jotta näen luvut rinnakkain, näin minun on helpompi pohdiskella lukujen yhteyksiä toisiinsa.

Kirjoitetaan taulukkolaskennan soluihin A1, …, A4 otsikot: ”x”, aparil, c2paril ja ”c7”. Kirjoitetaan soluun A2 luku 0 ja soluun A3 luku 1. Valitaan alue A2:A3 ja luodaan sarake luonnollisia lukuja 0, …, 50 kahvasta vetämällä. Soluihin B2, …, B4 kirjoitetaan kaavat:

=paril(A2)
=paril(c2(A2))
=c7(A2)

Valitaan alue B2:B4 ja monistetaan kaavat alaspäin kahvalla vetämällä.

Tuota taulukkoa tutkiskelemalla voi pohdiskella millainen säännönmukaisuus lukujonoilla on. Palaan tähän asiaan luultavasti tulevassa artikkelissa.

3D-kuvaajaa varten luodaan kaksi pistelistaa. Aluksi kannattaa valita Piirtoalueen asetuksista Nimeäminen: Nimeäminen pois. Näin pisteiden nimet eivät tule näkyviin 3D piirtoalueelle.  Valitaan alue B2:D32 ja Luo lista -työkalua painamalla valitaan työkalu Luo pistelista. Annetaan listalle nimeksi l1.

Kun testasin komentoja GeoGebra3D:llä, jossa ei ole taulukkolaskentaa käytössä, niin loin l1-listan Jono-komennolla:

l1=Jono((paril(nn),paril(c2(nn)),c7(nn)),nn,0,30)

Luvut 0, …, 30 saadaan pisteiksi 3D-avaruuteen kirjoittamalla syöttökenttään

l2 = Jono((n, 0, 0), n, 0, 30)

Luodaan janat muuttujan arvojen pisteiden ja niiden arvoja vastaavien pisteiden välille. Eli periaatteessa hahmotetaan kuvausta n -> (aan, ccn, in).

Tämän tyyppinen asia kannattaa tehdä Zip-komennolla, toki jono-komennollakin janojen piirto onnistuu.

l3 = Zip(Jana(n, m), n, l1, m, l2)

3D-piirtoalueelle ilmestyvät janat pistelistojen alkioiden välille. Akseleiden skaalausta saa muutettua painamalla Vaihto-näppäimen pohjaan ja vetämällä koordinaattiakseleista. Kuviota saa liikutettua tasossa Vaihto-näppäintä pohjassa siirtelemällä.

Vaikuttaa siltä, että jokaista luonnollista lukua n vastaa yksikäsitteinen piste taikatempun funktioiden tuottama piste (aan, ccn, in). Ja myös päinvastoin, eli jokaista (aan, ccn, in) pistettä vastaa yksikäsitteinen luonnollinen luku n.

Jätän asian täsmällisen matemaattisen todistamisen lukijalle.

Lähteet

Edellinen artikkelini aiheesta: Lewis Carrollin taikatemppu https://mikonfysiikka.wordpress.com/2019/12/17/lewis-carrollin-taikatemppu/

Futility Closet artikkeli: A Late Carroll Game https://www.futilitycloset.com/2019/07/14/a-late-carroll-game/

GeoGebra 3D -appletti liu’un avulla tuotettuna : https://www.geogebra.org/3d/fsa27rx7

Tämän artikkelin esimerkki GeoGebra 6:lla: https://www.geogebra.org/m/zpbkxeh9

Lewis Carrollin taikatemppu

Matemaattisesti suuntautunut henkilö tietysti todistaa, miksi tämä taikatemppu toimii. Toimiiko tämä ihan kaikilla luonnollisilla luvuilla? Entä kokonaisluvuilla, jos jaollisuus sovitaan jollain tähän tehtävään sopivalla tavalla?

Opettaja pyytää oppilasta valitsemaan satunnaisen luonnollisen luvun a. Opettaja tarvitsee tämän jälkeen vain kolme tietoa. Alkuperäisen luvun a parillisuuden ja kolmannen vaiheen c parillisuuden ja lopullisen luvun i arvon. Näiden tietojen avulla hän voi päätellä  alkuperäisen luvun arvon a.

Esimerkissä käytän kahta lukua a = 42 ja A = 13. Ohjeessa viittaan vain lukuun a. (A on niinku tarkistukseksi. A:n kanssa kokeilen eri vaihtoehtoja.)

  • Valitse jokin luonnollinen luku = a. (a = 42 tai vaikka A = 13)
  • Kerro a kolmella. Annetaan tulon nimeksi b. (b = 3·42 = 126, B = 39)
  • Jos b on
    1. pariton, niin lisää joko 5 tai 9. Jaa luku kahdella ja lisää 1. Annetaan luvun nimeksi c. (C = (39+5)/2+1 = 23)
    2. parillinen, niin vähennä siitä 2 tai 6, jaa luku kahdella ja sitten lisää 29 tai 33 tai 37. Annetaan luvulle nimeksi c. (c = (126 – 2)/2 + 29 = 91)
  • Kerro luku c kolmella. Annetaan luvulle nimeksi d. (d = 3·91 = 273, D = 69)
  • Jos d on
    1. pariton, niin lisää 5 tai 9. Jaa luku kahdella ja lisää 1. Annetaan luvun nimeksi e. (e = (273 + 5)/2 +1 =140, E = (69+9)/2+1 = 40)
    2. parillinen, niin vähennä siitä 2 tai 6, jaa luku kahdella ja sitten lisää 29 tai 33 tai 37. Annetaan luvulle nimeksi e.
  • Lisää 19 alkuperäiseen lukuun a. Liitä luvun perään mikä tahansa numeroista: 0, 1, …, 9. Annetaan luvulle nimeksi f. ( 42 + 19 = 61, f = 610. 13 + 19 +39 = 39,  F = 329)
  • Lisää saatu luku lukuun e. Annetaan luvun nimeksi g. (g = f + e = 140 + 610 = 750. G = 369  )
  • Jaa luku g seitsemällä ja jätä pois desimaaliosa. Annetaan luvun nimeksi h. (750/7 ≈ 107,14; h = 107. H = 52)
  • Jaa luku h seitsemällä ja jätä pois desimaaliosa. Annetaan luvun nimeksi i. (107/7 ≈ 15,27; i = 15, I = 7).

Päätellään alkuperäisen luvun a (A) arvo, saadun luvun i (I) perusteella.

  • Kerro luku i neljällä ja vähennä 15 Annetaan luvun nimeksi j. (j = 4·15 – 15 = 45, J = 13)
  • Jos alkuperäinen luku on 
    • parillinen, niin vähennä j:stä 3. Annetaan luvun nimeksi k. (k = 45 – 3 = 42)
    • pariton niin älä muuta lukua. Annetaan luvun nimeksi k (K = 13). 
  • Jos kolmas luku eli c 
    • on parillinen, niin parillinen, niin vähennä k:sta 2. Annetaan luvun nimeksi l. 
    • pariton, niin älä muuta lukua. Annetaan luvun nimeksi l. (l = 42, K = 13)

Lue lisää Futility Closetista

Aiheeseen liittyvä appi löytyy osoitteesta

https://www.geogebra.org/m/jnz3fqbc