| """ |
| Problem Generator - Generates diverse reasoning problems from concepts. |
| |
| Takes a concept text and generates 5-8 different reasoning problems across |
| types: explain, compare, apply, critique, extend, analogize, decompose, synthesize. |
| Each problem type has 10+ templates. |
| """ |
|
|
| import random |
| import re |
|
|
|
|
| class ProblemGenerator: |
| """Generates multi-type reasoning problems from concept text.""" |
|
|
| |
| _problem_templates: dict[str, list[str]] = { |
| "explain": [ |
| "Explain the underlying mechanisms of {concept} as if teaching a graduate student who is brilliant but unfamiliar with this domain.", |
| "Provide a first-principles explanation of {concept}, starting from the most fundamental assumptions and building up to the full picture.", |
| "Explain why {concept} matters, tracing the chain of consequences from the immediate to the long-term.", |
| "Explain {concept} by identifying the three most important things someone must understand and why each matters.", |
| "Explain the causal structure of {concept}: what drives it, what it drives, and what mediates the relationship.", |
| "Give an explanation of {concept} that a thoughtful 15-year-old would find both accessible and intellectually satisfying.", |
| "Explain what makes {concept} difficult to understand and how that difficulty can be resolved.", |
| "Explain {concept} by contrasting what most people think it means with what it actually means upon closer examination.", |
| "Explain the boundary conditions of {concept}: under what circumstances does it hold, and when does it break down?", |
| "Explain {concept} using only concrete examples and observable phenomena, avoiding abstract terminology.", |
| "Explain how {concept} changes depending on the scale at which you examine it.", |
| "Explain the history of how our understanding of {concept} has evolved and what drove each major shift.", |
| ], |
| "compare": [ |
| "Compare {concept} with its closest alternative or rival, highlighting where they agree, where they diverge, and why the differences matter.", |
| "Compare how {concept} would be understood by an engineer versus a philosopher, and explain what each perspective captures that the other misses.", |
| "Compare the short-term and long-term implications of {concept}, noting where they align and where they conflict.", |
| "Compare {concept} as it appears in theory versus how it manifests in practice, explaining the gap.", |
| "Compare the strongest argument for {concept} with the strongest argument against it, steelmanning both sides.", |
| "Compare how {concept} is understood in two different cultural or disciplinary contexts.", |
| "Compare the naive understanding of {concept} with the expert understanding, identifying exactly where they diverge.", |
| "Compare {concept} with a superficially similar but fundamentally different concept, explaining the crucial distinction.", |
| "Compare the risks of overestimating versus underestimating the importance of {concept}.", |
| "Compare how {concept} would be analyzed using quantitative methods versus qualitative methods, and what each approach reveals.", |
| "Compare the state of {concept} ten years ago with its current state, identifying the key drivers of change.", |
| ], |
| "apply": [ |
| "Apply the principles underlying {concept} to solve a concrete real-world problem that you specify.", |
| "Describe how you would apply {concept} in a professional context, including specific steps and expected outcomes.", |
| "Apply {concept} to a domain where it is not typically used and explain what new insights emerge.", |
| "Design an experiment or test that would apply {concept} to generate actionable data.", |
| "Apply {concept} to evaluate a current real-world controversy or decision, showing how it clarifies the issues.", |
| "Show how {concept} could be applied to improve an existing system or process, specifying the mechanism of improvement.", |
| "Apply {concept} to predict what will happen in a specified scenario and explain your reasoning.", |
| "Demonstrate how {concept} applies to everyday decision-making by walking through a common choice people face.", |
| "Apply {concept} to diagnose why a particular system or approach is failing and propose a remedy.", |
| "Show how {concept} could be applied at three different scales (individual, organizational, societal) with different implications at each.", |
| "Apply {concept} to a field where it has been underutilized and argue for its relevance.", |
| ], |
| "critique": [ |
| "Identify the three most significant weaknesses or limitations of {concept} and assess how seriously they undermine it.", |
| "Construct the strongest possible objection to {concept} and then evaluate whether the objection succeeds.", |
| "Critique the hidden assumptions underlying {concept}, assessing which are well-founded and which are questionable.", |
| "Evaluate whether {concept} confuses correlation with causation, and if so, what the actual causal story might be.", |
| "Critique the evidence base for {concept}: is it sufficient, and what kinds of evidence are missing?", |
| "Identify who benefits from the current framing of {concept} and whether that framing may be self-serving.", |
| "Assess whether {concept} commits any logical fallacies and, if so, whether the core insight survives the correction.", |
| "Critique the scalability of {concept}: does it work at small scale but fail at large scale, or vice versa?", |
| "Evaluate whether {concept} is genuinely novel or whether it is a repackaging of older ideas under new terminology.", |
| "Critique the precision of {concept}: is it defined clearly enough to be testable, or is it vague enough to be unfalsifiable?", |
| "Assess whether {concept} adequately accounts for the perspectives and experiences of marginalized groups.", |
| ], |
| "extend": [ |
| "Extend {concept} to its logical conclusion: if we take it seriously and follow it consistently, where does it lead?", |
| "Propose a novel extension of {concept} that addresses one of its current limitations.", |
| "Extend {concept} into the future: how might it evolve over the next decade given current trends?", |
| "Identify a domain where {concept} has not yet been applied and develop the extension, including what modifications would be needed.", |
| "Extend {concept} by combining it with an insight from a different field, creating something neither field has alone.", |
| "Propose how {concept} could be extended to address a problem it was not originally designed for.", |
| "Extend {concept} by asking what happens at its extreme: what if it were applied maximally or universally?", |
| "Develop an extension of {concept} that makes it more robust against its known failure modes.", |
| "Extend {concept} by integrating quantitative measurement where it currently relies on qualitative judgment.", |
| "Propose a version of {concept} adapted for a context where resources are extremely limited.", |
| "Extend {concept} by identifying the next logical question it raises and sketching how to answer it.", |
| ], |
| "analogize": [ |
| "Construct an analogy between {concept} and a biological system, mapping each component to its biological counterpart.", |
| "Create an analogy between {concept} and a well-known everyday experience that makes the abstract concrete.", |
| "Develop an analogy between {concept} and a historical event or period, drawing specific parallels.", |
| "Build an analogy between {concept} and a mechanical or engineering system, identifying the load-bearing correspondences.", |
| "Construct an analogy between {concept} and a game or sport, mapping rules, strategies, and winning conditions.", |
| "Create an analogy between {concept} and a musical composition, identifying rhythm, harmony, dissonance, and resolution.", |
| "Develop an analogy between {concept} and an ecosystem, mapping the roles of producers, consumers, decomposers, and energy flow.", |
| "Build an analogy between {concept} and the process of cooking a complex meal, mapping ingredients, techniques, and timing.", |
| "Construct an analogy between {concept} and a journey, identifying the starting point, obstacles, milestones, and destination.", |
| "Create an analogy between {concept} and a language, mapping grammar, vocabulary, syntax, and meaning.", |
| "After constructing your best analogy for {concept}, identify exactly where the analogy breaks down and what the breakdown reveals.", |
| ], |
| "decompose": [ |
| "Decompose {concept} into its fundamental components and explain how each contributes to the whole.", |
| "Break {concept} into its necessary and sufficient conditions: what must be present for it to hold?", |
| "Decompose {concept} into layers of abstraction, from the most concrete to the most abstract.", |
| "Identify the independent variables within {concept} and explain how each can be varied independently.", |
| "Decompose {concept} into its temporal phases: what happens first, second, third, and how do the phases connect?", |
| "Break {concept} into its stakeholder dimensions: how does each affected party experience it differently?", |
| "Decompose {concept} into its inputs, processes, and outputs, tracing the transformation at each stage.", |
| "Identify the key tensions or trade-offs within {concept} and explain how they create its characteristic behavior.", |
| "Decompose {concept} into what is known with confidence, what is suspected but unconfirmed, and what remains entirely unknown.", |
| "Break {concept} into its structural elements (what it is) and its dynamic elements (how it changes).", |
| "Decompose the causal graph of {concept}: which factors cause which, and which are merely correlated?", |
| ], |
| "synthesize": [ |
| "Synthesize a unified understanding of {concept} that integrates scientific, philosophical, and practical perspectives.", |
| "Synthesize the arguments for and against {concept} into a balanced position that acknowledges the valid points on both sides.", |
| "Create a synthesis that resolves the apparent contradiction between two competing interpretations of {concept}.", |
| "Synthesize insights about {concept} from at least three different disciplines into a coherent framework.", |
| "Synthesize a practical guide for engaging with {concept} that draws on both theoretical understanding and real-world experience.", |
| "Synthesize the historical evolution and current state of {concept} into a narrative that explains both where we are and how we got here.", |
| "Create a synthesis of {concept} that a diverse audience (technical and non-technical, young and old) would find valuable.", |
| "Synthesize the local and global dimensions of {concept} into an understanding that operates at both scales.", |
| "Synthesize the quantitative and qualitative aspects of {concept} into an integrated assessment.", |
| "Create a synthesis of {concept} that explicitly addresses and resolves the top three objections to it.", |
| "Synthesize a forward-looking vision of {concept} that builds on current understanding to anticipate future development.", |
| ], |
| } |
|
|
| def generate_problems( |
| self, concept: str, count: int | None = None |
| ) -> list[tuple[str, str]]: |
| """Generate reasoning problems from a concept. |
| |
| Args: |
| concept: The concept text to generate problems for. |
| count: Number of problems to generate (5-8 if None). |
| |
| Returns: |
| List of (problem_type, problem_text) tuples. |
| """ |
| if count is None: |
| count = random.randint(5, 8) |
| count = max(1, min(count, len(self._problem_templates))) |
|
|
| |
| |
| all_types = list(self._problem_templates.keys()) |
| required = ["explain", "synthesize"] |
| optional = [t for t in all_types if t not in required] |
| random.shuffle(optional) |
|
|
| selected_types = required + optional[: max(0, count - len(required))] |
| random.shuffle(selected_types) |
|
|
| problems = [] |
| for ptype in selected_types: |
| templates = self._problem_templates[ptype] |
| |
| template = self._select_relevant_template(concept, templates) |
| problem_text = template.replace("{concept}", concept) |
| problems.append((ptype, problem_text)) |
|
|
| return problems |
|
|
| def generate_all_types(self, concept: str) -> list[tuple[str, str]]: |
| """Generate one problem of each type for a concept. |
| |
| Args: |
| concept: The concept text. |
| |
| Returns: |
| List of (problem_type, problem_text) tuples, one per type. |
| """ |
| problems = [] |
| for ptype, templates in self._problem_templates.items(): |
| template = self._select_relevant_template(concept, templates) |
| problem_text = template.replace("{concept}", concept) |
| problems.append((ptype, problem_text)) |
| return problems |
|
|
| def _select_relevant_template( |
| self, concept: str, templates: list[str] |
| ) -> str: |
| """Select the template most relevant to the concept keywords. |
| |
| Falls back to random selection if no strong match. |
| """ |
| concept_words = set(re.findall(r'\b[a-z]{4,}\b', concept.lower())) |
| if not concept_words: |
| return random.choice(templates) |
|
|
| scored = [] |
| for template in templates: |
| template_lower = template.lower() |
| score = sum(1 for w in concept_words if w in template_lower) |
| scored.append((score, template)) |
|
|
| max_score = max(s for s, _ in scored) |
| if max_score > 0: |
| best = [t for s, t in scored if s == max_score] |
| return random.choice(best) |
|
|
| return random.choice(templates) |
|
|