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 between 2 agents
(agentSender=Ája,
agentReceiver=Honzík,
quantity=7,
entity=sešity)
Ája dala 7 sešitů Honzíkovi.
DELTA
delta
(agent=Ája,
quantity=7,
entity=sešity)
Ája změna v čase o 7 sešitů.
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ů.
COMPLEMENT
complement part of the whole
Pokud je ve třídě je 1/4 chlapců ze všech žáků, tak doplněk znamená, že ve tříde je 3/4 dívek 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).
SCALE
part to part scaling
Pokud je poměr chlapců a dívek ve třídě je 1:3, tak dvojnásobné rozšíření poměru je 2:6.
INVERT-SCALE
part to part scaling
Pokud je poměr chlapců a dívek ve třídě je 2:6, tak dvojnásobné zkrácení poměru je 1:3.
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
COMPLEMENT

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

RATIOS
SCALE
INVERT-SCALE

Porovnávání - úhly

COMP-ANGLE

Stav a změna stavu

DELTA
TRANSFER
Predikát
DELTA
,
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

Výrazy

EVAL-EXPR

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

Porovnání více hodnot

Parametrizace

Porovnání A/B a porovnání B/C

Porovnání A/B a porovnání C/B

Porovnání B/A a porovnání B/C

Porovnání B/A a porovnání C/B

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.