Fud decomposition inducers

Haskell commentary on the implementation of Tractable and Practicable Inducers/Haskell Implementation/Fud decomposition inducers

Sections

Practicable highest-layer summed shuffle content alignment valency-density fud decomposition inducer

Highest-layer fud decomper

Highest-layer excluded-self maximum-roll fud decomper

Highest-layer excluded-self maximum-roll-by-derived-dimension fud decomper

Practicable level summed shuffle content alignment valency-density fud decomposition inducer

Level highest-layer excluded-self maximum-roll fud decomper

Level highest-layer excluded-self maximum-roll-by-derived-dimension fud decomper

Practicable highest-layer summed shuffle content alignment valency-density fud decomposition inducer

Define the limited-models infinite-layer substrate fud decompositions tree searcher \[ Z_{P,A,\mathrm{D,F}} = \mathrm{searchTreer}(\mathcal{D}_{\mathrm{F},\infty,U,V} \cap \mathrm{trees}(\mathcal{S} \times \mathcal{F}_{\mathrm{q}}),P_{P,A,\mathrm{D,F}},R_{P,A,\mathrm{D,F}}) \] where the neighbourhood function returns a singleton \[ \begin{eqnarray} &&P_{P,A,\mathrm{D,F}}(D) = \{E : \\ &&\hspace{2em}(\cdot,S,G,L) \in \mathrm{maxd}(\mathrm{order}(D_{\mathbf{Q} \times \mathrm{S} \times \mathcal{X}^2},\{(\mathrm{size}(B),S,G,L) : \\ &&\hspace{4em}(L,Y) \in \mathrm{places}(D),\\ &&\hspace{4em}R_L = \bigcup \mathrm{dom}(\mathrm{set}(L)),~H_L = \bigcup \mathrm{ran}(\mathrm{set}(L)),\\ &&\hspace{4em}(\cdot,F) = L_{|L|},~W=\mathrm{der}(F),\\ &&\hspace{4em}S \in W^{\mathrm{CS}} \setminus \mathrm{dom}(\mathrm{dom}(Y)),\\ &&\hspace{4em}B = \mathrm{apply}(V_A,V_A,\mathrm{his}(H_L) \cup \{\{R_L \cup S\}^{\mathrm{U}}\},A),~\mathrm{size}(B)>0,\\ &&\hspace{4em}F_{\mathrm{L}} \in \mathrm{leaves}(\mathrm{tree}(Z_{P,B,B_{R(B)},\mathrm{L}})),\\ &&\hspace{4em}(K,a) \in \mathrm{max}(\mathrm{elements}(Z_{P,B,B_{R(B)},F_{\mathrm{L}},\mathrm{D}})),~a>0,\\ &&\hspace{4em}G = \mathrm{depends}(F_{\mathrm{L}},K)\})),\\ &&\hspace{2em}M=L \cup \{(|L|+1,(S,G))\},\\ &&\hspace{2em}E = \mathrm{tree}(\mathrm{paths}(D) \setminus \{L\} \cup \{M\})\} \end{eqnarray} \] where \[ \begin{eqnarray} &&R_{P,A,\mathrm{D,F}} = \{\{((\emptyset,G),\emptyset)\} : \\ &&\hspace{2em}G \in \mathrm{maxd}(\mathrm{order}(D_{\mathrm{F}},\{G : \\ &&\hspace{4em}F_{\mathrm{L}} \in \mathrm{leaves}(\mathrm{tree}(Z_{P,A,A_{R(A)},\mathrm{L}})),\\ &&\hspace{4em}(K,a) \in \mathrm{max}(\mathrm{elements}(Z_{P,A,A_{R(A)},F_{\mathrm{L}},\mathrm{D}})),~a>0,\\ &&\hspace{4em}G = \mathrm{depends}(F_{\mathrm{L}},K)\}))\} \end{eqnarray} \] The computation of the slice $B$ is a tractable fud application equivalent to the application of the fud’s transforms’ histograms, $\mathrm{his}(H_L)$, multiplied by the slice derived state, $\{R_L \cup S\}^{\mathrm{U}}$, followed by reduction to the substrate, $V_A$, \[ \mathrm{apply}(V_A,V_A,\mathrm{his}(H_L) \cup \{\{R_L \cup S\}^{\mathrm{U}}\},A) = A * \prod \mathrm{his}(H_L) * \{R_L \cup S\}^{\mathrm{U}}~\%~V_A \]

The practicable summed shuffle content alignment valency-density fud decomposition inducer may then be implemented \[ \begin{eqnarray} &&I_{z,\mathrm{Scsd,D,F,\infty,q},P}^{‘ * }(A) = \\ &&\hspace{2em}\mathrm{if}(Q \neq \emptyset, \{(D,I_{\mathrm{Scsd}}^{ * }((A,D)))\},\{(D_{\emptyset},0)\}) :\\ &&\hspace{5em}Q = \mathrm{leaves}(\mathrm{tree}(Z_{P,A,\mathrm{D,F}})),~\{D\} = Q \end{eqnarray} \]

The highest-layer limited-models infinite-layer substrate fud decompositions tree searcher, $Z_{P,A,\mathrm{D,F,d}}$, is defined exactly the same as the limited-models infinite-layer substrate fud decompositions tree searcher, $Z_{P,A,\mathrm{D,F}}$, except that it depends instead on the highest-layer limited-layer limited-underlying limited-breadth fud tree searcher, $Z_{P,B,B_R,\mathrm{L,d}}$, and the highest-layer limited-derived derived variables set list maximiser, $Z_{P,B,B_R,F_{\mathrm{L}},\mathrm{D,d}}$.

The practicable highest-layer summed shuffle content alignment valency-density fud decomposition inducer is implemented (Text) \[ \begin{eqnarray} &&I_{z,\mathrm{Scsd,D,F,\infty,q},P,\mathrm{d}}^{‘ * }(A) = \\ &&\hspace{2em}\mathrm{if}(Q \neq \emptyset, \{(D,I_{\mathrm{Scsd}}^{ * }((A,D)))\},\{(D_{\emptyset},0)\}) :\\ &&\hspace{5em}Q = \mathrm{leaves}(\mathrm{tree}(Z_{P,A,\mathrm{D,F,d}})),~\{D\} = Q \end{eqnarray} \]

The fud decomposition inducer is defined in module AlignmentPracticable. The implementation replaces partition variables by cardinal variables and so has an additional argument of a list of variables, [Variable],

parametersSystemsSamplesListVariablesInducerDecompFudHighest :: 
  Integer -> Integer -> Integer -> Integer -> Integer -> Integer -> Integer -> Integer -> 
  Integer -> Integer ->
  System -> Histogram -> [Variable] ->
  Maybe (DecompFud,(System,[Variable]))

as

parametersSystemsSamplesListVariablesInducerDecompFudHighest 
  wmax lmax xmax omax bmax mmax umax pmax mult seed uu aa ll
  ...
  | ... = Just $ dec emptyTree uu ll seed
  | otherwise = Nothing
  where
    dec zz uu ll s
      | zz == emptyTree && ffr == fudEmpty = (decompFudEmpty, (uu, ll))
      | zz == emptyTree = dec zzr uur llr (s + mult)
      | mm == [] = (zzdf (zztrim zz), (uu, ll)) 
      | otherwise = dec zzc uuc llc (s + mult)
      where
        aarr = ashuffle aa s mult
        ((ffr,_),(uur,llr)) = iillfudshigh wmax lmax xmax omax bmax mmax umax pmax uu aa aarr ll
        zzr = tsgl (stateEmpty,ffr)
        mm = [(size bb,nn,ss,bb,bbrr) | (nn,yy) <- qqll (treesPlaces zz), 
                 let rrc = llsthis nn, let hhc = llfhis nn, let (_,ff) = last nn, ff /= fudEmpty,
                 ss <- qqll (cart uu (fder ff) `minus` dom (treesRoots yy)), 
                 let bb = apply (vars aa) (vars aa) (hhc `union` rrc `add` unit ss) aa,
                 let bbrr = ashuffle bb s mult,
                 size bb > 0]
        (_,nn,ss,bb,bbrr) = last $ sort mm
        ((ffc,_),(uuc,llc)) = iillfudshigh wmax lmax xmax omax bmax mmax umax pmax uu bb bbrr ll
        zzc = pathsTree $ treesPaths zz `add` (nn ++ [(ss,ffc)])
    iillfudshigh wmax lmax xmax omax bmax mmax umax pmax uu aa aarr ll = fromJust $
      parametersSystemsSamplesShufflesListVariablesInducerFudHighest 
        wmax lmax xmax omax bmax mmax umax pmax uu aa aarr ll
    zztrim = pathsTree . Set.map lltrim . treesPaths
    lltrim ll = let (_,ff) = last ll in if ff == fudEmpty then init ll else ll
    ...
    hshuffle hh r = fromJust $ historiesShuffle hh (fromInteger r)
    ashuffle aa seed mult = let hh = aahh aa in 
                            resize (size aa) $ foldl1 aadd [hhaa $ hshuffle hh (seed + r) | r <- [0..mult-1]]
    ...

There is also an implementation that does not shuffle the slice, but calculates the independent, $(A * C)^{\mathrm{X}}$,

parametersSystemsSamplesListVariablesInducerDecompFudHighestNoShuffle :: 
  Integer -> Integer -> Integer -> Integer -> Integer -> Integer -> Integer -> Integer -> 
  System -> Histogram -> [Variable] ->
  Maybe (DecompFud,(System,[Variable]))

as

parametersSystemsSamplesListVariablesInducerDecompFudHighestNoShuffle
  wmax lmax xmax omax bmax mmax umax pmax uu aa ll
  | wmax < 0 || lmax < 0 || xmax < 0 || omax < 0 || bmax < 0 || mmax < 1 || umax < 0 || pmax < 0 = Nothing
  | vars aa `subset` uvars uu = Just $ dec emptyTree uu ll
  | otherwise = Nothing
  where
    dec zz uu ll 
      | zz == emptyTree && ffr == fudEmpty = (decompFudEmpty, (uu, ll))
      | zz == emptyTree = dec zzr uur llr
      | mm == [] = (zzdf (zztrim zz), (uu, ll)) 
      | otherwise = dec zzc uuc llc
      where
        ((ffr,_),(uur,llr)) = iillfudshigh wmax lmax xmax omax bmax mmax umax pmax uu aa (ind aa) ll
        zzr = tsgl (stateEmpty,ffr)
        mm = [(size bb,nn,ss,bb) | (nn,yy) <- qqll (treesPlaces zz), 
                 let rrc = llsthis nn, let hhc = llfhis nn, let (_,ff) = last nn, ff /= fudEmpty,
                 ss <- qqll (cart uu (fder ff) `minus` dom (treesRoots yy)), 
                 let bb = apply (vars aa) (vars aa) (hhc `union` rrc `add` unit ss) aa,
                 size bb > 0]
        (_,nn,ss,bb) = last $ sort mm
        ((ffc,_),(uuc,llc)) = iillfudshigh wmax lmax xmax omax bmax mmax umax pmax uu bb (ind bb) ll
        zzc = pathsTree $ treesPaths zz `add` (nn ++ [(ss,ffc)])
    iillfudshigh wmax lmax xmax omax bmax mmax umax pmax uu aa aarr ll = fromJust $
      parametersSystemsSamplesShufflesListVariablesInducerFudHighest 
        wmax lmax xmax omax bmax mmax umax pmax uu aa aarr ll
    zztrim = pathsTree . Set.map lltrim . treesPaths
    lltrim ll = let (_,ff) = last ll in if ff == fudEmpty then init ll else ll
    ...

Note that these implementations do not implement the set-theoretic definition in Fud Decomposition Inducers exactly. Instead of recalculating all possible leaf fuds at each step of the decomposition, each slice has its fud computed only once. Independent slices are stubbed with an empty fud in the decomposition tree. These stub fuds are trimmed from the decomposition at the termination of the function when the decomposition is ideal.

For example,

let iilldfshighind aa wmax lmax xmax omax bmax mmax umax pmax = fst $ fromJust $ parametersSystemsSamplesListVariablesInducerDecompFudHighestNoShuffle wmax lmax xmax omax bmax mmax umax pmax (sys aa) aa [VarInt i | i <-[101..]]

let iilldfshigh aa wmax lmax xmax omax bmax mmax umax pmax mult seed = fst $ fromJust $ parametersSystemsSamplesListVariablesInducerDecompFudHighest wmax lmax xmax omax bmax mmax umax pmax mult seed (sys aa) aa [VarInt i | i <-[101..]]


let aa = resize 1000 $ regdiag 2 2 `mul` (cdrefr [3,4] (regpivot 3 2))

