Models of Classical Cardinal Characteristics and Open Questions

Diego A. Mejía
Kobe University, Graduate School of System Informatics
damejiag@people.kobe-u.ac.jp

This is a complementary material to the book “CCC Forcing Constructions for the Real Line” with M. Goldstern, J. Kellner, and S. Shelah. For the diagram of classical cardinal characteristics in the section “The graph of characteristics” (in this notebook), we aim to list the open questions about the consistency with ZFC of inequalities of the form “x<y” for x,y in the diagram. We collect the data of the provable inequalities between characteristics as a graph, and the data of constellations in forcing models (like Cohen, random, etc.) as assignments to the vertices of the graph. All this data is processed by many algorithms, resulting in a list of potential open questions.

The reader can safely jump to the sections “The interactive table” and “The open questions”, but can look at other sections if interested in how the programs are constructed, or for getting the diagrams of each model (for the later, see “The models” and “Coloring constellations”).

The graph of characteristics

The following is the  data of the (directed) graph of the ZFC provably inequalities between many classical cardinal characteristics of the continuum (an arrow denotes ≤).

(*the big graph of invariants*)
cinv={"(Subscript[ℵ, 1])"\[DirectedEdge]"m","m"\[DirectedEdge]"(Subscript[m, k])","(Subscript[m, k])"\[DirectedEdge]"addN","(Subscript[m, k])"\[DirectedEdge]"(Subscript[m, prec])","(Subscript[m, prec])"\[DirectedEdge]"p","p"\[DirectedEdge]"e","p"\[DirectedEdge]"addM","p"\[DirectedEdge]"h","h"\[DirectedEdge]"s","h"\[DirectedEdge]"b","h"\[DirectedEdge]"g","g"\[DirectedEdge]"d","addN"\[DirectedEdge]"addM","addN"\[DirectedEdge]"e","addN"\[DirectedEdge]"covN","covN"\[DirectedEdge]"covE","covN"\[DirectedEdge]"nonM","e"\[DirectedEdge]"covM","e"\[DirectedEdge]"(SubStar[e])","e"\[DirectedEdge]"(Subscript[e, unb])","(Subscript[e, unb])"\[DirectedEdge]"(Subscript[e, 2])","(Subscript[e, 2])"\[DirectedEdge]"nonE","s"\[DirectedEdge]"d","s"\[DirectedEdge]"(Subscript[e, 2])","nonE"\[DirectedEdge]"nonN","nonE"\[DirectedEdge]"nonM","addM"\[DirectedEdge]"covM","addM"\[DirectedEdge]"b","addM"\[DirectedEdge]"nonE","b"\[DirectedEdge]"\!\(\*SubsuperscriptBox[\(e\), \(∗\), \(⊥\)]\)","b"\[DirectedEdge]"r","b"\[DirectedEdge]"a","b"\[DirectedEdge]"(SubStar[e])","(SubStar[e])"\[DirectedEdge]"d","(SubStar[e])"\[DirectedEdge]"nonM","nonM"\[DirectedEdge]"(e^⊥)","nonM"\[DirectedEdge]"cofM","covM"\[DirectedEdge]"nonN","covM"\[DirectedEdge]"covE","covM"\[DirectedEdge]"\!\(\*SubsuperscriptBox[\(e\), \(∗\), \(⊥\)]\)","\!\(\*SubsuperscriptBox[\(e\), \(∗\), \(⊥\)]\)"\[DirectedEdge]"(e^⊥)","\!\(\*SubsuperscriptBox[\(e\), \(∗\), \(⊥\)]\)"\[DirectedEdge]"d","d"\[DirectedEdge]"cofM","cofM"\[DirectedEdge]"cofN","cofM"\[DirectedEdge]"i","a"\[DirectedEdge]"c","covE"\[DirectedEdge]"(Subscript[e, 2]^⊥)","(Subscript[e, 2]^⊥)"\[DirectedEdge]"(Subscript[e, unb]^⊥)","(Subscript[e, 2]^⊥)"\[DirectedEdge]"r","covE"\[DirectedEdge]"cofM","r"\[DirectedEdge]"i","r"\[DirectedEdge]"u","u"\[DirectedEdge]"c","(Subscript[e, unb]^⊥)"\[DirectedEdge]"(e^⊥)","(e^⊥)"\[DirectedEdge]"cofN","i"\[DirectedEdge]"c","nonN"\[DirectedEdge]"cofN","cofN"\[DirectedEdge]"c"};

The list of vertices of the graph above:

inv=VertexList[cinv] (*set of invariants*)

Below is a picture of the graph, but we produce a better picture afterward.

Graph[cinv,VertexLabels->"Name"](*Graph with labels*)

We will need the transitive closure of the graph to construct many algorithms.

