# Question 26730: Each Coordinate Projection Has Open Preimages for Every Factor Open

[Return to catalogue page 134](https://ocme.evemisslab.com/en/questions/page/134/)

[← Question derivation index](https://ocme.evemisslab.com/en/questions/) · [Original question batch](https://ocme.evemisslab.com/en/practice/batch-20261015-advance-20261117-r04-finite-product-topology-foundations/#q-20261015-advance-20261117-r04-finite-product-topology-0030)

This teaching derivation has second-context AI mathematical and bilingual semantic review, limited to the model and assumptions stated in this question. It has no human review or new Lean proof and does not promote the original question or MKO to Canonical truth.

R0052-26730 · q-20261015-advance-20261117-r04-finite-product-topology-0030



## Original question and givens

Use complete first-factor points=[0, 1, 2, 3], topology=[[], [0, 1, 2, 3], [0, 1], [0]], second-factor points=[100, 101], topology=[[], [100, 101]]. Ordered product pairs retain coordinate types; qualify both entire finite topologies before generating every rectangle union. Give (first_projection_preimages, second_projection_preimages, first_projection_continuous, second_projection_continuous, projection_certificate, certificate).


- G001 — Use complete first-factor points=[0, 1, 2, 3], topology=[[], [0, 1, 2, 3], [0, 1], [0]], second-factor points=[100, 101], topology=[[], [100, 101]]. Ordered product pairs retain coordinate types; qualify both entire finite topologies before generating every rectangle union. Give (first_projection_preimages, second_projection_preimages, first_projection_continuous, second_projection_continuous, projection_certificate, certificate).





## Definition and scope

Use the original question domain, assumptions and cited MKO definitions. This item has second-context mathematical and bilingual review, with the model, answer and every arithmetic step independently recomputed from the original parameters; the source question remains a candidate.


- [mko-finite-product-topology](https://ocme.evemisslab.com/en/mko/mko-finite-product-topology/)





## Step-by-step derivation

S001 · impliesBefore

source roles = [product-projection-continuity]

After

derived = [[first_preimage_audit, second_preimage_audit, first_continuous, second_continuous, valid, certificate]]

Conditions: none

List this operation/mode exact source field order without JavaScript.Keep Boolean,string and null roles distinct;do not pad fields or infer the interface from answer shape.

Step identifiers and dependenciesRule: source_ordered_fields_without_JS · Uses: G001





S002 · impliesBefore

source roles = [product ORIGINAL X, [0, 1, 2, 3], [[], [0, 1, 2, 3], [0, 1], [0]], No]

After

derived = [[0, 1, 2, 3], [[], [0, 1, 2, 3], [0, 1], [0]], [[0, 0, 0, 0, Yes, Yes], [0, 1, 15, 0, Yes, Yes], [0, 2, 3, 0, Yes, Yes], [0, 3, 1, 0, Yes, Yes], [1, 0, 15, 0, Yes, Yes], [1, 1, 15, 15, Yes, Yes], [1, 2, 15, 3, Yes, Yes], [1, 3, 15, 1, Yes, Yes], [2, 0, 3, 0, Yes, Yes], [2, 1, 15, 3, Yes, Yes], [2, 2, 3, 3, Yes, Yes], [2, 3, 3, 1, Yes, Yes], [3, 0, 1, 0, Yes, Yes], [3, 1, 15, 1, Yes, Yes], [3, 2, 3, 1, Yes, Yes], [3, 3, 1, 1, Yes, Yes]]]

Conditions: none

Retain JSON types and English source ordering of sets and open families.Check union/intersection for every open pair and empty/full sets;in a finite family binary closure gives arbitrary-union closure,not sampled qualification.

Step identifiers and dependenciesRule: Topology_full_typed_carrier_and_ALL_pair_axioms · Uses: G001, S001





S003 · impliesBefore

source roles = [product ORIGINAL Y, [100, 101], [[], [100, 101]], No]

After

derived = [[100, 101], [[], [100, 101]], [[0, 0, 0, 0, Yes, Yes], [0, 1, 3, 0, Yes, Yes], [1, 0, 3, 0, Yes, Yes], [1, 1, 3, 3, Yes, Yes]]]

Conditions: none

Retain JSON types and English source ordering of sets and open families.Check union/intersection for every open pair and empty/full sets;in a finite family binary closure gives arbitrary-union closure,not sampled qualification.

Step identifiers and dependenciesRule: Topology_full_typed_carrier_and_ALL_pair_axioms · Uses: G001, S002





S004 · impliesBefore

source roles = [[0, 1, 2, 3], [[], [0, 1, 2, 3], [0, 1], [0]], [100, 101], [[], [100, 101]]]

After

derived = [[[0, 100], [0, 101], [1, 100], [1, 101], [2, 100], [2, 101], [3, 100], [3, 101]], [[[0, 100], [0, 101], [1, 100], [1, 101], [2, 100], [2, 101], [3, 100], [3, 101]], [[0, 100], [0, 101], [1, 100], [1, 101]], [[0, 100], [0, 101]], []]]

Conditions: none

List every typed ordered pair and every basic rectangle U times V,deduplicating empty rectangles.The rectangle bound is a source-computation profile,not a theorem limitation.

Step identifiers and dependenciesRule: Product_typed_cartesian_carrier_AND_ALL_basic_rectangles · Uses: G001, S003





S005 · impliesBefore

source roles = [0, [[0, 100], [0, 101], [1, 100], [1, 101], [2, 100], [2, 101], [3, 100], [3, 101]], [[]]]

After

derived = [[[[0, 100], [0, 101], [1, 100], [1, 101], [2, 100], [2, 101], [3, 100], [3, 101]], []]]

Conditions: none

When adding this rectangle retain every old union and its union with the rectangle.Inductively this gives all unions of rectangle subfamilies,not just rectangles as opens.

Step identifiers and dependenciesRule: Product_EACH_rectangle_ALL_unions_induction · Uses: G001, S004





S006 · impliesBefore

source roles = [1, [[0, 100], [0, 101], [1, 100], [1, 101]], [[[0, 100], [0, 101], [1, 100], [1, 101], [2, 100], [2, 101], [3, 100], [3, 101]], []]]

After

derived = [[[[0, 100], [0, 101], [1, 100], [1, 101], [2, 100], [2, 101], [3, 100], [3, 101]], [[0, 100], [0, 101], [1, 100], [1, 101]], []]]

Conditions: none

When adding this rectangle retain every old union and its union with the rectangle.Inductively this gives all unions of rectangle subfamilies,not just rectangles as opens.

Step identifiers and dependenciesRule: Product_EACH_rectangle_ALL_unions_induction · Uses: G001, S005





S007 · impliesBefore

source roles = [2, [[0, 100], [0, 101]], [[[0, 100], [0, 101], [1, 100], [1, 101], [2, 100], [2, 101], [3, 100], [3, 101]], [[0, 100], [0, 101], [1, 100], [1, 101]], []]]

After

derived = [[[[0, 100], [0, 101], [1, 100], [1, 101], [2, 100], [2, 101], [3, 100], [3, 101]], [[0, 100], [0, 101], [1, 100], [1, 101]], [[0, 100], [0, 101]], []]]

Conditions: none

When adding this rectangle retain every old union and its union with the rectangle.Inductively this gives all unions of rectangle subfamilies,not just rectangles as opens.

Step identifiers and dependenciesRule: Product_EACH_rectangle_ALL_unions_induction · Uses: G001, S006





S008 · impliesBefore

source roles = [3, [], [[[0, 100], [0, 101], [1, 100], [1, 101], [2, 100], [2, 101], [3, 100], [3, 101]], [[0, 100], [0, 101], [1, 100], [1, 101]], [[0, 100], [0, 101]], []]]

After

derived = [[[[0, 100], [0, 101], [1, 100], [1, 101], [2, 100], [2, 101], [3, 100], [3, 101]], [[0, 100], [0, 101], [1, 100], [1, 101]], [[0, 100], [0, 101]], []]]

Conditions: none

When adding this rectangle retain every old union and its union with the rectangle.Inductively this gives all unions of rectangle subfamilies,not just rectangles as opens.

Step identifiers and dependenciesRule: Product_EACH_rectangle_ALL_unions_induction · Uses: G001, S007





S009 · impliesBefore

source roles = [product GENERATED all-union topology, [[0, 100], [0, 101], [1, 100], [1, 101], [2, 100], [2, 101], [3, 100], [3, 101]], [[[0, 100], [0, 101], [1, 100], [1, 101], [2, 100], [2, 101], [3, 100], [3, 101]], [[0, 100], [0, 101], [1, 100], [1, 101]], [[0, 100], [0, 101]], []], Yes]

After

derived = [[[0, 100], [0, 101], [1, 100], [1, 101], [2, 100], [2, 101], [3, 100], [3, 101]], [[[0, 100], [0, 101], [1, 100], [1, 101], [2, 100], [2, 101], [3, 100], [3, 101]], [[0, 100], [0, 101], [1, 100], [1, 101]], [[0, 100], [0, 101]], []], [[0, 0, 255, 255, Yes, Yes], [0, 1, 255, 15, Yes, Yes], [0, 2, 255, 3, Yes, Yes], [0, 3, 255, 0, Yes, Yes], [1, 0, 255, 15, Yes, Yes], [1, 1, 15, 15, Yes, Yes], [1, 2, 15, 3, Yes, Yes], [1, 3, 15, 0, Yes, Yes], [2, 0, 255, 3, Yes, Yes], [2, 1, 15, 3, Yes, Yes], [2, 2, 3, 3, Yes, Yes], [2, 3, 3, 0, Yes, Yes], [3, 0, 255, 0, Yes, Yes], [3, 1, 15, 0, Yes, Yes], [3, 2, 3, 0, Yes, Yes], [3, 3, 0, 0, Yes, Yes]]]

Conditions: none

Retain JSON types and English source ordering of sets and open families.Check union/intersection for every open pair and empty/full sets;in a finite family binary closure gives arbitrary-union closure,not sampled qualification.

Step identifiers and dependenciesRule: Topology_full_typed_carrier_and_ALL_pair_axioms · Uses: G001, S008





S010 · impliesBefore

source roles = [product first projection, [[0, 100], [0, 101], [1, 100], [1, 101], [2, 100], [2, 101], [3, 100], [3, 101]], [[[0, 100], [0, 101], [1, 100], [1, 101], [2, 100], [2, 101], [3, 100], [3, 101]], [[0, 100], [0, 101], [1, 100], [1, 101]], [[0, 100], [0, 101]], []], [0, 1, 2, 3], [[], [0, 1, 2, 3], [0, 1], [0]], [[[0, 100], 0], [[0, 101], 0], [[1, 100], 1], [[1, 101], 1], [[2, 100], 2], [[2, 101], 2], [[3, 100], 3], [[3, 101], 3]]]

After

derived = [[[[], [], Yes], [[0, 1, 2, 3], [[0, 100], [0, 101], [1, 100], [1, 101], [2, 100], [2, 101], [3, 100], [3, 101]], Yes], [[0, 1], [[0, 100], [0, 101], [1, 100], [1, 101]], Yes], [[0], [[0, 100], [0, 101]], Yes]], Yes]

Conditions: none

Test full preimages of every target open,not just points,open images or samples.Align images with the ORIGINAL domain before sorting the rows.

Step identifiers and dependenciesRule: Continuity_ALL_target_open_preimages · Uses: G001, S009





S011 · impliesBefore

source roles = [product second projection, [[0, 100], [0, 101], [1, 100], [1, 101], [2, 100], [2, 101], [3, 100], [3, 101]], [[[0, 100], [0, 101], [1, 100], [1, 101], [2, 100], [2, 101], [3, 100], [3, 101]], [[0, 100], [0, 101], [1, 100], [1, 101]], [[0, 100], [0, 101]], []], [100, 101], [[], [100, 101]], [[[0, 100], 100], [[0, 101], 101], [[1, 100], 100], [[1, 101], 101], [[2, 100], 100], [[2, 101], 101], [[3, 100], 100], [[3, 101], 101]]]

After

derived = [[[[], [], Yes], [[100, 101], [[0, 100], [0, 101], [1, 100], [1, 101], [2, 100], [2, 101], [3, 100], [3, 101]], Yes]], Yes]

Conditions: none

Test full preimages of every target open,not just points,open images or samples.Align images with the ORIGINAL domain before sorting the rows.

Step identifiers and dependenciesRule: Continuity_ALL_target_open_preimages · Uses: G001, S010









## Reverse checks


- S011 · premise_and_result_audit — Reverse-check the complete original data,types,field order and premises;finite audits are not formal proofs of infinite theorems.
- S010 · premise_and_result_audit — Reverse-check the complete original data,types,field order and premises;finite audits are not formal proofs of infinite theorems.
- S009 · premise_and_result_audit — Reverse-check the complete original data,types,field order and premises;finite audits are not formal proofs of infinite theorems.
- S008 · premise_and_result_audit — Reverse-check the complete original data,types,field order and premises;finite audits are not formal proofs of infinite theorems.
- S007 · premise_and_result_audit — Reverse-check the complete original data,types,field order and premises;finite audits are not formal proofs of infinite theorems.
- S006 · premise_and_result_audit — Reverse-check the complete original data,types,field order and premises;finite audits are not formal proofs of infinite theorems.
- S005 · premise_and_result_audit — Reverse-check the complete original data,types,field order and premises;finite audits are not formal proofs of infinite theorems.
- S004 · premise_and_result_audit — Reverse-check the complete original data,types,field order and premises;finite audits are not formal proofs of infinite theorems.
- S003 · premise_and_result_audit — Reverse-check the complete original data,types,field order and premises;finite audits are not formal proofs of infinite theorems.
- S002 · premise_and_result_audit — Reverse-check the complete original data,types,field order and premises;finite audits are not formal proofs of infinite theorems.
- S001 · premise_and_result_audit — Reverse-check the complete original data,types,field order and premises;finite audits are not formal proofs of infinite theorems.





## Result

([[[], [], Yes], [[0, 1, 2, 3], [[0, 100], [0, 101], [1, 100], [1, 101], [2, 100], [2, 101], [3, 100], [3, 101]], Yes], [[0, 1], [[0, 100], [0, 101], [1, 100], [1, 101]], Yes], [[0], [[0, 100], [0, 101]], Yes]], [[[], [], Yes], [[100, 101], [[0, 100], [0, 101], [1, 100], [1, 101], [2, 100], [2, 101], [3, 100], [3, 101]], Yes]], Yes, Yes, Yes, all_projection_preimages_are_open)

The full substitutions and premise checks give the original answer; source identity,format and status are unchanged.





## This question review and source binding

Review date: 2026-10-26

Original questions, answers, step expressions, numeric ASTs and historical records are retained. Source candidate labels remain historical and are not overwritten as formal proof.

Source hashes and review receipts
- input commit: 0f7be61e2c22317a4075561dc822c87d881a50db
- original question SHA-256: b466e65bf43be78fe817b238ed80a825ac1c2c586e31283a7a75d41cad0577fc
- candidate record SHA-256: 8ef0e580c70fd2f4c24fa9ab7d42715d459ef830b79fb08ecc1ea3bc5fb239fe
- semantic review receipt SHA-256: 729b25cbf6bf5cb1d07a21a511ae216ec5fdd54a4a7aa2f7c21156b81ff37252
- question-first witness SHA-256: d1ab788770eaad04f986986e65afb0d55791e8a8c0d747e9a2b499f79fe78df2
- Lean: NOT_RUN · human review: NOT_PERFORMED

[Same-source full JSON](https://ocme.evemisslab.com/data/question-derivations/questions/q-20261015-advance-20261117-r04-finite-product-topology-0030.json)