rp $ iilldfshighind aa (2^2) 3 (3^2) 2 2 2 (3^2) 1
"{(({},{({({(1,1),(101,1)},1 % 1),({(1,2),(101,2)},1 % 1)},{101}),({({(2,1),(102,1)},1 % 1),({(2,2),(102,2)},1 % 1)},{102})}),{(({(101,1),(102,1)},{({({(3,1),(137,1)},1 % 1),({(3,2),(137,2)},1 % 1),({(3,3),(137,2)},1 % 1)},{137}),({({(4,1),(138,1)},1 % 1),({(4,2),(138,2)},1 % 1),({(4,3),(138,2)},1 % 1)},{138})}),{}),(({(101,2),(102,2)},{({({(3,1),(117,1)},1 % 1),({(3,2),(117,2)},1 % 1),({(3,3),(117,2)},1 % 1)},{117}),({({(4,1),(118,1)},1 % 1),({(4,2),(118,2)},1 % 1),({(4,3),(118,2)},1 % 1)},{118})}),{})})}"

rp $ iilldfshigh aa (2^2) 3 (3^2) 2 2 2 (3^2) 1 1 1
"{(({},{({({(1,1),(101,1)},1 % 1),({(1,2),(101,2)},1 % 1)},{101}),({({(2,1),(102,1)},1 % 1),({(2,2),(102,2)},1 % 1)},{102})}),{(({(101,1),(102,1)},{({({(3,1),(137,1)},1 % 1),({(3,2),(137,2)},1 % 1),({(3,3),(137,2)},1 % 1)},{137}),({({(4,1),(138,1)},1 % 1),({(4,2),(138,2)},1 % 1),({(4,3),(138,2)},1 % 1)},{138})}),{}),(({(101,2),(102,2)},{({({(3,1),(118,1)},1 % 1),({(3,2),(118,2)},1 % 1),({(3,3),(118,2)},1 % 1)},{118}),({({(4,1),(117,1)},1 % 1),({(4,2),(117,2)},1 % 1),({(4,3),(117,2)},1 % 1)},{117})}),{})})}"

rp $ iilldfshigh aa (2^2) 3 (3^2) 2 2 2 (3^2) 1 1 2
"{(({},{({({(1,1),(101,1)},1 % 1),({(1,2),(101,2)},1 % 1)},{101}),({({(2,1),(102,1)},1 % 1),({(2,2),(102,2)},1 % 1)},{102})}),{(({(101,1),(102,1)},{({({(3,1),(138,1)},1 % 1),({(3,2),(138,2)},1 % 1),({(3,3),(138,2)},1 % 1)},{138}),({({(4,1),(137,1)},1 % 1),({(4,2),(137,2)},1 % 1),({(4,3),(137,2)},1 % 1)},{137})}),{}),(({(101,2),(102,2)},{({({(3,1),(117,1)},1 % 1),({(3,2),(117,2)},1 % 1),({(3,3),(117,2)},1 % 1)},{117}),({({(4,1),(118,1)},1 % 1),({(4,2),(118,2)},1 % 1),({(4,3),(118,2)},1 % 1)},{118})}),{})})}"

In the weather forecast example (summarised in Functional definition sets),

let zzllfuds aa aarr lmax xmax omax bmax mmax umax pmax = last $ fst $ fromJust $ parametersSystemsSamplesShufflesListVariablesSearcherFud lmax xmax omax bmax mmax umax pmax (sys aa) aa aarr [VarInt i | i <-[101..]]

let iillfudshigh aa aarr wmax lmax xmax omax bmax mmax umax pmax = fst $ fst $ fromJust $ parametersSystemsSamplesShufflesListVariablesInducerFudHighest wmax lmax xmax omax bmax mmax umax pmax (sys aa) aa aarr [VarInt i | i <-[101..]]


let aa = hhaa hh

rpln $ (concat . map (aall . ttaa) . Set.toList . ffqq) $ zzllfuds aa (ind aa) 1 (3^4) 4 4 4 (3^4) 1
"({(cloud,heavy),(199,1)},1 % 1)"
"({(cloud,light),(199,2)},1 % 1)"
"({(cloud,none),(199,3)},1 % 1)"
"({(pressure,high),(197,1)},1 % 1)"
"({(pressure,low),(197,2)},1 % 1)"
"({(pressure,medium),(197,2)},1 % 1)"
"({(rain,heavy),(200,1)},1 % 1)"
"({(rain,light),(200,2)},1 % 1)"
"({(rain,none),(200,3)},1 % 1)"
"({(wind,light),(198,1)},1 % 1)"
"({(wind,none),(198,1)},1 % 1)"
"({(wind,strong),(198,2)},1 % 1)"

rpln $ (concat . map (aall . ttaa) . Set.toList . ffqq) $ iillfudshigh aa (ind aa) (3^4) 1 (3^4) 4 4 4 (3^4) 1
"({(cloud,heavy),(199,1)},1 % 1)"
"({(cloud,light),(199,2)},1 % 1)"
"({(cloud,none),(199,3)},1 % 1)"
"({(pressure,high),(197,1)},1 % 1)"
"({(pressure,low),(197,2)},1 % 1)"
"({(pressure,medium),(197,2)},1 % 1)"
"({(rain,heavy),(200,1)},1 % 1)"
"({(rain,light),(200,2)},1 % 1)"
"({(rain,none),(200,3)},1 % 1)"
"({(wind,light),(198,1)},1 % 1)"
"({(wind,none),(198,1)},1 % 1)"
"({(wind,strong),(198,2)},1 % 1)"


let df = iilldfshighind aa (3^4) 1 (3^4) 4 4 4 (3^4) 1

rpln $ Set.toList $ treesPaths $ funcsTreesMap (\(ss,ff) -> (ss,fund ff,fder ff)) $ dfzz $ df
"[({},{cloud,pressure,rain,wind},{197,198,199,200}),({(197,2),(198,1),(199,2),(200,2)},{pressure,wind},{273,274})]"


let [[(_,ff1),(ss1,ff11)]] = Set.toList $ treesPaths $ dfzz $ df

rpln $ (concat . map (aall . ttaa) . Set.toList . ffqq) $ ff1
"({(cloud,heavy),(199,1)},1 % 1)"
"({(cloud,light),(199,2)},1 % 1)"
"({(cloud,none),(199,3)},1 % 1)"
"({(pressure,high),(197,1)},1 % 1)"
"({(pressure,low),(197,2)},1 % 1)"
"({(pressure,medium),(197,2)},1 % 1)"
"({(rain,heavy),(200,1)},1 % 1)"
"({(rain,light),(200,2)},1 % 1)"
"({(rain,none),(200,3)},1 % 1)"
"({(wind,light),(198,1)},1 % 1)"
"({(wind,none),(198,1)},1 % 1)"
"({(wind,strong),(198,2)},1 % 1)"

rpln $ Set.toList $ setVarsSetStatesSplit (fder ff1) $ states $ aa `fmul` ff1
"({(197,1),(198,1),(199,2),(200,1)},{(cloud,light),(pressure,high),(rain,heavy),(wind,light)})"
"({(197,1),(198,1),(199,3),(200,3)},{(cloud,none),(pressure,high),(rain,none),(wind,light)})"
"({(197,1),(198,1),(199,3),(200,3)},{(cloud,none),(pressure,high),(rain,none),(wind,none)})"
"({(197,1),(198,2),(199,2),(200,2)},{(cloud,light),(pressure,high),(rain,light),(wind,strong)})"
"({(197,2),(198,1),(199,1),(200,1)},{(cloud,heavy),(pressure,low),(rain,heavy),(wind,light)})"
"({(197,2),(198,1),(199,2),(200,2)},{(cloud,light),(pressure,low),(rain,light),(wind,none)})"
"({(197,2),(198,1),(199,2),(200,2)},{(cloud,light),(pressure,medium),(rain,light),(wind,light)})"
"({(197,2),(198,1),(199,2),(200,2)},{(cloud,light),(pressure,medium),(rain,light),(wind,none)})"
"({(197,2),(198,1),(199,2),(200,3)},{(cloud,light),(pressure,medium),(rain,none),(wind,none)})"
"({(197,2),(198,1),(199,3),(200,2)},{(cloud,none),(pressure,low),(rain,light),(wind,light)})"
"({(197,2),(198,1),(199,3),(200,2)},{(cloud,none),(pressure,medium),(rain,light),(wind,light)})"
"({(197,2),(198,1),(199,3),(200,3)},{(cloud,none),(pressure,medium),(rain,none),(wind,none)})"
"({(197,2),(198,2),(199,1),(200,1)},{(cloud,heavy),(pressure,low),(rain,heavy),(wind,strong)})"
"({(197,2),(198,2),(199,2),(200,1)},{(cloud,light),(pressure,medium),(rain,heavy),(wind,strong)})"


rpln $ aall $ aa `fmul` ff1 `mul` single ss1 1 `ared` vars aa
"({(cloud,light),(pressure,low),(rain,light),(wind,none)},1 % 1)"
"({(cloud,light),(pressure,medium),(rain,light),(wind,light)},1 % 1)"
"({(cloud,light),(pressure,medium),(rain,light),(wind,none)},1 % 1)"

rpln $ (concat . map (aall . ttaa) . Set.toList . ffqq) $ ff11
"({(pressure,high),(273,1)},1 % 1)"
"({(pressure,low),(273,1)},1 % 1)"
"({(pressure,medium),(273,2)},1 % 1)"
"({(wind,light),(274,1)},1 % 1)"
"({(wind,none),(274,2)},1 % 1)"
"({(wind,strong),(274,1)},1 % 1)"

rpln $ aall $ aa `fmul` ff1 `mul` single ss1 1 `ared` vars aa `fmul` ff11
"({(cloud,light),(pressure,low),(rain,light),(wind,none),(273,1),(274,2)},1 % 1)"
"({(cloud,light),(pressure,medium),(rain,light),(wind,light),(273,2),(274,1)},1 % 1)"
"({(cloud,light),(pressure,medium),(rain,light),(wind,none),(273,2),(274,2)},1 % 1)"

In this case the decomposition has a single path containing the root fud and a child fud which is contingent on state let ss1 = {(197,2),(198,1),(199,2),(200,2)}. The child slice contains only three events which all have light cloud and rain. The child fud distinguishes between low and medium pressure and between no wind and light wind.

If we now constrain mmax we obtain a decomposition of two paths and four fuds,

let df = iilldfshighind aa (3^4) 1 (3^4) 4 4 3 (3^4) 1

rpln $ Set.toList $ treesPaths $ funcsTreesMap (\(ss,ff) -> (ss,fund ff,fder ff)) $ dfzz $ df
"[({},{cloud,pressure,rain,wind},{634,635,636}),({(634,2),(635,1),(636,1)},{pressure,wind},{1281,1282})]"
"[({},{cloud,pressure,rain,wind},{634,635,636}),({(634,2),(635,1),(636,2)},{cloud,pressure,rain,wind},{1224,1225,1226}),({(1224,2),(1225,2),(1226,2)},{pressure,wind},{1263,1264})]"


let [[(_,ff1),(ss1,ff11)],[(_,_),(ss2,ff21),(ss21,ff211)]] = Set.toList $ treesPaths $ dfzz $ df

rpln $ (concat . map (aall . ttaa) . Set.toList . ffqq) $ ff1
"({(cloud,heavy),(634,1)},1 % 1)"
"({(cloud,light),(634,2)},1 % 1)"
"({(cloud,none),(634,2)},1 % 1)"
"({(pressure,high),(wind,light),(635,1)},1 % 1)"
"({(pressure,high),(wind,none),(635,1)},1 % 1)"
"({(pressure,high),(wind,strong),(635,1)},1 % 1)"
"({(pressure,low),(wind,light),(635,2)},1 % 1)"
"({(pressure,low),(wind,none),(635,1)},1 % 1)"
"({(pressure,low),(wind,strong),(635,2)},1 % 1)"
"({(pressure,medium),(wind,light),(635,1)},1 % 1)"
"({(pressure,medium),(wind,none),(635,1)},1 % 1)"
"({(pressure,medium),(wind,strong),(635,1)},1 % 1)"
"({(rain,heavy),(636,1)},1 % 1)"
"({(rain,light),(636,2)},1 % 1)"
"({(rain,none),(636,2)},1 % 1)"

rpln $ Set.toList $ setVarsSetStatesSplit (fder ff1) $ states $ aa `fmul` ff1
"({(634,1),(635,2),(636,1)},{(cloud,heavy),(pressure,low),(rain,heavy),(wind,light)})"
"({(634,1),(635,2),(636,1)},{(cloud,heavy),(pressure,low),(rain,heavy),(wind,strong)})"
"({(634,2),(635,1),(636,1)},{(cloud,light),(pressure,high),(rain,heavy),(wind,light)})"
"({(634,2),(635,1),(636,1)},{(cloud,light),(pressure,medium),(rain,heavy),(wind,strong)})"
"({(634,2),(635,1),(636,2)},{(cloud,light),(pressure,high),(rain,light),(wind,strong)})"
"({(634,2),(635,1),(636,2)},{(cloud,light),(pressure,low),(rain,light),(wind,none)})"
"({(634,2),(635,1),(636,2)},{(cloud,light),(pressure,medium),(rain,light),(wind,light)})"
"({(634,2),(635,1),(636,2)},{(cloud,light),(pressure,medium),(rain,light),(wind,none)})"
"({(634,2),(635,1),(636,2)},{(cloud,light),(pressure,medium),(rain,none),(wind,none)})"
"({(634,2),(635,1),(636,2)},{(cloud,none),(pressure,high),(rain,none),(wind,light)})"
"({(634,2),(635,1),(636,2)},{(cloud,none),(pressure,high),(rain,none),(wind,none)})"
"({(634,2),(635,1),(636,2)},{(cloud,none),(pressure,medium),(rain,light),(wind,light)})"
"({(634,2),(635,1),(636,2)},{(cloud,none),(pressure,medium),(rain,none),(wind,none)})"
"({(634,2),(635,2),(636,2)},{(cloud,none),(pressure,low),(rain,light),(wind,light)})"


