it from cw, ccw and flipH

-- its own inverse
∀ (t :: Tile).
  flipV (flipV t) = t

-- can derive it from cw, ccw and flipH
∀ (t :: Tile).
  flipV t = ccw (flipH (cw t))
∀ (t :: Tile).
  flipV (flipH t) = cw (cw t)

Exercise

 Derive the fact that flipV is its own inverse, using any of the other laws we’ve given for our algebra.

Solution
  flipV (flipV t)
= (via flipV)
  flipV (ccw (flipH (cw t)))
= (via flipV)
  ccw (flipH (cw (ccw (flipH (cw t)))))
= (via cw/ccw)
  ccw (flipH (flipH (cw t)))
= (via flipH/flipH)
  ccw (cw t)
= (via ccw/cw)
  t
Exercise

 Derive a proof that flipV . flipH = cw . cw

Solution
  flipV (flipH t)
= (via flipV)
  ccw (flipH (cw (flipH t)))
= (via ccw)
  cw (cw (cw (flipH (cw (flipH t)))))
= (via x-symmetry)
  cw (cw (flipH (ccw (cw (flipH t)))))
= (via ccw/cw)
  cw (cw (flipH (flipH t)))
= (via flipH/flipH)
  cw (cw t)


composing multiple tiles together
- every operation in algebra must take valid inputs to valid outputs
- tiles are always square
- Simply putting one square tile beside another would result in a rectangular image, INVALIDE
- to maintain closure, must subdivide square into two rectangular halves, then fill each half, stretching tiles to cover space
-}
beside :: Tile -> Tile -> Tile
beside  = undefined

above :: Tile -> Til
beside :: Tile -> Tile -> Tile
beside  = undefined
beside  = undefined