This cannot be fixed in Aristotelian logic or any logic which does not recognize abstract types from the things they represent.
Because English is implicit not explicit the structure of reality (context) is lost in translation . A man is a TYPE of a thing. Not a thing. Every man has certain properties - like a name and mortality. This structure is left out of the original syllogism.
So lets define your propositions in Type theory (I am just going to use the Ruby programming language). Here is the definition of a Man
class Man
attr_accessor :mortal, :name
def initialize(name)
@name = name # IMPLICITLY: All men have a name
@mortal = true # EXPLICITLY: All men are mortal
end; end
Right now all we have is an abstract definition of a 'Man', but not been explicit IF any men actually exist! The set of 'all men' is empty.
all_men = []
Lets create some men. For each name in the list we will create an 'Man' and we will add them to the set "all_men". This is called inheritance (
https://en.wikipedia.org/wiki/Inheritan ... ogramming) )
[ "TimeSeeker", "jacobbrownacro", "Socrates" ].each do |name|
all_men << Man.new(name) # Create an instance of a Man and add it to the set all_men
end
But apparently the name "Socrates" is not all that unique. There is ANOTHER Socrates!
all_men << Man.new("Socrates")
Now lets do some arithmetic. How many men are there?
> all_men.size
=> 4
What are their names?
> all_men.map { |i| puts i.name }
TimeSeeker
jacobbrownacro
Socrates
Socrates
Now here are your statements:
All Socrates is a man
All men are mortal
Therefore Socrates is Mortal.
I am going to turn them into questions so they are easier to work with.
Q: Are all entities whose name is "Socrates" of type 'Man' ? (All Socrates is a man?)
A: Yes. Both of them.
all_men.collect { |entity| entity.class == Man if entity.name == "Socrates" }.compact
=> [True, True]
Q. Are all men mortal?
A. Yes. All four of them.
all_men.map { |i| i.mortal }
=> [true, true, true, true]
Q: Is Socrates mortal?
A: Yes. Both of them.
all_men.collect { |i| i.mortal if i.name == "Socrates" }.compact
=> [true, true]
You can play with the code here:
https://repl.it/repls/PrivateFlippantWheel
Or you can just observe that the statement "All Socrates" contains exactly 1 element. And that one element is a man.
Or in the scenario I contrived in the code above. The correct statement is "All Socrates are men" (both of them).