Ruka hadi maudhui
The Lumenary
Chekechea–Darasa la 2Umri miaka 5–8 dakika 20

Mikusanyiko

Kupanga, kuwa mwanachama, na sanduku tupu la kushangaza — mawazo ya kwanza kabisa kuhusu seti.

Imehakikiwa rasmi · 5 LeanImejaribiwa kikokotozi · 1 PythonImeandaliwa na AI · inasubiri ukaguzi wa binadamuImekaguliwa kihisabati: Inasubiri ukaguzi wa binadamu

Waongozaji wako: Chloe, Margaret, Gideon

Hii ni rasimu ya tafsiri iliyotengenezwa na mashine. Bado haijakaguliwa na binadamu wala mwanahisabati.

Saidia kutafsiri →
KichocheoH

Kikapu kutoka sokoni

Amara na babu yake wamerudi nyumbani kutoka sokoni wakiwa na kikapu kikubwa. Kuna ndizi na malimau, matufaha na stroberi, tango moja, pea moja, chungwa moja na karoti moja.

"Tuweke kila kitu mahali pake," anasema Babu. "Lakini kila kitu kinakwenda wapi?"

Ili kupanga vizuri, Amara anahitaji kanuni — njia ya kuamua kila kitu kinakaa wapi. Wanahisabati hufanya hivi kila wakati. Wao hukusanya vitu katika mikusanyiko.

Chunguza

Panga kikapu

Jaribu kupanga kikapu wewe mwenyewe. Kwanza panga kwa rangi. Kisha anza upya na upange kwa umbo.

Mchezo wa kupanga sokoni

Chagua kitu kutoka kwenye kikapu, kisha chagua sanduku linalokifaa.

Panga kwa:

Kikapu

Chagua kitu kutoka kwenye kikapu.

Je, uliona sanduku la vitu vya buluu? Hakuna kitu kilichoingia ndani yake. Je, bado ni mkusanyiko? Endelea kusoma ili ujue!

FasiliH

Mawazo makuu

Fasili— mkusanyiko

Mkusanyiko ni vitu kadhaa tunavyovifikiria kwa pamoja. Vitu vilivyomo katika mkusanyiko huitwa wanachama wake.

Kitu kinapokuwa katika mkusanyiko, tunasema kwamba kitu hicho ni mwanachama wa mkusanyiko huo. Ndizi ni mwanachama wa mkusanyiko wa vitu vya njano. Tufaha si mwanachama.

Fasili— mkusanyiko uleule

Mikusanyiko miwili ni mkusanyiko uleule inapokuwa na wanachama walewale kabisa. Haijalishi wanachama wamepangwa kwa mpangilio gani.

Fasili— mkusanyiko mtupu

Mkusanyiko usio na mwanachama hata mmoja huitwa mkusanyiko mtupu. Sanduku la vitu vya buluu ni tupu — lakini bado ni mkusanyiko!

Mifano iliyofanyiwa kaziH

Tufanye mazoezi pamoja

Mfano— Je, ni mwanachama?

Huu hapa ni mkusanyiko: 🍎 🍌 🍐.

  • Je, 🍌 ni mwanachama? Ndiyo — iko pale pale.
  • Je, 🍋 ni mwanachama? Hapana — tazama kwa makini. Hakuna limau.

Mfano— Uleule, au tofauti?

Sanduku la Kenji lina 🍎 na 🍌. Sanduku la Lucía lina 🍌 na 🍎.

Yana wanachama walewale, ila kwa mpangilio tofauti tu. Kwa hiyo ni mkusanyiko uleule.

Mfano— Ni vingapi?

Hesabu mkusanyiko 🍊 🍋 🍎 🍓. Gusa kila kimoja mara moja na useme namba: moja, mbili, tatu, nne. Kuna wanachama 4.

Sasa vihesabu ukianzia kwenye stroberi. Bado unapata 4!

MaelezoH

Kwa nini kuhesabu hutoa jibu lilelile kila mara

Tunapohesabu, tunaoanisha kila kitu na neno moja tu la kuhesabia: moja, mbili, tatu, nne. Kila kitu kinapata neno moja, na hakuna neno linalotumika mara mbili.

