nonpositive_volumes = filter (<= 0) volumes
+-- | Given in Sorokina and Zeilfelder, p. 78.
+prop_cijk1_identity :: Cube -> Bool
+prop_cijk1_identity cube =
+ and [ c t0' i j k 1 ~= (c t1' (i+1) j k 0) * ((b0 t0') (v3 t1')) +
+ (c t1' i (j+1) k 0) * ((b1 t0') (v3 t1')) +
+ (c t1' i j (k+1) 0) * ((b2 t0') (v3 t1')) +
+ (c t1' i j k 1) * ((b3 t0') (v3 t1')) | i <- [0..2],
+ j <- [0..2],
+ k <- [0..2],
+ i + j + k == 2]
+ where
+ t0 = tetrahedron0 (face0 cube)
+ t1 = tetrahedron1 (face0 cube)
+ t0' = Tetrahedron cube (v3 t0) (v2 t0) (v1 t0) (v0 t0)
+ t1' = Tetrahedron cube (v3 t1) (v2 t1) (v0 t1) (v1 t1)
+
-- | Given in Sorokina and Zeilfelder, p. 79.
prop_c0120_identity1 :: Cube -> Bool
prop_c0120_identity1 cube =
putStr "prop_b3_v2_always_zero... "
quickCheckWith qc_args prop_b3_v2_always_zero
+ putStrLn "\np. 78, (2.4)\n"
+
putStr "prop_c3000_identity... "
quickCheckWith qc_args TT.prop_c3000_identity
putStr "prop_c1110_identity... "
quickCheckWith qc_args TT.prop_c1110_identity
+ putStrLn "\np. 78, (2.5)\n"
+
+ putStr "prop_cijk1_identity... "
+ quickCheckWith qc_args prop_cijk1_identity
putStrLn "\np. 79, (2.6)\n"
putStr "prop_c0120_identity1... "