{ "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", "\r\n", "%3\r\n", "\r\n", "\r\n", "M_1@@4@@M_1\r\n", "M_1\r\n", "\r\n", "\r\n", "enc_M_1+M_2+S_X\r\n", "\r\n", "Enc\r\n", "\r\n", "\r\n", "M_1@@4@@M_1->enc_M_1+M_2+S_X\r\n", "\r\n", "\r\n", "\r\n", "\r\n", "M_2@@4@@M_2\r\n", "M_2\r\n", "\r\n", "\r\n", "M_2@@4@@M_2->enc_M_1+M_2+S_X\r\n", "\r\n", "\r\n", "\r\n", "\r\n", "S\r\n", "S\r\n", "\r\n", "\r\n", "Y\r\n", "Y\r\n", "\r\n", "\r\n", "S->Y\r\n", "\r\n", "\r\n", "\r\n", "\r\n", "Z\r\n", "Z\r\n", "\r\n", "\r\n", "S->Z\r\n", "\r\n", "\r\n", "\r\n", "\r\n", "S->enc_M_1+M_2+S_X\r\n", "\r\n", "\r\n", "\r\n", "\r\n", "X\r\n", "X\r\n", "\r\n", "\r\n", "X->Y\r\n", "\r\n", "\r\n", "\r\n", "\r\n", "X->Z\r\n", "\r\n", "\r\n", "\r\n", "\r\n", "enc_Y_M_1?\r\n", "\r\n", "Dec 1\r\n", "\r\n", "\r\n", "Y->enc_Y_M_1?\r\n", "\r\n", "\r\n", "\r\n", "\r\n", "enc_Z_M_2?\r\n", "\r\n", "Dec 2\r\n", "\r\n", "\r\n", "Z->enc_Z_M_2?\r\n", "\r\n", "\r\n", "\r\n", "\r\n", "M_1?@@4@@M_1?[Y]\r\n", "M_1\r\n", "\r\n", "\r\n", "M_2?@@4@@M_2?[Z]\r\n", "M_2\r\n", "\r\n", "\r\n", "enc_M_1+M_2+S_X->X\r\n", "\r\n", "\r\n", "\r\n", "\r\n", "enc_Y_M_1?->M_1?@@4@@M_1?[Y]\r\n", "\r\n", "\r\n", "\r\n", "\r\n", "enc_Z_M_2?->M_2?@@4@@M_2?[Z]\r\n", "\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 }