rpln $ aall $ aa `fmul` ff1 `mul` single ss1 1 `ared` vars aa
"({(cloud,light),(pressure,high),(rain,heavy),(wind,light)},1 % 1)"
"({(cloud,light),(pressure,medium),(rain,heavy),(wind,strong)},1 % 1)"

rpln $ (concat . map (aall . ttaa) . Set.toList . ffqq) $ ff11
"({(pressure,high),(1281,1)},1 % 1)"
"({(pressure,low),(1281,1)},1 % 1)"
"({(pressure,medium),(1281,2)},1 % 1)"
"({(wind,light),(1282,1)},1 % 1)"
"({(wind,none),(1282,1)},1 % 1)"
"({(wind,strong),(1282,2)},1 % 1)"

rpln $ aall $ aa `fmul` ff1 `mul` single ss1 1 `ared` vars aa `fmul` ff11
"({(cloud,light),(pressure,high),(rain,heavy),(wind,light),(1281,1),(1282,1)},1 % 1)"
"({(cloud,light),(pressure,medium),(rain,heavy),(wind,strong),(1281,2),(1282,2)},1 % 1)"


rpln $ aall $ aa `fmul` ff1 `mul` single ss2 1 `ared` vars aa
"({(cloud,light),(pressure,high),(rain,light),(wind,strong)},1 % 1)"
"({(cloud,light),(pressure,low),(rain,light),(wind,none)},1 % 1)"
"({(cloud,light),(pressure,medium),(rain,light),(wind,light)},1 % 1)"
"({(cloud,light),(pressure,medium),(rain,light),(wind,none)},1 % 1)"
"({(cloud,light),(pressure,medium),(rain,none),(wind,none)},1 % 1)"
"({(cloud,none),(pressure,high),(rain,none),(wind,light)},2 % 1)"
"({(cloud,none),(pressure,high),(rain,none),(wind,none)},3 % 1)"
"({(cloud,none),(pressure,medium),(rain,light),(wind,light)},2 % 1)"
"({(cloud,none),(pressure,medium),(rain,none),(wind,none)},1 % 1)"

rpln $ (concat . map (aall . ttaa) . Set.toList . ffqq) $ ff21
"({(cloud,heavy),(1225,1)},1 % 1)"
"({(cloud,light),(1225,2)},1 % 1)"
"({(cloud,none),(1225,1)},1 % 1)"
"({(pressure,high),(wind,light),(1224,1)},1 % 1)"
"({(pressure,high),(wind,none),(1224,1)},1 % 1)"
"({(pressure,high),(wind,strong),(1224,2)},1 % 1)"
"({(pressure,low),(wind,light),(1224,1)},1 % 1)"
"({(pressure,low),(wind,none),(1224,2)},1 % 1)"
"({(pressure,low),(wind,strong),(1224,1)},1 % 1)"
"({(pressure,medium),(wind,light),(1224,3)},1 % 1)"
"({(pressure,medium),(wind,none),(1224,2)},1 % 1)"
"({(pressure,medium),(wind,strong),(1224,1)},1 % 1)"
"({(rain,heavy),(1226,1)},1 % 1)"
"({(rain,light),(1226,2)},1 % 1)"
"({(rain,none),(1226,1)},1 % 1)"

rpln $ aall $ aa `fmul` ff1 `mul` single ss2 1 `ared` vars aa `fmul` ff21
"({(cloud,light),(pressure,high),(rain,light),(wind,strong),(1224,2),(1225,2),(1226,2)},1 % 1)"
"({(cloud,light),(pressure,low),(rain,light),(wind,none),(1224,2),(1225,2),(1226,2)},1 % 1)"
"({(cloud,light),(pressure,medium),(rain,light),(wind,light),(1224,3),(1225,2),(1226,2)},1 % 1)"
"({(cloud,light),(pressure,medium),(rain,light),(wind,none),(1224,2),(1225,2),(1226,2)},1 % 1)"
"({(cloud,light),(pressure,medium),(rain,none),(wind,none),(1224,2),(1225,2),(1226,1)},1 % 1)"
"({(cloud,none),(pressure,high),(rain,none),(wind,light),(1224,1),(1225,1),(1226,1)},2 % 1)"
"({(cloud,none),(pressure,high),(rain,none),(wind,none),(1224,1),(1225,1),(1226,1)},3 % 1)"
"({(cloud,none),(pressure,medium),(rain,light),(wind,light),(1224,3),(1225,1),(1226,2)},2 % 1)"
"({(cloud,none),(pressure,medium),(rain,none),(wind,none),(1224,2),(1225,1),(1226,1)},1 % 1)"

rpln $ Set.toList $ setVarsSetStatesSplit (fder ff21) $ states $ aa `fmul` ff1 `mul` single ss2 1 `ared` vars aa `fmul` ff21
"({(1224,1),(1225,1),(1226,1)},{(cloud,none),(pressure,high),(rain,none),(wind,light)})"
"({(1224,1),(1225,1),(1226,1)},{(cloud,none),(pressure,high),(rain,none),(wind,none)})"
"({(1224,2),(1225,1),(1226,1)},{(cloud,none),(pressure,medium),(rain,none),(wind,none)})"
"({(1224,2),(1225,2),(1226,1)},{(cloud,light),(pressure,medium),(rain,none),(wind,none)})"
"({(1224,2),(1225,2),(1226,2)},{(cloud,light),(pressure,high),(rain,light),(wind,strong)})"
"({(1224,2),(1225,2),(1226,2)},{(cloud,light),(pressure,low),(rain,light),(wind,none)})"
"({(1224,2),(1225,2),(1226,2)},{(cloud,light),(pressure,medium),(rain,light),(wind,none)})"
"({(1224,3),(1225,1),(1226,2)},{(cloud,none),(pressure,medium),(rain,light),(wind,light)})"
"({(1224,3),(1225,2),(1226,2)},{(cloud,light),(pressure,medium),(rain,light),(wind,light)})"


rpln $ aall $ aa `fmul` ff1 `mul` single ss2 1 `fmul` ff21 `mul` single ss21 1 `ared` vars aa
"({(cloud,light),(pressure,high),(rain,light),(wind,strong)},1 % 1)"
"({(cloud,light),(pressure,low),(rain,light),(wind,none)},1 % 1)"
"({(cloud,light),(pressure,medium),(rain,light),(wind,none)},1 % 1)"

rpln $ (concat . map (aall . ttaa) . Set.toList . ffqq) $ ff211
"({(pressure,high),(1264,1)},1 % 1)"
"({(pressure,low),(1264,2)},1 % 1)"
"({(pressure,medium),(1264,2)},1 % 1)"
"({(wind,light),(1263,1)},1 % 1)"
"({(wind,none),(1263,2)},1 % 1)"
"({(wind,strong),(1263,1)},1 % 1)"

rpln $ aall $ aa `fmul` ff1 `mul` single ss2 1 `fmul` ff21 `mul` single ss21 1 `ared` vars aa `fmul` ff211
"({(cloud,light),(pressure,high),(rain,light),(wind,strong),(1263,1),(1264,1)},1 % 1)"
"({(cloud,light),(pressure,low),(rain,light),(wind,none),(1263,2),(1264,2)},1 % 1)"
"({(cloud,light),(pressure,medium),(rain,light),(wind,none),(1263,2),(1264,2)},1 % 1)"

Now consider predicting the weather,

let bb = aa `red` [pressure,cloud,wind]

let df = iilldfshighind bb (3^3) 1 (3^3) 3 3 3 (3^3) 1

rpln $ Set.toList $ treesPaths $ funcsTreesMap (\(ss,ff) -> (ss,fund ff,fder ff)) $ dfzz $ df
"[({},{cloud,pressure,wind},{155,156,157}),({(155,2),(156,1),(157,1)},{cloud,pressure,wind},{221,222,223})]"
"[({},{cloud,pressure,wind},{155,156,157}),({(155,2),(156,1),(157,2)},{cloud,wind},{245,246})]"

let [[(_,ff1),(ss1,ff11)],[(_,_),(ss2,ff21)]] = Set.toList $ treesPaths $ dfzz $ df

rpln $ (concat . map (aall . ttaa) . Set.toList . ffqq) $ ff1
"({(cloud,heavy),(155,1)},1 % 1)"
"({(cloud,light),(155,2)},1 % 1)"
"({(cloud,none),(155,2)},1 % 1)"
"({(pressure,high),(157,1)},1 % 1)"
"({(pressure,low),(157,2)},1 % 1)"
"({(pressure,medium),(157,1)},1 % 1)"
"({(wind,light),(156,1)},1 % 1)"
"({(wind,none),(156,1)},1 % 1)"
"({(wind,strong),(156,2)},1 % 1)"

rpln $ Set.toList $ setVarsSetStatesSplit (fder ff1) $ states $ bb `fmul` ff1
"({(155,1),(156,1),(157,2)},{(cloud,heavy),(pressure,low),(wind,light)})"
"({(155,1),(156,2),(157,2)},{(cloud,heavy),(pressure,low),(wind,strong)})"
"({(155,2),(156,1),(157,1)},{(cloud,light),(pressure,high),(wind,light)})"
"({(155,2),(156,1),(157,1)},{(cloud,light),(pressure,medium),(wind,light)})"
"({(155,2),(156,1),(157,1)},{(cloud,light),(pressure,medium),(wind,none)})"
"({(155,2),(156,1),(157,1)},{(cloud,none),(pressure,high),(wind,light)})"
"({(155,2),(156,1),(157,1)},{(cloud,none),(pressure,high),(wind,none)})"
"({(155,2),(156,1),(157,1)},{(cloud,none),(pressure,medium),(wind,light)})"
"({(155,2),(156,1),(157,1)},{(cloud,none),(pressure,medium),(wind,none)})"
"({(155,2),(156,1),(157,2)},{(cloud,light),(pressure,low),(wind,none)})"
"({(155,2),(156,1),(157,2)},{(cloud,none),(pressure,low),(wind,light)})"
"({(155,2),(156,2),(157,1)},{(cloud,light),(pressure,high),(wind,strong)})"
"({(155,2),(156,2),(157,1)},{(cloud,light),(pressure,medium),(wind,strong)})"

rpln $ Set.toList $ setVarsSetStatesSplit (fder ff1) $ states $ aa `fmul` ff1
"({(155,1),(156,1),(157,2)},{(cloud,heavy),(pressure,low),(rain,heavy),(wind,light)})"
"({(155,1),(156,2),(157,2)},{(cloud,heavy),(pressure,low),(rain,heavy),(wind,strong)})"
"({(155,2),(156,1),(157,1)},{(cloud,light),(pressure,high),(rain,heavy),(wind,light)})"
"({(155,2),(156,1),(157,1)},{(cloud,light),(pressure,medium),(rain,light),(wind,light)})"
"({(155,2),(156,1),(157,1)},{(cloud,light),(pressure,medium),(rain,light),(wind,none)})"
"({(155,2),(156,1),(157,1)},{(cloud,light),(pressure,medium),(rain,none),(wind,none)})"
"({(155,2),(156,1),(157,1)},{(cloud,none),(pressure,high),(rain,none),(wind,light)})"
"({(155,2),(156,1),(157,1)},{(cloud,none),(pressure,high),(rain,none),(wind,none)})"
"({(155,2),(156,1),(157,1)},{(cloud,none),(pressure,medium),(rain,light),(wind,light)})"
"({(155,2),(156,1),(157,1)},{(cloud,none),(pressure,medium),(rain,none),(wind,none)})"
"({(155,2),(156,1),(157,2)},{(cloud,light),(pressure,low),(rain,light),(wind,none)})"
"({(155,2),(156,1),(157,2)},{(cloud,none),(pressure,low),(rain,light),(wind,light)})"
"({(155,2),(156,2),(157,1)},{(cloud,light),(pressure,high),(rain,light),(wind,strong)})"
"({(155,2),(156,2),(157,1)},{(cloud,light),(pressure,medium),(rain,heavy),(wind,strong)})"

