ISETL-Harjoitus 4, 1999. Laskutoimitus ja kertausta
Tehtävä 1. Määrittely- ja maalijoukoista
ISETL-funktio func on pelkistetyimmillään vain sääntö,
jonka määrittelemät temput sen sisällä tehdään
ja mitä saadaan ulos, ts. minkä arvon sääntö palauttaa.
Edellisiä testejä ja tietenkin mitä tahansa totuusarvotyyppiä
olevia lausekkeita tulee käyttää func:issa estämään
vääränlaiset operaatiot, esim. nollalla jako. Jatkossa olemme
entistä tarkempia funktion määrittelyjoukon ja maalijoukon
suhteen.
Muunna vanha funktiomme kongruenttiko
> kongruenttiko := func(a,b,m);
>> return ((a-b) mod m = 0);
>> end func;
sellaiseksi, että se palauttaa arvon OM aina, kun parametrien
arvot eivät ole kongruenssin Määritelmän 3.1 mukaisia
(piti siis olla a, b Î Z
ja m Î N). Helpoiten temppu
onnistuu estämällä testeillä return käskyrivin
suoritus.
Kysymys: Mikä siis on saadun kolmen muuttujan kongruenttiko-funktion
määrittelyjoukko, mikä sille sopiva maalijoukko?
Määrittelyjoukko:
Maalijoukko:
Tehtävä 2. Modulo-aritmetiikkaa: kertolasku
a) Kirjoita seuraava koodi ja vastaa alla oleviin kysymyksiin.
> Z9 := {0..8};
> k9 := func(x,y);
>> if (x in Z9 and y in Z9) then
>> return (x*y) mod 9;
>> end if;
>> end func;
Mikä on tämän funktion määrittelyjoukko?
Entä maalijoukko?
Mitä ovat k9(2,3), k9(3,3), k9(8,8), k9(6,7), 6 .k9 7?
Vastaukset:
ISETLissä voit siis funktiokutsun k9(a,b) sijasta kirjoittaa
myös a .k9 b. Mitä huomaat pisteen paikasta ja välien
jättämisestä?
b) Muodosta alle kertolaskutaulukko. Voit laskea tarvittavat
tulokset helposti ISETL-rakenteilla vaikkapa tuplena tai sitten luupeilla.
Tehtävä 3. Modulo-aritmetiikkaa: yhteenlasku
Kirjoita kahden muuttujan funktio s9, jonka syötteet ovat
joukon Z9 alkioita ja joka palauttaa näiden lukujen summan
modulo 9 (ks. tehtävä 2). Laske s9(2,3), s9(4,5),
s9(8,8), s9(6,7), 6 .s9 7
Olemme määritelleet kaksi laskutoimitusta k9 ja
s9 joukossa Z9. Merkitään niitä jatkossa
normaalissa matemaattisessa tekstissä *9
ja +9, mutta ISETLissä kuten edellä.
Tehtävä 4. Permutaatioaritmetiikkaa
Permutaatio on tapa järjestää n luvun joukko.
ISETLissä permutaatioita esitetään TUPLEilla. Esimerkiksi
[1,3,2,4] on permutaatio joukosta S4. Kirjoita
seuraavat koodinpätkät ja vastaa kysymyksiin:
> S3 := {[a,b,c]: a,b,c in {1,2,3}: #{a,b,c} = 3};
> os := func(p,q);
>> if (p in S3 and q in S3) then
>> return [p(q(i)) | i in [1,2,3]];
>> end if;
>> end func;
Mitä ovat os([2,1,3],[1,3,2]), os([2,3,1],[3,1,2]), [2,3,1] .os
[3,1,2]?
Vastaus:
Mikä on funktion os määrittelyjoukko?
Entä maalijoukko?
Tehtävä 5. Suljettuko?
Laskutoimituksen on oltava funktio G×G ®
G, eli jokaiseen pariin pitää liittyä kyseisen
joukon alkio. Testaa funktiolla suljettuko
> suljettuko := func(J,op);
>> return (forall x,y in J: (x .op y) in J);
>> end;
ovatko parit (Z9,+9), (Z9,*9)
ja (S3,os) suljettuja, siis että ''pysyvätkö
laskutoimituksen tulokset samassa joukossa''.
Huomautus. Tämä ja seuraavaksi määritellyt
funktiot tulevat olemaan jatkossa kovassa käytössä. Ne pyydetään
kotitehtävinä sijoittamaan yhteen tekstitiedostoon luettaviksi
muistiin aina tarvittaessa. Teemme niistä myöhemmin yhteiset
versiot.
Tehtävä 6. Neutraalialkio
Löytyykö sellaista alkiota Y Î
Z9, jolle x *9
Y = x ja Y *9
x = x kaikkilla x Î
Z9.
Jos löytyy, niin mikä se on?
Sellaista alkiota sanotaan parin (Z9,*9)
neutraalialkioksi eli nolla-alkioksi.
Muodostakaa ISETL-funktio neutraali, joka etsii annetusta
joukosta G neutraalialkion annetun laskutoimituksen o suhteen.
Jos neutraalialkiota ei löydy, palautetaan tuntematon arvo OM.
Voitte alkaa taas näin:
> neutraali := func(J,op);
ISETL-demojen 2 tehtävästä 6 löydät sopivia rakenteita!
Testatkaa toiminta pareilla (Z9,+9), (Z9,*9)
ja (S3,os).
Neutraalialkiot ovat:
Tehtävä 7
a) Olkoon e2 (siis mikä?) laskutoimituksen
+9 neutraalialkio joukossa Z9. Löytyykö
jokaiselle joukon Z9 alkiolle x sellainen alkio
y Î Z9,
että x+9y = e2 ja y
+9 x = e2?
Ehdottakaa nimitystä tuollaiselle alkiolle!
b) Kirjoita funktio, jonka syötteenä on joukko G
ja laskutoimitus o ja joka tutkii, onko kaikille joukon G
alkioille olemassa edelläkuvatunlainen alkio laskutoimituksen o
suhteen.
Kutsutaan jatkossa kyseisiä alkiota käänteisalkioiksi.
Testaa löytyykö jokaiselle joukon Z9
alkiolle käänteisalkio laskutoimituksen *9
suhteen?
Mikä?
Testaa löytyykö jokaiselle joukon S3
alkiolle käänteisalkio laskutoimituksen os suhteen?
Mikä?
c) Kirjoita funktio kaanteis, jonka syötteenä
on joukko G, laskutoimitus o ja joukon G alkio g,
ja joka palauttaa alkion g käänteisalkion laskutoimituksen
o suhteen joukossa G.
Mikä on alkion [2,3,1] käänteisalkio joukossa S3
laskutoimituksen os suhteen?
Etsi luvun 7 Î Z9
käänteisalkio laskutoimituksen +9 suhteen.
Ja vielä laskutoimituksen *9
suhteen.
Tehtävä 8. Eräs testi
a) Mitä seuraava funktio tutkii?
> hehheh:=func(G,o);
>> return forall x,y in G: x .o y = y .o x;
>> end func;
Mille pareista (Z9,+9),(Z9,*9)
ja (S3,os) se palauttaa true?
Pareille:
b) Kirjoita funktio liitannainenko, joka tutkii, onko
laskutoimitus o liitännäinen joukossa G. Mille pareista (Z9,+9),(Z9,*9)
ja (S3,os) se palauttaa true?
Tehtävä 9. Tyypin testaus, relaatio
a) ISETL:issä on useita tyypintestauskäskyjä (ks.
Quick Reference tai monisteen liite), joilla voi kysyä onko joku olio
merkki(jono), totuusarvo, kokonaisluku, rationaaliluku tai yleensäkään
mikään luku, tai onko se joukko, tuple tai funktio.
Selvitä mitä tekevät seuraavat ISETL-rivit:
> is_string(5); is_string("5");
> is_string(ISETLW); is_string("ISETLW");
> is_number(-4*3.14); is_number(2 < 3);
>
> a := 3*2.4; b := "merkkijono"
> is_number(a); is_number(b);
> is_integer(-3); is_integer("2"); is_integer(3/2);
> is_integer(3 div 2); is_integer(2.5); is_integer(a);
>
> is_defined(a); is_defined(b); is_defined(c);
>
> is_boolean(true); is_boolean(false);
> is_boolean(TRUE); is_boolean("true");
> is_boolean(is_boolean(false));
>
> is_tuple({a,b}); is_tuple([a,b]);
> is_set({a,b}); is_set([a,b]); is_set(a,b);
> is_func(|x -> x**2|);
> is_map({[1,2],[1,4]}); is_map([[1,2],[1,4]]);
> is_func(k9);
> K := {[[x,y], k9(x,y)] | x,y in Z9};
> is_map(K); is_func(K);
b) Tyyppi map on matemaattisesti ottaen relaatio,
ts. jonkin karteesisen tulon A×B osajoukko. Sen erikoistapaus
smap on relaatio, joka on myös funktio. Muodosta ISETL-funktio
is_smap, joka testaa onko annettu relaatio funktio.
Tehtävä 10. Logiikkaa
a) Arvaa ensin - ja kokeile jos tarpeen - mitä tulostavat seuraavat
ISETL-käskyt:
> true and false; true and (not false);
> true impl false; false impl true;
> (1 < 2) impl (2 > 3);
> (1 < 2) impl (2 < 3);
> true iff true;
> true iff false;
b) ISETL-komento impl vastaa matematiikan ''jos-niin''
ilmausta, esimerkiksi väite
Jos a on jaollinen neljällä, niin a on
jaollinen kahdella.
voidaan kirjoittaa ISETLissä näin:
> (a mod 4 = 0) impl (a mod 2 = 0);
Miten tutkit ISETLillä äskeisen väitteen todenperäisyyttä
kaikille a Î {-50,-49,...,50}?
ISETL-rakenne:
c) Mitä tehdään seuraavassa?
> for TA1 in [true,false] do
>> for TA2 in [true,false] do
>> print [TA1, TA2, TA1 and TA2,
>> TA1 or TA2, TA1 impl TA2, TA1 iff TA2];
>> end for;
>> end for;
File translated from TEX by TTH,
version 1.96.
On 11 Oct 1999, 09:39.