cinvpo=EdgeList[TransitiveClosureGraph[Graph[cinv]]];(*transitive closure*)

To produce a better picture of the graph, we assign coordinates to each vertex.

(*the coordinates*)
ccoord=\[LeftAssociation]"(Subscript[ℵ, 1])"->{-1.5,-2},"m"->{-1.5,-1},"(Subscript[m, k])"->{-0.5,-1},"addN"->{0,0},"(Subscript[m, prec])"->{0.5,-1},"p"->{1.5,-1},"e"->{1.5,1.5},"addM"->{4,0},"h"->{2.5,-1},"s"->{2.5,1},"b"->{4,2.5},"g"->{6,-1},"d"->{8,2.5},"covN"->{0,5},"covE"->{9.5,1.5},"nonM"->{4,5},"covM"->{8,0},"(SubStar[e])"->{4,4},"(Subscript[e, unb])"->{1,2.5},"(Subscript[e, 2])"->{1.75,3},"nonE"->{2.5,3.5},"nonN"->{12,0},"\!\(\*SubsuperscriptBox[\(e\), \(∗\), \(⊥\)]\)"->{8,1},"r"->{9.5,4},"a"->{8,6},"(e^⊥)"->{10.5,3.5},"cofM"->{8,5},"cofN"->{12,5},"i"->{11,6},"c"->{12,7},"(Subscript[e, 2]^⊥)"->{10.25,2},"(Subscript[e, unb]^⊥)"->{11,2.5},"u"->{9.5,6}\[RightAssociation];

And we finally have a nice layout of the graph.

Graph[cinv,VertexLabels->{v_:>Style[v,FontSize->14,Bold]},VertexCoordinates->ccoord,ImageSize->939](*Graph with labels and nice layout*)

The models

We look at the constellations of the previous graph in different forcing models. A constellation is obtained by assigning a value to some characteristics in the graph. The value of other characteristics can be uniquely determined as well, so there is no need to assign all values, but latter infer other values by using the transitive closure of the graph. The higher the value, the larger the characteristic can be. For example, in some model, characteristics with value 6 are larger than those with value 5. Later, we present a command that shows the diagram of the constellation with the assigned values.

Note: recall that ZFC proves minLc ≤ (Subscript[e, unb]) and (Subscript[e, unb]^⊥)≤ supLc.

Cohen model

After adding many Cohen reals over a model of CH.

cohen=<|"(Subscript[ℵ, 1])"->1,"nonM"->1,"g"->1,"a"->1,"covM"->2,"c"->2|>;(*values in Cohen model (just the order)*)

Hechler reals

The model obtained by adding Hechler reals over the Cohen model above.

hechler=<|"(Subscript[ℵ, 1])"->1,"covN"->1,"s"->1,"e"->1,"g"->1,"b"->2,"a"->2,"nonM"->2,"covM"->2,"d"->2,"(Subscript[e, 2])"->1,"(Subscript[e, 2]^⊥)"->3,"(e^⊥)"->3,"r"->3,"nonN"->3,"c"->3|>;
(*The cofinal-many Hechler reals produce a mad family of size b=d. The characteristics (Subscript[e, 2]) and (Subscript[e, 2]^⊥) can be controlled by goodness (due to Hidetaka Noro).*)

Random algebra

The models adding random reals side by side. The second one consists of forcing with the random algebra after Hechler model above.

randomside=<|"(Subscript[ℵ, 1])"->1,"nonN"->1,"d"->1,"a"->1,"covN"->2,"c"->2|>;

drandomside=<|"(Subscript[ℵ, 1])"->1,"nonN"->1,"g"->1,"b"->2,"d"->3,"covN"->4,"c"->4|>;
(*I wonder what happens to (SubStar[e]), (Subscript[e, *]^⊥) here, but I conjecture (SubStar[e])=2 and (Subscript[e, *]^⊥)=3 by closed Fr-Knaster;
it looks like a=2 here*)

FS iteration of random forcing

The model obtained by adding random reals, along a FS iteration, over the Cohen model above.

randomfsi=<|"(Subscript[ℵ, 1])"->1,"a"->1,"g"->1,"nonE"->1,"covN"->2,"nonM"->2,"covM"->2,"nonN"->2,"covE"->3,"d"->3,"c"->3|>;
(*I wonder what happens to (SubStar[e]), (Subscript[e, *]^⊥) here, but I conjecture (SubStar[e])=1 and (Subscript[e, *]^⊥)=3 by closed Fr-linkedness*)

Amoeba reals

The model obtained by adding amoeba reals over the Cohen model above.

amoeba=<|"(Subscript[ℵ, 1])"->1,"g"->1,"addN"->2,"s"->1,"cofN"->2,"a"->2,"r"->3,"c"->3|>;
(*s=1 and r=3 here by our results in Chapter 8*)

Eventually different reals