rpln $ Set.toList $ setVarsSetStatesSplit (fder ff1) $ states $ aa `fmul` ff1 `ared` (rain `Set.insert` fder ff1)
"({(155,1),(156,1),(157,2)},{(rain,heavy)})"
"({(155,1),(156,2),(157,2)},{(rain,heavy)})"
"({(155,2),(156,1),(157,1)},{(rain,heavy)})"
"({(155,2),(156,1),(157,1)},{(rain,light)})"
"({(155,2),(156,1),(157,1)},{(rain,none)})"
"({(155,2),(156,1),(157,2)},{(rain,light)})"
"({(155,2),(156,2),(157,1)},{(rain,heavy)})"
"({(155,2),(156,2),(157,1)},{(rain,light)})"


rpln $ aall $ aa `fmul` ff1 `mul` single ss1 1 `ared` vars bb
"({(cloud,light),(pressure,high),(wind,light)},1 % 1)"
"({(cloud,light),(pressure,medium),(wind,light)},1 % 1)"
"({(cloud,light),(pressure,medium),(wind,none)},2 % 1)"
"({(cloud,none),(pressure,high),(wind,light)},2 % 1)"
"({(cloud,none),(pressure,high),(wind,none)},3 % 1)"
"({(cloud,none),(pressure,medium),(wind,light)},2 % 1)"
"({(cloud,none),(pressure,medium),(wind,none)},1 % 1)"

rpln $ aall $ aa `fmul` ff1 `mul` single ss1 1 `ared` vars aa
"({(cloud,light),(pressure,high),(rain,heavy),(wind,light)},1 % 1)"
"({(cloud,light),(pressure,medium),(rain,light),(wind,light)},1 % 1)"
"({(cloud,light),(pressure,medium),(rain,light),(wind,none)},1 % 1)"
"({(cloud,light),(pressure,medium),(rain,none),(wind,none)},1 % 1)"
"({(cloud,none),(pressure,high),(rain,none),(wind,light)},2 % 1)"
"({(cloud,none),(pressure,high),(rain,none),(wind,none)},3 % 1)"
"({(cloud,none),(pressure,medium),(rain,light),(wind,light)},2 % 1)"
"({(cloud,none),(pressure,medium),(rain,none),(wind,none)},1 % 1)"

rpln $ (concat . map (aall . ttaa) . Set.toList . ffqq) $ ff11
"({(cloud,heavy),(222,1)},1 % 1)"
"({(cloud,light),(222,1)},1 % 1)"
"({(cloud,none),(222,2)},1 % 1)"
"({(pressure,high),(221,1)},1 % 1)"
"({(pressure,low),(221,1)},1 % 1)"
"({(pressure,medium),(221,2)},1 % 1)"
"({(wind,light),(223,1)},1 % 1)"
"({(wind,none),(223,2)},1 % 1)"
"({(wind,strong),(223,1)},1 % 1)"

rpln $ aall $ aa `fmul` ff1 `mul` single ss1 1 `ared` vars aa `fmul` ff11
"({(cloud,light),(pressure,high),(rain,heavy),(wind,light),(221,1),(222,1),(223,1)},1 % 1)"
"({(cloud,light),(pressure,medium),(rain,light),(wind,light),(221,2),(222,1),(223,1)},1 % 1)"
"({(cloud,light),(pressure,medium),(rain,light),(wind,none),(221,2),(222,1),(223,2)},1 % 1)"
"({(cloud,light),(pressure,medium),(rain,none),(wind,none),(221,2),(222,1),(223,2)},1 % 1)"
"({(cloud,none),(pressure,high),(rain,none),(wind,light),(221,1),(222,2),(223,1)},2 % 1)"
"({(cloud,none),(pressure,high),(rain,none),(wind,none),(221,1),(222,2),(223,2)},3 % 1)"
"({(cloud,none),(pressure,medium),(rain,light),(wind,light),(221,2),(222,2),(223,1)},2 % 1)"
"({(cloud,none),(pressure,medium),(rain,none),(wind,none),(221,2),(222,2),(223,2)},1 % 1)"

rpln $ Set.toList $ setVarsSetStatesSplit (fder ff11) $ states $ aa `fmul` ff1 `mul` single ss1 1 `ared` vars aa `fmul` ff11
"({(221,1),(222,1),(223,1)},{(cloud,light),(pressure,high),(rain,heavy),(wind,light)})"
"({(221,1),(222,2),(223,1)},{(cloud,none),(pressure,high),(rain,none),(wind,light)})"
"({(221,1),(222,2),(223,2)},{(cloud,none),(pressure,high),(rain,none),(wind,none)})"
"({(221,2),(222,1),(223,1)},{(cloud,light),(pressure,medium),(rain,light),(wind,light)})"
"({(221,2),(222,1),(223,2)},{(cloud,light),(pressure,medium),(rain,light),(wind,none)})"
"({(221,2),(222,1),(223,2)},{(cloud,light),(pressure,medium),(rain,none),(wind,none)})"
"({(221,2),(222,2),(223,1)},{(cloud,none),(pressure,medium),(rain,light),(wind,light)})"
"({(221,2),(222,2),(223,2)},{(cloud,none),(pressure,medium),(rain,none),(wind,none)})"

rpln $ Set.toList $ setVarsSetStatesSplit (fder ff11) $ states $ aa `fmul` ff1 `mul` single ss1 1 `ared` vars aa `fmul` ff11 `ared` (rain `Set.insert` fder ff11)
"({(221,1),(222,1),(223,1)},{(rain,heavy)})"
"({(221,1),(222,2),(223,1)},{(rain,none)})"
"({(221,1),(222,2),(223,2)},{(rain,none)})"
"({(221,2),(222,1),(223,1)},{(rain,light)})"
"({(221,2),(222,1),(223,2)},{(rain,light)})"
"({(221,2),(222,1),(223,2)},{(rain,none)})"
"({(221,2),(222,2),(223,1)},{(rain,light)})"
"({(221,2),(222,2),(223,2)},{(rain,none)})"


rpln $ aall $ aa `fmul` ff1 `mul` single ss2 1 `ared` vars bb
"({(cloud,light),(pressure,low),(wind,none)},1 % 1)"
"({(cloud,none),(pressure,low),(wind,light)},1 % 1)"

rpln $ aall $ aa `fmul` ff1 `mul` single ss2 1 `ared` vars aa
"({(cloud,light),(pressure,low),(rain,light),(wind,none)},1 % 1)"
"({(cloud,none),(pressure,low),(rain,light),(wind,light)},1 % 1)"

rpln $ (concat . map (aall . ttaa) . Set.toList . ffqq) $ ff21
"({(cloud,heavy),(245,1)},1 % 1)"
"({(cloud,light),(245,2)},1 % 1)"
"({(cloud,none),(245,1)},1 % 1)"
"({(wind,light),(246,1)},1 % 1)"
"({(wind,none),(246,2)},1 % 1)"
"({(wind,strong),(246,1)},1 % 1)"

rpln $ aall $ aa `fmul` ff1 `mul` single ss2 1 `ared` vars aa `fmul` ff21
"({(cloud,light),(pressure,low),(rain,light),(wind,none),(245,2),(246,2)},1 % 1)"
"({(cloud,none),(pressure,low),(rain,light),(wind,light),(245,1),(246,1)},1 % 1)"

rpln $ Set.toList $ setVarsSetStatesSplit (fder ff21) $ states $ aa `fmul` ff1 `mul` single ss2 1 `ared` vars aa `fmul` ff21
"({(245,1),(246,1)},{(cloud,none),(pressure,low),(rain,light),(wind,light)})"
"({(245,2),(246,2)},{(cloud,light),(pressure,low),(rain,light),(wind,none)})"

rpln $ Set.toList $ setVarsSetStatesSplit (fder ff21) $ states $ aa `fmul` ff1 `mul` single ss2 1 `ared` vars aa `fmul` ff21 `ared` (rain `Set.insert` fder ff21)
"({(245,1),(246,1)},{(rain,light)})"
"({(245,2),(246,2)},{(rain,light)})"

The partition transform corresponding to the fud decomposition can be constructed to obtain the overall entropy properties,

let dftt uu df = partitionsTransformVarPartition $ fromJust $ systemsDecompsPartition uu (fromJust (decompFudsDecomp df))

let iilldfshighind aa wmax lmax xmax omax bmax mmax umax pmax = fromJust $ parametersSystemsSamplesListVariablesInducerDecompFudHighestNoShuffle wmax lmax xmax omax bmax mmax umax pmax (sys aa) aa [VarInt i | i <-[101..]]