Ukianzia mahali pengine, unafanya uoanishaji tofauti — lakini bado unatumia maneno yaleyale ya kuhesabia, kwa sababu idadi ya vitu ni ileile kama mwanzo. Hakuna kilichoongezwa na hakuna kilichoondolewa.

Kwa watu wazima · wazo hili linakuwa nini baadaye

Wazo kwamba "kuhesabu ni kuoanisha" ni mbegu ya wazo zito katika hisabati: mikusanyiko miwili ina idadi sawa ya wanachama ikiwa na tu ikiwa wanachama wake wanaweza kuoanishwa mmoja kwa mmoja. Baadaye sana, wazo hili la kuoanisha huwawezesha wanahisabati kulinganisha ukubwa wa mikusanyiko isiyo na kikomo.

Hisabati rasmiF

Mchezo wa ndiyo-au-hapana wa Gideon

Gideon anapenda kauli ambazo ni kweli waziwazi au si kweli waziwazi. Tazama mkusanyiko wa vitu vya njano: 🍌 🍋. Je, kila kauli ni kweli au si kweli?

  1. "Ndizi ni mwanachama wa mkusanyiko wa njano." — Kweli.
  2. "Kila mwanachama wa mkusanyiko wa njano ni mrefu." — Si kweli! Limau ni la mviringo. Mfano mmoja unaovunja kanuni unatosha kuonyesha kwamba kauli si kweli.
  3. "Kuna mwanachama wa mkusanyiko wa buluu." — Si kweli. Mkusanyiko wa buluu ni mtupu.
Kwa watu wazima · mawazo yaleyale katika Lean, kikagua uthibitisho

Wasaidizi wa uthibitisho wa kompyuta kama Lean wanaweza kukagua kauli kama hizi. Hapa chini, kikapu kimeandikwa kama orodha ya Lean. Lean inakagua kwamba embe ni mwanachama wa kikapu, kwamba kikapu kina wanachama 3, na kwamba hakuna kitu kilicho mwanachama wa orodha tupu.

mango_in_basketLean 4Imethibitishwa hapa kutokana na ukweli wa msingiImehakikiwa rasmi
/-- There is a mango in the basket: it is the very first thing in the list. -/
theorem mango_in_basket : "mango" ∈ basket :=
  List.Mem.head ["orange", "banana"]
Aksiomu zilizotumika: Hakuna aksiomuformal/Lumenary/Collections.leanIjaribu katika kihariri cha Lean mtandaoni
basket_countLean 4Imethibitishwa hapa kutokana na ukweli wa msingiImehakikiwa rasmi
/-- The basket holds three pieces of fruit. Lean counts them itself, so `rfl` is enough. -/
theorem basket_count : basket.length = 3 := rfl
Aksiomu zilizotumika: Hakuna aksiomuformal/Lumenary/Collections.leanIjaribu katika kihariri cha Lean mtandaoni
nothing_in_emptyLean 4Imethibitishwa hapa kutokana na ukweli wa msingiImehakikiwa rasmi
/-- The empty list has no members at all. -/
theorem nothing_in_empty : ∀ x : String, x ∉ ([] : List String) := by
  intro x h
  -- A proof of `x ∈ []` would have to come from one of the ways of building membership,
  -- but none of them produces an empty list, so there is no case left to consider.
  cases h
Aksiomu zilizotumika: Hakuna aksiomuformal/Lumenary/Collections.leanIjaribu katika kihariri cha Lean mtandaoni

Orodha hukumbuka mpangilio, kwa hiyo Lean inasema orodha [1, 2] ni tofauti na [2, 1] — ingawa zina wanachama walewale kabisa. Mkusanyiko unaosahau mpangilio ndio wanahisabati wanaouita seti, mada ya somo linalofuata.

