Logika Formal: Anatomi Modus Tollens
Anatomi $P \rightarrow Q$
...
...call...
...call...`
Page 2: Sesat Pikir: Affirming the Consequent Focus: Logical fallacy of reversing implication. Krux: Knowing $Q$ happens does not guarantee $P$. Tool: render_interactive (Clickable Venn diagram) + make_quiz
Page 3: Hukum Kontraposisi Focus: Mathematical proof of the valid way to reverse implication. Krux: $P \rightarrow Q \equiv \sim Q \rightarrow \sim P$. Truth table proof. Tool: render_svg (Truth Table) + make_quiz
Page 4: Modus Tollens: Eksekusi Simbolik Focus: Applying Modus Tollens (derived from contraposition) to the original problem. Krux: Translating to symbols frees us from bias, giving a mathematical certainty. Tool: render_svg (Formal proof block)
Page 5: Rangkuman & Lanjut Belajar Focus: Recap all key points, next steps. No visual.
Writing style: Conversational but formal logic concepts. Use > [!Callout] styles. All math wrapped in $ ... $.
Let's carefully construct the tool calls. Remember: DO NOT WRITE `` as text. USE ACTUAL FUNCTION CALLS.
For Page 1:
```interactive LOGIKA KAUSALITAS & IMPLIKASI Premis: "Jika P, maka Q" (P ⊆ Q) Ketuk salah satu dari 3 wilayah diagram untuk menguji status kebenarannya secara empiris. Target Terpilih: Area Luar Q Interaktif: Klik area SEMESTA S (Realitas) Q (Akibat) P (Penyebab) (1) Di Dalam P (2) Q tanpa P (3) Di Luar Q Analisis Formal Logika Q Tidak Terjadi → P Pasti Tidak Terjadi VALID "Q tidak terjadi, otomatis P juga tidak terjadi (Valid)" Kaidah: Modus Tollens (~Q → ~P) Karena seluruh lingkaran P berada di dalam wadah Q, jika suatu titik berada di luar batas Q sama sekali, maka mustahil titik tersebut bisa menyentuh P. (function() { // Definisi Model Data 3 Wilayah const regions = { 1: { tag: "Area (1): Di dalam P", marker: { x: 220, y: 190 }, color: "var(--viz-accent, #FF2D85)", title: "P Terjadi → Q Pasti Terjadi", quote: "P terjadi, otomatis Q terjadi (Valid)", rule: "Modus Ponens (P \u2192 Q)", valid: true, statusLabel: "VALID", statusClass: "bg-[var(--viz-accent-bg,#FFF0F6)] text-[var(--viz-accent,#FF2D85)] border border-[var(--viz-accent,#FF2D85)]", explanation: "Karena himpunan P seutuhnya dikelilingi dan termuat dalam Q (subhimpunan murni), setiap peristiwa yang berada di area P pasti secara otomatis merupakan anggota dari himpunan Q." }, 2: { tag: "Area (2): Di dalam Q, di luar P", marker: { x: 330, y: 190 }, color: "var(--viz-series-5, #FF9500)", title: "Q Terjadi \u2260 P Terjadi (Kekeliruan Konvers)", quote: "Q terjadi, tapi P TIDAK terjadi. Ini bukti bahwa Q tidak menjamin P! (Sesat Pikir)", rule: "Affirming the Consequent (Fallacy)", valid: false, statusLabel: "SESAT PIKIR", statusClass: "bg-[var(--viz-accent-bg,#FFF0F6)] text-[var(--viz-series-5,#FF9500)] border border-[var(--viz-series-5,#FF9500)]", explanation: "Daerah bulan sabit ini membuktikan bahwa akibat Q bisa tercapai melalui faktor lain selain P. Mengetahui akibat (Q) terjadi tidak boleh dijadikan bukti bahwa pemicu spesifiknya adalah (P)." }, 3: { tag: "Area (3): Di luar Q", marker: { x: 75, y: 75 }, color: "var(--viz-series-1, #5856D6)", title: "Q Tidak Terjadi → P Pasti Tidak Terjadi", quote: "Q tidak terjadi, otomatis P juga tidak terjadi (Valid)", rule: "Modus Tollens (~Q \u2192 ~P)", valid: true, statusLabel: "VALID", statusClass: "bg-surface text-on-surface border border-border", explanation: "Karena seluruh lingkaran P berada di dalam wadah Q, jika suatu entitas tidak sanggup memenuhi kondisi batas terluar (Q), mustahil ia mampu memenuhi kondisi inti (P)." } }; // Elemen DOM const a1 = document.getElementById("area-1"); const a2 = document.getElementById("area-2"); const a3 = document.getElementById("area-3"); const marker = document.getElementById("pointer-marker"); const pinIndicator = document.getElementById("pin-indicator"); const regionTag = document.getElementById("region-tag"); const evalTitle = document.getElementById("eval-title"); const evalQuote = document.getElementById("eval-quote"); const evalRule = document.getElementById("eval-rule"); const evalBadge = document.getElementById("validity-badge"); const evalDesc = document.getElementById("eval-explanation"); const btn1 = document.getElementById("btn-1"); const btn2 = document.getElementById("btn-2"); const btn3 = document.getElementById("btn-3"); const buttons = { 1: btn1, 2: btn2, 3: btn3 }; function selectRegion(id, coords) { const data = regions[id]; if (!data) return; // Gerakkan marker target (bisa titik klik spesifik atau default center zona) const mx = coords ? coords.x : data.marker.x; const my = coords ? coords.y : data.marker.y; marker.setAttribute("transform", `translate(${mx}, ${my})`); // Update Text & Readout regionTag.textContent = data.tag; evalTitle.textContent = data.title; evalQuote.textContent = `"${data.quote}"`; evalRule.textContent = data.rule; evalDesc.textContent = data.explanation; evalBadge.textContent = data.statusLabel; evalBadge.className = `shrink-0 px-3 py-1 rounded-full text-xs font-bold transition-all duration-300 ${data.statusClass}`; pinIndicator.style.backgroundColor = data.color; // Visual Highlight styling pada SVG // Area 1 a1.style.fillOpacity = (id === 1) ? "0.6" : "0.2"; a1.style.strokeWidth = (id === 1) ? "4.5px" : "2.5px"; // Area 2 a2.style.fillOpacity = (id === 2) ? "0.4" : "0.15"; a2.style.strokeWidth = (id === 2) ? "4.5px" : "2.5px"; // Area 3 a3.style.stroke = (id === 3) ? "var(--viz-on-surface, #121212)" : "var(--viz-border, #E5E5EA)"; a3.style.strokeWidth = (id === 3) ? "3.5px" : "2px"; // Button states [1, 2, 3].forEach(n => { if (n === id) { buttons[n].classList.add("bg-on-surface", "text-surface", "border-on-surface"); buttons[n].classList.remove("bg-surface", "text-on-surface", "border-border"); } else { buttons[n].classList.remove("bg-on-surface", "text-surface", "border-on-surface"); buttons[n].classList.add("bg-surface", "text-on-surface", "border-border"); } }); } // Handler helper untuk klik SVG dengan posisi presisi function getSvgCoords(svg, evt) { const pt = svg.createSVGPoint(); pt.x = evt.clientX; pt.y = evt.clientY; const cursorPt = pt.matrixTransform(svg.getScreenCTM().inverse()); return { x: Math.round(cursorPt.x), y: Math.round(cursorPt.y) }; } const svg = document.getElementById("venn-svg"); a1.addEventListener("click", function(e) { e.stopPropagation(); selectRegion(1, getSvgCoords(svg, e)); }); a2.addEventListener("click", function(e) { e.stopPropagation(); selectRegion(2, getSvgCoords(svg, e)); }); a3.addEventListener("click", function(e) { selectRegion(3, getSvgCoords(svg, e)); }); // Quick Button Clicks btn1.addEventListener("click", () => selectRegion(1)); btn2.addEventListener("click", () => selectRegion(2)); btn3.addEventListener("click", () => selectRegion(3)); // Key accessibility [a1, a2, a3].forEach((el, idx) => { el.addEventListener("keydown", (e) => { if (e.key === "Enter" || e.key === " ") { e.preventDefault(); selectRegion(idx + 1); } }); }); // Nilai awal: Tampilkan nilai awal di luar klik (Area 3: Di Luar Q) selectRegion(3, { x: 80, y: 80 }); })(); And then for the quiz: ```xml ```svg Ekuivalensi Implikasi & Kontraposisi Nilai kebenaran p → q identik di setiap baris dengan ~q → ~p p q ~p ~q p → q ~q → ~p B B S S B B B S S B S S S B B S B B S S B B B B Identik p → q ≡ ~q → ~p Wait, the actual tool calls need to be placed EXACTLY where the ` ```svg <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 720 460" width="100%" height="100%"> <defs> <style> .bg { fill: var(--viz-bg, #F2F2F7); } .card { fill: var(--viz-surface, #FFFFFF); stroke: var(--viz-border, #E5E5EA); stroke-width: 1.5; rx: 16px; } .tag-bg { fill: var(--viz-accent-bg, #FFF0F6); stroke: var(--viz-accent, #FF2D85); stroke-width: 1; rx: 999px; } .tag-text { font-family: Inter, system-ui, sans-serif; font-size: 13px; font-weight: 700; fill: var(--viz-accent, #FF2D85); text-anchor: middle; } .header-title { font-family: Inter, system-ui, sans-serif; font-size: 20px; font-weight: 700; fill: var(--viz-on-surface, #121212); } .header-desc { font-family: Inter, system-ui, sans-serif; font-size: 13px; fill: var(--viz-on-surface-secondary, #8E8E93); } .label-premis { font-family: Inter, system-ui, sans-serif; font-size: 13px; font-weight: 600; fill: var(--viz-on-surface-secondary, #8E8E93); } .label-kesimpulan { font-family: Inter, system-ui, sans-serif; font-size: 13px; font-weight: 700; fill: var(--viz-accent, #FF2D85); } .sym-math { font-family: 'Cambria Math', 'Times New Roman', serif; font-size: 25px; font-weight: 700; fill: var(--viz-series-1, #5856D6); } .sym-conclusion { font-family: 'Cambria Math', 'Times New Roman', serif; font-size: 25px; font-weight: 700; fill: var(--viz-accent, #FF2D85); } .text-desc { font-family: Inter, system-ui, sans-serif; font-size: 15px; font-weight: 400; fill: var(--viz-on-surface, #121212); } .text-desc-bold { font-family: Inter, system-ui, sans-serif; font-size: 15px; font-weight: 600; fill: var(--viz-on-surface, #121212); } .divider { stroke: var(--viz-on-surface, #121212); stroke-width: 2.5; stroke-linecap: round; } .grid-line { stroke: var(--viz-border, #E5E5EA); stroke-dasharray: 4 4; stroke-width: 1; } .highlight-box { fill: var(--viz-accent-bg, #FFF0F6); rx: 12px; } </style> </defs> <!-- Latar Belakang --> <rect width="100%" height="100%" class="bg" /> <!-- Kartu Utama Bukti Formal --> <rect x="30" y="24" width="660" height="412" class="card" /> <!-- Bagian Header Kartu --> <rect x="52" y="44" width="140" height="28" class="tag-bg" /> <text x="122" y="63" class="tag-text">LOGIKA MATEMATIKA</text> <text x="52" y="98" class="header-title">Penarikan Kesimpulan: Modus Tollens</text> <text x="52" y="118" class="header-desc">Bentuk argumentasi valid menyangkal konsekuens untuk menyangkal anteseden.</text> <!-- Garis Pemisah Header --> <line x1="52" y1="134" x2="668" y2="134" stroke="var(--viz-border, #E5E5EA)" stroke-width="1.5" /> <!-- Garis Vertikal Pemisah Kolom (Struktur Kolom) --> <line x1="150" y1="148" x2="150" y2="400" class="grid-line" /> <line x1="285" y1="148" x2="285" y2="400" class="grid-line" /> <!-- BARIS 1: Premis 1 --> <text x="52" y="180" class="label-premis">Premis 1</text> <text x="175" y="181" class="sym-math">P → Q</text> <text x="310" y="180" class="text-desc">Setiap yang lewat jalur busway ditilang.</text> <!-- BARIS 2: Premis 2 --> <text x="52" y="240" class="label-premis">Premis 2</text> <text x="175" y="241" class="sym-math">~Q</text> <text x="310" y="240" class="text-desc">Pak Andi tidak ditilang.</text> <!-- GARIS PEMISAH MATEMATIS (GARIS INFERENSI) --> <line x1="52" y1="280" x2="668" y2="280" class="divider" /> <!-- BARIS 3: Kesimpulan (Dengan kotak sorot) --> <rect x="44" y="296" width="632" height="74" class="highlight-box" /> <text x="52" y="340" class="label-kesimpulan">Konklusi</text> <text x="165" y="341" class="sym-conclusion">∴ ~P</text> <text x="310" y="333" class="text-desc-bold">Oleh karena itu,</text> <text x="310" y="353" class="text-desc">Pak Andi tidak lewat jalur busway.</text> <!-- Catatan Ringkas di Footer Kartu --> <text x="52" y="405" class="header-desc">Kaidah inferensi: [(P → Q) ∧ ~Q] ⊨ ~P terbukti valid secara deduktif.</text> </svg>` marker is, sequentially.
Let's start drafting the response.
Jika diketahui aturan 'Jika hujan (P), maka tanah basah (Q)', apa yang bisa kita simpulkan kalau kita melihat tanah basah (Q)?
- A. Pasti karena hujan.
- B. Belum tentu karena hujan, bisa jadi karena hal lain.
- C. Tidak mungkin karena hujan.
- D. Tanah basah adalah penyebab hujan.
Jawaban: B. Belum tentu karena hujan, bisa jadi karena hal lain.
Hujan (P) menjamin tanah basah (Q). Tapi kalau kita cuma tahu tanahnya basah (Q), itu tidak menjamin penyebabnya pasti hujan (P) — bisa saja karena disiram.
P merupakan syarat cukup (menjamin Q), tapi Q bisa terjadi tanpa P.
Anatomi $P \rightarrow Q$
Kita mulai dari hal yang paling fundamental dulu: apa sih sebenarnya makna kata "Jika... maka..." dalam logika?
Dalam logika matematika, hubungan ini disebut Implikasi dan ditulis sebagai $P \rightarrow Q$. Di sini, $P$ disebut Anteseden (penyebab) dan $Q$ disebut Konsekuen (akibat).
Tapi ini yang sering bikin banyak orang (mungkin kamu juga) terjebak: orang mengira kalau $P$ nyambung ke $Q$, maka $Q$ pasti nyambung balik ke $P$. Padahal TIDAK.
Biar nggak ketukar, coba kita pahami lewat pendekatan himpunan:
$P$ adalah Syarat Cukup untuk $Q$. Artinya, begitu $P$ terjadi, $Q$ dijamin pasti ikut terjadi.
$Q$ adalah Syarat Perlu untuk $P$. Artinya, $P$ nggak mungkin bisa ada kalau $Q$-nya nggak ada.
Biar gampang, bayangin $P$ = Hujan, dan $Q$ = Tanah basah. Jika hujan, maka tanah basah. Hujan cukup buat bikin tanah basah. Tapi, tanah basah nggak mengharuskan ada hujan. Bisa aja basah karena disiram, kan?
Misalkan ada aturan 'Jika Budi lapar (P), maka Budi makan nasi (Q)'. Jika diketahui saat ini Budi sedang makan nasi (Q), manakah pernyataan yang paling tepat berdasarkan konsep implikasi?
- A. Budi pasti makan nasi.
- B. Budi belum tentu lapar, tapi dia makan nasi.
- C. Jika Budi makan nasi, maka Budi pasti lapar.
- D. Budi makan nasi adalah syarat cukup untuk Budi lapar.
Jawaban: B. Budi belum tentu lapar, tapi dia makan nasi.
Lapar (P) adalah syarat cukup untuk makan nasi (Q). Tapi, makan nasi (Q) bisa terjadi walau tidak lapar (misal karena ditawari teman). Jadi, kalau Budi makan nasi, belum tentu dia lapar.
Implikasi P -> Q berarti P menjamin Q, namun Q bisa terjadi karena penyebab lain selain P.
Sesat Pikir: *Affirming the Consequent*
Sesat Pikir: Affirming the Consequent
Di halaman sebelumnya kita udah bahas kalau $P \rightarrow Q$ itu jalannya cuma searah. Nah, sekarang kita bongkar kenapa sering banget orang salah nebak kesimpulan.
Kecenderungan otak kita adalah mencari pola dua arah. Kalau aturannya "Setiap yang lewat jalur Transjakarta ($P$) pasti kena tilang ($Q$)", lalu kita dengar "Si Budi kena tilang nih ($Q$)", otak kita dengan cepat melompat: "Oh, pasti dia lewat jalur busway ($P$)!"
Cacat logika ini sangat terkenal dan punya nama resmi: Affirming the Consequent (Mengafirmasi/membenarkan akibat).
Mengetahui akibatnya ($Q$) terjadi, sama sekali TIDAK memberi kita hak logis untuk memastikan penyebab spesifiknya ($P$). Kenapa? Karena titik $Q$ itu luas. Budi bisa aja kena tilang karena nggak pakai helm, nerobos lampu merah, atau pajak mati.
Tentukan apakah penarikan kesimpulan berikut merupakan 'Sesat Pikir' (Affirming the Consequent) atau tarikan kesimpulan yang 'Logis'!
- Aturan: Jika lapar, Budi makan. Fakta: Budi sedang makan. Kesimpulan: Budi pasti lapar. — Sesat Pikir
- Aturan: Jika lampu mati, kamar gelap. Fakta: Kamar tidak gelap. Kesimpulan: Lampu tidak mati. — Logis
- Aturan: Jika Budi keujanan, bajunya basah. Fakta: Baju Budi basah. Kesimpulan: Budi pasti keujanan. — Sesat Pikir
Menebak penyebab (P) hanya dari akibat (Q) adalah sesat pikir (Affirming the Consequent). Akibat bisa disebabkan banyak hal. Tapi kalau akibatnya TIDAK terjadi (~Q), logis untuk menyimpulkan penyebabnya (~P) pasti tidak ada.
Mengasumsikan bahwa jika akibat terjadi maka penyebab spesifiknya pasti terjadi adalah bentuk cacat logika Affirming the Consequent.