let (df,(uu',_)) = iilldfshighind bb (3^3) 1 (3^3) 3 3 3 (3^3) 1

let tt = dftt uu' df

ent (aa `tmul` tt)
2.415052121917807

cent tt (aa `red` [cloud,pressure,wind])
6.931471805599453e-2

rent (aa `tmul` tt) (vvc `tmul` tt)
11.156016272510726

tlalgn tt aa [rain]
8.077984267904197

tlent tt aa [rain]
2.772588722239781

size $ eff (aa `tmul` tt) `mul` (vvc `tmul` tt)
48 % 1

This model has the lowest optimised label entropy, but is quite query effective.

Now consider the effect of the shuffle in the weather example,

let iilldfshighind aa wmax lmax xmax omax bmax mmax umax pmax = fst $ fromJust $ parametersSystemsSamplesListVariablesInducerDecompFudHighestNoShuffle wmax lmax xmax omax bmax mmax umax pmax (sys aa) aa [VarInt i | i <-[101..]]

let iilldfshigh aa wmax lmax xmax omax bmax mmax umax pmax mult seed = fst $ fromJust $ parametersSystemsSamplesListVariablesInducerDecompFudHighest wmax lmax xmax omax bmax mmax umax pmax mult seed (sys aa) aa [VarInt i | i <-[101..]]


let df = iilldfshighind aa (3^4) 1 (3^4) 4 4 4 (3^4) 1

rpln $ Set.toList $ treesPaths $ funcsTreesMap (\(ss,ff) -> (ss,fund ff,fder ff)) $ dfzz $ df
"[({},{cloud,pressure,rain,wind},{197,198,199,200}),({(197,2),(198,1),(199,2),(200,2)},{pressure,wind},{273,274})]"

let ((_,ff1):_):_ = Set.toList $ treesPaths $ dfzz $ df

rpln $ aall $ aa `fapply` ff1
"({(197,1),(198,1),(199,2),(200,1)},1 % 1)"
"({(197,1),(198,1),(199,3),(200,3)},5 % 1)"
"({(197,1),(198,2),(199,2),(200,2)},1 % 1)"
"({(197,2),(198,1),(199,1),(200,1)},2 % 1)"
"({(197,2),(198,1),(199,2),(200,2)},3 % 1)"
"({(197,2),(198,1),(199,2),(200,3)},1 % 1)"
"({(197,2),(198,1),(199,3),(200,2)},3 % 1)"
"({(197,2),(198,1),(199,3),(200,3)},1 % 1)"
"({(197,2),(198,2),(199,1),(200,1)},2 % 1)"
"({(197,2),(198,2),(199,2),(200,1)},1 % 1)"

algn $ aa `fapply` ff1
11.110317593941938


let df = iilldfshigh aa (3^4) 1 (3^4) 4 4 4 (3^4) 1 1 1

rpln $ Set.toList $ treesPaths $ funcsTreesMap (\(ss,ff) -> (ss,fund ff,fder ff)) $ dfzz $ df
"[({},{cloud,pressure,rain},{155,156,157}),({(155,2),(156,2),(157,1)},{pressure,rain,wind},{221,222,223})]"

let ((_,ff1):_):_ = Set.toList $ treesPaths $ dfzz $ df

rpln $ aall $ aa `fapply` ff1
"({(155,1),(156,1),(157,2)},4 % 1)"
"({(155,2),(156,1),(157,1)},2 % 1)"
"({(155,2),(156,2),(157,1)},12 % 1)"
"({(155,2),(156,2),(157,2)},2 % 1)"

algn $ aa `fapply` ff1
9.099015828910998


let df = iilldfshigh aa (3^4) 1 (3^4) 4 4 4 (3^4) 1 10 1

rpln $ Set.toList $ treesPaths $ funcsTreesMap (\(ss,ff) -> (ss,fund ff,fder ff)) $ dfzz $ df
"[({},{cloud,pressure,rain,wind},{245,246,247,248}),({(245,1),(246,2),(247,1),(248,1)},{pressure,wind},{585,586})]"
"[({},{cloud,pressure,rain,wind},{245,246,247,248}),({(245,2),(246,2),(247,1),(248,1)},{cloud,pressure,rain,wind},{561,562,563,564})]"
"[({},{cloud,pressure,rain,wind},{245,246,247,248}),({(245,2),(246,2),(247,1),(248,2)},{cloud,pressure,rain},{409,410,411})]"

let ((_,ff1):_):_ = Set.toList $ treesPaths $ dfzz $ df

rpln $ aall $ aa `fapply` ff1
"({(245,1),(246,1),(247,2),(248,1)},4 % 1)"
"({(245,1),(246,2),(247,1),(248,1)},2 % 1)"
"({(245,2),(246,2),(247,1),(248,1)},6 % 1)"
"({(245,2),(246,2),(247,1),(248,2)},6 % 1)"
"({(245,2),(246,2),(247,2),(248,1)},1 % 1)"
"({(245,2),(246,2),(247,2),(248,2)},1 % 1)"

algn $ aa `fapply` ff1
9.402475111705488

let df = iilldfshigh aa (3^4) 1 (3^4) 4 4 4 (3^4) 1 20 1

rpln $ Set.toList $ treesPaths $ funcsTreesMap (\(ss,ff) -> (ss,fund ff,fder ff)) $ dfzz $ df
"[({},{cloud,pressure,rain,wind},{197,198,199,200}),({(197,2),(198,1),(199,2),(200,2)},{pressure,wind},{275,276})]"

let ((_,ff1):_):_ = Set.toList $ treesPaths $ dfzz $ df

rpln $ aall $ aa `fapply` ff1
"({(197,1),(198,1),(199,2),(200,1)},1 % 1)"
"({(197,1),(198,1),(199,3),(200,3)},5 % 1)"
"({(197,1),(198,2),(199,2),(200,2)},1 % 1)"
"({(197,2),(198,1),(199,1),(200,1)},2 % 1)"
"({(197,2),(198,1),(199,2),(200,2)},3 % 1)"
"({(197,2),(198,1),(199,2),(200,3)},1 % 1)"
"({(197,2),(198,1),(199,3),(200,2)},3 % 1)"
"({(197,2),(198,1),(199,3),(200,3)},1 % 1)"
"({(197,2),(198,2),(199,1),(200,1)},2 % 1)"
"({(197,2),(198,2),(199,2),(200,1)},1 % 1)"

algn $ aa `fapply` ff1
11.110317593941938

We can see that shuffling this histogram of small size without a shuffle multiplier, let mult = 1, has a large effect on the resultant decomposition, removing wind from the root fud and adding rain to the child fud. In the case of a non-unit shuffle multiplier, let mult = 10, the resultant decomposition looks more similar to the no-shuffle case with an intermediate alignment of the root fud, but the root fud is still different. Increasing the shuffle multiplier still further, let mult = 20, recovers the no-shuffle model.

The weather forecast example continues in Highest-layer fud decomper.

Highest-layer fud decomper

Now consider the practicable highest-layer summed shuffle content alignment valency-density fud decomposition inducer, $I_{z,\mathrm{Scsd,D,F,\infty,q},P,\mathrm{d}}^{‘}$, (Haskell) implemented by means of induction computers. The implementation of the practicable fud decomposition inducer in terms of optimisers is described above in section ‘Optimisation’. The functionality of the highest-layer limited-models infinite-layer substrate fud decompositions tree searcher, $Z_{P,A,\mathrm{D,F,d}}$, is implemented in the highest-layer fud decomper $I_{P,U,\mathrm{D,F,d}} \in \mathrm{computers}$, which is defined such that (i) the domain is $\mathrm{domain}(I_{P,U,\mathrm{D,F,d}}) = \mathrm{P}(\mathcal{V}_U) \times \mathcal{A}_U$, (ii) the range is $\mathrm{range}(I_{P,U,\mathrm{D,F,d}}) = \mathcal{U} \times \mathcal{D}_{\mathrm{F,d}}$, and (iii) the application is (Text) \[ \begin{eqnarray} I_{P,U,\mathrm{D,F,d}}^{ * }((V,A)) = \mathrm{decomp}(V,A,U,\emptyset,1,\emptyset) \end{eqnarray} \] where $\mathrm{decomp} \in \mathrm{P}(\mathcal{V}) \times \mathcal{A} \times \mathcal{U} \times \mathcal{D}_{\mathrm{F,d}} \times \mathbf{N} \times \mathrm{P}(\mathcal{L}(\mathcal{S} \times \mathcal{F}) \times \mathcal{S}) \to (\mathcal{U} \times \mathcal{D}_{\mathrm{F,d}})$ is defined as \[ \begin{eqnarray} &&\mathrm{decomp}(V,A,U,D,f,Z) = \\ &&\hspace{1em}\mathrm{if}(Q \neq \emptyset,\\ &&\hspace{4em}\mathrm{if}(N \neq \emptyset \wedge \mathrm{maxr}(N)>0,\\ &&\hspace{6em}\mathrm{decomp}(V,A,U’,E,f+1,Z’),\\ &&\hspace{6em}\mathrm{decomp}(V,A,U,D,f,Z’)),\\ &&\hspace{4em}(U,D)) : \\ &&\hspace{2em}Q = \mathrm{maxd}(\mathrm{order}(D_{\mathbf{Q} \times \mathrm{S} \times \mathcal{X}^3},\{(z_B,S,L,B) : \\ &&\hspace{4em}(L,Y) \in \mathrm{places}(D),\\ &&\hspace{4em}(\cdot,F) = L_{|L|},~W=\mathrm{der}(F),\\ &&\hspace{4em}S \in W^{\mathrm{CS}} \setminus \mathrm{dom}(\mathrm{dom}(Y)),\\ &&\hspace{4em}(L,S) \notin Z,\\ &&\hspace{4em}R_L = \bigcup \mathrm{dom}(\mathrm{set}(L)),~H_L = \bigcup \mathrm{ran}(\mathrm{set}(L)),\\ &&\hspace{4em}B = I_{\%}^{ * }((V,I_{ * }^{ * }((I_{\mathrm{ * X}}^{ * }((H_L,A)),\{R_L \cup S\}^{\mathrm{U}})))),\\ &&\hspace{4em}z_B = \mathrm{size}(B),~z_B>0\})),\\ &&\hspace{2em}\{(\cdot,S,L,B)\} = Q,\\ &&\hspace{2em}Z’ = Z \cup \{(L,S)\},\\ &&\hspace{2em}(U’,F,N) = I_{P,U,\mathrm{L,d}}^{ * }((V,B,B_{R(B)},f)),\\ &&\hspace{2em}\{K\} = \mathrm{maxd}(\mathrm{order}(D_{\mathrm{K}},\mathrm{dom}(N))),\\ &&\hspace{2em}G = \mathrm{depends}(F,K),\\ &&\hspace{2em}M=L \cup \{(|L|+1,(S,G))\},\\ &&\hspace{2em}E = \mathrm{tree}(\mathrm{paths}(D) \setminus \{L\} \cup \{M\})\} \end{eqnarray} \] and \[ \begin{eqnarray} &&\mathrm{decomp}(V,A,U,\emptyset,f,Z) = \\ &&\hspace{1em}\mathrm{if}(N \neq \emptyset \wedge \mathrm{maxr}(N)>0,\\ &&\hspace{4em}\mathrm{decomp}(V,A,U’,D,f+1,\emptyset),\\ &&\hspace{4em}(U,D_{\emptyset})) : \\ &&\hspace{2em}(U’,F,N) = I_{P,U,\mathrm{L,d}}^{ * }((V,A,A_{R(A)},f)),\\ &&\hspace{2em}\{K\} = \mathrm{maxd}(\mathrm{order}(D_{\mathrm{K}},\mathrm{dom}(N)))),\\ &&\hspace{2em}G = \mathrm{depends}(F,K),\\ &&\hspace{2em}D = \{((\emptyset,G),\emptyset)\} \end{eqnarray} \]

The decomper is defined in module AlignmentPracticable,

parametersSystemsDecomperHighest :: 
  Integer -> Integer -> Integer -> Integer -> Integer -> Integer -> Integer -> Integer -> 
  Integer -> Integer ->
  System -> Set.Set Variable -> Histogram -> 
  Maybe (System, DecompFud)

as

