unicode_fol_kit.semantics.free_logic¶
Free logic — first-order logic without the existence assumption.
Classical FOL assumes every term denotes an existing individual, so universal
instantiation ∀x φ → φ(c) and existential generalisation φ(c) → ∃x φ are
valid. Free logic drops that assumption: quantifiers range only over an inner
domain of existing objects E, while constants and function terms may denote an
object of the wider outer domain, or fail to denote at all. An existence predicate
E!(t) says “t denotes an existing object”, and the classical inference rules
hold only in their guarded forms (∀x φ ∧ E!(c)) → φ(c) and (φ(c) ∧ E!(c)) → ∃x φ.
A FreeModel carries an outer domain, the existing inner subset, a
(possibly partial) constant/function interpretation, and predicate tables over the
outer domain. Two policies for an atom that contains a non-denoting term:
"negative"(default) — the atom is simply false (negative free logic;t = tthen also fails whentdoes not denote);"positive"— self-identityt = tis true for any term, while every other atom with a non-denoting term is false (the common positive-free-logic convention for identity).
Public API: FreeModel, NONDENOTING, free_satisfies(),
free_holds().
Functions
|
Convenience: |
|
Return whether |
Classes
|
A free-logic model: an inner |
- class unicode_fol_kit.semantics.free_logic.FreeModel(outer, existing, constants=<factory>, functions=<factory>, predicates=<factory>)[source]¶
Bases:
objectA free-logic model: an inner
existingdomain inside anouterdomain.outerlists every object (existing or merely possible);existingis the inner domain the quantifiers range over (⊆outer).constantsmaps a name to anouterelement — a name absent from the map is non-denoting.functionsmaps(name, arity)to a partial table{argtuple: value}(a missing entry, or any non-denoting argument, makes the application non-denoting).predicatesmaps(name, arity)to a set ofoutertuples.- Parameters:
- unicode_fol_kit.semantics.free_logic.free_satisfies(formula, model, assignment=None, policy='negative')[source]¶
Return whether
modelsatisfiesformulaunder free-logic semantics.Quantifiers range over
model.existing;E!(t)is true ifftdenotes an existing object; an atom with a non-denoting term is handled perpolicy("negative"/"positive"— see the module docstring).