# Typed First-order Logic (TFF)

### New logic features

• Types
• Signatures
• Typed variables

### Problem

• Axioms
• All (hu)men are created equal.
• John is a human.
• John got an F grade.
• There is some human who got an A grade.
• Conjecture
• There is a human other than John, who was created equal to John

### In logic

• Type information
• human is a type
• john is a human
• created_equal takes two human arguments and returns boolean
• Axioms
• H1:humanH2:human created_equal(H1,H2)
• a ≠ f
• Conjecture
• H:human (H ≠ john ∧ created_equal(H,john))

### In TPTP format

• ```tff(human_decl,type,human: \$tType).
tff(john_decl,type,john: human).
tff(created_equal_decl,type,created_equal: (human * human) > \$o).

tff(all_created_equal,axiom,
! [H1:human,H2:human] : created_equal(H1,H2) ).
tff(john_got_an_f,axiom,
tff(someone_got_an_a,axiom,
? [H:human] : grade_of(H) = a ).
tff(a_is_not_f,axiom,
a != f ).

tff(there_is_someone_else,conjecture,
? [H:human] :
( H != john
& created_equal(H,john) ) ).
```
• Check the syntax in SystemB4TPTP using TPTP4X.
• Try it in SystemOnTPTP using Vampire.

### Challenge problem

Geoff is the only teacher of Joe (hint - functions have only one result). Joe is not stupid but Joe failed. If a student failed then either the student is stupid or there is is some other student with the same teacher who also failed. Therefore there is some student other then Joe and also taught by Geoff, who failed.