parametersSystemsDecomperHighest wmax lmax xmax omax bmax mmax umax pmax mult seed uu vv aa
  ...
  | otherwise = Just $ decomp uu emptyTree 1 seed
  where
    decomp uu zz f s
      | zz == emptyTree && (ffr == fudEmpty || nnr == mempty || ar <= 0) = (uu, decompFudEmpty)
      | zz == emptyTree = decomp uur zzr (f+1) (s + mult)
      | mm == [] = (uu, zzdf (zztrim zz)) 
      | otherwise = decomp uuc zzc (f+1) (s + mult)
      where
        aarr = ashuffle aa s mult
        (uur,ffr,nnr) = layerer uu aa aarr f
        (ar,kkr) = maxd nnr
        ffr' = if ar > 0 then depends ffr kkr else fudEmpty
        zzr = tsgl (stateEmpty,ffr')
        mm = [(size bb,nn,ss,bb) | (nn,yy) <- qqll (treesPlaces zz), 
                 let rrc = llsthis nn, let hhc = llfhis nn, let (_,ff) = last nn, ff /= fudEmpty,
                 ss <- qqll (cart uu (fder ff) `minus` dom (treesRoots yy)),
                 let xx = hhc `union` rrc `add` unit ss,
                 let bb = apply vv vv xx aa,
                 size bb > 0]
        (_,nn,ss,bb) = last $ sort mm
        bbrr = ashuffle bb s mult
        (uuc,ffc,nnc) = layerer uu bb bbrr f
        (ac,kkc) = maxd nnc
        ffc' = if ac > 0 then depends ffc kkc else fudEmpty
        zzc = pathsTree $ treesPaths zz `add` (nn ++ [(ss,ffc')])
    layerer uu aa aarr f = fromJust $ 
      parametersSystemsLayererHighest wmax lmax xmax omax bmax mmax umax pmax uu vv aa aarr f
    ...

The highest-layer fud decomper, $I_{P,U,\mathrm{D,F,d}}$, can be compared to the practicable summed shuffle content alignment valency-density fud decomposition inducer, $I_{z,\mathrm{Scsd,D,F,\infty,q},P}$, using the weather forecast example (summarised in Functional definition sets),

let iilldfshigh aa wmax lmax xmax omax bmax mmax umax pmax mult seed = fst $ fromJust $ parametersSystemsSamplesListVariablesInducerDecompFudHighest wmax lmax xmax omax bmax mmax umax pmax mult seed (sys aa) aa [VarInt i | i <-[101..]]

let decomper aa wmax lmax xmax omax bmax mmax umax pmax mult seed = snd $ fromJust $ parametersSystemsDecomperHighest wmax lmax xmax omax bmax mmax umax pmax mult seed (sys aa) (vars aa) aa


let df = iilldfshigh aa (3^4) 1 (3^4) 4 4 4 (3^4) 1 10 1

rpln $ Set.toList $ treesPaths $ funcsTreesMap (\(ss,ff) -> (ss,fund ff,fder ff)) $ dfzz $ df
"[({},{cloud,pressure,rain,wind},{245,246,247,248}),({(245,1),(246,2),(247,1),(248,1)},{pressure,wind},{585,586})]"
"[({},{cloud,pressure,rain,wind},{245,246,247,248}),({(245,2),(246,2),(247,1),(248,1)},{cloud,pressure,rain,wind},{561,562,563,564})]"
"[({},{cloud,pressure,rain,wind},{245,246,247,248}),({(245,2),(246,2),(247,1),(248,2)},{cloud,pressure,rain},{409,410,411})]"

let [[(_,ff1),(ss1,ff11)],[_,(ss2,ff21)],[_,(ss3,ff31)]] = Set.toList $ treesPaths $ dfzz $ df

rpln $ aall $ aa `fapply` ff1
"({(245,1),(246,1),(247,2),(248,1)},4 % 1)"
"({(245,1),(246,2),(247,1),(248,1)},2 % 1)"
"({(245,2),(246,2),(247,1),(248,1)},6 % 1)"
"({(245,2),(246,2),(247,1),(248,2)},6 % 1)"
"({(245,2),(246,2),(247,2),(248,1)},1 % 1)"
"({(245,2),(246,2),(247,2),(248,2)},1 % 1)"

algn $ aa `fapply` ff1
9.402475111705488

algn $ aa `fmul` ff1 `mul` single ss1 1 `fapply` ff11
0.4831289506253467

algn $ aa `fmul` ff1 `mul` single ss2 1 `fapply` ff21
2.4223021592021015

algn $ aa `fmul` ff1 `mul` single ss3 1 `fapply` ff31
1.4735290887851153

let df = decomper aa (3^4) 1 (3^4) 4 4 4 (3^4) 1 10 1

rpln $ Set.toList $ treesPaths $ funcsTreesMap (\(ss,ff) -> (ss,fund ff,fder ff)) $ dfzz $ df
"[({},{cloud,pressure,rain,wind},{<<1,1>,1>,<<1,1>,2>,<<1,1>,3>,<<1,1>,4>}),({(<<1,1>,1>,1),(<<1,1>,2>,0),(<<1,1>,3>,0),(<<1,1>,4>,0)},{pressure,wind},{<<8,1>,1>,<<8,1>,2>})]"
"[({},{cloud,pressure,rain,wind},{<<1,1>,1>,<<1,1>,2>,<<1,1>,3>,<<1,1>,4>}),({(<<1,1>,1>,1),(<<1,1>,2>,0),(<<1,1>,3>,1),(<<1,1>,4>,0)},{cloud,pressure,rain,wind},{<<3,1>,1>,<<3,1>,2>,<<3,1>,3>,<<3,1>,4>})]"
"[({},{cloud,pressure,rain,wind},{<<1,1>,1>,<<1,1>,2>,<<1,1>,3>,<<1,1>,4>}),({(<<1,1>,1>,1),(<<1,1>,2>,0),(<<1,1>,3>,1),(<<1,1>,4>,1)},{cloud,pressure,rain},{<<2,1>,1>,<<2,1>,2>,<<2,1>,3>})]"

let [[(_,ff1),(ss1,ff11)],[_,(ss2,ff21)],[_,(ss3,ff31)]] = Set.toList $ treesPaths $ dfzz $ df

rpln $ aall $ aa `fapply` ff1
"({(<<1,1>,1>,0),(<<1,1>,2>,1),(<<1,1>,3>,0),(<<1,1>,4>,0)},4 % 1)"
"({(<<1,1>,1>,1),(<<1,1>,2>,0),(<<1,1>,3>,0),(<<1,1>,4>,0)},2 % 1)"
"({(<<1,1>,1>,1),(<<1,1>,2>,0),(<<1,1>,3>,1),(<<1,1>,4>,0)},6 % 1)"
"({(<<1,1>,1>,1),(<<1,1>,2>,0),(<<1,1>,3>,1),(<<1,1>,4>,1)},6 % 1)"
"({(<<1,1>,1>,1),(<<1,1>,2>,1),(<<1,1>,3>,1),(<<1,1>,4>,0)},1 % 1)"
"({(<<1,1>,1>,1),(<<1,1>,2>,1),(<<1,1>,3>,1),(<<1,1>,4>,1)},1 % 1)"

algn $ aa `fapply` ff1
9.402475111705488

algn $ aa `fmul` ff1 `mul` single ss1 1 `fapply` ff11
0.4831289506253467

algn $ aa `fmul` ff1 `mul` single ss2 1 `fapply` ff21
2.4223021592021015

algn $ aa `fmul` ff1 `mul` single ss3 1 `fapply` ff31
1.4735290887851153

In this comparison both methods are shuffled with a multiplier of let mult = 10 and a seed of let seed = 1. The resultant decompositions are identical except for the construction of the variable names.


let df = iilldfshigh aa (3^4) 1 (3^4) 4 4 4 (3^4) 1 20 1

rpln $ Set.toList $ treesPaths $ funcsTreesMap (\(ss,ff) -> (ss,fund ff,fder ff)) $ dfzz $ df
"[({},{cloud,pressure,rain,wind},{197,198,199,200}),({(197,2),(198,1),(199,2),(200,2)},{pressure,wind},{275,276})]"

let [[(_,ff1),(ss1,ff11)]] = Set.toList $ treesPaths $ dfzz $ df

rpln $ aall $ aa `fapply` ff1
"({(197,1),(198,1),(199,2),(200,1)},1 % 1)"
"({(197,1),(198,1),(199,3),(200,3)},5 % 1)"
"({(197,1),(198,2),(199,2),(200,2)},1 % 1)"
"({(197,2),(198,1),(199,1),(200,1)},2 % 1)"
"({(197,2),(198,1),(199,2),(200,2)},3 % 1)"
"({(197,2),(198,1),(199,2),(200,3)},1 % 1)"
"({(197,2),(198,1),(199,3),(200,2)},3 % 1)"
"({(197,2),(198,1),(199,3),(200,3)},1 % 1)"
"({(197,2),(198,2),(199,1),(200,1)},2 % 1)"
"({(197,2),(198,2),(199,2),(200,1)},1 % 1)"

algn $ aa `fapply` ff1
11.110317593941938

algn $ aa `fmul` ff1 `mul` single ss1 1 `fapply` ff11
0.14333087703345487

let df = decomper aa (3^4) 1 (3^4) 4 4 4 (3^4) 1 20 1

rpln $ Set.toList $ treesPaths $ funcsTreesMap (\(ss,ff) -> (ss,fund ff,fder ff)) $ dfzz $ df
"[({},{cloud,pressure,rain,wind},{<<1,1>,1>,<<1,1>,2>,<<1,1>,3>,<<1,1>,4>}),({(<<1,1>,1>,1),(<<1,1>,2>,1),(<<1,1>,3>,1),(<<1,1>,4>,0)},{pressure,wind},{<<4,1>,1>,<<4,1>,2>})]"

let [[(_,ff1),(ss1,ff11)]] = Set.toList $ treesPaths $ dfzz $ df

rpln $ aall $ aa `fapply` ff1
"({(<<1,1>,1>,0),(<<1,1>,2>,1),(<<1,1>,3>,0),(<<1,1>,4>,0)},2 % 1)"
"({(<<1,1>,1>,0),(<<1,1>,2>,1),(<<1,1>,3>,0),(<<1,1>,4>,2)},2 % 1)"
"({(<<1,1>,1>,1),(<<1,1>,2>,0),(<<1,1>,3>,0),(<<1,1>,4>,0)},1 % 1)"
"({(<<1,1>,1>,1),(<<1,1>,2>,0),(<<1,1>,3>,1),(<<1,1>,4>,2)},1 % 1)"
"({(<<1,1>,1>,1),(<<1,1>,2>,1),(<<1,1>,3>,0),(<<1,1>,4>,2)},1 % 1)"
"({(<<1,1>,1>,1),(<<1,1>,2>,1),(<<1,1>,3>,1),(<<1,1>,4>,0)},3 % 1)"
"({(<<1,1>,1>,1),(<<1,1>,2>,1),(<<1,1>,3>,2),(<<1,1>,4>,0)},1 % 1)"
"({(<<1,1>,1>,2),(<<1,1>,2>,0),(<<1,1>,3>,2),(<<1,1>,4>,0)},5 % 1)"
"({(<<1,1>,1>,2),(<<1,1>,2>,1),(<<1,1>,3>,1),(<<1,1>,4>,0)},3 % 1)"
"({(<<1,1>,1>,2),(<<1,1>,2>,1),(<<1,1>,3>,2),(<<1,1>,4>,0)},1 % 1)"

algn $ aa `fapply` ff1
11.110317593941934

algn $ aa `fmul` ff1 `mul` single ss1 1 `fapply` ff11
0.1433308770334549

The resultant decompositions remain identical when shuffled with a higher multiplier of let mult = 20.

The weather forecast example continues in Highest-layer excluded-self maximum-roll-by-derived-dimension fud decomper.

Highest-layer excluded-self maximum-roll fud decomper

The practicable highest-layer excluded-self maximum-roll summed shuffle content alignment valency-density fud decomposition inducer, $I_{z,\mathrm{Scsd,D,F,\infty,q},P,\mathrm{mr,xs,d}}^{‘}$, is implemented in the highest-layer excluded-self maximum-roll fud decomper $I_{P,U,\mathrm{D,F,mr,xs,d}} \in \mathrm{computers}$ (Text) exactly as in the highest-layer fud decomper $I_{P,U,\mathrm{D,F,d}}$, above, except that the highest-layer maximum-roll excluded-self fud induction computer, $I_{P,U,\mathrm{Z,F,mr,xs,d}}$, replaces the highest-layer fud induction computer, $I_{P,U,\mathrm{Z,F,d}}$.

The decomper is defined in module AlignmentPracticable,

parametersSystemsDecomperMaximumRollExcludedSelfHighest :: 
  Integer -> Integer -> Integer -> Integer -> Integer -> Integer -> Integer -> Integer -> 
  Integer -> Integer ->
  System -> Set.Set Variable -> Histogram -> 
  Maybe (System, DecompFud)

as

parametersSystemsDecomperMaximumRollExcludedSelfHighest wmax lmax xmax omax bmax mmax umax pmax mult seed uu vv aa
  ...
  | otherwise = Just $ decomp uu emptyTree 1 seed
  where
    decomp uu zz f s
      | zz == emptyTree && (ffr == fudEmpty || nnr == mempty || ar <= 0) = (uu, decompFudEmpty)
      | zz == emptyTree = decomp uur zzr (f+1) (s + mult)
      | mm == [] = (uu, zzdf (zztrim zz)) 
      | otherwise = decomp uuc zzc (f+1) (s + mult)
      where
        aarr = ashuffle aa s mult
        (uur,ffr,nnr) = layerer uu aa aarr f
        (ar,kkr) = maxd nnr
        ffr' = if ar > 0 then depends ffr kkr else fudEmpty
        zzr = tsgl (stateEmpty,ffr')
        mm = [(size bb,nn,ss,bb) | (nn,yy) <- qqll (treesPlaces zz), 
                 let rrc = llsthis nn, let hhc = llfhis nn, let (_,ff) = last nn, ff /= fudEmpty,
                 ss <- qqll (cart uu (fder ff) `minus` dom (treesRoots yy)),
                 let xx = hhc `union` rrc `add` unit ss,
                 let bb = apply vv vv xx aa,
                 size bb > 0]
        (_,nn,ss,bb) = last $ sort mm
        bbrr = ashuffle bb s mult
        (uuc,ffc,nnc) = layerer uu bb bbrr f
        (ac,kkc) = maxd nnc
        ffc' = if ac > 0 then depends ffc kkc else fudEmpty
        zzc = pathsTree $ treesPaths zz `add` (nn ++ [(ss,ffc')])
    layerer uu aa aarr f = fromJust $ 
      parametersSystemsLayererMaximumRollExcludedSelfHighest wmax lmax xmax omax bmax mmax umax pmax uu vv aa aarr f
    ...

Highest-layer excluded-self maximum-roll-by-derived-dimension fud decomper

The practicable highest-layer excluded-self maximum-roll-by-derived-dimension summed shuffle content alignment valency-density fud decomposition inducer, $I_{z,\mathrm{Scsd,D,F,\infty,q},P,\mathrm{mm,xs,d}}^{‘}$, is implemented in the highest-layer excluded-self maximum-roll-by-derived-dimension fud decomper $I_{P,U,\mathrm{D,F,mm,xs,d}} \in \mathrm{computers}$ (Text) exactly as in the highest-layer fud decomper $I_{P,U,\mathrm{D,F,d}}$, above, except that the highest-layer maximum-roll-by-derived-dimension excluded-self fud induction computer, $I_{P,U,\mathrm{Z,F,mm,xs,d}}$, replaces the highest-layer fud induction computer, $I_{P,U,\mathrm{Z,F,d}}$.

The decomper is defined in module AlignmentPracticable,

parametersSystemsDecomperMaxRollByMExcludedSelfHighest :: 
  Integer -> Integer -> Integer -> Integer -> Integer -> Integer -> Integer -> Integer -> 
  Integer -> Integer ->
  System -> Set.Set Variable -> Histogram -> 
  Maybe (System, DecompFud)

as

parametersSystemsDecomperMaxRollByMExcludedSelfHighest wmax lmax xmax omax bmax mmax umax pmax mult seed uu vv aa
  ...
  | otherwise = Just $ decomp uu emptyTree 1 seed
  where
    decomp uu zz f s
      | zz == emptyTree && (ffr == fudEmpty || nnr == mempty || ar <= 0) = (uu, decompFudEmpty)
      | zz == emptyTree = decomp uur zzr (f+1) (s + mult)
      | mm == [] = (uu, zzdf (zztrim zz)) 
      | otherwise = decomp uuc zzc (f+1) (s + mult)
      where
        aarr = ashuffle aa s mult
        (uur,ffr,nnr) = layerer uu aa aarr f
        (ar,kkr) = maxd nnr
        ffr' = if ar > 0 then depends ffr kkr else fudEmpty
        zzr = tsgl (stateEmpty,ffr')
        mm = [(size bb,nn,ss,bb) | (nn,yy) <- qqll (treesPlaces zz), 
                 let rrc = llsthis nn, let hhc = llfhis nn, let (_,ff) = last nn, ff /= fudEmpty,
                 ss <- qqll (cart uu (fder ff) `minus` dom (treesRoots yy)),
                 let xx = hhc `union` rrc `add` unit ss,
                 let bb = apply vv vv xx aa,
                 size bb > 0]
        (_,nn,ss,bb) = last $ sort mm
        bbrr = ashuffle bb s mult
        (uuc,ffc,nnc) = layerer uu bb bbrr f
        (ac,kkc) = maxd nnc
        ffc' = if ac > 0 then depends ffc kkc else fudEmpty
        zzc = pathsTree $ treesPaths zz `add` (nn ++ [(ss,ffc')])
    layerer uu aa aarr f = fromJust $ 
      parametersSystemsLayererMaxRollByMExcludedSelfHighest wmax lmax xmax omax bmax mmax umax pmax uu vv aa aarr f
    ...

An example of practicable model induction is described in Analysis of the UCI Machine Learning Repository Mushroom Data Set - Model 16 induction.

In the weather forecast example (summarised in Functional definition sets),

let decompermmxs aa wmax lmax xmax omax bmax mmax umax pmax mult seed = snd $ fromJust $ parametersSystemsDecomperMaxRollByMExcludedSelfHighest wmax lmax xmax omax bmax mmax umax pmax mult seed (sys aa) (vars aa) aa


let aa = hhaa hh

let df = decompermmxs aa (3^4) 1 (3^4) 4 4 4 (3^4) 1 20 1

rpln $ Set.toList $ treesPaths $ funcsTreesMap (\(ss,ff) -> (ss,fund ff,fder ff)) $ dfzz $ df
"[({},{cloud,pressure,rain,wind},{<<1,1>,3>,<<1,1>,4>,<<1,1>,5>,<<1,1>,6>,<<1,1>,7>}),({(<<1,1>,3>,1),(<<1,1>,4>,0),(<<1,1>,5>,0),(<<1,1>,6>,2),(<<1,1>,7>,0)},{pressure,wind},{<<8,1>,1>,<<8,1>,2>})]"
"[({},{cloud,pressure,rain,wind},{<<1,1>,3>,<<1,1>,4>,<<1,1>,5>,<<1,1>,6>,<<1,1>,7>}),({(<<1,1>,3>,1),(<<1,1>,4>,0),(<<1,1>,5>,1),(<<1,1>,6>,0),(<<1,1>,7>,2)},{cloud,pressure,wind},{<<2,1>,3>,<<2,1>,4>}),({(<<2,1>,3>,0),(<<2,1>,4>,1)},{pressure,rain},{<<6,1>,1>,<<6,1>,2>})]"
"[({},{cloud,pressure,rain,wind},{<<1,1>,3>,<<1,1>,4>,<<1,1>,5>,<<1,1>,6>,<<1,1>,7>}),({(<<1,1>,3>,1),(<<1,1>,4>,0),(<<1,1>,5>,1),(<<1,1>,6>,0),(<<1,1>,7>,2)},{cloud,pressure,wind},{<<2,1>,3>,<<2,1>,4>}),({(<<2,1>,3>,1),(<<2,1>,4>,0)},{cloud,pressure,wind},{<<5,1>,1>,<<5,1>,2>,<<5,1>,3>,<<5,1>,5>})]"


let ((_,ff):_):_ = Set.toList $ treesPaths $ dfzz $ df

rpln $ (concat . map (aall . ttaa) . Set.toList . ffqq) ff
"({(cloud,heavy),(rain,heavy),(<<1,1>,6>,0)},1 % 1)"
"({(cloud,heavy),(rain,light),(<<1,1>,6>,0)},1 % 1)"
"({(cloud,heavy),(rain,none),(<<1,1>,6>,2)},1 % 1)"
"({(cloud,light),(rain,heavy),(<<1,1>,6>,2)},1 % 1)"
"({(cloud,light),(rain,light),(<<1,1>,6>,0)},1 % 1)"
"({(cloud,light),(rain,none),(<<1,1>,6>,0)},1 % 1)"
"({(cloud,none),(rain,heavy),(<<1,1>,6>,0)},1 % 1)"
"({(cloud,none),(rain,light),(<<1,1>,6>,0)},1 % 1)"
"({(cloud,none),(rain,none),(<<1,1>,6>,2)},1 % 1)"
"({(cloud,heavy),(<<1,1>,3>,0)},1 % 1)"
"({(cloud,light),(<<1,1>,3>,1)},1 % 1)"
"({(cloud,none),(<<1,1>,3>,1)},1 % 1)"
"({(pressure,high),(wind,light),(<<1,1>,4>,0)},1 % 1)"
"({(pressure,high),(wind,none),(<<1,1>,4>,0)},1 % 1)"
"({(pressure,high),(wind,strong),(<<1,1>,4>,0)},1 % 1)"
"({(pressure,low),(wind,light),(<<1,1>,4>,3)},1 % 1)"
"({(pressure,low),(wind,none),(<<1,1>,4>,0)},1 % 1)"
"({(pressure,low),(wind,strong),(<<1,1>,4>,3)},1 % 1)"
"({(pressure,medium),(wind,light),(<<1,1>,4>,0)},1 % 1)"
"({(pressure,medium),(wind,none),(<<1,1>,4>,0)},1 % 1)"
"({(pressure,medium),(wind,strong),(<<1,1>,4>,0)},1 % 1)"
"({(pressure,high),(wind,light),(<<1,1>,7>,0)},1 % 1)"
"({(pressure,high),(wind,none),(<<1,1>,7>,0)},1 % 1)"
"({(pressure,high),(wind,strong),(<<1,1>,7>,2)},1 % 1)"
"({(pressure,low),(wind,light),(<<1,1>,7>,2)},1 % 1)"
"({(pressure,low),(wind,none),(<<1,1>,7>,2)},1 % 1)"
"({(pressure,low),(wind,strong),(<<1,1>,7>,2)},1 % 1)"
"({(pressure,medium),(wind,light),(<<1,1>,7>,2)},1 % 1)"
"({(pressure,medium),(wind,none),(<<1,1>,7>,2)},1 % 1)"
"({(pressure,medium),(wind,strong),(<<1,1>,7>,0)},1 % 1)"
"({(rain,heavy),(<<1,1>,5>,0)},1 % 1)"
"({(rain,light),(<<1,1>,5>,1)},1 % 1)"
"({(rain,none),(<<1,1>,5>,1)},1 % 1)"

rpln $ aall $ aa `fapply` ff
"({(<<1,1>,3>,0),(<<1,1>,4>,3),(<<1,1>,5>,0),(<<1,1>,6>,0),(<<1,1>,7>,2)},4 % 1)"
"({(<<1,1>,3>,1),(<<1,1>,4>,0),(<<1,1>,5>,0),(<<1,1>,6>,2),(<<1,1>,7>,0)},2 % 1)"
"({(<<1,1>,3>,1),(<<1,1>,4>,0),(<<1,1>,5>,1),(<<1,1>,6>,0),(<<1,1>,7>,2)},7 % 1)"
"({(<<1,1>,3>,1),(<<1,1>,4>,0),(<<1,1>,5>,1),(<<1,1>,6>,2),(<<1,1>,7>,0)},5 % 1)"
"({(<<1,1>,3>,1),(<<1,1>,4>,0),(<<1,1>,5>,1),(<<1,1>,6>,2),(<<1,1>,7>,2)},1 % 1)"
"({(<<1,1>,3>,1),(<<1,1>,4>,3),(<<1,1>,5>,1),(<<1,1>,6>,0),(<<1,1>,7>,2)},1 % 1)"

algn (aa `fapply` ff) - algn (ind aa `fapply` ff)
14.91684019471893

algnden (aa `fapply` ff) - algnden (ind aa `fapply` ff)
7.458420097359465

ent (aa `fapply` ff)
1.5657306529961337

cent (fftt ff) aa
0.9879509050336628

rent (aa `fapply` ff) (vvc `fapply` ff)
19.908579842311866

Now consider predicting the weather,

let bb = aa `red` [pressure,cloud,wind]

let df = decompermmxs bb (3^3) 1 (3^3) 3 3 3 (3^3) 1 20 1

rpln $ Set.toList $ treesPaths $ funcsTreesMap (\(ss,ff) -> (ss,fund ff,fder ff)) $ dfzz $ df
"[({},{cloud,pressure,wind},{<<1,1>,1>,<<1,1>,2>,<<1,1>,5>}),({(<<1,1>,1>,1),(<<1,1>,2>,0),(<<1,1>,5>,0)},{cloud,pressure,wind},{<<2,1>,1>,<<2,1>,4>}),({(<<2,1>,1>,0),(<<2,1>,4>,0)},{pressure,wind},{<<3,1>,1>,<<3,1>,2>})]"
"[({},{cloud,pressure,wind},{<<1,1>,1>,<<1,1>,2>,<<1,1>,5>}),({(<<1,1>,1>,1),(<<1,1>,2>,0),(<<1,1>,5>,0)},{cloud,pressure,wind},{<<2,1>,1>,<<2,1>,4>}),({(<<2,1>,1>,1),(<<2,1>,4>,2)},{pressure,wind},{<<4,1>,1>,<<4,1>,2>})]"

let [[(_,ff1),(ss1,ff11),(ss11,ff111)],[(_,_),(_,_),(ss21,ff211)]] = Set.toList $ treesPaths $ dfzz $ df


rpln $ (concat . map (aall . ttaa) . Set.toList . ffqq) $ ff1
"({(cloud,heavy),(<<1,1>,1>,0)},1 % 1)"
"({(cloud,light),(<<1,1>,1>,1)},1 % 1)"
"({(cloud,none),(<<1,1>,1>,1)},1 % 1)"
"({(pressure,high),(wind,light),(<<1,1>,5>,0)},1 % 1)"
"({(pressure,high),(wind,none),(<<1,1>,5>,0)},1 % 1)"
"({(pressure,high),(wind,strong),(<<1,1>,5>,0)},1 % 1)"
"({(pressure,low),(wind,light),(<<1,1>,5>,3)},1 % 1)"
"({(pressure,low),(wind,none),(<<1,1>,5>,0)},1 % 1)"
"({(pressure,low),(wind,strong),(<<1,1>,5>,3)},1 % 1)"
"({(pressure,medium),(wind,light),(<<1,1>,5>,0)},1 % 1)"
"({(pressure,medium),(wind,none),(<<1,1>,5>,0)},1 % 1)"
"({(pressure,medium),(wind,strong),(<<1,1>,5>,0)},1 % 1)"
"({(pressure,high),(<<1,1>,2>,0)},1 % 1)"
"({(pressure,low),(<<1,1>,2>,1)},1 % 1)"
"({(pressure,medium),(<<1,1>,2>,0)},1 % 1)"

rp $ ss1
"{(<<1,1>,1>,1),(<<1,1>,2>,0),(<<1,1>,5>,0)}"

rpln $ aall $ aa `fmul` ff1 `mul` single ss1 1 `ared` vars bb
"({(cloud,light),(pressure,high),(wind,light)},1 % 1)"
"({(cloud,light),(pressure,high),(wind,strong)},1 % 1)"
"({(cloud,light),(pressure,medium),(wind,light)},1 % 1)"
"({(cloud,light),(pressure,medium),(wind,none)},2 % 1)"
"({(cloud,light),(pressure,medium),(wind,strong)},1 % 1)"
"({(cloud,none),(pressure,high),(wind,light)},2 % 1)"
"({(cloud,none),(pressure,high),(wind,none)},3 % 1)"
"({(cloud,none),(pressure,medium),(wind,light)},2 % 1)"
"({(cloud,none),(pressure,medium),(wind,none)},1 % 1)"

rpln $ (concat . map (aall . ttaa) . Set.toList . ffqq) $ ff11
"({(cloud,heavy),(<<2,1>,1>,0)},1 % 1)"
"({(cloud,light),(<<2,1>,1>,1)},1 % 1)"
"({(cloud,none),(<<2,1>,1>,0)},1 % 1)"
"({(pressure,high),(wind,light),(<<2,1>,4>,0)},1 % 1)"
"({(pressure,high),(wind,none),(<<2,1>,4>,0)},1 % 1)"
"({(pressure,high),(wind,strong),(<<2,1>,4>,2)},1 % 1)"
"({(pressure,low),(wind,light),(<<2,1>,4>,2)},1 % 1)"
"({(pressure,low),(wind,none),(<<2,1>,4>,2)},1 % 1)"
"({(pressure,low),(wind,strong),(<<2,1>,4>,2)},1 % 1)"
"({(pressure,medium),(wind,light),(<<2,1>,4>,0)},1 % 1)"
"({(pressure,medium),(wind,none),(<<2,1>,4>,2)},1 % 1)"
"({(pressure,medium),(wind,strong),(<<2,1>,4>,2)},1 % 1)"

rp $ ss11
"{(<<2,1>,1>,0),(<<2,1>,4>,0)}"

rpln $ aall $ aa `fmul` ff1 `mul` single ss1 1  `fmul` ff11 `mul` single ss11 1 `ared` vars bb
"({(cloud,none),(pressure,high),(wind,light)},2 % 1)"
"({(cloud,none),(pressure,high),(wind,none)},3 % 1)"
"({(cloud,none),(pressure,medium),(wind,light)},2 % 1)"

rpln $ (concat . map (aall . ttaa) . Set.toList . ffqq) $ ff111
"({(pressure,high),(<<3,1>,1>,0)},1 % 1)"
"({(pressure,low),(<<3,1>,1>,1)},1 % 1)"
"({(pressure,medium),(<<3,1>,1>,1)},1 % 1)"
"({(wind,light),(<<3,1>,2>,0)},1 % 1)"
"({(wind,none),(<<3,1>,2>,1)},1 % 1)"
"({(wind,strong),(<<3,1>,2>,1)},1 % 1)"

rp $ ss21
"{(<<2,1>,1>,1),(<<2,1>,4>,2)}"

rpln $ aall $ aa `fmul` ff1 `mul` single ss1 1  `fmul` ff11 `mul` single ss21 1 `ared` vars bb
"({(cloud,light),(pressure,high),(wind,strong)},1 % 1)"
"({(cloud,light),(pressure,medium),(wind,none)},2 % 1)"
"({(cloud,light),(pressure,medium),(wind,strong)},1 % 1)"

rpln $ (concat . map (aall . ttaa) . Set.toList . ffqq) $ ff211
"({(pressure,high),(<<4,1>,1>,0)},1 % 1)"
"({(pressure,low),(<<4,1>,1>,1)},1 % 1)"
"({(pressure,medium),(<<4,1>,1>,1)},1 % 1)"
"({(wind,light),(<<4,1>,2>,0)},1 % 1)"
"({(wind,none),(<<4,1>,2>,1)},1 % 1)"
"({(wind,strong),(<<4,1>,2>,0)},1 % 1)"

The partition transform corresponding to the fud decomposition can be constructed to obtain the overall entropy properties,

let decompermmxs aa wmax lmax xmax omax bmax mmax umax pmax mult seed = fromJust $ parametersSystemsDecomperMaxRollByMExcludedSelfHighest wmax lmax xmax omax bmax mmax umax pmax mult seed (sys aa) (vars aa) aa

let dftt uu df = partitionsTransformVarPartition $ fromJust $ systemsDecompsPartition uu (fromJust (decompFudsDecomp df))

let (uu',df) = decompermmxs bb (3^3) 1 (3^3) 3 3 3 (3^3) 1 20 1

let tt = dftt uu' df

ent (aa `tmul` tt)
2.276422685805818

cent tt bb
0.20794415416798356

rent (aa `tmul` tt) (vvc `tmul` tt)
9.916651030764797

tlalgn tt aa [rain]
8.730663306858734

tlent tt aa [rain]
2.772588722239781

size $ eff (aa `tmul` tt) `mul` (vvc `tmul` tt)
60 % 1

This model has the lowest optimised label entropy, but is very query effective.

Practicable level summed shuffle content alignment valency-density fud decomposition inducer

Define the level limited-models infinite-layer substrate fud decompositions tree searcher \[ Z_{P,A,\mathrm{D,F,g}} = \mathrm{searchTreer}(\mathcal{D}_{\mathrm{F},\infty,U,V} \cap \mathrm{trees}(\mathcal{S} \times \mathcal{F}_{\mathrm{q}}),P_{P,A,\mathrm{D,F,g}},R_{P,A,\mathrm{D,F,g}}) \] where the parameters includes the level hierarchy tree, $Z_{\mathrm{g}} \in \mathrm{set}(P)$, where $Z_{\mathrm{g}} \in \mathrm{trees}(\mathbf{N}_{>0} \times \mathrm{P}(V_A) \times (\mathcal{F}_{\infty,U_A,V_A} \cap \mathcal{F}_{\mathrm{u}} \cap \mathcal{F}_{\mathrm{b}} \cap \mathcal{F}_{\mathrm{h}}))$. The neighbourhood function is defined \[ \begin{eqnarray} &&P_{P,A,\mathrm{D,F,g}}(D) = \{E : \\ &&\hspace{2em}(\cdot,S,G,L) \in \mathrm{maxd}(\mathrm{order}(D_{\mathbf{Q} \times \mathrm{S} \times \mathcal{X}^2},\{(\mathrm{size}(B),S,G,L) : \\ &&\hspace{4em}(L,Y) \in \mathrm{places}(D),\\ &&\hspace{4em}R_L = \bigcup \mathrm{dom}(\mathrm{set}(L)),~H_L = \bigcup \mathrm{ran}(\mathrm{set}(L)),\\ &&\hspace{4em}(\cdot,F) = L_{|L|},~W=\mathrm{der}(F),\\ &&\hspace{4em}S \in W^{\mathrm{CS}} \setminus \mathrm{dom}(\mathrm{dom}(Y)),\\ &&\hspace{4em}B = \mathrm{apply}(V_A,V_A,\mathrm{his}(H_L) \cup \{\{R_L \cup S\}^{\mathrm{U}}\},A),~\mathrm{size}(B)>0,\\ &&\hspace{4em}G = \mathrm{level}(B,B_{R(B)})(Z_{\mathrm{g}}),~G \neq \emptyset\})),\\ &&\hspace{2em}M=L \cup \{(|L|+1,(S,G))\},\\ &&\hspace{2em}E = \mathrm{tree}(\mathrm{paths}(D) \setminus \{L\} \cup \{M\})\} \end{eqnarray} \] where \[ \begin{eqnarray} R_{P,A,\mathrm{D,F,g}} = \{\{((\emptyset,G),\emptyset)\} : G \in \mathrm{maxd}(\mathrm{order}(D_{\mathrm{F}},\mathrm{level}(A,A_{R(A)})(Z_{\mathrm{g}})))\} \end{eqnarray} \] and \[ \begin{eqnarray} &&\mathrm{level}(A,A_R) \in \mathrm{trees}(\mathbf{N}_{>0} \times \mathrm{P}(V_A) \times (\mathcal{F}_{\infty,U_A,V_A} \cap \mathcal{F}_{\mathrm{u}} \cap \mathcal{F}_{\mathrm{b}} \cap \mathcal{F}_{\mathrm{h}})) \to \\ &&\hspace{15em}(\mathcal{F}_{\infty,U_A,V_A} \cap \mathcal{F}_{\mathrm{u}} \cap \mathcal{F}_{\mathrm{b}} \cap \mathcal{F}_{\mathrm{h}}) \end{eqnarray} \] is defined \[ \begin{eqnarray} &&\mathrm{level}(A,A_R)(Z_{\mathrm{g}}) = \bigcup \{G : \\ &&\hspace{2em}((\mathrm{wmax}_{\mathrm{g}}, V_{\mathrm{g}}, F_{\mathrm{g}}),X_{\mathrm{g}}) \in Z_{\mathrm{g}},\\ &&\hspace{2em}F_{\mathrm{h}} = \mathrm{level}(A,A_R)(X_{\mathrm{g}}),~\mathrm{wmax}_{\mathrm{g}} \in \mathrm{set}(P_{\mathrm{g}}),\\ &&\hspace{2em}F_{\mathrm{L}} \in \mathrm{leaves}(\mathrm{tree}(Z_{P_{\mathrm{g}},A,A_R,V_{\mathrm{g}},F_{\mathrm{g}} \cup F_{\mathrm{h}},\mathrm{L}})),\\ &&\hspace{2em}(K,a) \in \mathrm{max}(\mathrm{elements}(Z_{P_{\mathrm{g}},A,A_R,F_{\mathrm{g}} \cup F_{\mathrm{h}},F_{\mathrm{L}},\mathrm{D}})),~a>0,\\ &&\hspace{2em}G = \mathrm{depends}(F_{\mathrm{L}},K)\} \end{eqnarray} \] The practicable level summed shuffle content alignment valency-density fud decomposition inducer may then be implemented (Text) \[ \begin{eqnarray} &&I_{z,\mathrm{Scsd,D,F,\infty,q},P,\mathrm{g}}^{‘ * }(A) = \\ &&\hspace{2em}\mathrm{if}(Q \neq \emptyset, \{(D,I_{\mathrm{Scsd}}^{ * }((A,D)))\},\{(D_{\emptyset},0)\}) :\\ &&\hspace{5em}Q = \mathrm{leaves}(\mathrm{tree}(Z_{P,A,\mathrm{D,F,g}})),~\{(D,\cdot)\} = Q \end{eqnarray} \] The fud decomposition inducer is defined in module AlignmentPracticable. The implementation replaces partition variables by cardinal variables and so has an additional argument of a list of variables, [Variable],

parametersSystemsSamplesLevelsListVariablesInducerDecompFudHighest_u :: 
  Integer -> Integer -> Integer -> Integer -> Integer -> Integer -> Integer -> 
  Integer -> Integer ->
  System -> Histogram -> Tree (Integer, Set.Set Variable, Fud) -> [Variable] ->
  Maybe (DecompFud,(System,[Variable]))

as

parametersSystemsSamplesLevelsListVariablesInducerDecompFudHighest_u
  lmax xmax omax bmax mmax umax pmax mult seed uu aa zzg ll
  ...
  | ... = Just $ dec emptyTree uu ll seed
  | otherwise = Nothing
  where
    dec zz uu ll s
      | zz == emptyTree && ffr == fudEmpty = (decompFudEmpty, (uu, ll))
      | zz == emptyTree = dec zzr uur llr (s + mult)
      | mm == [] = (zzdf (zztrim zz), (uu, ll)) 
      | otherwise = dec zzc uuc llc (s + mult)
      where
        aarr = ashuffle aa s mult
        (ffr,(uur,llr)) = level uu aa aarr zzg ll
        zzr = tsgl (stateEmpty,ffr)
        mm = [(size bb,nn,ss,bb,bbrr) | (nn,yy) <- qqll (treesPlaces zz), 
                 let rrc = llsthis nn, let hhc = llfhis nn, let (_,ff) = last nn, ff /= fudEmpty,
                 ss <- qqll (cart uu (fder ff) `minus` dom (treesRoots yy)), 
                 let bb = apply (vars aa) (vars aa) (hhc `union` rrc `add` unit ss) aa,
                 let bbrr = ashuffle bb s mult,
                 size bb > 0]
        (_,nn,ss,bb,bbrr) = last $ sort mm
        (ffc,(uuc,llc)) = level uu bb bbrr zzg ll
        zzc = pathsTree $ treesPaths zz `add` (nn ++ [(ss,ffc)])
    level uu aa aarr (Tree ttg) ll = foldl next (fudEmpty,(uu,ll)) (Map.toList ttg)
      where       
        next (ff,(uu,ll)) ((wmaxg,vvg,ffg),xxg) = (ff `funion` gg,(uu',ll'))
          where
            (ffh,(uuh,llh)) = level uu aa aarr xxg ll
            ((gg,_),(uu',ll')) = 
              iillfudshigh wmaxg lmax xmax omax bmax mmax umax pmax uuh aa aarr vvg (ffg `funion` ffh) llh
    iillfudshigh wmax lmax xmax omax bmax mmax umax pmax uu aa aarr vvg ffg ll = fromJust $
      parametersSystemsSamplesShufflesLevelsListVariablesInducerFudHighest 
        wmax lmax xmax omax bmax mmax umax pmax uu aa aarr vvg ffg ll
    zztrim = pathsTree . Set.map lltrim . treesPaths
    lltrim ll = let (_,ff) = last ll in if ff == fudEmpty then init ll else ll
    ...
    hshuffle hh r = fromJust $ historiesShuffle hh (fromInteger r)
    ashuffle aa seed mult = let hh = aahh aa in 
                            resize (size aa) $ foldl1 aadd [hhaa $ hshuffle hh (seed + r) | r <- [0..mult-1]]
    ...

Note that the _u suffix in the function name indicates that some or all of the checks on the arguments have been dropped.

Level highest-layer excluded-self maximum-roll fud decomper

The level highest-layer excluded-self maximum-roll fud decomper, $I_{P,U,\mathrm{D,F,mr,xs,d,l}}$, is defined in module AlignmentPracticable,

parametersSystemsDecomperLevelMaximumRollExcludedSelfHighest :: 
  Integer -> Integer -> Integer -> Integer -> Integer -> Integer -> Integer -> 
  Integer -> Integer ->
  System -> Set.Set Variable -> Histogram -> Tree (Integer, Set.Set Variable, Fud) -> 
  Maybe (System, DecompFud)

parametersSystemsDecomperLevelMaximumRollExcludedSelfHighest 
  lmax xmax omax bmax mmax umax pmax mult seed uu vv aa zzg
  ...
    layerer wmax uu vvg ffg aa aarr f g = fromJust $ 
      parametersSystemsLayererLevelMaximumRollExcludedSelfHighest 
        wmax lmax xmax omax bmax mmax umax pmax uu vvg ffg aa aarr f g
  ...

Level highest-layer excluded-self maximum-roll-by-derived-dimension fud decomper

The level highest-layer excluded-self maximum-roll-by-derived-dimension fud decomper, $I_{P,U,\mathrm{D,F,mm,xs,d,l}}$, is defined in module AlignmentPracticable,

parametersSystemsDecomperLevelMaxRollByMExcludedSelfHighest :: 
  Integer -> Integer -> Integer -> Integer -> Integer -> Integer -> Integer -> 
  Integer -> Integer ->
  System -> Set.Set Variable -> Histogram -> Tree (Integer, Set.Set Variable, Fud) -> 
  Maybe (System, DecompFud)

parametersSystemsDecomperLevelMaxRollByMExcludedSelfHighest 
  lmax xmax omax bmax mmax umax pmax mult seed uu vv aa zzg
  ...
    layerer wmax uu vvg ffg aa aarr f g = fromJust $ 
      parametersSystemsLayererLevelMaxRollByMExcludedSelfHighest 
        wmax lmax xmax omax bmax mmax umax pmax uu vvg ffg aa aarr f g
  ...

top