Topos theory describes set theory using category theory. It allows us to take some nice properties of sets and to generalise them to certain categories with the properties described below.
The internal structure of a topos allows us to look at it in a setlike way and the external structure allows us to look at it in a categorylike way.
Internal  External 

setlike  categorylike 
defined with equations  defined with arrows. 
The internal structure can see inside the set to the elements 
The external structure can be seen from the structure of the sub objects (such as subsets) 
In Category Theory
An (elementary) topos is a category that:
 Is finitely complete
 Is finitely cocomplete
 Has exponentiation
 Has a subobject classifier
This is equivalent to:
 being Cartesian closed
 and having a subobject classifier
Finite limits and colimits means:
In category Theory  What this looks like in set 

an initial object  empty set 
a terminal object  an object like a set with one element 
binary coproducts  disjoint union of two sets 
binary products  Cartesian product of two sets 
equalizers  subset of X consisting of all elements x such that f(x) = g(x), where f,g: X > Y 
coequalizers  quotient set of X where two elements f(y) and g(y) are identified, where f,g: Y > X 
see John Baez website for fuller explanation of this
Subobject Classifier
We are looking for an 'external' categorytheorylike description of the idea of a subobject where we dont have to look inside to the elements. In category theory things tend to be defined in terms of arrows. As a start this will be an injective function S>X, in category theory terms, a monic arrow. where X is an object and S is a sub object of it. This will be developed into this diagram which commutes. The diagram is also a pullback.

Example Topos in Set
The main example of a topos is set, in other words an (elementary) topos is a setlike category.
In order to understand sets we need to describe the structure of subsets. We need to define an element of the powerset. One way to do this is as follows:
One way to define S as a subset of X An injective function is one where no two distinct inputs give the same output. 

It would not work to have a map in the other direction because elements in S are not uniquely identified with elements in X.  
However we can define a subset with a map going out of X. This maps onto a two point set {f,t}. Those elements that are in the subset map to 1 and those that are not map to f. This is called the characteristic function. So in the case of set Ω is a 2 element set like Boolean algebra. The logic of a Topos is not necessarily Boolean logic, it is constructive (intuitionistic) logic as described on the page here. Its only the true elements that commute. 

We can complete the diagram by mapping through the terminal object T (in this case the 1 element set). All elements in S map to it. The map T>Ω picks out the true elements of Ω. As we can see, the diagram commutes. Each injective map from the subsets corresponds to a map χ : X>Ω where χ is the Greek letter Chi. 

The diagram relates the set category to the logic of boolean algebra but without the law of the excluded middle, that is intuitional or constructive logic. 
Generalisation to Nonsets
We can generalise from elementary topos based on sets to other topoi.
We generalise this to categories that are not sets.

The set example above then a Boolean type is the subobject classifier, however, if we have additional structure, for example a graph, then the subobject classifier becomes more complicated.
Example  Graph
In the set example above Ω contains just true and false with the familiar Boolean logic. In the following more complicated examples there are also true and false corresponding to the cases where the subobject is completely in or completely out of the whole object. In addition there may now be other cases which are not but are required to allow the injection map to be valid. A good example of this is a graph category:
The terminal object for graph is one node with a loop.  
The subobject classifier for graph has two nodes and 5 arrows. For nodes:
For edges:


The truth object.  
As with sets this is constructive (intuitionistic) logic as described on the page here. 
Alternative Viewpoint
We have two sets, 'A' and 'B', with an arbitrary mapping 'F' between them. We can define a subset of set 'B' by using the predicate 'P'. For every subset of 'B' defined by 'P' there exists a subset of 'A' defined by 'R'.  
However this does not necessarily work in the other direction. Here is an example of a subset of 'A' which does not map to a subset of 'B'. 
So the map 'F' between objects induces a contravarient map between arrows P>R.
See also Yoneda embedding.
Topos and Logic
A logic is defined over a type. So if we have a type, say 'set', then its substucture will correspond to a logic as described below. A different type, say 'POSET', will have a different logic.
Logic of Set Example
Here we look at the logic of the set example (described on page here) and how this corresponds to the subset structure.
In this diagram we have multiple subsets of X. Each one will have its own injective map into X and also its own map into the truth object. To show all the arrows for all 3 subsets would make the diagram very complicated so I have just indicated where the arrows go for each subset. Each injective map from the subsets corresponds to a map χ : X>Ω where χ is the Greek letter Chi. so χ_{A} corresponds to the subspace A and so on. 

We can split the χ map, first into Ω_{A}×Ω_{B} then map this to Ω_{A/\B}. This second part corresponds to the Boolean 'and' function. 
In the diagrams below the dark green represents a subobject of the light green and the dark blue represents a subobject of the light blue. They can be combined in various ways:
and (meet)  /\(Ω,Ω) > Ω 


or (join)  \/(Ω,Ω) > Ω 


implies  =>(Ω,Ω) > Ω 

Logic of Graph Example
The logic of the nodes is the same as the set example:
and (meet)  /\(Ω,Ω) > Ω 


or (join)  \/(Ω,Ω) > Ω 


implies  =>(Ω,Ω) > Ω 

but now we also have the edges, here is my attempt to construct a truth table for 'and':
none  f>f  f>t  t>f  t>t  