order_matters_for_listsLean 4Imethibitishwa hapa kutokana na ukweli wa msingiImehakikiwa rasmi
/-- For lists, order matters: `[1, 2]` and `[2, 1]` are different lists.
`decide` asks Lean to compare the two lists element by element. -/
theorem order_matters_for_lists : ([1, 2] : List Nat) ≠ [2, 1] := by decide
Aksiomu zilizotumika: Hakuna aksiomuformal/Lumenary/Collections.leanIjaribu katika kihariri cha Lean mtandaoni
same_membersLean 4Imethibitishwa hapa kutokana na ukweli wa msingiImehakikiwa rasmi
/-- …but `[1, 2]` and `[2, 1]` have exactly the same members. As *sets* they would be equal;
as *lists* they are not (see `order_matters_for_lists`). -/
theorem same_members : ∀ x : Nat, x ∈ [1, 2] ↔ x ∈ [2, 1] := by
  intro x
  -- Being in a list means being equal to one of its entries:
  -- `x ∈ [1, 2]` unfolds to `x = 1 ∨ x = 2`, and `x ∈ [2, 1]` to `x = 2 ∨ x = 1`.
  simp only [List.mem_cons, List.not_mem_nil, or_false]
  -- "or" does not care about order.
  exact Or.comm
Aksiomu zilizotumika: propextformal/Lumenary/Collections.leanIjaribu katika kihariri cha Lean mtandaoni
UkokotoajiC

Margaret anahesabu kikapu cha sokoni

Kwa watu wazima · Programu ya Margaret

Programu hii ya Python inapanga kikapu cha sokoni kwa aina na kwa rangi, na inahesabu kila fungu. Bonyeza Endesha ili uijaribu kwenye kivinjari chako. Pia inajaribu mipangilio yote 720 ya kikapu chenye vitu 6. Hilo linakagua kikapu hiki tu; maelezo yaliyo hapo juu yanatuambia kwa nini inafanya kazi kwa kila kikapu.

Sorting and counting a market basketPythonUkokotoaji kamiliUkaguzi kamili wa visa vyote vyenye kikomoImejaribiwa kikokotozi
"""Sorting and counting a market basket.

A *collection* here is a basket of items. Two mangoes are two different items
that happen to share a name, so the basket is a list (order and repeats are
recorded), not a set. We sort the basket by a property, count each group, and
check that the counts do not depend on the order in which the items were
picked.

Runs unchanged in the browser (Pyodide) using only the standard library.
"""

from collections import Counter
from itertools import permutations
from math import factorial
import textwrap

#: The basket, in the order the items were picked. Each item is
#: (name, kind, colour). Repeated names are separate items.
BASKET = (
    ("mango", "fruit", "yellow"),
    ("okra", "vegetable", "green"),
    ("banana", "fruit", "yellow"),
    ("lime", "fruit", "green"),
    ("carrot", "vegetable", "orange"),
    ("mango", "fruit", "yellow"),
    ("aubergine", "vegetable", "purple"),
    ("orange", "fruit", "orange"),
    ("lime", "fruit", "green"),
    ("yam", "vegetable", "brown"),
)

#: Positions of each property inside an item tuple.
PROPERTIES = {"name": 0, "kind": 1, "colour": 2}

def value(item, prop):
    """Return the value of property ``prop`` ("name", "kind" or "colour") of an item."""
    try:
        return item[PROPERTIES[prop]]
    except KeyError:
        raise ValueError(f"unknown property {prop!r}; expected one of {sorted(PROPERTIES)}") from None

def sort_by(items, *props):
    """Return a new list of the items sorted by the given properties, in priority order.

    The original collection is not changed. With no properties, items are sorted
    by (name, kind, colour) as plain tuples.
    """
    if not props:
        return sorted(items)
    return sorted(items, key=lambda item: tuple(value(item, p) for p in props))

def group_by(items, prop):
    """Group items by a property: return {value: [items with that value]} with keys sorted."""
    groups = {}
    for item in items:
        groups.setdefault(value(item, prop), []).append(item)
    return {key: groups[key] for key in sorted(groups)}

def count_by(items, prop):
    """Count how many items have each value of ``prop``: {value: count}, keys sorted."""
    counts = Counter(value(item, prop) for item in items)
    return {key: counts[key] for key in sorted(counts)}

def distinct_values(items, prop):
    """Return the set of different values of ``prop`` that occur in the collection."""
    return {value(item, prop) for item in items}

def counts_same_in_every_order(items, prop):
    """Check every ordering of ``items``: do the group counts by ``prop`` ever change?

    Returns ``(orders_checked, all_same)``. The number of orders is n!, so this
    is only practical for small collections (n <= 8 or so).
    """
    items = list(items)
    reference = count_by(items, prop)
    checked = 0
    for order in permutations(items):
        checked += 1
        if count_by(order, prop) != reference:
            return checked, False
    return checked, True