The model obtained by adding eventually different reals with the σ-centered poset, along a FS iteration, over the Cohen model above.

evreal=<|"(Subscript[ℵ, 1])"->1,"g"->1,"covN"->1,"s"->1,"(SubStar[e])"->1,"a"->1,"nonE"->2,"nonM"->2,"covM"->2,"covE"->2,"\!\(\*SubsuperscriptBox[\(e\), \(∗\), \(⊥\)]\)"->3,"nonN"->3,"r"->3,"c"->3|>;
(* what are (Subscript[e, 2]) and (Subscript[e, unb]) ((Subscript[e, 2]^⊥) and (Subscript[e, unb]^⊥)) in this model?*)

Cichon Maximum Models

We include the models of Cichon Maximum, with more cardinal characteristics, presented in the book.

Thm 11.4.4 (extending Thm. 11.4.2) with all MA-numbers larger than (Subscript[ℵ, 1]):

cmax1m=<|"(Subscript[ℵ, 1])"->1,"m"->2,"(Subscript[m, prec])"->2,"p"->3,"h"->4,"g"->4,"addN"->5,"covN"->6,"b"->7,"e"->8,"(SubStar[e])"->8,"(Subscript[e, unb])"->9,"nonE"->9,"nonM"->10,"covM"->11,"covE"->12,"(Subscript[e, unb]^⊥)"->12,"\!\(\*SubsuperscriptBox[\(e\), \(∗\), \(⊥\)]\)"->13,"(e^⊥)"->13,"d"->14,"nonN"->15,"cofN"->16,"c"->17|>;

Thm 11.4.4  (extending Thm. 11.4.2) with m=(Subscript[ℵ, 1]):

cmax1mk=<|"(Subscript[ℵ, 1])"->1,"m"->1,"(Subscript[m, k])"->2,"(Subscript[m, prec])"->2,"p"->3,"h"->4,"g"->4,"addN"->5,"covN"->6,"b"->7,"e"->8,"(SubStar[e])"->8,"(Subscript[e, unb])"->9,"nonE"->9,"nonM"->10,"covM"->11,"covE"->12,"(Subscript[e, unb]^⊥)"->12,"\!\(\*SubsuperscriptBox[\(e\), \(∗\), \(⊥\)]\)"->13,"(e^⊥)"->13,"d"->14,"nonN"->15,"cofN"->16,"c"->17|>;

Thm 11.4.4  (extending Thm. 11.4.2) with (Subscript[m, k])=(Subscript[ℵ, 1]) for all k, and (Subscript[m, prec])>(Subscript[ℵ, 1]):

cmax1mprec=<|"(Subscript[ℵ, 1])"->1,"(Subscript[m, k])"->1,"(Subscript[m, prec])"->2,"p"->3,"h"->4,"g"->4,"addN"->5,"covN"->6,"b"->7,"e"->8,"(SubStar[e])"->8,"(Subscript[e, unb])"->9,"nonE"->9,"nonM"->10,"covM"->11,"covE"->12,"(Subscript[e, unb]^⊥)"->12,"\!\(\*SubsuperscriptBox[\(e\), \(∗\), \(⊥\)]\)"->13,"(e^⊥)"->13,"d"->14,"nonN"->15,"cofN"->16,"c"->17|>;

Thm 11.4.4 (extending Thm. 11.4.3) with all MA-numbers (except m) larger than (Subscript[ℵ, 1]), and s below addN (and r in the dual position):

cmax1saN1=<|"(Subscript[ℵ, 1])"->1,"m"->1,"(Subscript[m, k])"->2,"(Subscript[m, prec])"->2,"p"->3,"h"->4,"g"->4,"s"->4.5,"addN"->5,"covN"->6,"b"->7,"e"->8,"(SubStar[e])"->8,"(Subscript[e, unb])"->9,"nonE"->9,"nonM"->10,"covM"->11,"covE"->12,"(Subscript[e, unb]^⊥)"->12,"\!\(\*SubsuperscriptBox[\(e\), \(∗\), \(⊥\)]\)"->13,"(e^⊥)"->13,"d"->14,"nonN"->15,"cofN"->16,"r"->16.5,"c"->17|>;

Thm 11.4.4 (extending Thm. 11.4.3) with all MA-numbers (except m) larger than (Subscript[ℵ, 1]), and s between addN and covN:

cmax1scN1=<|"(Subscript[ℵ, 1])"->1,"m"->1,"(Subscript[m, k])"->2,"(Subscript[m, prec])"->2,"p"->3,"h"->4,"g"->4,"addN"->5,"s"->5.5,"covN"->6,"b"->7,"e"->8,"(SubStar[e])"->8,"(Subscript[e, unb])"->9,"nonE"->9,"nonM"->10,"covM"->11,"covE"->12,"(Subscript[e, unb]^⊥)"->12,"\!\(\*SubsuperscriptBox[\(e\), \(∗\), \(⊥\)]\)"->13,"(e^⊥)"->13,"d"->14,"nonN"->15,"r"->15.5,"cofN"->16,"c"->17|>;

