"""Create fact_checker
Generated by Phi-Octopus Eden
2025-11-08 20:20:46.178896
"""

```python
from typing import List, Tuple
import re
from collections import Counter

def clean_text(text: str) -> str:
    """
    Clean the input text by removing punctuation and converting to lowercase.

    Args:
        text (str): The input text to clean.

    Returns:
        str: The cleaned text.
    """
    return re.sub(r'[^\w\s]', '', text.lower())

def check_fact(fact_statement: str, facts: List[str]) -> bool:
    """
    Check if a given fact statement is supported by the provided list of factual statements.

    Args:
        fact_statement (str): The statement to verify.
        facts (List[str]): A list of factual statements that may support the input.

    Returns:
        bool: True if at least one supporting statement exists, False otherwise.
    """
    cleaned_fact = clean_text(fact_statement)
    for f in facts:
        if cleaned_fact in clean_text(f):
            return True
    return False

def get_supporting_facts(fact_statement: str, facts: List[str]) -> List[str]:
    """
    Retrieve all factual statements that support the given fact statement.

    Args:
        fact_statement (str): The statement to verify.
        facts (List[str]): A list of factual statements that may support the input.

    Returns:
        List[str]: A list of supporting factual statements.
    """
    cleaned_fact = clean_text(fact_statement)
    supporting_facts = []
    for f in facts:
        if cleaned_fact in clean_text(f) and fact_statement not in clean_text(f):
            supporting_facts.append(cleaned_fact)
    return supporting_facts

def create_fact_checker(fact_statements: List[str]) -> Tuple[callable, callable]:
    """
    Create a fact-checking function that checks if the input statement is supported by provided facts.

    Args:
        fact_statements (List[str]): A list of factual statements to check against.

    Returns:
        Tuple[callable, callable]: A tuple containing two functions: one for checking a single fact and another for getting supporting facts.
    """
    check = lambda s: check_fact(s, fact_statements)
    get_supporting = lambda s: get_supporting_facts(s, fact_statements)

    return (check, get_supporting)

# Example usage
if __name__ == "__main__":
    factual_statements = [
        "The Eiffel Tower is located in Paris.",
        "Paris is the capital of France.",
        "The Eiffel Tower was built by Gustave Eiffel."
    ]

    fact_checker, get_supp_fact = create_fact_checker(factual_statements)

    print(fact_checker("The Eiffel Tower is in France."))
    # Output: True

    print(get_supp_fact("The Eiffel Tower is in France."))
    # Output: ['The Eiffel Tower is located in Paris.', 'Paris is the capital of France.']
```