{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## State-Dependent Semideterministic Broadcast Channel Demo\n",
"\n",
"Author: Cheuk Ting Li "
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from psitip import *\n",
"# PsiOpts.setting(solver = \"pyomo.glpk\") # Set linear programming solver\n",
"PsiOpts.setting(solver = \"pyomo.gurobi\") # Set linear programming solver\n",
"PsiOpts.setting(repr_latex = True) # Jupyter Notebook LaTeX display\n",
"PsiOpts.setting(venn_latex = True) # LaTeX in diagrams\n",
"PsiOpts.setting(proof_note_color = \"blue\") # Reasons in proofs are blue"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"X, Y, Z, S, U = rv(\"X, Y, Z, S, U\")\n",
"M1, M2 = rv_array(\"M\", 1, 3)\n",
"R1, R2 = real_array(\"R\", 1, 3)\n",
"\n",
"# Define state-dependent semideterministic BC [Lapidoth-Wang 2012]\n",
"model = CodingModel()\n",
"model.set_rate(M1, R1) # Rate of M1 is R1\n",
"model.set_rate(M2, R2) # Rate of M2 is R2\n",
"model.add_node(M1+M2+S, X,\n",
" label = \"Enc\") # Encoder maps M1,M2,S to X\n",
"model.add_edge(X+S, Y, is_fcn=True) # Y is a function of X,S\n",
"model.add_edge(X+S, Z) # Channel X,S -> Z\n",
"model.add_node(Y, M1,\n",
" label = \"Dec 1\") # Decoder 1 maps Y to M1\n",
"model.add_node(Z, M2,\n",
" label = \"Dec 2\") # Decoder 2 maps Z to M2"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\r\n",
"\r\n",
"\r\n",
"\r\n",
"\r\n"
],
"text/plain": [
""
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model.graph() # Draw diagram"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\exists A_{M_2}:\\, \\left\\{\\begin{array}{l}\n",
" R_1 \\ge 0,\\\\\n",
" R_2 \\ge 0,\\\\\n",
" \\begin{array}{l}\n",
"R_1 \\le H(Y|S)\\\\\n",
"{\\color{blue}{\\;\\;\\;\\;\\left(\\because\\,\\text{enc }M_1, M_2, S\\text{ to }Y\\text{,}\\,\\text{dec }Y\\text{ to }M_1\\,\\text{nonuniq }\\emptyset\\right)}}\n",
"\\end{array},\\\\\n",
" \\begin{array}{l}\n",
"R_2 \\le I(A_{M_2}; Z)-I(A_{M_2}; S)\\\\\n",
"{\\color{blue}{\\;\\;\\;\\;\\left(\\because\\,\\text{enc }M_1, M_2, S\\text{ to }A_{M_2}\\text{,}\\,\\text{dec }Z\\text{ to }A_{M_2}, M_2\\,\\text{nonuniq }\\emptyset\\right)}}\n",
"\\end{array},\\\\\n",
" \\begin{array}{l}\n",
"R_1+R_2 \\le I(A_{M_2}; Z)+H(Y|A_{M_2}, S)-I(A_{M_2}; S)\\\\\n",
"{\\color{blue}{\\;\\;\\;\\;\\left(\\because\\,\\text{enc }M_1, M_2, S\\text{ to }Y, A_{M_2}\\text{,}\\,\\text{dec }Y\\text{ to }M_1\\,\\text{nonuniq }\\emptyset\\text{,}\\,\\text{dec }Z\\text{ to }A_{M_2}, M_2\\right)}}\n",
"\\end{array},\\\\\n",
" H(Y|S, X) = 0,\\\\\n",
" (A_{M_2}, Y) \\leftrightarrow (S, X) \\leftrightarrow Z\\\\\n",
"\\end{array} \\right\\}$"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Inner bound via [Lee-Chung 2015], give [Lapidoth-Wang 2012]\n",
"r = model.get_inner(is_proof=True)\n",
"r.display(note=True)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\exists A_{M_2}:\\, \\left\\{\\begin{array}{l}\n",
" R_1 \\ge 0,\\\\\n",
" R_2 \\ge 0,\\\\\n",
" R_1 \\le H(Y|S),\\\\\n",
" R_2 \\le I(A_{M_2}; Z)-I(A_{M_2}; S),\\\\\n",
" R_1+R_2 \\le I(A_{M_2}; Z)+H(Y|A_{M_2}, S)-I(A_{M_2}; S),\\\\\n",
" H(Y|S, X) = 0,\\\\\n",
" (A_{M_2}, Y) \\leftrightarrow (S, X) \\leftrightarrow Z\\\\\n",
"\\end{array} \\right\\}$"
],
"text/plain": [
"( ( R1 >= 0 )\n",
" &( R2 >= 0 )\n",
" &( R1 <= H(Y|S) )\n",
" &( R2 <= I(A_M2&Z)-I(A_M2&S) )\n",
" &( R1+R2 <= I(A_M2&Z)+H(Y|A_M2+S)-I(A_M2&S) )\n",
" &( H(Y|S+X) == 0 )\n",
" &( markov(A_M2+Y, S+X, Z) ) ).exists(A_M2)"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Inner bound via [Lee-Chung 2015], give [Lapidoth-Wang 2012]\n",
"r = model.get_inner()\n",
"r"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\begin{align*}\n",
"&1.\\;\\text{Claim:}\\\\\n",
"&\\exists A_{M_2}:\\, \\left\\{\\begin{array}{l}\n",
" R_1 \\ge 0,\\\\\n",
" R_2 \\ge 0,\\\\\n",
" R_1 \\le H(Y|S),\\\\\n",
" R_2 \\le I(A_{M_2}; Z)-I(A_{M_2}; S),\\\\\n",
" R_1+R_2 \\le I(A_{M_2}; Z)+H(Y|A_{M_2}, S)-I(A_{M_2}; S),\\\\\n",
" H(Y|S, X) = 0,\\\\\n",
" (A_{M_2}, Y) \\leftrightarrow (S, X) \\leftrightarrow Z\\\\\n",
"\\end{array} \\right\\}\\\\\n",
"\\\\\n",
"&\\;\\;1.1.\\;\\text{Case } R_1+R_2 \\le I(S_F, Z_P, M_2; Z)+H(Y|S_F, Z_P, M_2, S)-I(S_F, Z_P, M_2; S)\\text{:}\\\\\n",
"\\\\\n",
"&\\;\\;\\;\\;1.1.1.\\;\\text{Substitute }A_{M_2} := (S_F, Z_P, M_2)\\text{:}\\\\\n",
"&\\;\\;\\;\\;\\left\\{\\begin{array}{l}\n",
" R_1 \\ge 0,\\\\\n",
" R_2 \\ge 0,\\\\\n",
" R_1 \\le H(Y|S),\\\\\n",
" R_2 \\le I(S_F, Z_P, M_2; Z)-I(S_F, Z_P, M_2; S),\\\\\n",
" R_1+R_2 \\le I(S_F, Z_P, M_2; Z)+H(Y|S_F, Z_P, M_2, S)-I(S_F, Z_P, M_2; S),\\\\\n",
" H(Y|S, X) \\le 0,\\\\\n",
" (S_F, Z_P, M_2, Y) \\leftrightarrow (S, X) \\leftrightarrow Z\\\\\n",
"\\end{array} \\right\\}\\\\\n",
"\\\\\n",
"&\\;\\;\\;\\;1.1.2.\\;\\text{Steps: }\\\\\n",
"&\\;\\;\\;\\;R_1\\\\\n",
"&\\;\\;\\;\\;\\le I(M_1; Y|Y_P)\\;\\;\\;{\\color{blue}{\\left(\\because\\,\\text{decoding of }M_1\\text{:}\\, R_1 \\le I(M_1; Y|Y_P)\\right)}}\\\\\n",
"&\\;\\;\\;\\;\\le I(M_1; Y|Y_P)+I(S, Y; Y_P)\\\\\n",
"&\\;\\;\\;\\;\\le I(M_1, S_F, Y_P; S, Y)-I(S_F; Y|M_1, Y_P)\\\\\n",
"&\\;\\;\\;\\;= I(M_1, S_F; S)+I(M_1, S_F, Y_P; Y|S)\\;\\;\\;{\\color{blue}{\\left(\\because\\,\\text{Csiszar sum}\\text{:}\\, I(S_F; Y|Y_P, M_1) = I(Y_P; S|S_F, M_1)\\right)}}\\\\\n",
"&\\;\\;\\;\\;\\le H(Y|S)+I(M_1, S_F; S)\\\\\n",
"&\\;\\;\\;\\;= H(Y|S)\\;\\;\\;{\\color{blue}{\\left(\\because\\, S {\\perp\\!\\!\\perp} (S_F, M_1)\\right)}}\\\\\n",
"\\\\\n",
"&\\;\\;\\;\\;1.1.3.\\;\\text{Steps: }\\\\\n",
"&\\;\\;\\;\\;R_2\\\\\n",
"&\\;\\;\\;\\;\\le I(M_2; Z|Z_P)\\;\\;\\;{\\color{blue}{\\left(\\because\\,\\text{decoding of }M_2\\text{:}\\, R_2 \\le I(M_2; Z|Z_P)\\right)}}\\\\\n",
"&\\;\\;\\;\\;\\le I(M_2, Z_P; Z)\\\\\n",
"&\\;\\;\\;\\;= I(M_2, Z_P; Z)-I(M_2, S_F; S)\\;\\;\\;{\\color{blue}{\\left(\\because\\, S {\\perp\\!\\!\\perp} (S_F, M_2)\\right)}}\\\\\n",
"&\\;\\;\\;\\;= I(M_2, S_F, Z_P; Z)-I(M_2, S_F, Z_P; S)\\;\\;\\;{\\color{blue}{\\left(\\because\\,\\text{Csiszar sum}\\text{:}\\, I(S_F; Z|Z_P, M_2) = I(Z_P; S|S_F, M_2)\\right)}}\\\\\n",
"\\\\\n",
"&\\;\\;1.2.\\;\\text{Case } R_1+R_2 \\ge I(S_F, Z_P, M_2; Z)+H(Y|S_F, Z_P, M_2, S)-I(S_F, Z_P, M_2; S)\\text{:}\\\\\n",
"\\\\\n",
"&\\;\\;\\;\\;1.2.1.\\;\\text{Substitute }A_{M_2} := (S_F, Y_F, Z_P, M_2)\\text{:}\\\\\n",
"&\\;\\;\\;\\;\\left\\{\\begin{array}{l}\n",
" R_1 \\ge 0,\\\\\n",
" R_2 \\ge 0,\\\\\n",
" R_1 \\le H(Y|S),\\\\\n",
" R_2 \\le I(S_F, Y_F, Z_P, M_2; Z)-I(S_F, Y_F, Z_P, M_2; S),\\\\\n",
" R_1+R_2 \\le I(S_F, Y_F, Z_P, M_2; Z)+H(Y|S_F, Y_F, Z_P, M_2, S)-I(S_F, Y_F, Z_P, M_2; S),\\\\\n",
" H(Y|S, X) \\le 0,\\\\\n",
" (S_F, Y_F, Z_P, M_2, Y) \\leftrightarrow (S, X) \\leftrightarrow Z\\\\\n",
"\\end{array} \\right\\}\\\\\n",
"\\\\\n",
"&\\;\\;\\;\\;1.2.2.\\;\\text{Steps: }\\\\\n",
"&\\;\\;\\;\\;R_1\\\\\n",
"&\\;\\;\\;\\;\\le I(M_1; Y|Y_P)\\;\\;\\;{\\color{blue}{\\left(\\because\\,\\text{decoding of }M_1\\text{:}\\, R_1 \\le I(M_1; Y|Y_P)\\right)}}\\\\\n",
"&\\;\\;\\;\\;\\le I(M_1; Y|Y_P)+I(S, Y; Y_P)\\\\\n",
"&\\;\\;\\;\\;\\le I(M_1, S_F, Y_P; S, Y)-I(S_F; Y|M_1, Y_P)\\\\\n",
"&\\;\\;\\;\\;= I(M_1, S_F; S)+I(M_1, S_F, Y_P; Y|S)\\;\\;\\;{\\color{blue}{\\left(\\because\\,\\text{Csiszar sum}\\text{:}\\, I(S_F; Y|Y_P, M_1) = I(Y_P; S|S_F, M_1)\\right)}}\\\\\n",
"&\\;\\;\\;\\;\\le H(Y|S)+I(M_1, S_F; S)\\\\\n",
"&\\;\\;\\;\\;= H(Y|S)\\;\\;\\;{\\color{blue}{\\left(\\because\\, S {\\perp\\!\\!\\perp} (M_1, S_F)\\right)}}\\\\\n",
"\\\\\n",
"&\\;\\;\\;\\;1.2.3.\\;\\text{Steps: }\\\\\n",
"&\\;\\;\\;\\;R_2\\\\\n",
"&\\;\\;\\;\\;\\le 2I(Z; Z_P)+R_2\\\\\n",
"&\\;\\;\\;\\;\\le 2I(M_2, Z_P; Z)-R_2\\;\\;\\;{\\color{blue}{\\left(\\because\\,\\text{decoding of }M_2\\text{:}\\, 2R_2 \\le 2I(M_2; Z|Z_P)\\right)}}\\\\\n",
"&\\;\\;\\;\\;= 2I(M_2, Z_P; Z)-R_2-I(M_2, S_F; S)\\;\\;\\;{\\color{blue}{\\left(\\because\\, (M_2, S_F) {\\perp\\!\\!\\perp} S\\right)}}\\\\\n",
"&\\;\\;\\;\\;= I(M_2, Z_P; Z)+I(M_2, S_F, Z_P; Z)-R_2-I(M_2, S_F, Z_P; S)\\\\\n",
"&\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;{\\color{blue}{\\left(\\because\\,\\text{Csiszar sum}\\text{:}\\, I(S_F; Z|Z_P, M_2) = I(Z_P; S|S_F, M_2)\\right)}}\\\\\n",
"&\\;\\;\\;\\;\\le R_1+I(M_2, Z_P; Z)-H(Y|M_2, S, S_F, Z_P)\\\\\n",
"&\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;{\\color{blue}{\\left(\\because\\,\\text{case}\\text{:}\\, R_1+R_2 \\ge I(S_F, Z_P, M_2; Z)+H(Y|S_F, Z_P, M_2, S)-I(S_F, Z_P, M_2; S)\\right)}}\\\\\n",
"&\\;\\;\\;\\;\\le I(M_1; Y|Y_P)+I(M_2, Z_P; Z)-H(Y|M_2, S, S_F, Z_P)\\;\\;\\;{\\color{blue}{\\left(\\because\\,\\text{decoding of }M_1\\text{:}\\, R_1 \\le I(M_1; Y|Y_P)\\right)}}\\\\\n",
"&\\;\\;\\;\\;\\le I(M_1; Y|M_2, Y_P)+I(M_2, Z_P; Z)-H(Y|M_2, S, S_F, Z_P)\\\\\n",
"&\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;{\\color{blue}{\\left(\\because\\,\\text{indep. of msgs }M_1\\text{, }M_2\\text{:}\\, I(M_1; Y; M_2|Y_P) \\le 0\\right)}}\\\\\n",
"&\\;\\;\\;\\;\\le I(M_1; Y|M_2, Y_P)+I(M_2, Z_P; Z)-H(Y|M_2, S, S_F, Y_F, Z_P)\\\\\n",
"&\\;\\;\\;\\;= I(M_1; Y|M_2, Y_P)+I(M_2, S_F, Y_F, Z_P; Z)-I(S; Z_P|M_2, S_F, Y_F)-H(Y|M_2, S, S_F, Y_F)\\\\\n",
"&\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;{\\color{blue}{\\left(\\because\\,\\text{Csiszar sum}\\text{:}\\, I(S_F, Y_F; Z|Z_P, M_2) = I(Z_P; S, Y|S_F, Y_F, M_2)\\right)}}\\\\\n",
"&\\;\\;\\;\\;= I(M_2, S_F, Y_F, Z_P; Z)+I(M_1; S; Y, Y_P|M_2, S_F, Y_F)-I(S; Z_P|M_2, S_F, Y_F)-H(Y|M_1, M_2, S, S_F, Y_F)\\\\\n",
"&\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;{\\color{blue}{\\left(\\because\\,\\text{Csiszar sum}\\text{:}\\, I(Y_P; S, Y; M_1|S_F, Y_F, M_2) = I(S_F, Y_F; Y; M_1|Y_P, M_2)\\right)}}\\\\\n",
"&\\;\\;\\;\\;\\le I(M_1, Y, Y_F; S|M_2, S_F)+I(M_2, S_F, Y_F, Z_P; Z)-H(Y|M_1, M_2, S_F, Y_F)-I(S; Y_F, Z_P|M_2, S_F)\\\\\n",
"&\\;\\;\\;\\;= I(M_1, Y, Y_F; S|M_2, S_F)+I(M_2, S_F, Y_F, Z_P; Z)-I(S; Y_F, Z_P|M_2, S_F)-I(S, S_P; Y|M_1, M_2, S_F, Y_F)\\\\\n",
"&\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;{\\color{blue}{\\left(\\because\\, H(Y|S, S_F, S_P, M_2, M_1, Y_F) = 0\\right)}}\\\\\n",
"&\\;\\;\\;\\;= I(M_1, M_2, S_P; S)+I(M_2, S_F, Y_F, Z_P; Z)-I(M_2, S_F, Y_F, Z_P; S)\\\\\n",
"&\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;{\\color{blue}{\\left(\\because\\,\\text{Csiszar sum}\\text{:}\\, I(S_P; S, Y|S_F, Y_F, M_1, M_2) = I(S_F, Y_F; S|S_P, M_1, M_2)\\right)}}\\\\\n",
"&\\;\\;\\;\\;= I(M_2, S_F, Y_F, Z_P; Z)-I(M_2, S_F, Y_F, Z_P; S)\\;\\;\\;{\\color{blue}{\\left(\\because\\, (M_1, M_2, S_P) {\\perp\\!\\!\\perp} S\\right)}}\\\\\n",
"\\\\\n",
"&\\;\\;\\;\\;1.2.4.\\;\\text{Steps: }\\\\\n",
"&\\;\\;\\;\\;R_1+R_2\\\\\n",
"&\\;\\;\\;\\;\\le R_2+I(M_1; Y|Y_P)\\;\\;\\;{\\color{blue}{\\left(\\because\\,\\text{decoding of }M_1\\text{:}\\, R_1 \\le I(M_1; Y|Y_P)\\right)}}\\\\\n",
"&\\;\\;\\;\\;\\le I(M_1; Y|Y_P)+I(M_2; Z|Z_P)\\;\\;\\;{\\color{blue}{\\left(\\because\\,\\text{decoding of }M_2\\text{:}\\, R_2 \\le I(M_2; Z|Z_P)\\right)}}\\\\\n",
"&\\;\\;\\;\\;\\le I(M_2; Z|Z_P)+I(M_1; Y|M_2, Y_P)\\;\\;\\;{\\color{blue}{\\left(\\because\\,\\text{indep. of msgs }M_1\\text{, }M_2\\text{:}\\, I(M_1; Y; M_2|Y_P) \\le 0\\right)}}\\\\\n",
"&\\;\\;\\;\\;\\le I(M_1; Y|M_2, Y_P)+I(M_2, Z_P; Z)\\\\\n",
"&\\;\\;\\;\\;= I(M_1; Y|M_2, Y_P)+I(M_2, Z_P; Z)-I(M_1, M_2, S_P; S)\\;\\;\\;{\\color{blue}{\\left(\\because\\, (M_1, M_2, S_P) {\\perp\\!\\!\\perp} S\\right)}}\\\\\n",
"&\\;\\;\\;\\;= I(M_1; Y|M_2, Y_P)+I(M_2, Z_P; Z)+I(S_P; Y|M_1, M_2, S, S_F, Y_F)-I(M_1, M_2, S_F, Y_F; S)\\\\\n",
"&\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;{\\color{blue}{\\left(\\because\\,\\text{Csiszar sum}\\text{:}\\, I(S_P; S, Y|S_F, Y_F, M_1, M_2) = I(S_F, Y_F; S|S_P, M_1, M_2)\\right)}}\\\\\n",
"&\\;\\;\\;\\;= I(M_1; Y|M_2, Y_P)+I(M_2, Z_P; Z)+H(Y|M_1, M_2, S, S_F, Y_F)-I(M_1, M_2, S_F, Y_F; S)\\\\\n",
"&\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;{\\color{blue}{\\left(\\because\\, H(Y|S, S_F, S_P, M_2, M_1, Y_F) = 0\\right)}}\\\\\n",
"&\\;\\;\\;\\;= I(M_2, Z_P; Z)+H(Y|M_2, S, S_F, Y_F)+I(S; Y, Y_P|M_2, S_F, Y_F)-I(M_1, M_2, S_F, Y, Y_F, Y_P; S)\\\\\n",
"&\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;{\\color{blue}{\\left(\\because\\,\\text{Csiszar sum}\\text{:}\\, I(Y_P; S, Y; M_1|S_F, Y_F, M_2) = I(S_F, Y_F; Y; M_1|Y_P, M_2)\\right)}}\\\\\n",
"&\\;\\;\\;\\;\\le I(M_2, Z_P; Z)+H(Y|M_2, S_F, Y_F)-I(M_2, S_F, Y, Y_F; S)\\\\\n",
"&\\;\\;\\;\\;= H(Y|M_2, S, S_F, Y_F, Z_P)+I(M_2, S_F, Y_F, Z_P; Z)-I(M_2, S_F, Y_F, Z_P; S)\\\\\n",
"&\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;{\\color{blue}{\\left(\\because\\,\\text{Csiszar sum}\\text{:}\\, I(S_F, Y_F; Z|Z_P, M_2) = I(Z_P; S, Y|S_F, Y_F, M_2)\\right)}}\\\\\n",
"\\end{align*}\n",
"$"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Enable case decomposition\n",
"with PsiOpts(cases = True):\n",
" \n",
" # Output converse proof (is_proof = True for shorter proof)\n",
" (model.get_outer(is_proof = True) >> r).proof().display()"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"X, Y, Z, S, U, V, W = rv(\"X, Y, Z, S, U, V, W\")\n",
"M1, M2 = rv_array(\"M\", 1, 3)\n",
"R1, R2 = real_array(\"R\", 1, 3)\n",
"\n",
"# Define state-dependent semideterministic BC, causal [Lapidoth-Wang 2012]\n",
"model = CodingModel()\n",
"model.set_rate(M1, R1) # Rate of M1 is R1\n",
"model.set_rate(M2, R2) # Rate of M2 is R2\n",
"model.add_node(M1+M2+S, X,\n",
" label = \"Enc\", rv_in_causal=S) # Encoder maps M1,M2,S to X\n",
"model.add_edge(X+S, Y, is_fcn=True) # Y is a function of X,S\n",
"model.add_edge(X+S, Z) # Channel X,S -> Z\n",
"model.add_node(Y, M1,\n",
" label = \"Dec 1\") # Decoder 1 maps Y to M1\n",
"model.add_node(Z, M2,\n",
" label = \"Dec 2\") # Decoder 2 maps Z to M2"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\begin{array}{l}\n",
"{\\color{blue}{\\text{Codebook:}}}\\\\\n",
"{\\color{blue}{\\;\\;A_{M_1}[i_1], M_1[i_1]\\text{,}\\,\\text{rate = }\\min\\left(I(A_{M_1}; A_{M_1, M_2}, Y),\\, I(A_{M_1}; Y)+I(A_{M_2}; Z|A_{M_1, M_2})+I(A_{M_1, M_2}; A_{M_1}, Y)-R_2\\right)}}\\\\\n",
"{\\color{blue}{\\;\\;A_{M_2}[i_2], M_2[i_2]\\text{,}\\,\\text{rate = }\\min\\left(I(A_{M_2}; A_{M_1, M_2}, Z),\\, I(A_{M_2}; Z)+I(A_{M_1}; Y|A_{M_1, M_2})+I(A_{M_1, M_2}; A_{M_2}, Z)-R_1\\right)}}\\\\\n",
"{\\color{blue}{\\;\\;A_{M_1, M_2}[i_3]}}\\\\\n",
"{\\color{blue}{\\text{Enc}\\,\\text{finds}\\,i_1, i_2, i_3\\text{:}\\,\\left(M_1, M_2\\text{,}A_{M_1}[i_1], M_1[i_1], A_{M_2}[i_2], M_2[i_2], A_{M_1, M_2}[i_3]\\right)\\in\\mathcal{T}}}\\\\\n",
"{\\color{blue}{\\;\\;\\;\\;\\text{generates}\\,X\\,\\text{from}\\,S, A_{M_1}, A_{M_2}, A_{M_1, M_2}}}\\\\\n",
"{\\color{blue}{\\text{Dec 1}\\,\\text{finds}\\,i_1\\text{:}\\,\\exists\\,i_3\\text{:}\\,\\left(Y\\text{,}A_{M_1, M_2}[i_3]\\text{,}A_{M_1}[i_1], M_1[i_1]\\right)\\in\\mathcal{T}}}\\\\\n",
"{\\color{blue}{\\text{Dec 2}\\,\\text{finds}\\,i_2\\text{:}\\,\\exists\\,i_3\\text{:}\\,\\left(Z\\text{,}A_{M_1, M_2}[i_3]\\text{,}A_{M_2}[i_2], M_2[i_2]\\right)\\in\\mathcal{T}}}\\\\\n",
"\\exists A_{M_1}, A_{M_2}, A_{M_1, M_2}:\\, \\left\\{\\begin{array}{l}\n",
" R_1 \\ge 0,\\\\\n",
" R_2 \\ge 0,\\\\\n",
" \\begin{array}{l}\n",
"R_1 \\le I(A_{M_1, M_2}, A_{M_1}; Y)\\\\\n",
"{\\color{blue}{\\;\\;\\;\\;\\left(\\because\\,\\text{enc }M_1, M_2\\text{ to }A_{M_1}, A_{M_1, M_2}\\text{,}\\,\\text{dec }Y\\text{ to }A_{M_1}, M_1\\,\\text{nonuniq }A_{M_1, M_2}\\right)}}\n",
"\\end{array},\\\\\n",
" \\begin{array}{l}\n",
"R_2 \\le I(A_{M_1, M_2}, A_{M_2}; Z)\\\\\n",
"{\\color{blue}{\\;\\;\\;\\;\\left(\\because\\,\\text{enc }M_1, M_2\\text{ to }A_{M_2}, A_{M_1, M_2}\\text{,}\\,\\text{dec }Z\\text{ to }A_{M_2}, M_2\\,\\text{nonuniq }A_{M_1, M_2}\\right)}}\n",
"\\end{array},\\\\\n",
" \\begin{array}{l}\n",
"R_1+R_2 \\le I(A_{M_1}; Y|A_{M_1, M_2})+I(A_{M_1, M_2}, A_{M_2}; Z)-I(A_{M_1}; A_{M_2}|A_{M_1, M_2})\\\\\n",
"{\\color{blue}{\\;\\;\\;\\;\\left(\\because\\,\\text{enc }M_1, M_2\\text{ to }A_{M_1}, A_{M_2}, A_{M_1, M_2}\\text{,}\\,\\text{dec }Y\\text{ to }A_{M_1}, M_1\\text{,}\\,\\text{dec }Z\\text{ to }A_{M_2}, M_2\\,\\text{nonuniq }A_{M_1, M_2}\\right)}}\n",
"\\end{array},\\\\\n",
" \\begin{array}{l}\n",
"R_1+R_2 \\le I(A_{M_2}; Z|A_{M_1, M_2})+I(A_{M_1, M_2}, A_{M_1}; Y)-I(A_{M_1}; A_{M_2}|A_{M_1, M_2})\\\\\n",
"{\\color{blue}{\\;\\;\\;\\;\\left(\\because\\,\\text{enc }M_1, M_2\\text{ to }A_{M_1}, A_{M_2}, A_{M_1, M_2}\\text{,}\\,\\text{dec }Y\\text{ to }A_{M_1}, M_1\\,\\text{nonuniq }A_{M_1, M_2}\\text{,}\\,\\text{dec }Z\\text{ to }A_{M_2}, M_2\\right)}}\n",
"\\end{array},\\\\\n",
" H(Y|S, X) = 0,\\\\\n",
" (A_{M_1, M_2}, A_{M_1}, A_{M_2}) {\\perp\\!\\!\\perp} S,\\\\\n",
" (A_{M_1, M_2}, A_{M_1}, A_{M_2}, Y) \\leftrightarrow (S, X) \\leftrightarrow Z\\\\\n",
"\\end{array} \\right\\}\n",
"\\end{array}$"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Inner bound via [Lee-Chung 2015]\n",
"r = model.get_inner(is_proof=True)\n",
"r.display(note=True)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\exists U, V, W:\\, \\left\\{\\begin{array}{l}\n",
" R_1 \\ge 0,\\\\\n",
" R_2 \\ge 0,\\\\\n",
" R_1 \\le I(W, U; Y),\\\\\n",
" R_2 \\le I(W, V; Z),\\\\\n",
" R_1+R_2 \\le I(U; Y|W)+I(W, V; Z)-I(U; V|W),\\\\\n",
" R_1+R_2 \\le I(V; Z|W)+I(W, U; Y)-I(U; V|W),\\\\\n",
" H(Y|S, X) = 0,\\\\\n",
" (W, U, V) {\\perp\\!\\!\\perp} S,\\\\\n",
" (W, U, V, Y) \\leftrightarrow (S, X) \\leftrightarrow Z\\\\\n",
"\\end{array} \\right\\}$"
],
"text/plain": [
"( ( R_1 >= 0 )\n",
" &( R_2 >= 0 )\n",
" &( R_1 <= I(W+U&Y) )\n",
" &( R_2 <= I(W+V&Z) )\n",
" &( R_1+R_2 <= I(U&Y|W)+I(W+V&Z)-I(U&V|W) )\n",
" &( R_1+R_2 <= I(V&Z|W)+I(W+U&Y)-I(U&V|W) )\n",
" &( H(Y|S+X) == 0 )\n",
" &( indep(W+U+V, S) )\n",
" &( markov(W+U+V+Y, S+X, Z) ) ).exists(U+V+W)"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rs = r.subs(list(zip(r.aux, [U, V, W])))\n",
"rs"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"( ( R_1 >= 0 )\n",
" &( R_2 >= 0 )\n",
" &( R_1 <= I(W+U&Y) )\n",
" &( R_2 <= I(W+V&Z) )\n",
" &( R_1+R_2 <= I(U&Y|W)+I(W+V&Z)-I(U&V|W) )\n",
" &( R_1+R_2 <= I(V&Z|W)+I(W+U&Y)-I(U&V|W) )\n",
" &( H(Y|S+X) == 0 )\n",
" &( indep(W+U+V, S) )\n",
" &( markov(W+U+V+Y, S+X, Z) ) ).exists(U+V+W)\n"
]
}
],
"source": [
"print(rs)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\exists U, V, W:\\, \\left\\{\\begin{array}{l}\n",
" R_1 \\ge 0,\\\\\n",
" R_2 \\ge 0,\\\\\n",
" R_1 \\le I(U, W; Y),\\\\\n",
" R_2 \\le I(V, W; Z),\\\\\n",
" R_1+R_2 \\le I(U; Y|W)+I(V, W; Z)-I(U; V|W),\\\\\n",
" R_1+R_2 \\le I(V; Z|W)+I(U, W; Y)-I(U; V|W),\\\\\n",
" H(Y|S, X) = 0,\\\\\n",
" S {\\perp\\!\\!\\perp} (U, V, W),\\\\\n",
" (U, V, W, Y) \\leftrightarrow (S, X) \\leftrightarrow Z\\\\\n",
"\\end{array} \\right\\}$"
],
"text/plain": [
"( ( R_1 >= 0 )\n",
" &( R_2 >= 0 )\n",
" &( R_1 <= I(U+W&Y) )\n",
" &( R_2 <= I(V+W&Z) )\n",
" &( R_1+R_2 <= I(U&Y|W)+I(V+W&Z)-I(U&V|W) )\n",
" &( R_1+R_2 <= I(V&Z|W)+I(U+W&Y)-I(U&V|W) )\n",
" &( H(Y|S+X) == 0 )\n",
" &( indep(S, U+V+W) )\n",
" &( markov(U+V+W+Y, S+X, Z) ) ).exists(U+V+W)"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"r2 = rs.simplified(level=9)\n",
"r2"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{ R_1 >= 0,\n",
" R_2 >= 0,\n",
" R_1 <= I(U,W;Y),\n",
" R_2 <= I(V,W;Z),\n",
" R_1+R_2 <= I(U;Y|W)+I(V,W;Z)-I(U;V|W),\n",
" R_1+R_2 <= I(V;Z|W)+I(U,W;Y)-I(U;V|W),\n",
" H(Y|S,X) == 0,\n",
" indep(S, (U,V,W)),\n",
" markov((U,V,W,Y), (S,X), Z) } , exists U,V,W\n"
]
}
],
"source": [
"print(r2.tostring(style=\"std\"))"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\begin{align*}\n",
"\\end{align*}\n",
"$"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Enable case decomposition\n",
"with PsiOpts(cases = True):\n",
" \n",
" # Output converse proof (is_proof = True for shorter proof)\n",
" (model.get_outer(is_proof = True) >> r).proof().display()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"ename": "KeyboardInterrupt",
"evalue": "",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mr_out\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mmodel\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_outer\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfuture\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mFalse\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[0mr_out\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\Documents\\pyprojs\\psitip\\psitip.py\u001b[0m in \u001b[0;36mget_outer\u001b[1;34m(self, aux, oneshot, future, convexify, add_csiszar_sum, leaf_remove, node_fcn, node_fcn_force, skip_simplify, convexify_test, is_proof, include_nondecode_series, include_last_future, full)\u001b[0m\n\u001b[0;32m 29756\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mr\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m-\u001b[0m\u001b[1;36m1\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mhassingleconvexify\u001b[0m \u001b[1;32melse\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 29757\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m> 29758\u001b[1;33m \u001b[0mr\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mr\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0maux_reduced\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0maux\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0maux_pairs\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0maux_pairs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0maux_force\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0maux_force\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mscore_fcn\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mscore_fcn\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 29759\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 29760\u001b[0m \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mskip_simplify\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\Documents\\pyprojs\\psitip\\psitip.py\u001b[0m in \u001b[0;36maux_reduced\u001b[1;34m(self, new_aux, maxsize, skip_simplify, aux_pairs, aux_force, score_fcn)\u001b[0m\n\u001b[0;32m 19140\u001b[0m \u001b[0mnew_pts_outer\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 19141\u001b[0m \u001b[1;31m# t = self.discover(discover_list + list(zip(new_aux, cauxs)), init_pts_outer = pts_outer, pts_outer = new_pts_outer)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m> 19142\u001b[1;33m \u001b[0mt\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdiscover\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdiscover_list\u001b[0m \u001b[1;33m+\u001b[0m \u001b[0mlist\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mzip\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnew_aux\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcauxs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 19143\u001b[0m \u001b[1;31m# r.append(t)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 19144\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mPsiOpts\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mis_timer_ended\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\Documents\\pyprojs\\psitip\\psitip.py\u001b[0m in \u001b[0;36mdiscover\u001b[1;34m(self, entries, method, minsize, maxsize, skip_simplify, reg_init, skipto_ex, toreal_prefix, balanced, init_pts_outer, pts_outer)\u001b[0m\n\u001b[0;32m 21474\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mropt\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mrr\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 21475\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m> 21476\u001b[1;33m \u001b[0mrt\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mLinearProg\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mproj_hull\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcprog\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mm\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtoexpr\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mtoexpr\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0miscone\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mmethod\u001b[0m \u001b[1;33m==\u001b[0m \u001b[1;34m\"hull_cone\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0minit_pts_outer\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0minit_pts_outer\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mpts_outer\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mpts_outer\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 21477\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 21478\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\Documents\\pyprojs\\psitip\\psitip.py\u001b[0m in \u001b[0;36mproj_hull\u001b[1;34m(prog, n, init_pt, toexpr, iscone, isfrac, max_facet, num_simplex, init_pts_outer, pts_outer)\u001b[0m\n\u001b[0;32m 13032\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 13033\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0my\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mineqs_tried\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m> 13034\u001b[1;33m \u001b[1;32mif\u001b[0m \u001b[0msum\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mabs\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0ma\u001b[0m \u001b[1;33m-\u001b[0m \u001b[0mb\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0ma\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mb\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mzip\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m<=\u001b[0m \u001b[0mceps\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 13035\u001b[0m \u001b[1;32mbreak\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 13036\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\Documents\\pyprojs\\psitip\\psitip.py\u001b[0m in \u001b[0;36m\u001b[1;34m(.0)\u001b[0m\n\u001b[0;32m 13032\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 13033\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0my\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mineqs_tried\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m> 13034\u001b[1;33m \u001b[1;32mif\u001b[0m \u001b[0msum\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mabs\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0ma\u001b[0m \u001b[1;33m-\u001b[0m \u001b[0mb\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0ma\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mb\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mzip\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m<=\u001b[0m \u001b[0mceps\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 13035\u001b[0m \u001b[1;32mbreak\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 13036\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mKeyboardInterrupt\u001b[0m: "
]
}
],
"source": [
"r_out = model.get_outer(1, future=False)\n",
"r_out"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### References\n",
"- A. Lapidoth and L. Wang, \"The state-dependent semideterministic broadcast channel,\" IEEE Trans. Inf. Theory, vol. 59, no. 4, pp. 2242-2251, 2012.\n",
"- Y. Steinberg and S. Shamai, \"Achievable rates for the broadcast channel with states known at the transmitter,\" in Proc. IEEE Int. Symp. Inf. Theory, Adelaide, Australia, 2005, pp. 2184-2188."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.3"
}
},
"nbformat": 4,
"nbformat_minor": 4
}