Thm 11.4.4 (extending Thm. 11.4.3) with all MA-numbers (except m) larger than (Subscript[ℵ, 1]), and s between covN and b:

cmax1sb1=<|"(Subscript[ℵ, 1])"->1,"m"->1,"(Subscript[m, k])"->2,"(Subscript[m, prec])"->2,"p"->3,"h"->4,"g"->4,"addN"->5,"covN"->6,"s"->6.5,"b"->7,"e"->8,"(SubStar[e])"->8,"(Subscript[e, unb])"->9,"nonE"->9,"nonM"->10,"covM"->11,"covE"->12,"(Subscript[e, unb]^⊥)"->12,"\!\(\*SubsuperscriptBox[\(e\), \(∗\), \(⊥\)]\)"->13,"(e^⊥)"->13,"d"->14,"r"->14.5,"nonN"->15,"cofN"->16,"c"->17|>;

Thm 11.4.4 (extending Thm. 11.4.3) with with (Subscript[m, k])=(Subscript[ℵ, 1]) for all k,  (Subscript[m, prec])>(Subscript[ℵ, 1]), and s below addN:

cmax1saN2=<|"(Subscript[ℵ, 1])"->1,"(Subscript[m, k])"->1,"(Subscript[m, prec])"->2,"p"->3,"h"->4,"g"->4,"s"->4.5,"addN"->5,"covN"->6,"b"->7,"e"->8,"(SubStar[e])"->8,"(Subscript[e, unb])"->9,"nonE"->9,"nonM"->10,"covM"->11,"covE"->12,"(Subscript[e, unb]^⊥)"->12,"\!\(\*SubsuperscriptBox[\(e\), \(∗\), \(⊥\)]\)"->13,"(e^⊥)"->13,"d"->14,"nonN"->15,"cofN"->16,"r"->16.5,"c"->17|>;

Thm 11.4.4 (extending Thm. 11.4.3) with with (Subscript[m, k])=(Subscript[ℵ, 1]) for all k,  (Subscript[m, prec])>(Subscript[ℵ, 1]), and s between addN and covN:

cmax1scN2=<|"(Subscript[ℵ, 1])"->1,"(Subscript[m, k])"->1,"(Subscript[m, prec])"->2,"p"->3,"h"->4,"g"->4,"addN"->5,"s"->5.5,"covN"->6,"b"->7,"e"->8,"(SubStar[e])"->8,"(Subscript[e, unb])"->9,"nonE"->9,"nonM"->10,"covM"->11,"covE"->12,"(Subscript[e, unb]^⊥)"->12,"\!\(\*SubsuperscriptBox[\(e\), \(∗\), \(⊥\)]\)"->13,"(e^⊥)"->13,"d"->14,"nonN"->15,"r"->15.5,"cofN"->16,"c"->17|>;

Thm 11.4.4 (extending Thm. 11.4.3) with with (Subscript[m, k])=(Subscript[ℵ, 1]) for all k,  (Subscript[m, prec])>(Subscript[ℵ, 1]), and s between covN and b:

cmax1sb2=<|"(Subscript[ℵ, 1])"->1,"(Subscript[m, k])"->1,"(Subscript[m, prec])"->2,"p"->3,"h"->4,"g"->4,"addN"->5,"covN"->6,"s"->6.5,"b"->7,"e"->8,"(SubStar[e])"->8,"(Subscript[e, unb])"->9,"nonE"->9,"nonM"->10,"covM"->11,"covE"->12,"(Subscript[e, unb]^⊥)"->12,"(e^⊥)"->13,"\!\(\*SubsuperscriptBox[\(e\), \(∗\), \(⊥\)]\)"->13,"d"->14,"r"->14.5,"nonN"->15,"cofN"->16,"c"->17|>;

Below, the thorny versions (with b<covN and nonN<d) of some of the models above.

cmax2m=<|"(Subscript[ℵ, 1])"->1,"m"->2,"(Subscript[m, prec])"->2,"p"->3,"h"->4,"g"->4,"addN"->5,"b"->6,"nonE"->6,"covN"->7,"nonM"->8,"covM"->9,"nonN"->10,"covE"->11,"d"->11,"cofN"->12,"c"->13|>;

cmax2mk=<|"(Subscript[ℵ, 1])"->1,"m"->1,"(Subscript[m, k])"->2,"(Subscript[m, prec])"->2,"p"->3,"h"->4,"g"->4,"addN"->5,"b"->6,"nonE"->6,"covN"->7,"nonM"->8,"covM"->9,"nonN"->10,"covE"->11,"d"->11,"cofN"->12,"c"->13|>;

