Bridge between Domino representations #
This module provides equivalence functions between the two Domino representations used in the project:
- WeightedSets.lean (
DominoTilingsZ.Domino): Inductive type withhorizontal/verticalconstructors, using ℤ coordinates, withSet Dominofor tilings - DominoTilings.lean (
DominoTilings.Domino): Structure withcell1/cell2fields, using ℕ coordinates, withFinset Dominofor tilings
Design Rationale #
The two representations were designed for different purposes:
- DominoTilingsZ uses ℤ coordinates for generality in weighted set theory and generating function calculations. The inductive type makes pattern matching on orientation natural.
- DominoTilings uses ℕ coordinates for finite rectangle tilings and faultfree classification. The structure representation is more flexible for adjacency conditions.
For rectangles with positive coordinates (the typical case), the representations are equivalent. This bridge enables theorem transfer between files when needed.
Main Definitions #
DominoBridge.toDominoZ: Convert a DominoTilings.Domino to DominoTilingsZ.DominoDominoBridge.toDominoN: Convert a DominoTilingsZ.Domino with positive coordinates to DominoTilings.DominoDominoBridge.hasPositiveCoords: Predicate for DominoTilingsZ.Domino having positive coordsDominoBridge.cellsZ: The cells covered by a DominoTilings.Domino (cast to ℤ coordinates)
Main Results #
DominoBridge.toDominoZ_hasPositiveCoords: Converting from ℕ preserves positivityDominoBridge.toDominoZ_cells: Converting to ℤ preserves the set of cellsDominoBridge.toDominoN_cells: Converting from ℤ preserves the set of cells
References #
- Source files:
FPS/WeightedSets.lean(DominoTilingsZ),Details/DominoTilings.lean(DominoTilings)
Tags #
domino, tiling, bridge, equivalence
Coordinate conversion helpers #
Conversion from DominoTilings.Domino to DominoTilingsZ.Domino #
Note: We use DominoTilings.Domino.isHorizontal and DominoTilings.Domino.isVertical
from DominoTilings.lean via dot notation (e.g., d.isHorizontal).
Convert a DominoTilings.Domino to DominoTilingsZ.Domino.
The conversion uses the minimum coordinate as the anchor point:
- A horizontal domino becomes DominoTilingsZ.Domino.horizontal (min col) row
- A vertical domino becomes DominoTilingsZ.Domino.vertical col (min row)
Equations
- One or more equations did not get rendered due to their size.
Instances For
Conversion from DominoTilingsZ.Domino to DominoTilings.Domino #
A DominoTilingsZ.Domino has positive coordinates if all its cells have positive coordinates. This is the precondition for converting to DominoTilings.Domino (which uses ℕ coordinates).
Equations
- DominoBridge.hasPositiveCoords (DominoTilingsZ.Domino.horizontal i j) = (i ≥ 1 ∧ j ≥ 1)
- DominoBridge.hasPositiveCoords (DominoTilingsZ.Domino.vertical i j) = (i ≥ 1 ∧ j ≥ 1)
Instances For
Equations
Convert a DominoTilingsZ.Domino with positive coordinates to DominoTilings.Domino.
The conversion preserves the cells covered by the domino:
- A horizontal domino at (i, j) becomes a DominoTilings.Domino with cells (i, j) and (i+1, j)
- A vertical domino at (i, j) becomes a DominoTilings.Domino with cells (i, j) and (i, j+1)
Equations
- DominoBridge.toDominoN (DominoTilingsZ.Domino.horizontal i j) ⋯ = { cell1 := (i.toNat, j.toNat), cell2 := ((i + 1).toNat, j.toNat), distinct := ⋯, adjacent := ⋯ }
- DominoBridge.toDominoN (DominoTilingsZ.Domino.vertical i j) ⋯ = { cell1 := (i.toNat, j.toNat), cell2 := (i.toNat, (j + 1).toNat), distinct := ⋯, adjacent := ⋯ }
Instances For
Round-trip properties #
Converting DominoTilings.Domino to DominoTilingsZ.Domino produces positive coordinates when all cells are positive.
Cell preservation theorems #
Converting DominoTilings.Domino to DominoTilingsZ.Domino preserves the set of cells (cast to ℤ).
This is the key theorem for theorem transfer between the two representations. It shows that the cells covered by a domino are the same regardless of which representation is used.
Converting DominoTilingsZ.Domino to DominoTilings.Domino preserves the set of cells (cast to ℤ).
Canonical form for DominoTilings.Domino #
The DominoTilings.Domino type allows the two cells to be in either order. For a canonical representation, we define a form where cell1 is always the "smaller" cell.
A DominoTilings.Domino is in canonical form if cell1 is the "smaller" cell:
- For horizontal dominos: cell1 has smaller column
- For vertical dominos: cell1 has smaller row
Equations
Instances For
Swap the cells of a DominoTilings.Domino.
Instances For
Convert a DominoTilings.Domino to canonical form.
Equations
- DominoBridge.toCanonical d = if d.isHorizontal then if d.cell1.1 < d.cell2.1 then d else DominoBridge.swap d else if d.cell1.2 < d.cell2.2 then d else DominoBridge.swap d
Instances For
The cells of a domino in canonical form are the same as the original.
Rectangle correspondence #
The two Rectangle definitions use different types:
DominoTilings.Rectangle n m : Finset (ℕ × ℕ)- finite set of natural number pairsDominoTilingsZ.Rectangle n m : Set (ℤ × ℤ)- set of integer pairs
We establish that they correspond under the natural embedding ℕ → ℤ.
The image of DominoTilings.Rectangle under cellToZ equals DominoTilingsZ.Rectangle as sets of ℤ × ℤ.
Documentation: Relationship between representations #
Key differences between the two Domino types: #
| Aspect | DominoTilingsZ.Domino | DominoTilings.Domino |
|---|---|---|
| Coordinates | ℤ × ℤ | ℕ × ℕ |
| Representation | Inductive (horizontal/vertical) | Structure (cell1, cell2) |
| Anchor | Explicit position parameter | Implicit via cells |
| Orientation | Explicit in constructor | Derived from cell positions |
When to use each representation: #
DominoTilingsZ: Use when working with generating functions, weighted sets, or when you need to pattern match on orientation. The ℤ coordinates allow for translations that may temporarily go negative.
DominoTilings: Use when working with finite tilings of rectangles, especially when you need to reason about cell membership in finsets. The structure representation is more flexible for adjacency conditions.
Bridging tilings: #
To bridge between DominoTilingsZ.Tiling S and DominoTilings.DominoTiling n m, use:
toDominoZ/toDominoNfor individual domino conversiontoDominoZ_cells/toDominoN_cellsfor cell preservationrectangle_correspondencefor shape correspondence
Tiling equivalence infrastructure #
We develop the machinery to convert between DominoTilings.DominoTiling n m and
DominoTilingsZ.Tiling (Rectangle n m). This requires:
- Converting the set of dominos (Finset vs Set)
- Preserving the disjointness property
- Preserving the covering property
Converting a DominoTiling to a Tiling #
Convert a Finset of DominoTilings.Domino to a Set of DominoTilingsZ.Domino.
Equations
- DominoBridge.dominoFinsetToSet ds = {x : DominoTilingsZ.Domino | ∃ d ∈ ds, DominoBridge.toDominoZ d = x}
Instances For
Converting a DominoTiling preserves pairwise disjointness.
Converting a DominoTiling preserves the covering property.
Convert a DominoTiling to a Tiling.
Equations
- DominoBridge.toTilingZ T = { dominos := DominoBridge.dominoFinsetToSet T.dominos, pairwise_disjoint := ⋯, cover := ⋯ }
Instances For
Dominos in a Tiling of a rectangle have positive coordinates #
Dominos in a Tiling of a rectangle have positive coordinates.
toDominoN is injective on dominos with positive coordinates.