Spaces:
Running
Running
# /// script | |
# requires-python = ">=3.10" | |
# dependencies = [ | |
# "marimo", | |
# ] | |
# /// | |
import marimo | |
__generated_with = "0.10.17" | |
app = marimo.App() | |
def _(mo): | |
mo.md( | |
""" | |
# 🎯 Set Theory: The Building Blocks of Probability | |
Welcome to the magical world of sets! Think of sets as the LEGO® blocks of probability - | |
they're the fundamental pieces we use to build more complex concepts. | |
## What is a Set? | |
A set is a collection of distinct objects, called elements or members. | |
For example: | |
- 🎨 Colors = {red, blue, green} | |
- 🔢 Even numbers under 10 = {2, 4, 6, 8} | |
- 🐾 Pets = {dog, cat, hamster, fish} | |
""" | |
) | |
return | |
def _(elements): | |
elements | |
return | |
def _(mo): | |
# interactive set creator | |
elements = mo.ui.text( | |
value="🐶,🐱,🐹", | |
label="Create your own set (use commas to separate elements)" | |
) | |
return (elements,) | |
def _(elements, mo): | |
user_set = set(elements.value.split(',')) | |
mo.md(f""" | |
### Your Custom Set: | |
${{{', '.join(user_set)}}}$ | |
Number of elements: {len(user_set)} | |
""") | |
return (user_set,) | |
def _(mo): | |
mo.md( | |
""" | |
## 🎮 Set Operations Playground | |
Let's explore the three fundamental set operations: | |
- Union (∪): Combining sets | |
- Intersection (∩): Finding common elements | |
- Difference (-): What's unique to one set | |
Try creating two sets below! | |
""" | |
) | |
return | |
def _(operation): | |
operation | |
return | |
def _(mo): | |
set_a = mo.ui.text(value="🍕,🍔,🌭,🍟", label="Set A (Fast Food)") | |
set_b = mo.ui.text(value="🍕,🥗,🥙,🍟", label="Set B (Healthy-ish Food)") | |
operation = mo.ui.dropdown( | |
options=["Union", "Intersection", "Difference"], | |
value="Union", | |
label="Choose Operation" | |
) | |
return operation, set_a, set_b | |
def _(mo, operation, set_a, set_b): | |
A = set(set_a.value.split(',')) | |
B = set(set_b.value.split(',')) | |
results = { | |
"Union": (A | B, "∪", "Everything from both sets"), | |
"Intersection": (A & B, "∩", "Common elements"), | |
"Difference": (A - B, "-", "In A but not in B") | |
} | |
_result, symbol, description = results[operation.value] | |
mo.md(f""" | |
### Set Operation Result | |
$A {symbol} B = {{{', '.join(_result)}}}$ | |
**What this means**: {description} | |
**Set A**: {', '.join(A)} | |
**Set B**: {', '.join(B)} | |
""") | |
return A, B, description, results, symbol | |
def _(mo): | |
mo.md( | |
""" | |
## 🎬 Netflix Shows Example | |
Let's use set theory to understand content recommendations! | |
""" | |
) | |
return | |
def _(viewer_type): | |
viewer_type | |
return | |
def _(mo): | |
# Netflix genres example | |
action_fans = {"Stranger Things", "The Witcher", "Money Heist"} | |
drama_fans = {"The Crown", "Money Heist", "Bridgerton"} | |
viewer_type = mo.ui.radio( | |
options=["New Viewer", "Action Fan", "Drama Fan"], | |
value="New Viewer", | |
label="Select Viewer Type" | |
) | |
return action_fans, drama_fans, viewer_type | |
def _(action_fans, drama_fans, mo, viewer_type): | |
recommendations = { | |
"New Viewer": action_fans | drama_fans, # Union for new viewers | |
"Action Fan": action_fans - drama_fans, # Unique action shows | |
"Drama Fan": drama_fans - action_fans # Unique drama shows | |
} | |
result = recommendations[viewer_type.value] | |
explanation = { | |
"New Viewer": "You get everything to explore!", | |
"Action Fan": "Pure action, no drama!", | |
"Drama Fan": "Drama-focused selections!" | |
} | |
mo.md(f""" | |
### 🎬 Recommended Shows | |
Based on your preference for **{viewer_type.value}**, we recommend: | |
{', '.join(result)} | |
**Why these shows?** | |
{explanation[viewer_type.value]} | |
""") | |
return explanation, recommendations, result | |
def _(mo): | |
mo.md( | |
""" | |
## 🧮 Set Properties | |
Important properties of sets: | |
1. **Commutative**: A ∪ B = B ∪ A | |
2. **Associative**: (A ∪ B) ∪ C = A ∪ (B ∪ C) | |
3. **Distributive**: A ∪ (B ∩ C) = (A ∪ B) ∩ (A ∪ C) | |
Let's verify these with a fun exercise! | |
""" | |
) | |
return | |
def _(mo, property_check, set_size): | |
mo.hstack([property_check, set_size]) | |
return | |
def _(mo): | |
# Interactive property verifier | |
property_check = mo.ui.dropdown( | |
options=[ | |
"Commutative (Union)", | |
"Commutative (Intersection)", | |
"Associative (Union)" | |
], | |
value="Commutative (Union)", | |
label="Select Property to Verify" | |
) | |
set_size = mo.ui.slider( | |
value=3, | |
start=2, | |
stop=5, | |
label="Set Size for Testing" | |
) | |
return property_check, set_size | |
def _(mo, property_check, set_size): | |
import random | |
# Create random emoji sets for verification | |
emojis = ["😀", "😎", "🤓", "🤠", "😴", "🤯", "🤪", "😇"] | |
set1 = set(random.sample(emojis, set_size.value)) | |
set2 = set(random.sample(emojis, set_size.value)) | |
operations = { | |
"Commutative (Union)": ( | |
set1 | set2, | |
set2 | set1, | |
"A ∪ B = B ∪ A" | |
), | |
"Commutative (Intersection)": ( | |
set1 & set2, | |
set2 & set1, | |
"A ∩ B = B ∩ A" | |
), | |
"Associative (Union)": ( | |
(set1 | set2) | set(random.sample(emojis, set_size.value)), | |
set1 | (set2 | set(random.sample(emojis, set_size.value))), | |
"(A ∪ B) ∪ C = A ∪ (B ∪ C)" | |
) | |
} | |
result1, result2, formula = operations[property_check.value] | |
mo.md(f""" | |
### Property Verification | |
**Testing**: {formula} | |
Set A: {', '.join(set1)} | |
Set B: {', '.join(set2)} | |
**Left Side**: {', '.join(result1)} | |
**Right Side**: {', '.join(result2)} | |
**Property holds**: {'✅' if result1 == result2 else '❌'} | |
""") | |
return emojis, formula, operations, random, result1, result2, set1, set2 | |
def _(mo): | |
quiz = mo.md(""" | |
## 🎯 Quick Challenge | |
Given these sets: | |
- A = {🎮, 📱, 💻} | |
- B = {📱, 💻, 🖨️} | |
- C = {💻, 🖨️, ⌨️} | |
Can you: | |
1. Find all elements that are in either A or B | |
2. Find elements common to all three sets | |
3. Find elements in A that aren't in C | |
<details> | |
<summary>Check your answers!</summary> | |
1. A ∪ B = {🎮, 📱, 💻, 🖨️}<br> | |
2. A ∩ B ∩ C = {💻}<br> | |
3. A - C = {🎮, 📱} | |
</details> | |
""") | |
mo.callout(quiz, kind="info") | |
return (quiz,) | |
def _(mo): | |
callout_text = mo.md(""" | |
## 🎯 Set Theory Master in Training! | |
You've learned: | |
- Basic set operations | |
- Set properties | |
- Real-world applications | |
Coming up next: Axiomatic Probability! 🎲✨ | |
Remember: In probability, every event is a set, and every set can be an event! | |
""") | |
mo.callout(callout_text, kind="success") | |
return (callout_text,) | |
def _(): | |
import marimo as mo | |
return (mo,) | |
if __name__ == "__main__": | |
app.run() | |