cmax2mprec=<|"(Subscript[ℵ, 1])"->1,"(Subscript[m, k])"->1,"(Subscript[m, prec])"->2,"p"->3,"h"->4,"g"->4,"addN"->5,"b"->6,"nonE"->6,"covN"->7,"nonM"->8,"covM"->9,"nonN"->10,"covE"->11,"d"->11,"cofN"->12,"c"->13|>;

cmax2saN1=<|"(Subscript[ℵ, 1])"->1,"m"->1,"(Subscript[m, k])"->2,"(Subscript[m, prec])"->2,"p"->3,"h"->4,"g"->4,"s"->4.5,"addN"->5,"b"->6,"nonE"->6,"covN"->7,"nonM"->8,"covM"->9,"nonN"->10,"covE"->11,"d"->11,"cofN"->12,"r"->12.5,"c"->13|>;

cmax2sb1=<|"(Subscript[ℵ, 1])"->1,"m"->1,"(Subscript[m, k])"->2,"(Subscript[m, prec])"->2,"p"->3,"h"->4,"g"->4,"addN"->5,"s"->5.5,"b"->6,"nonE"->6,"covN"->7,"nonM"->8,"covM"->9,"nonN"->10,"covE"->11,"d"->11,"r"->11.5,"cofN"->12,"c"->13|>;

cmax2saN2=<|"(Subscript[ℵ, 1])"->1,"(Subscript[m, k])"->1,"(Subscript[m, prec])"->2,"p"->3,"h"->4,"g"->4,"s"->4.5,"addN"->5,"b"->6,"nonE"->6,"covN"->7,"nonM"->8,"covM"->9,"nonN"->10,"covE"->11,"d"->11,"cofN"->12,"r"->12.5,"c"->13|>;

cmax2sb2=<|"(Subscript[ℵ, 1])"->1,"(Subscript[m, k])"->1,"(Subscript[m, prec])"->2,"p"->3,"h"->4,"g"->4,"addN"->5,"s"->5.5,"b"->6,"nonE"->6,"covN"->7,"nonM"->8,"covM"->9,"nonN"->10,"covE"->11,"d"->11,"r"->11.5,"cofN"->12,"c"->13|>;

Sacks model

sacks=<|"(Subscript[ℵ, 1])"->1,"cofN"->1,"a"->1,"i"->1,"u"->1,"c"->2|>;

Miller model

