| theory MOCJordanRoundtrip | |
| imports Main | |
| begin | |
| (* βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| MOCJordanRoundtrip.thy β Closes gap 2: MOC 108-dim β Jordan 10Γ10 roundtrip | |
| Ahmad Ali Parr Β· SnapKitty Collective Β· 2026 | |
| Zero sorry. Pure arithmetic. simp + metis only. | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ *) | |
| definition MOC_DIM :: nat where "MOC_DIM = 108" | |
| definition JORDAN_N :: nat where "JORDAN_N = 10" | |
| (* 100 β€ 108: the matrix fits in the MOC array *) | |
| lemma jordan_fits_in_moc: "JORDAN_N * JORDAN_N β€ MOC_DIM" | |
| by (simp add: MOC_DIM_def JORDAN_N_def) | |
| (* Every valid matrix index is a valid MOC index *) | |
| lemma index_bound: | |
| assumes "i < JORDAN_N" "j < JORDAN_N" | |
| shows "i * JORDAN_N + j < MOC_DIM" | |
| using assms by (simp add: MOC_DIM_def JORDAN_N_def) | |
| (* The data region: i*10 + j < 100 *) | |
| lemma in_data_region: | |
| assumes "i < JORDAN_N" "j < JORDAN_N" | |
| shows "i * JORDAN_N + j < JORDAN_N * JORDAN_N" | |
| using assms by (simp add: JORDAN_N_def) | |
| (* Row recovery: (i*10 + j) div 10 = i *) | |
| lemma decode_row: | |
| assumes "j < JORDAN_N" | |
| shows "(i * JORDAN_N + j) div JORDAN_N = i" | |
| using assms by (simp add: JORDAN_N_def) | |
| (* Column recovery: (i*10 + j) mod 10 = j *) | |
| lemma decode_col: | |
| assumes "j < JORDAN_N" | |
| shows "(i * JORDAN_N + j) mod JORDAN_N = j" | |
| using assms by (simp add: JORDAN_N_def) | |
| (* Encoding: (i,j) β¦ i*10 + j *) | |
| definition encode_idx :: "nat β nat β nat" where | |
| "encode_idx i j = i * JORDAN_N + j" | |
| (* Encoding is injective on valid indices *) | |
| lemma encode_injective: | |
| assumes "i1 < JORDAN_N" "j1 < JORDAN_N" | |
| "i2 < JORDAN_N" "j2 < JORDAN_N" | |
| "encode_idx i1 j1 = encode_idx i2 j2" | |
| shows "i1 = i2 β§ j1 = j2" | |
| proof | |
| show "i1 = i2" | |
| using assms | |
| by (metis decode_row encode_idx_def) | |
| show "j1 = j2" | |
| using assms | |
| by (metis decode_col encode_idx_def) | |
| qed | |
| (* Encoding + decoding as functions over an arbitrary type 'a *) | |
| definition encode_matrix :: "(nat β nat β 'a) β 'a β nat β 'a" where | |
| "encode_matrix m pad_val k = | |
| (if k < JORDAN_N * JORDAN_N | |
| then m (k div JORDAN_N) (k mod JORDAN_N) | |
| else pad_val)" | |
| definition decode_matrix :: "(nat β 'a) β nat β nat β 'a" where | |
| "decode_matrix f i j = f (encode_idx i j)" | |
| (* βββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| MAIN THEOREM: decode β encode = id ZERO SORRY | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββ *) | |
| theorem moc_jordan_roundtrip: | |
| assumes "i < JORDAN_N" "j < JORDAN_N" | |
| shows "decode_matrix (encode_matrix m pad_val) i j = m i j" | |
| proof - | |
| have h_lt : "encode_idx i j < JORDAN_N * JORDAN_N" | |
| using assms by (simp add: encode_idx_def JORDAN_N_def) | |
| have h_row : "(encode_idx i j) div JORDAN_N = i" | |
| using assms by (simp add: encode_idx_def decode_row) | |
| have h_col : "(encode_idx i j) mod JORDAN_N = j" | |
| using assms by (simp add: encode_idx_def decode_col) | |
| show ?thesis | |
| by (simp add: decode_matrix_def encode_matrix_def h_lt h_row h_col) | |
| qed | |
| (* COROLLARY: encode is injective β no information lost *) | |
| corollary moc_encode_no_collision: | |
| assumes "i1 < JORDAN_N" "j1 < JORDAN_N" | |
| "i2 < JORDAN_N" "j2 < JORDAN_N" | |
| "encode_matrix m pad_val (encode_idx i1 j1) = | |
| encode_matrix m pad_val (encode_idx i2 j2)" | |
| shows "m i1 j1 = m i2 j2" | |
| proof - | |
| have h1: "encode_idx i1 j1 < JORDAN_N * JORDAN_N" | |
| using assms by (simp add: encode_idx_def JORDAN_N_def) | |
| have h2: "encode_idx i2 j2 < JORDAN_N * JORDAN_N" | |
| using assms by (simp add: encode_idx_def JORDAN_N_def) | |
| have h_row1: "(encode_idx i1 j1) div JORDAN_N = i1" | |
| using assms(2) by (simp add: encode_idx_def decode_row) | |
| have h_col1: "(encode_idx i1 j1) mod JORDAN_N = j1" | |
| using assms(2) by (simp add: encode_idx_def decode_col) | |
| have h_row2: "(encode_idx i2 j2) div JORDAN_N = i2" | |
| using assms(4) by (simp add: encode_idx_def decode_row) | |
| have h_col2: "(encode_idx i2 j2) mod JORDAN_N = j2" | |
| using assms(4) by (simp add: encode_idx_def decode_col) | |
| show ?thesis | |
| using assms(5) | |
| by (simp add: encode_matrix_def h1 h2 h_row1 h_col1 h_row2 h_col2) | |
| qed | |
| end | |