# mltp/predicates/__init__.py
from .syntax import (ForbiddenVariableError,
                     is_constant,
                     is_variable,
                     is_function,
                     Term,
                     is_equality,
                     is_relation,
                     is_unary,
                     is_binary,
                     is_quantifier,
                     Formula)
from .semantics import (T, 
                        Model)
from .functions import (function_name_to_relation_name,
                        relation_name_to_function_name,
                        replace_functions_with_relations_in_model,
                        replace_relations_with_functions_in_model,
                        _compile_term,
                        replace_functions_with_relations_in_formula,
                        replace_functions_with_relations_in_formulas,
                        translate_equality_to_SAME,
                        replace_equality_with_SAME_in_formulas,
                        add_SAME_as_equality_in_model,
                        make_equality_as_SAME_in_model)
from .proofs import (InstantiationMap,
                     Schema,
                     Proof,
                     I0_SCHEMA,
                     I1_SCHEMA,
                     D_SCHEMA,
                     I2_SCHEMA,
                     N_SCHEMA,
                     NI_SCHEMA,
                     NN_SCHEMA,
                     R_SCHEMA,
                     PROPOSITIONAL_AXIOMATIC_SYSTEM_SCHEMAS,
                     PROPOSITIONAL_AXIOM_TO_SCHEMA,
                     _axiom_specialization_map_to_schema_instantiation_map,
                     _prove_from_skeleton_proof,
                     prove_tautology,
                     is_tautology)
from .prover import Prover
from .deduction import (remove_assumption,
                        prove_by_way_of_contradiction)
from .prenex import (ADDITIONAL_QUANTIFICATION_AXIOMS,
                     is_quantifier_free,
                     is_in_prenex_normal_form,
                     equivalence_of,
                     has_uniquely_named_variables,
                     _uniquely_rename_quantified_variables_helper,
                     _uniquely_rename_quantified_variables,
                     _pull_out_quantifications_across_negation,
                     _pull_out_quantifications_from_left_across_binary_operator,
                     _pull_out_quantifications_from_right_across_binary_operator,
                     _pull_out_quantifications_across_binary_operator,
                     _to_prenex_normal_form_from_uniquely_named_variables,
                     to_prenex_normal_form)
from .completeness import (is_closed,
                           is_primitively_closed,
                           is_universally_closed,
                           is_existentially_closed,
                           find_unsatisfied_quantifier_free_sentence,
                           get_primitives,
                           get_constants,
                           model_or_inconsistency,
                           combine_contradictions,
                           eliminate_universal_instantiation_assumption,
                           universal_closure_step,
                           replace_constant,
                           eliminate_existential_witness_assumption,
                           existential_closure_step)
from .operators import frege
from .some_proofs import (prove_syllogism,
                          prove_syllogism_with_universal_instantiation,
                          prove_syllogism_all_all,
                          prove_syllogism_all_all_with_tautological_implication,
                          prove_syllogism_all_exists,
                          prove_syllogism_all_exists_with_existential_derivation,
                          prove_lovers,
                          prove_homework,
                          GROUP_AXIOMS,
                          prove_group_right_neutral,
                          prove_group_unique_zero,
                          FIELD_AXIOMS,
                          prove_field_zero_multiplication,
                          INDUCTION_AXIOM,
                          PEANO_AXIOMS,
                          prove_peano_left_neutral,
                          COMPREHENSION_AXIOM,
                          prove_russell_paradox,
                          _prove_not_exists_not_implies_all,
                          _prove_exists_not_implies_not_all,
                          prove_not_all_iff_exists_not)

#__all__ = ['semantics', 'completeness', 'deduction', 'functions', 'operators', 'prenex', 'proofs', 'prover', 'some_proofs', 'syntax']
__all__ = ['ForbiddenVariableError',
             'is_constant',
             'is_variable',
             'is_function',
             'Term',
             'is_equality',
             'is_relation',
             'is_unary',
             'is_binary',
             'is_quantifier',
             'Formula',
             'T',
             'Model',
             'function_name_to_relation_name',
             'relation_name_to_function_name',
             'replace_functions_with_relations_in_model',
             'replace_relations_with_functions_in_model',
             '_compile_term',
             'replace_functions_with_relations_in_formula',
             'replace_functions_with_relations_in_formulas',
             'translate_equality_to_SAME',
             'replace_equality_with_SAME_in_formulas',
             'add_SAME_as_equality_in_model',
             'make_equality_as_SAME_in_model',
             'InstantiationMap',
             'Schema',
             'Proof',
             'I0_SCHEMA',
             'I1_SCHEMA',
             'D_SCHEMA',
             'I2_SCHEMA',
             'N_SCHEMA',
             'NI_SCHEMA',
             'NN_SCHEMA',
             'R_SCHEMA',
             'PROPOSITIONAL_AXIOMATIC_SYSTEM_SCHEMAS',
             'PROPOSITIONAL_AXIOM_TO_SCHEMA',
             '_axiom_specialization_map_to_schema_instantiation_map',
             '_prove_from_skeleton_proof',
             'prove_tautology',
             'is_tautology',
             'Prover',
             'remove_assumption',
             'prove_by_way_of_contradiction',
             'ADDITIONAL_QUANTIFICATION_AXIOMS',
             'is_quantifier_free',
             'is_in_prenex_normal_form',
             'equivalence_of',
             'has_uniquely_named_variables',
             '_uniquely_rename_quantified_variables_helper',
             '_uniquely_rename_quantified_variables',
             '_pull_out_quantifications_across_negation',
             '_pull_out_quantifications_from_left_across_binary_operator',
             '_pull_out_quantifications_from_right_across_binary_operator',
             '_pull_out_quantifications_across_binary_operator',
             '_to_prenex_normal_form_from_uniquely_named_variables',
             'to_prenex_normal_form',
             'is_closed',
             'is_primitively_closed',
             'is_universally_closed',
             'is_existentially_closed',
             'find_unsatisfied_quantifier_free_sentence',
             'get_primitives',
             'get_constants',
             'model_or_inconsistency',
             'combine_contradictions',
             'eliminate_universal_instantiation_assumption',
             'universal_closure_step',
             'replace_constant',
             'eliminate_existential_witness_assumption',
             'existential_closure_step',
             'prove_syllogism',
             'prove_syllogism_with_universal_instantiation',
             'prove_syllogism_all_all',
             'prove_syllogism_all_all_with_tautological_implication',
             'prove_syllogism_all_exists',
             'prove_syllogism_all_exists_with_existential_derivation',
             'prove_lovers',
             'prove_homework',
             'GROUP_AXIOMS',
             'prove_group_right_neutral',
             'prove_group_unique_zero',
             'FIELD_AXIOMS',
             'prove_field_zero_multiplication',
             'INDUCTION_AXIOM',
             'PEANO_AXIOMS',
             'prove_peano_left_neutral',
             'COMPREHENSION_AXIOM',
             'prove_russell_paradox',
             '_prove_not_exists_not_implies_all',
             '_prove_exists_not_implies_not_all',
             'prove_not_all_iff_exists_not']