def format_counts(counts):
    """Format {value: count} as 'a 2, b 3' with the total in brackets."""
    parts = ", ".join(f"{key} {n}" for key, n in counts.items())
    return f"{parts}   (total {sum(counts.values())})"

def main():
    basket = list(BASKET)
    print(f"A market basket of {len(basket)} items, in the order they were picked:")
    print("  " + ", ".join(value(item, "name") for item in basket))
    print()
    print("Sorted by kind, then colour, then name:")
    print(f"  {'kind':<10} {'colour':<8} name")
    for item in sort_by(basket, "kind", "colour", "name"):
        print(f"  {value(item, 'kind'):<10} {value(item, 'colour'):<8} {value(item, 'name')}")
    print()
    by_kind = count_by(basket, "kind")
    by_colour = count_by(basket, "colour")
    print("Counts by kind:   " + format_counts(by_kind))
    print("Counts by colour: " + format_counts(by_colour))
    sums = " + ".join(str(n) for n in by_kind.values())
    print(f"Every item lands in exactly one group, so the groups add up: {sums} = {len(basket)}.")
    names = distinct_values(basket, "name")
    print(f"Different names: {len(names)} (two mangoes are two items with one name).")
    print()
    small = basket[:6]
    n_orders = factorial(len(small))
    print(f"Does order matter? Take the first {len(small)} items and try all {len(small)}! = {n_orders} orders:")
    for prop in ("kind", "colour"):
        checked, same = counts_same_in_every_order(small, prop)
        print(f"  counts by {prop:<6} identical in all {checked} orders: {same}")
    print()
    print(textwrap.fill(
        "Epistemic status: the counts above are exact, and all "
        f"{n_orders} orders of the 6-item basket were checked, which proves "
        "order-independence for that basket only. Why it holds for every finite "
        "collection (counting pairs items with 1, 2, 3, ...) is explained in the "
        "lesson, not by this program.",
        width=78,
    ))

if __name__ == "__main__":
    main()
Inaendeshwa kikamilifu ndani ya kivinjari chako, katika mchakato uliotengwa. Hakuna kinachotumwa kwa seva.
Mazoezi

Zamu yako

Usiwe na haraka. Unaweza kuomba kidokezo wakati wowote unapotaka.

1. Mikusanyiko

Kupasha motoKibinadamu

Huu hapa ni mkusanyiko: 🍎 🍌 🍐. Ni kipi kati ya hivi ambacho ni mwanachama wa mkusanyiko huu?

Chagua moja

2. Mikusanyiko

Kupasha motoKibinadamu

Mkusanyiko huu una wanachama wangapi? 🍊 🥕 🍋 🍎 🍐

3. Mikusanyiko

MsingiKibinadamu

Sanduku la Kenji lina 🍎 🍌 🍐. Sanduku la Lucía lina 🍐 🍎 🍌. Je, ni mkusanyiko uleule?

Chagua moja

4. Mikusanyiko

MsingiKibinadamu

Sanduku la matunda ya buluu ni tupu. Mkusanyiko mtupu una wanachama wangapi?

5. Mikusanyiko

MsingiRasmi

Mchezo wa Gideon: mkusanyiko ni 🍌 🍋 🥒. Je, kauli hii ni kweli au si kweli? "Kila mwanachama wa mkusanyiko huu ni wa njano."

Chagua moja

6. Mikusanyiko

ChangamotoKibinadamu

Kwa watoto wakubwa zaidi: kutoka kwa tufaha (apple), ndizi (banana), stroberi (strawberry) na limau (lemon), andika mkusanyiko wa vitu vyekundu. Tumia maneno ya Kiingereza yanayoonyeshwa kama msimbo, yakitenganishwa kwa koma, kama {kiwi, plum}.

Andika elementi zikitenganishwa kwa koma. Mpangilio na marudio hayajalishi — sawa kabisa na katika seti!

Mawazo potofu ya kawaidaH

Mambo yanayowachanganya watu

Wazo potofu

"Sanduku tupu si mkusanyiko." Ni mkusanyiko! Mkusanyiko mtupu ni mkusanyiko halisi — ila tu hauna wanachama. Wanahisabati wanauona kuwa wa manufaa sana.