miller=<|"(Subscript[ℵ, 1])"->1,"nonM"->1,"nonN"->1,"a"->1,"u"->1,"(Subscript[e, unb]^⊥)"->1,"g"->2,"c"->2|>;
(*(Subscript[e, unb]^⊥) ≤ supLc and supLc=1 because of Laver prop; I wonder what (e^⊥) and (Subscript[e, *]^⊥) are (by Zapletal's tameness, 1)*)

Laver model

laver=<|"(Subscript[ℵ, 1])"->1,"nonN"->1,"(Subscript[e, unb]^⊥)"->1,"b"->2,"g"->2,"c"->2|>;
(*(Subscript[e, unb]^⊥)≤ supLc=1 by Laver prop.*)

Mathias model

mathias=<|"(Subscript[ℵ, 1])"->1,"(Subscript[e, unb]^⊥)"->1,"h"->2,"nonN"->2,"c"->2|>;
(*(Subscript[e, unb]^⊥)=1 by Laver prop.*)

Large precaliber

Refer to Thm. 7.4.2.

largemprec=<|"(Subscript[ℵ, 1])"->1,"covN"->1,"(Subscript[m, prec])"->2,"c"->2|>;

Large minLc

Shelah’s model of d<minLc described in Appendix B, Sec. B.1.

largeminloc=<|"(Subscript[ℵ, 1])"->1,"covN"->1,"d"->1,"(Subscript[e, unb])"->2,"c"->2|>;
(*What is a in this model?*)

Template iteration with Hechler reals

Refer to Appendix A, Sec. A.4.

templated=<|"(Subscript[ℵ, 1])"->1,"s"->1,"g"->1,"e"->1,"covN"->1,"addM"->2,"cofM"->2,"nonN"->3,"(e^⊥)"->3,"r"->3,"a"->3,"c"->3|>;

Template iteration with amoeba reals

Due to Brendle, see Appendix A, Sec. A.4.

templatecofN=<|"(Subscript[ℵ, 1])"->1,"g"->1,"addN"->2,"cofN"->2,"a"->3,"c"->3|>;

Blass-Shelah model

usBS=<|"(Subscript[ℵ, 1])"->1,"u"->1,"s"->2,"c"->2,"g"->1|>;

Iterating predictors

FS iteration of Brendle’s forcing for adding a predictor, over Cohen model.

evit=<|"(Subscript[ℵ, 1])"->1,"a"->1,"covN"->1,"g"->1,"e"->2,"(e^⊥)"->2,"d"->3,"nonN"->3,"c"->3|>;

CS iteration of B/E

BmodE=<|"(Subscript[ℵ, 1])"->1,"nonM"->1,"nonN"->1,"g"->2,"covE"->2,"c"->2|>;
(*Large g is due to Ryoichi Sato. What is (Subscript[e, *]^⊥) here?*)

A. Fischer, Kellner, Goldstern and Shelah creature models

Refer to Appendix A, Sec. A.2.

FGKS=<|"(Subscript[ℵ, 1])"->1,"covN"->1,"d"->1,"nonN"->3,"nonM"->2,"cofN"->4,"c"->5|>;

FGKS2=<|"(Subscript[ℵ, 1])"->1,"covN"->1,"d"->1,"nonN"->2,"nonM"->3,"cofN"->4,"c"->5|>;

Guzman and Kalajdzievski model of u<a

GKua=<|"(Subscript[ℵ, 1])"->1,"u"->1,"s"->2,"a"->2,"c"->2|>;

Balcar, Hernández and Hrusak model of i<nonN

BHH=<|"(Subscript[ℵ, 1])"->1,"i"->1,"nonN"->2,"c"->2|>;

Shelah’s model of i<u

Shiu=<|"(Subscript[ℵ, 1])"->1,"i"->1,"cofN"->1,"u"->2,"c"->2|>;(*Iterands have the Sacks property, see Conclusion 1.12 in Shelah's paper*)

Shelah’s model of a<s

Shas=<|"(Subscript[ℵ, 1])"->1,"a"->1,"covN"->1,"s"->2,"covM"->2,"c"->2|>;(*It seems to add Cohen reals, according to Guzman and Kalajdzievski*)

Collection of all models above

allmod=<|"cohen"->cohen,"randomside"->randomside,"drandomside"->drandomside,"randomfsi"->randomfsi,"hechler"->hechler,"amoeba"->amoeba,"evreal"->evreal,"cmax1m"->cmax1m,"cmax1mk"->cmax1mk,"cmax1mprec"->cmax1mprec,"cmax1saN1"->cmax1saN1,"cmax1scN1"->cmax1scN1,"cmax1sb1"->cmax1sb1,"cmax1saN2"->cmax1saN2,"cmax1scN2"->cmax1scN2,"cmax1sb2"->cmax1sb2,"cmax2m"->cmax2m,"cmax2mk"->cmax2mk,"cmax2mprec"->cmax2mprec,"cmax2saN1"->cmax2saN1,"cmax2sb1"->cmax2sb1,"cmax2saN2"->cmax2saN2,"cmax2sb2"->cmax2sb2,"sacks"->sacks,"miller"->miller,"laver"->laver,"mathias"->mathias,"largemprec"->largemprec,"largeminloc"->largeminloc,"templated"->templated,"templatecofN"->templatecofN,"usBS"->usBS,"evit"->evit,"BModE"->BmodE,"FGKS"->FGKS,"FGKS2"->FGKS2,"GKua"->GKua,"BHH"->BHH,"Shiu"->Shiu,"Shas"->Shas|>;

Algorithms to complete the models

The following algorithms are used to find all values (or intervals of possible values) in a model.

minSuccI[g_,f_Association,x_]:=
Module[{d,succ},
d=Keys[f];
succ=Select[d,MemberQ[g,x\[DirectedEdge]#]||#==x&];
Min[Max/@Lookup[f,succ]]
]

maxPreI[g_,f_Association,y_]:=
Module[{d,succ},
d=Keys[f];
succ=Select[d,MemberQ[g,#\[DirectedEdge]y]||#==y&];
Max[Min/@Lookup[f,succ]]
]

The following is the algorithm that gives the intervals of values in a model:

modelint[g_,f_Association]:=
Module[{f1,v},
f1=f;
v=VertexList[g];
Do[
f1=Append[f1,x->Interval[{maxPreI[g,f,x],minSuccI[g,f,x]}]],{x,v}
];
f1
]

The following considers the situation when min[x,y]≤ z, p={x,y}.

modelmin[g_,f_Association,p_,z_]:=
Module[{f1},
f1=f;
f1=Append[f1,z->Interval[{Max[Min[f[z]],Min[Min[f[p[[1]]]],Min[f[p[[2]]]]]],Max[f[z]]}]];
Do[
If[Max[f[z]]<Min[f[p[[1+i]]]],
f1=Append[f1,p[[2-i]]->Interval[{Min[f[p[[2-i]]]],Min[Max[f[p[[2-i]]]],Max[f[z]]]}]],
Nothing];
,{i,0,1}
];
f1
]

The following considers the situation when z≤ max[x,y], p={x,y}.

modelmax[g_,f_Association,p_,z_]:=
Module[{f1},
f1=f;
f1=Append[f1,z->Interval[{Min[f[z]],Min[Max[f[z]],Max[Max[f[p[[1]]]],Max[f[p[[2]]]]]]}]];
Do[
If[Max[f[p[[1+i]]]]<Min[f[z]],
f1=Append[f1,p[[2-i]]->Interval[{Max[Min[f[p[[2-i]]]],Min[f[z]]],Max[f[p[[2-i]]]]}]],
Nothing];
,{i,0,1}
];
f1
]

Intervals of length 0 are reduced to a point by the following algorithm:

modeldet[g_,f_Association]:=
Module[{f1,v},
f1=f;
v=VertexList[g];
Do[
If[Max[f1[x]]==Min[f1[x]],
f1=Append[f1,x->Min[f1[x]]],
Nothing
],
{x,v}];
f1
]

The full model

As ZFC proves inequalities of the form min{x,y} ≤ z and z ≤ max{x,y}, these have to be considered to evaluate values in a model. 
Below, we list triples of cardinals x,y,z in this sense (the first for min, the second for max).

mininv={{"b","(Subscript[e, unb])","e"},{"b","covM","addM"},{"b","nonN","nonE"}};
maxinv={{"d","(Subscript[e, unb]^⊥)","(e^⊥)"},{"d","nonM","cofM"},{"d","covN","covE"}};

The following algorithm computes all values and intervals of possible values in any directed graph of characteristics with values assigned in a model. This is the first important algorithm in this notebook.

modelfull[g_,f_Association,mint_,maxt_]:=
Module[{f1,lmin,lmax},
lmin=Length[mint];
lmax=Length[maxt];
f1=modelint[g,f];
Do[
f1=modelmin[g,f1,{mint[[i,1]],mint[[i,2]]},mint[[i,3]]];
,{i,lmin}
];
Do[
f1=modelmax[g,f1,{maxt[[i,1]],maxt[[i,2]]},maxt[[i,3]]];
,{i,lmax}
];
f1=modelint[g,f1];
f1=modeldet[g,f1];
f1
]

The following algorithm has as input a model f of the diagram of invariants from the beginning, and the output is the values and interval of values for each characteristic in that model.

cmodelfull[f_Association]:=modelfull[cinvpo,f,mininv,maxinv]

The full table

The algorithm below has, as input, a directed graph g (like the diagram of characteristics from the beginning), a set of models, and min-max constrains. The output is the data of provable and consistent inequalities between the vertices of the graph g with respect to the input models. As the amount of data is immense, we only execute it inside programs where we want to extract relevant information, like inequalities not known to be consistent according to the graph and the input models.

conmap[g_,fmod_,mint_,maxt_]:=
Module[{f1,v,data,mods,fmods},
v=VertexList[g];
mods=Keys[fmod];
fmods=Association[Table[md->modelfull[g,fmod[md],mint,maxt],{md,mods}]];
TableForm[
Table[
Module[{x,y,leq,geq,le,ge,nl,ng},
x=z[[1]];
y=z[[2]];
leq=MemberQ[g,x\[DirectedEdge]y];
geq=MemberQ[g,y\[DirectedEdge]x];
le=Select[mods,Max[fmods[#][x]]<Min[fmods[#][y]]&];
ge=Select[mods,Max[fmods[#][y]]<Min[fmods[#][x]]&];
nl=Length[le];
ng=Length[ge];
Style[#,Which[(leq&&nl==0)||(geq&&ng==0)||(!leq&&!geq&&(nl==0||ng==0)),Orange,(leq&&ng>0)||(geq&&nl>0),Red,True,Black]]&/@{x,y,leq,geq,le,ge}
(*Style[
{x,y,leq,geq,le,ge},
If[Length[le]==0&&Length[ge]==0,Blue,
If[(leq&&Length[ge]>0)||(geq&&Length[le]>0),Red,Black]
]
]*)
],{z,Subsets[v,{2}]}],
TableHeadings->{None,{" "," ","≤","≥","<",">"}}
]
]

The following is the algorithm for the particular case of our diagram of characteristics (cinvpo). The only input is a set of models.

cconmap[models_]:=conmap[cinvpo,models,mininv,maxinv]

The algorithm below produces an interactive table of the program “conmap” above: instead of releasing the vast amount of data, it let us choose two vertices x,y of the graph and tells us whether x≤y and y≤x are deduced in the graph, or whether strict inequalities x<y and y<x are consistent, in which case the models from the input are listed. If, for example, x≤y is not deduced from the graph, and there is no model of y<x in the list, the consistency of “y<x” becomes a potential open question. This is the second important algorithm in this notebook.

manconmap[g_,fmod_,mint_,maxt_]:=
With[(*{v,mods,fmods},*)
{
v=VertexList[g],
mods=Keys[fmod],
fmods=Association[Table[md->modelfull[g,fmod[md],mint,maxt],{md,mods}]]
},
Manipulate[
Module[{leq,geq,le,ge},
leq=MemberQ[g,x\[DirectedEdge]y];
geq=MemberQ[g,y\[DirectedEdge]x];
le=Select[mods,Max[fmods[#][x]]<Min[fmods[#][y]]&];
ge=Select[mods,Max[fmods[#][y]]<Min[fmods[#][x]]&];
TableForm[
{{x<>"≤"<>y,leq},{x<>"≥"<>y,geq},{x<>"<"<>y,le},{x<>">"<>y,ge}}
]
]
,{x,v},{y,v}
]
]

Below, we have the algorithm above for the particular case of our diagram of characteristics.

mancconmap[models_]:=manconmap[cinvpo,models,mininv,maxinv]

The following algorithm returns the list of “open questions” with respect to a graph and a set of models. This is the third important algorithm in this notebook.

conopen[g_,fmod_,mint_,maxt_]:=
Module[{f1,v,data,mods,fmods,open},
v=VertexList[g];
mods=Keys[fmod];
fmods=Association[Table[md->modelfull[g,fmod[md],mint,maxt],{md,mods}]];
open={};
Do[
Module[{x,y,leq,geq,le,ge,nl,ng},
x=z[[1]];
y=z[[2]];
leq=MemberQ[g,x\[DirectedEdge]y];
geq=MemberQ[g,y\[DirectedEdge]x];
le=Select[mods,Max[fmods[#][x]]<Min[fmods[#][y]]&];
ge=Select[mods,Max[fmods[#][y]]<Min[fmods[#][x]]&];
nl=Length[le];
ng=Length[ge];
If[nl==0,
If[!geq,
open=AppendTo[open,x<>"<"<>y],
Nothing],
If[geq,
Print[x<>"<"<>y<>" contradicts "y<>"≤"<>x];Return[],
Nothing]
];
If[ng==0,
If[!leq,
open=AppendTo[open,y<>"<"<>x],
Nothing
],
If[leq,
Print[y<>"<"<>x<>" contradicts "x<>"≤"<>y];Return[],
Nothing]
];
],{z,Subsets[v,{2}]}];
open
]

Below, we apply the previous algorithm to our diagram of characteristics. It gives the potential open questions according to the input models.

cconopen[models_]:=conopen[cinvpo,models,mininv,maxinv]

Coloring constellations

The following functions assign colors to numbers. We use this to draw diagrams of models where each value is assigned a color (with respect to its value).

(*Create a color function based on the values*)
colorFunction[val_,m_]:=ColorData["Rainbow"][Rescale[val,{1,m}]];

The following program has inputs a graph g, a model f, min-max constrains, and a layout of the graph. The output is the diagram with colored values.

const[g_,f_,mint_,maxt_,cord_]:=
Module[{v,g2,mc,fmod,cl,lb},
v=VertexList[g];
mc=Max[Table[Max[f[x]],{x,Keys[f]}]];
g2=EdgeList[TransitiveClosureGraph[Graph[g]]];
fmod=modelfull[g2,f,mint,maxt];
cl=Table[If[Min[fmod[x]]==Max[fmod[x]],x->colorFunction[fmod[x],mc],x->White],{x,v}];
lb=Table[x->x<>", "<>ToString[fmod[x]],{x,v}];
Graph[g,VertexStyle->cl,VertexLabels->lb,VertexCoordinates->cord]
]

Below, is the particular case for our diagram of invariants.

cconst[f_]:=const[cinv,f,mininv,maxinv,ccoord]

Some examples are listed below.

cconst[cmax1saN1]

cconst[templatecofN]

cconst[BmodE]

cconst[miller]

cconst[mathias]

cconst[usBS]

cconst[largeminloc]

Testing algorithms

cconst[drandomside]

cmodelfull[usBS]

cconst[evit]

cmodelfull[BmodE]

cconst[BmodE]

cconst[hechler]

The interactive table

The following interacting table allows to choose two characteristics from our diagram. The result states with “True” or “False” whether the inequality is known to be provable in ZFC, and also lists models (from our data) of inequalities of the form x<y and y<x. If, for example, “x<y” does not show any model and y≤x is not shown as provable, then the consistency of x<y is considered as a potential open question.

mancconmap[allmod]

The open questions

The following command gives the list of potential open questions of our diagram of characteristics with respect to the input model. A listed inequality of the form “x<y” indicates that the question of whether this inequality is consistent with ZFC is open.

cconopen[allmod]

CloudDeploy[EvaluationNotebook[],CloudObject["Public/2charmodels.nb"],Permissions->"Public"]