Matematizace - dedukční stromy

Dedukčního strom je strukturovaná reprezentace řešení úlohy.

Řešení úlohy je rozděleno na posloupnost jednoduchých kroků. Pořadí a návaznosti jednotlivých kroků definuje dedukčního strom, kde kroky jsou uzly stromu a vrchol stromu je konečný výsledek.

Podrobnosti a příklady, jak vytvořit dedukční strom zde

Příklad - slepičí hádanka

Parametrizace
Parametry dedukčního stromu může sloužit jako míra složitosti úlohy.

Predikáty

Predikáty umožňují formalní zápis situačního modelu úlohy.

Predikát Vlastnosti Příklad
C
container
(agent=Ája,
quantity=2,
entity=sešity)
Ája má 2 sešity
COMP
comparison
(agentA=Ája,
agentB=Honzík,
quantity=7,
entity=sešity)
Ája má o 7 sešitů více než Honzík
COMP RATIO
comparison by ratio
(agentA=Ája,
agentB=Honzík,
quantity=7,
entity=sešity)
Ája má 7 krát více sešitů než Honzík
COMP ANGLE
comparison between 2 angles
(agentA=alfa,
agentB=beta,
relationship="complementary")
Alfa je doplňkový úhel k beta.
COMP DIFF
comparison by difference
(agentMinuend=celkem,
agentSubtrahend=Honzík,
quantity=7,
entity=sešity)
Rozdíl mezi sešity celkem a Honzíkem je 7 sešitů./td>
TRANSFER
transfer
(agentSender=Ája,
agentReceiver=Honzík,
quantity=7,
entity=sešity)
Ája dala 7 sešitů Honzíkovi.
RATIO
part to whole comparison
(whole={agent:třída,entity:žáci},
part=chlapci,
ratio=1/4)
Ve třídě je 1/4 chlapců ze všech žáků.
RATIOS
part to part comparison
(whole={agent:třída,entity:žáci},
parts=[chlapci,dívky],
ratios=[1,3])
Poměr chlapců a dívek ve třídě je 1:3 (1 chlapec ku 3 dívkám).
RATE
rate
(agent=Ája,
quantity=3,
entity=Kč,
entityBase=rohlík)
Každý rohlík, který má Ája, stojí 3 Kč.
QUOTE
quote
(agent=skupina,
agent=dvojice,
quantity=5)
Skupina rozdělena na 5 dvojic.
SUM
sum
(agentWhole=třída,
partAgents=[chlapci,dívky],
entityWhole=žáků)
Počet chlapců a dívek dohromady dává počet žáků ve třídě.
PRODUCT
product
(agentWhole=obsah obdélníku,
partAgents=[šířka,délka],
entityWhole=cm2)
Obsah obdelníku je produktem výšky a šířky.
PROPORTION
proportion
(inverse=true,
entities=[počet výrobků, počet pracovníků])
Nepřímá úměra platí mezi veličinami počet výrobků a počet pracovníků.
UNIT
convert unit
(unit=kg) Převod na kg.
GCD
Greatest Common Divisor
(agent=tyč,
entity=délka (m))
Největší možná délka (m) tyče.
LCD
Least Common Denominator
(agent=skupina,
entity=osob)
Nejmenší možná skupina osob.
COMMON SENSE
common sense
(description=...) Nepřímá uměrnost. Je vztah mezi veličinami, kde je obracený poměr veličin.

Odvozovací pravidla

Porovnávání

Porovnání - o kolik je větší / menší?

COMP

Porovnání podílem - kolikrát je větší / menší?

COMP-RATIO

Porovnání rozdílem - kolik je rozdíl?

COMP-DIFF

Porovnávání - část z celku

RATIO

Porovnávání - poměry část ku časti

RATIOS

Porovnávání - úhly

COMP-ANGLE

Stav a změna stavu

TRANSFER
DELTA
Predikát
TRANSFER
není komutativní. Záleží na pořadí, které umožňuje representovat čas.

Rozdělování

RATE
QUOTA
10 : 2 = 5 může reprezentovat 2 různé věci
  • 2 díly velikosti 5m - znám počet skupin 2, rozdělení 10m tyče na 2 díly o délce 5m -
    RATE
  • 5 dílů velikosti 2m - znám velikost skupiny 2m, rozdělení 10m tyče po 2m na 5 dílů -
    QUOTA

Spojování

SUM
PRODUCT

Převod jednotek

UNIT

Nejmenší společný násobek

LCD

Největší společný dělitel

GCD

Posloupnosti

SEQUENCE

Aritmetická

Kvadratická

Geometrická


Základní odvozovací vzory

Procenta

