digraph G {
    rankdir="LR"
    //graph [ fontname=Arial, fontsize=24 ];
    //node [ fontname=Arial, fontsize=22];
    //edge [ fontname=Helvetica, fontsize=20 ];
    edge [constraint=false]
    edge [labelfloat=true]
    margin=0
    pad=0.2
    nodesep=0.4;
    ranksep=0.02;
	subgraph cluster_0 {
        //margin=32
        App1 -> "λ lFloatToBool0" [xlabel="(Float ->\nBool) ->\nIrisClass"];
		label = "Var. Def. FloatToBool0";
		color=red
    {rank="same"; App1; "λ lFloatToBool0";}
	}
	subgraph cluster_2 {
        //margin=32
        App6 -> ">" [xlabel="Float ->\nFloat ->\nBool"];
		label = "Funktion >";
		color=blue
    {rank="same"; App6; ">";}
	}
	subgraph cluster_3 {
        //margin=32
        App9 -> App10 [xlabel="Float ->\nFloat"];
        App10 -> "+" [xlabel="Float ->\nFloat ->\nFloat"];
		label = "Funktion +";
		color=blue
    {rank="same"; App9;App10; "+";}
	}
	subgraph cluster_4 {
        //margin=32
        App7 -> App8  [xlabel="Float ->\nFloat"];
        App8 -> "*" [xlabel="Float ->\nFloat ->\nFloat"];
		label = "Funktion *";
		color=blue
    {rank="same"; App7;App8; "*";}
	}

	subgraph cluster_5 {
        //margin=32
        App2 -> App3  [xlabel="IrisClass ->\nIrisClass"];
        App3 -> App4 [xlabel="IrisClass ->\nIrisClass ->\nIrisClass"];
        App4 -> "if'" [xlabel="Bool ->\nIrisClass ->\nIrisClass ->\nIrisClass"];
		label = "Funktion if'";
		color=blue
    {rank="same"; App2;App3;App4 "if'";}
	}

	subgraph cluster_6 {
        //margin=32
        App5 ->"FloatToBool0" [xlabel="Float ->\nBool"];
		label = "Funktion FloatToBool0";
		color=green
    {rank="same"; App5;"FloatToBool0";}
	}

	subgraph cluster_7 {
        //margin=32
        App11 -> "λ Bool0" [xlabel="Bool ->\nIrisClass"];
		label = "Var. Def. Bool0";
		color=red
    {rank="same"; App11;"λ Bool0";}
	}

	subgraph cluster_8 {
        //margin=32
        App16 -> App17  [xlabel="Float ->\nFloat"];
        App17 -> "2 *" [xlabel="Float ->\nFloat ->\nFloat"];
		label = "Funktion *";
		color=blue
    {rank="same"; App16;App17;"2 *";}
	}

	subgraph cluster_9 {
        //margin=32
        App15 -> "2 FloatToBool0" [xlabel="Float ->\nBool"];
		label = "Funktion FloatToBool0";
		color=green
    {rank="same"; App15;"2 FloatToBool0";}
	}

	subgraph cluster_10 {
        //margin=32

        App12 -> App13   [xlabel="IrisClass ->\nIrisClass"];
        App13 -> App14  [xlabel="IrisClass ->\nIrisClass ->\nIrisClass"];
        App14 -> "2 if'" [xlabel="Bool ->\nIrisClass ->\nIrisClass ->\nIrisClass"];
		label = "Funktion if'";
		color=blue
    {rank="same"; App12;App13;App14;"2 if'";}
	}
	subgraph cluster_11 {
        //margin=32
        "Bool0"
		label = "Var Bool0'";
		color=green
	}
	subgraph cluster_12 {
        //margin=32
        "Float0"
		label = "Var Float0'";
		color=green
	}
	subgraph cluster_13 {
        //margin=32
        "Float2"
		label = "Var Float2'";
		color=green
	}
	subgraph cluster_14 {
        //margin=32
        "Float3"
		label = "Var Float3'";
		color=green
	}

    //((\lFloat0 -> ((\lFloat1 ->\n((\lFloat2 ->\n((\lFloat3 ->\n))))))))
    //((\lFloatToBool0 ->\n(if' (lFloatToBool0 (7.5471354)) ((\lBool0 ->\n(if' (lBool0 ) (Virginica) (Versicolor))) (lFloatToBool0 ((*) (2.4138098) (8.027873)))) (Setosa))) ((>) ((*) ((+) (lFloat0 ) (lFloat2 )) (lFloat3 ))))
    "λ Float0"-> "λ Float1" [xlabel="Float ->\nFloat ->\nFloat ->\nIrisClass"];
    "λ Float1"-> "λ Float2" [xlabel="Float ->\nFloat ->\nIrisClass"];
    "λ Float2"-> "λ Float3" [xlabel="Float ->\nIrisClass"];
    //edge [labelfloat=true]
    edge [minlen=1, weight=1,constraint=true]
    "λ Float3"-> "App1" [label="IrisClass"];
    "λ lFloatToBool0"-> App2  [taillabel="IrisClass", labeldistance=5];

    //((>) ((*) ((+) (lFloat0 ) (lFloat2 )) (lFloat3 )))
    App1 -> App6 [taillabel="Float ->\nBool", labeldistance=7];
    App6 -> App7  [headlabel="Float", labeldistance=5];
    App7 -> "Float3" [label="Float"];
    App8 -> App9 [label="Float"];
    App9 -> "Float2" [label="Float"];
    App10 -> "Float0" [label="Float"];

    //(if' (lFloatToBool0 (7.5471354)) ((\lBool0 ->\n(if' (lBool0 ) (Virginica) (Versicolor))) (lFloatToBool0 ((*) (2.4138098) (8.027873)))) (Setosa))
    App2 -> "Con1: Setosa" [label="IrisClass"];

    //((\lBool0 -> (if' (lBool0 ) (Virginica) (Versicolor))) (lFloatToBool0 ((*) (2.4138098) (8.027873))))
    App3 -> App11 [label="IrisClass"];
    "λ Bool0"-> App12   [label="IrisClass"];
    App14 -> "Bool0" [label="Bool"];
    App13 -> "Con: Virginica" [label="IrisClass"];
    App12 -> "Con: Versicolor" [label="IrisClass"];
    App11 -> App15  [label="Bool"];
    App15 -> App16  [label="Float"];
    App17 -> "Con: 2.41" [label="Float"];
    App16 -> "Con: 8.03" [label="Float"];

    //(lFloatToBool0 (7.5471354))
    App4 -> App5   [headlabel="Bool", labeldistance=9];
    App5 -> "Con: 7.55" [label="Float"];

    App1 [label = App];
    App2 [label = App];
    App3 [label = App];
    App4 [label = App];
    App5 [label = App];
    App6 [label = App];
    App7 [label = App];
    App8 [label = App];
    App9 [label = App];
    App10 [label = App];
    App11 [label = App];
    App12 [label = App];
    App13 [label = App];
    App14 [label = App];
    App15 [label = App];
    App16 [label = App];
    App17 [label = App];
    "2 *" [label = "*"];
    "2 FloatToBool0" [label = "FloatToBool0"];
    "2 if'" [label = "if'"];
}