none  none  
f>f  f>f  f>f  f>f  f>f  
f>t  f>f  f>t  f>f  f>f  
t>f  f>f  f>f  t>f  t>f  
t>t  f>f  f>f  t>f  t>t 
For instance, if an edge goes from true to true (t>t) in 'A' and it goes from true to true in 'B' then it must be in their intersection and therefore goes from true to true in 'A/\B'.
What if it goes from true to true (t>t) in 'A' but it goes from false to false in 'B' then it can't be in their intersection and therefore goes from false to false in 'A/\B'.
So it looks like we can 'and' the source and target separately to give the resulting edge.
Example  Dynamical Systems
The terminal object for dynamical systems is one node with a loop.  
The subobject classifier for dynamical systems. '0' represents 'true' all other numbers indicate how many steps before it becomes true.


The truth object. points to '0' representing true.


All nodes and edges in the subobject go to '0' which represents 'true' all other nodes goto the number which indicates how many steps before it becomes true. 
Subobject Classifier
See page here for a noncategorical approach to subobjects.
If the arrow 'f' is monic (injective) then it maps to a subobject (subset) of 'B'. That is: there is a subobject of B that is isomorphic to A.
The inclusion relation on subobjects is:
 reflexive
 transitive
In order to define the subobject we must define the monic 'upto equality' which is not in the spirit of category theory. We will go on to define a 'subobject classifier' which defines a subobject, in a much more category theoretic way, by the composition of maps (and also relates the whole subject to logic).
Naming Arrows
In category theory we don't usually identify elements, such as elements of a set, because we only tend to determine things 'upto isomorphism'. The objects in a category are whole 'structures', they don't represent individual elements.
However, there is the possibility to indicate elements indirectly using arrows. For instance, if we want to enter a specific element we can use:
1>A
because, in sets, 1 is the single element set so it will indicate an element uniquely.
We can also use naming arrows. An arrow:
f: A>B
Is a subset of a function spacef:{0}>B^{A}
fis called the 'name' of the function.
Classifier
In the opposite direction there is a correspondence between subsets of B and functions:
B>2
This is in the space 2^{B} which corresponds to the powerset(B), that is, all the possible subsets of B.
The characteristic arrow: x_{f} classifies objects of B to determine if they are images of A. This is a pullback square. The object 2 has two values: 0 and 1. We also use the symbol Ω and call the elements 'true' and 'false'. 
This means the topos theory is related to logic. (see also 'characteristic function' in number theory).
Predicate Category
The relationship SX above is a predicate. We can form a category of predicates on sets as follows:
Objects  predicates are pairs (S,X) where X(i) implies an element iS is a free variable in S. 

Morphisms  (S,X) > (T,Y) where: u:S> T and X(i) implies: Y(u(i)) 
See also  Predicate logic.
Family of Sets
A family of sets consists of an index set I and, for each element k of I, a set S_{k}.
There seems to be two ways to conceptulise this:
 As a 2category. A set of sets.
 As disjoint sets.
Modest Sets
Set theoretic model of polymorphism.
Indexed Categories
(fibred category)
example
many sorted algebra ∑
Generalisation from Sets to Categories
Here we have illustrated some basic concepts using sets but they can be generalised to categories as shown here:
Sets  Categories 

Injective Function No two distinct inputs give the same output. We can define 'A' a subset of 'B' by using an injective function from C

Monic Arrow Whenever f•g = f•h then g=h 
Here we are showing this as an inclusion function because we are interested in subset classifiers. Injective function f: C >>B determines A as a subset of B (AB) Set inclusion is a partial odering on the Power set 

Surjective function 
Epic Arrow 
Inverse Functions 

Power Set 
Power Object subobjects of d form a poset 
see pages about:
HEP and Topos Theory
Relationship to homotopy extension principle.
If we look at the category theory diagram for the homotopy extension principle HEP (see page here).  
and then compare it to the above diagram for the subobject classifier we can see that there is a similar thing going on: In the Topos case there may not be a requirement for continuous mappings but S is a subobject of X and the mapping between them is injective. 
Topos Theory and Kan Extensions
Relationship to Kan extensions.
Again looking at the above diagram for the subobject classifier:


Compare it with the diagram for the Kan extension (see page here). The above diagram appears to be a special case of the Kan extension (most things are!) so, in this diagram, 'F' is a constant mapping and 'K' is injective.  
In order to make F constant we factor it through the terminal object. In the Topos case there may not be a requirement for continuous mappings but S is a subobject of X and the mapping between them is injective. 
Topological Space
In many cases the concept of a metric space is unnecessary, however we still need the concept of 'nearness' and hence 'continuity'. 'Topological space' based on the 'topological open set' is the most general way we can do this. This allows us to define nearness purely using the concept of a subset.
Hausdorff Space
Hausdorff space is a bit more specific than general topological space. Space is Hausdorff if, in addition to being a topological open set, for any two points:
x_{1}, x_{2}X there are disjoint open sets U_{1}, U_{2} that contain x_{1}and x_{2}.
Basis
A basis is a subcollection B= U
where
 U is the open set
 B is the basis
 = a subcollection (subset)  I need to add the proper symbol for this.
such that evey element of U is a union of open sets in B.
Computing Topos
https://github.com/fdilke/bewl
to install in openSUSE:
in YaST install:
on command line:
git clone https://github.com/fdilke/bewl.git cd bewl sbt console