Parametrizace

Výpočet procentní části

Výpočet základu

Výpočet procent


Úměrnosti

Přímá úměrnost

Parametrizace

Nepřímá úměrnost

Parametrizace

Kombinovaná přímá a nepřímá úměrnost

Parametrizace

Porovnávání

Porovnávání s absolutním rozdílem

Parametrizace

Porovnání s relativním rozdílem

Parametrizace
Parametrizace

Porovnání s absolutním a relativním rozdílem

Parametrizace

Porovnání části k celku

Parametrizace

Měřítko

Parametrizace

Tělesa

Kvádr

Parametrizace

Válec

Parametrizace

Trojboký hranol

Parametrizace

Jak je to uděláno?

Můžete použít jako javascript module.


<script type="module">
import {cont, inferenceRule} from "https://www.cermatdata.cz/components/math.js";

const result = inferenceRule(
  cont("půjčka", 300, "Kč"),
  inferenceRule(
    cont("úrok", 20, "%"),
    cont("půjčka", 100, "%"),
    { kind: 'ratio' }
  )
);

//Výsledek: úrok = 60 Kč
console.log(`Výsledek: ${result.agent} = ${result.quantity} ${result.entity}`)

</script>

Dedukční strom

Obecný postup vytvoření dedukčního stromu ze zadání úlohy

Konkrétní příklad řešení pro zadání úlohy

import { comp, compRatio, nthPart, rate, ratios, sum } from "../../components/math.js";
import { axiomInput, deduce, last } from "../../utils/deduce-utils.js";

export function kytice() {
  //agent names and entities
  const kyticeAgent = "kytice";
  const chryzatemaAgent = "chryzantéma";
  const ruzeAgent = "růže";
  const staticAgent = "statice";

  const kusEntity = "kus";
  const entity = "cena";

  //axioms
  const rozdilRuze = axiomInput(comp(ruzeAgent, staticAgent, 2, kusEntity), 1);
  const RtoS = axiomInput(compRatio(ruzeAgent, staticAgent, 5 / 4), 2);
  const CHxS = axiomInput(ratios(kyticeAgent, [chryzatemaAgent, staticAgent], [3, 2]), 3);
  const ruzeRate = axiomInput(rate(chryzatemaAgent, 54, entity, kusEntity), 4)
  const chryzantemaRate = axiomInput(rate(chryzatemaAgent, 40, entity, kusEntity), 5)
  const staticeRate = axiomInput(rate(chryzatemaAgent, 35, entity, kusEntity), 6)

  //deduction
  const statice = deduce(
    rozdilRuze,
    RtoS
  )
  const chryzantem = deduce(
    last(statice),
    CHxS,
    nthPart(chryzatemaAgent)
  )
  const ruze = deduce(
    statice,
    rozdilRuze
  )

  return {
    deductionTree: deduce(
      deduce(ruze, ruzeRate),
      deduce(last(statice), staticeRate),
      deduce(chryzantem, chryzantemaRate),
      sum(kyticeAgent, [ruzeAgent, chryzatemaAgent, staticAgent], entity, entity)
    )
  }
}

Další příklady jsou zde

API

Predikáty (predicates)

export declare type Predicate = Container | Comparison | RatioComparison | Transfer | Rate | Combine | PartWholeRatio | PartToPartRatio | ComparisonDiff | CommonSense | GCD | LCD;
export declare function cont(agent: string, quantity: number, entity: string): Container;
export declare function comp(agentA: string, agentB: string, quantity: number, entity: string): Comparison;
export declare function compRatio(agentA: string, agentB: string, quantity: number, entity: string): RatioComparison;
export declare function compDiff(agentMinuend: string, agentSubtrahend: string, quantity: number, entity: string): ComparisonDiff;
export declare function ratio(whole: EntityMatcher, part: EntityMatcher, ratio: number): PartWholeRatio;
export declare function ratios(whole: EntityMatcher, parts: EntityMatcher[], ratios: number[]): PartToPartRatio;
export declare function sum(wholeAgent: string, partAgents: string[], wholeEntity: string, partEntity: string): Combine;
export declare function gcd(agent: string, entity: string): GCD;
export declare function lcd(agent: string, entity: string): LCD;
export declare function rate(agent: string, quantity: number, entity: string, entityBase: string): Rate;
export declare function commonSense(description: string): CommonSense;

Odvozovací pravidla (inference rules)

export declare function inferenceRule(a: Predicate | Container[], b: Predicate, c?: {
    kind: 'ratio' | 'comp-ratio' | 'rate' | "comp-diff" | 'comp-part-eq';
})

Inspirováno prací MathGAP.