Wazo potofu

"Nikivihamisha vitu, napata mkusanyiko tofauti." Kuwahamisha wanachama hubadilisha mpangilio, si mkusanyiko. Wanachama walewale maana yake ni mkusanyiko uleule.

Wazo potofu

"Vitu vikubwa huhesabiwa zaidi." Nazi kubwa na stroberi ndogo, kila kimoja huhesabiwa kama mwanachama mmoja.

Njia za Maajabu

Staajabu zaidi

Je, unaweza kuweka sanduku ndani ya sanduku? Kuna nini ndani ya sanduku lenye sanduku tupu peke yake? Fuata njia hii ikiwa una udadisi — ni ya hiari kabisa.

Njia ya Maajabu · Hiari · haipewi alama kamweBoxes inside boxesWhat is inside a box that contains only an empty box? Is it empty? And can every description you can think of make a collection?Fuata njia
Uhusiano na nadharia ya setiH

Mikusanyiko inatupeleka wapi

Katika somo linalofuata, mikusanyiko inapata jina la watu wazima: seti. Wanahisabati huandika seti ndani ya mabano ya maua, kama {ndizi,limau}\{\text{ndizi}, \text{limau}\}, na huandika seti tupu kama ∅\varnothing.

Kanuni kwamba "mikusanyiko miwili ni mkusanyiko uleule inapokuwa na wanachama walewale" ni mojawapo ya kanuni muhimu zaidi kuhusu seti. Inaitwa kanuni ya upanuzi (kwa Kiingereza, principle of extensionality).

Kwa watu wazima · kanuni za kupanga ni fanksheni

Kanuni ya kupanga inayopeleka kila kitu kwenye sanduku moja tu ni mfano wa fanksheni — mada ya somo la 4. Fanksheni, na njia zinavyojumuishwa, hatimaye huelekea kwenye nadharia ya kategoria. Wanafunzi wadogo hawahitaji neno lolote kati ya haya; kupanga kunatosha.

Historia na muktadha wa dunia

Kuhesabu duniani kote, zamani sana

Watu wamekuwa wakihesabu mikusanyiko kwa muda mrefu sana.

  • Kusini mwa Afrika, mfupa wa nyani wenye mikato — mfupa wa Lebombo — una umri wa zaidi ya miaka elfu arobaini. Baadhi ya watafiti wanadhani mikato hiyo ilikuwa alama za kuhesabia, ingawa hakuna anayejua kwa hakika.
  • Katika milima ya Andes ya Amerika Kusini, watunza kumbukumbu wa Inka walitumia khipu: kamba zenye mafundo ili kurekodi idadi ya watu, wanyama na bidhaa.
  • Tamaduni nyingi zilihesabu kwa vidole vya mikono na miguu, kokoto na mafundo. Neno la Kiingereza calculate (kukokotoa) linatokana na neno la Kilatini linalomaanisha kokoto ndogo.
Usomaji zaidi

Kwa watu wazima: usomaji zaidi

  • Paul R. Halmos, Naive Set Theory (1960) — utangulizi maarufu na unaosomeka kwa urahisi kuhusu seti kwa watu wazima (kwa Kiingereza).
  • Shughuli za kupanga na kuhesabu kwa watoto wadogo zinapatikana katika tovuti nyingi za elimu za bure, kama sehemu ya miaka ya awali ya NRICH (nrich.maths.org, kwa Kiingereza).
Tafakari ya Kikristo ya hiari · kila mmoja ana thamani

Tafakari kutoka katika mapokeo ya Kikristo yanayoihamasisha The Lumenary. Si sehemu ya hisabati, na uko huru kuiruka.

Katika mojawapo ya mifano ya Yesu, mchungaji ana kondoo mia moja. Mmoja anapopotea, mchungaji anatambua — kwa sababu analijua kundi lake, mmoja mmoja — na anatoka kwenda kumtafuta (Luka 15:3–7). Katika hadithi hiyo, kuhesabu ni namna ya kujali: kila mwanachama wa mkusanyiko ana thamani. Hisabati hufundisha tabia hiyohiyo ya kuwa makini, na kila mwanafunzi, kila mahali, ana thamani.