سلة من السوق
عادت أمارا وجدّها من السوق بسلة كبيرة. فيها موز وليمون، وتفاح وفراولة، وخيارة، وكمّثرى، وبرتقالة، وجزرة.
قال الجدّ: «هيّا نرتّب كل شيء. ولكن أين يذهب كل شيء؟»
لكي ترتّب أمارا الأشياء، تحتاج إلى قاعدة — طريقة تقرّر بها أين يذهب كل شيء. وعلماء الرياضيات يفعلون هذا طوال الوقت؛ فهم يجمعون الأشياء في تجمّعات.
افرز السلة
جرّب أن تفرز السلة بنفسك. افرز أولًا حسب اللون. ثم ابدأ من جديد وافرز حسب الشكل.
لعبة الفرز في السوق
اختر شيئًا من السلة، ثم اختر الصندوق الذي ينتمي إليه.
السلة
اختر شيئًا من السلة.
هل لاحظت صندوق الأشياء الزرقاء؟ لم يدخله أي شيء. فهل يبقى تجمّعًا؟ تابع القراءة لتعرف!
أفكار كبيرة
تعريف— التجمّع
التجمّع عددٌ من الأشياء نفكّر فيها معًا. والأشياء الموجودة في التجمّع تُسمّى أعضاءه.
عندما يكون شيء ما في تجمّع، نقول إنه ينتمي إلى هذا التجمّع. الموزة تنتمي إلى تجمّع الأشياء الصفراء. أما التفاحة فلا.
تعريف— التجمّع نفسه
يكون التجمّعان التجمّعَ نفسه عندما يكون لهما الأعضاء أنفسهم تمامًا. ولا يهمّ بأي ترتيب يكون الأعضاء.
تعريف— التجمّع الخالي
التجمّع الذي ليس فيه أي عضو على الإطلاق يُسمّى التجمّع الخالي. صندوق الأشياء الزرقاء خالٍ — لكنه يبقى تجمّعًا!
لنتدرّب معًا
مثال— هل ينتمي؟
هذا تجمّع: 🍎 🍌 🍐.
- هل 🍌 عضو فيه؟ نعم — إنه هناك أمامك.
- هل 🍋 عضو فيه؟ لا — انظر جيدًا. لا توجد ليمونة.
مثال— متماثلان أم مختلفان؟
في صندوق كينجي 🍎 و 🍌. وفي صندوق لوسيا 🍌 و 🍎.
لهما الأعضاء أنفسهم، لكن بترتيب مختلف فقط. إذن هما التجمّع نفسه.
مثال— كم عددها؟
عُدّ التجمّع 🍊 🍋 🍎 🍓. المس كل واحد منها مرة واحدة وقل عددًا: واحد، اثنان، ثلاثة، أربعة. في التجمّع 4 أعضاء.
والآن عُدّها بدءًا من الفراولة. ستحصل على 4 أيضًا!
لماذا يعطي العدّ الجواب نفسه دائمًا
عندما نعدّ، نُطابق كل شيء مع كلمة عدّ واحدة بالضبط: واحد، اثنان، ثلاثة، أربعة. كل شيء يأخذ كلمة واحدة، ولا تُستعمل أي كلمة مرتين.
إذا بدأت من مكان آخر، فإنك تصنع مطابقة مختلفة — لكنك تستهلك كلمات العدّ نفسها، لأن عدد الأشياء هو نفسه كما كان. لم يُضَف شيء، ولم يُؤخذ شيء.
للكبار · إلى أين تقود هذه الفكرة
فكرة أن «العدّ مطابقة» هي بذرة فكرة عميقة في الرياضيات: يكون لتجمّعين العدد نفسه من الأعضاء إذا وفقط إذا أمكنت مزاوجة أعضائهما واحدًا لواحد. وبعد ذلك بكثير، تتيح فكرة المزاوجة هذه لعلماء الرياضيات مقارنة أحجام التجمّعات اللانهائية.
لعبة نعم أو لا عند Gideon
يحبّ Gideon العبارات التي تكون صحيحة بوضوح أو خاطئة بوضوح. انظر إلى تجمّع الأشياء الصفراء: 🍌 🍋. هل كل عبارة صحيحة أم خاطئة؟
- «الموزة تنتمي إلى التجمّع الأصفر.» — صحيحة.
- «كل عضو في التجمّع الأصفر طويل.» — خاطئة! الليمونة مستديرة. ومثال واحد يخالف القاعدة يكفي لإثبات أن العبارة خاطئة.
- «يوجد عضو في التجمّع الأزرق.» — خاطئة. التجمّع الأزرق خالٍ.
للكبار · الأفكار نفسها في Lean، مدقّق البراهين
تستطيع مساعدات البرهان الحاسوبية مثل Lean أن تتحقّق من عبارات كهذه. فيما يلي، كُتبت السلة على شكل قائمة في Lean. يتحقّق Lean من أن المانجو ينتمي إلى السلة، وأن في السلة 3 أعضاء، وأن لا شيء ينتمي إلى القائمة الفارغة.
/-- 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"]/-- The basket holds three pieces of fruit. Lean counts them itself, so `rfl` is enough. -/
theorem basket_count : basket.length = 3 := rfl/-- 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القوائم تتذكّر الترتيب، لذا يقول Lean إن القائمة [1, 2] مختلفة عن [2, 1] — مع أن لهما الأعضاء أنفسهم تمامًا. والتجمّع الذي ينسى الترتيب هو ما يسمّيه علماء الرياضيات مجموعة، وهي موضوع الدرس التالي.
/-- 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/-- …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.commMargaret تعدّ سلة السوق
للكبار · برنامج Margaret
يفرز برنامج Python هذا سلة من السوق حسب النوع وحسب اللون، ويعدّ كل قسم. اضغط شغّل لتجرّبه في متصفحك. ويجرّب أيضًا كل الترتيبات الـ720 لسلة فيها 6 أشياء. هذا يتحقّق من هذه السلة فقط؛ أما الشرح السابق فيخبرنا لماذا ينجح الأمر مع كل سلة.
"""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()دورك الآن
خذ وقتك. يمكنك طلب تلميح متى شئت.
1. التجمّعات
إحماءبشريهذا تجمّع: 🍎 🍌 🍐. أيّ هذه الأشياء عضو في هذا التجمّع؟
2. التجمّعات
إحماءبشريكم عضوًا في هذا التجمّع؟ 🍊 🥕 🍋 🍎 🍐
3. التجمّعات
أساسيبشريفي صندوق كينجي 🍎 🍌 🍐. وفي صندوق لوسيا 🍐 🍎 🍌. هل هما التجمّع نفسه؟
4. التجمّعات
أساسيبشريصندوق الفاكهة الزرقاء فارغ. كم عضوًا في التجمّع الخالي؟
5. التجمّعات
أساسيصوريلعبة Gideon: التجمّع هو 🍌 🍋 🥒. هل هذه العبارة صحيحة أم خاطئة؟ «كل عضو في هذا التجمّع أصفر.»
6. التجمّعات
تحدٍّبشريللأطفال الأكبر سنًّا: من بين التفاحة (apple) والموزة (banana) والفراولة (strawberry) والليمونة (lemon)، اكتب تجمّع الأشياء الحمراء. استخدم الكلمات الإنجليزية الظاهرة في الشيفرة، مفصولة بفواصل، مثل {kiwi, plum}.
أمور يخطئ فيها الناس كثيرًا
مفهوم خاطئ
«الصندوق الفارغ ليس تجمّعًا.» بل هو تجمّع! التجمّع الخالي تجمّع حقيقي — كل ما في الأمر أنه ليس له أعضاء. ويجده علماء الرياضيات مفيدًا جدًا.
مفهوم خاطئ
«إذا حرّكت الأشياء من أماكنها، حصلت على تجمّع مختلف.» تحريك الأعضاء يغيّر الترتيب، لا التجمّع. الأعضاء أنفسهم يعني التجمّع نفسه.
مفهوم خاطئ
«الأشياء الأكبر تُحسب أكثر.» جوزة هند كبيرة وحبّة فراولة صغيرة: كلٌّ منهما تُحسب عضوًا واحدًا.
استزد من الدهشة
هل يمكنك أن تضع صندوقًا داخل صندوق؟ ماذا يوجد داخل صندوق لا يحتوي إلا على صندوق فارغ؟ اتبع هذا المسار إن كنت فضوليًا — فهو اختياري تمامًا.
مسار الدهشة · اختياري · لا يُقيَّم أبدًاBoxes 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?اتبع المسارإلى أين تقودنا التجمّعات
في الدرس التالي، تحصل التجمّعات على اسم يستعمله الكبار: المجموعات. يكتب علماء الرياضيات المجموعة بين قوسين معقوصين، مثل ، ويكتبون المجموعة الخالية هكذا: .
القاعدة «يكون التجمّعان التجمّعَ نفسه عندما يكون لهما الأعضاء أنفسهم» من أهم القواعد المتعلقة بالمجموعات. وتُسمّى مبدأ الامتداد.
للكبار · قواعد الفرز دوال
قاعدة الفرز التي ترسل كل شيء إلى صندوق واحد بالضبط هي مثال على دالة — موضوع الدرس 4. والدوال، والطرق التي تتركّب بها، تقود في النهاية إلى نظرية الفئات. لا يحتاج المتعلّمون الصغار إلى أيٍّ من هذه الكلمات؛ فالفرز يكفي.
العدّ حول العالم، منذ زمن بعيد
يعدّ الناس التجمّعات منذ زمن بعيد جدًا.
- في جنوب أفريقيا، يزيد عمر عظمة قرد بابون حُفرت فيها حزوز — وهي عظمة ليبومبو — على أربعين ألف سنة. يعتقد بعض الباحثين أن الحزوز كانت علامات للعدّ، مع أن أحدًا لا يعرف ذلك يقينًا.
- في جبال الأنديز بأمريكا الجنوبية، استخدم حَفَظة السجلات من الإنكا الكيبو: حبالًا معقودة لتسجيل أعداد الناس والحيوانات والبضائع.
- عدّت ثقافات كثيرة بأصابع اليدين والقدمين، وبالحصى، وبالعُقد. وكلمة calculate الإنجليزية، ومعناها «يحسب»، مشتقّة من الكلمة اللاتينية التي تعني الحصاة الصغيرة.
للكبار: قراءات إضافية
- Paul R. Halmos، كتاب Naive Set Theory، 1960 — مقدمة كلاسيكية سهلة القراءة في المجموعات للكبار (بالإنجليزية).
- يمكن العثور على أنشطة للأطفال الصغار تستكشف الفرز والعدّ في مواقع تعليمية مجانية كثيرة، مثل قسم السنوات الأولى في موقع NRICH (nrich.maths.org، بالإنجليزية).
تأمّل مسيحي اختياري · كلّ واحدٍ له حساب
تأمّل من التقليد المسيحي الذي يُلهم The Lumenary. ليس جزءًا من الرياضيات، ويمكنك تخطّيه بكل حرية.
في أحد أمثال يسوع، راعٍ له مئة خروف. وعندما يضلّ واحد منها، ينتبه لذلك — لأنه يعرف قطيعه واحدًا واحدًا — فيخرج ليبحث عنه (لوقا 15: 3–7). في تلك القصة، العدّ صورة من صور الرعاية: كل عضو في التجمّع له قيمته. والرياضيات تعلّمنا عادة الانتباه نفسها، وكل متعلّم، في كل مكان، له حساب.