LAWS.bend open laws/TODOs
raw source on the hub · import 0xedb848fc7835fe5f9d34e575a7612788/LAWS.bend as LAWS
Definitional laws for ColorSample (concrete seeds / ranges).
Alpha uses opaque F32 ops (next_f32 + lerp), so laws target U32 channels, Maybe shape, and reflexivity. Color.range_valid is not used in the gate (F32.is_le); see ColorSample.range_ok_u32.
4 imports
import Base import 0xc6ecb72f45a1b2f83318765698582f7f/lib.bend as Color import 0xfd7037736e4fa1794a671d0278638da7/lib.bend as Prng import ./lib.bend as CS
Laws
law invalid_is_none provedin PROOF.bendsource · line 24 · raw
{0xedb848fc7835fe5f9d34e575a7612788/lib.ColorSample.rgb(bad_range, 0xfd7037736e4fa1794a671d0278638da7/lib.Prng.seed(1)) == None{} : Maybe<&1, Pair(0xc6ecb72f45a1b2f83318765698582f7f/lib.Rgb, 0xfd7037736e4fa1794a671d0278638da7/lib.Prng)>}Invalid U32 range → None (PRNG unused).
law same_seed_same_first provedin PROOF.bendsource · line 31 · raw
{0xedb848fc7835fe5f9d34e575a7612788/lib.ColorSample.rgb(full_range, 0xfd7037736e4fa1794a671d0278638da7/lib.Prng.seed(42)) == 0xedb848fc7835fe5f9d34e575a7612788/lib.ColorSample.rgb(full_range, 0xfd7037736e4fa1794a671d0278638da7/lib.Prng.seed(42)) : Maybe<&1, Pair(0xc6ecb72f45a1b2f83318765698582f7f/lib.Rgb, 0xfd7037736e4fa1794a671d0278638da7/lib.Prng)>}Determinism: same seed + range → identical first sample.
law seed42_full_r provedin PROOF.bendsource · line 39 · raw
{0xc6ecb72f45a1b2f83318765698582f7f/lib.Color.rgb_r(0xedb848fc7835fe5f9d34e575a7612788/lib.ColorSample.unwrap_rgb(0xedb848fc7835fe5f9d34e575a7612788/lib.ColorSample.rgb(full_range, 0xfd7037736e4fa1794a671d0278638da7/lib.Prng.seed(42)))) == 40 : U32}Concrete full-range channels for seed 42 (xorshift32 / next_bounded refs).
law seed42_full_g provedin PROOF.bendsource · line 48 · raw
{0xc6ecb72f45a1b2f83318765698582f7f/lib.Color.rgb_g(0xedb848fc7835fe5f9d34e575a7612788/lib.ColorSample.unwrap_rgb(0xedb848fc7835fe5f9d34e575a7612788/lib.ColorSample.rgb(full_range, 0xfd7037736e4fa1794a671d0278638da7/lib.Prng.seed(42)))) == 172 : U32}
law seed42_full_b provedin PROOF.bendsource · line 57 · raw
{0xc6ecb72f45a1b2f83318765698582f7f/lib.Color.rgb_b(0xedb848fc7835fe5f9d34e575a7612788/lib.ColorSample.unwrap_rgb(0xedb848fc7835fe5f9d34e575a7612788/lib.ColorSample.rgb(full_range, 0xfd7037736e4fa1794a671d0278638da7/lib.Prng.seed(42)))) == 3 : U32}
law seed42_narrow_r provedin PROOF.bendsource · line 67 · raw
{0xc6ecb72f45a1b2f83318765698582f7f/lib.Color.rgb_r(0xedb848fc7835fe5f9d34e575a7612788/lib.ColorSample.unwrap_rgb(0xedb848fc7835fe5f9d34e575a7612788/lib.ColorSample.rgb(narrow, 0xfd7037736e4fa1794a671d0278638da7/lib.Prng.seed(42)))) == 10 : U32}Narrow range: channels stay inside lo..=hi (concrete expected values).
law seed42_narrow_g provedin PROOF.bendsource · line 76 · raw
{0xc6ecb72f45a1b2f83318765698582f7f/lib.Color.rgb_g(0xedb848fc7835fe5f9d34e575a7612788/lib.ColorSample.unwrap_rgb(0xedb848fc7835fe5f9d34e575a7612788/lib.ColorSample.rgb(narrow, 0xfd7037736e4fa1794a671d0278638da7/lib.Prng.seed(42)))) == 36 : U32}
law seed42_narrow_b provedin PROOF.bendsource · line 85 · raw
{0xc6ecb72f45a1b2f83318765698582f7f/lib.Color.rgb_b(0xedb848fc7835fe5f9d34e575a7612788/lib.ColorSample.unwrap_rgb(0xedb848fc7835fe5f9d34e575a7612788/lib.ColorSample.rgb(narrow, 0xfd7037736e4fa1794a671d0278638da7/lib.Prng.seed(42)))) == 36 : U32}
law point_r provedin PROOF.bendsource · line 95 · raw
{0xc6ecb72f45a1b2f83318765698582f7f/lib.Color.rgb_r(0xedb848fc7835fe5f9d34e575a7612788/lib.ColorSample.unwrap_rgb(0xedb848fc7835fe5f9d34e575a7612788/lib.ColorSample.rgb(point, 0xfd7037736e4fa1794a671d0278638da7/lib.Prng.seed(7)))) == 7 : U32}Degenerate range min==max yields that point (span 1 → next_bounded 0).
law point_g provedin PROOF.bendsource · line 104 · raw
{0xc6ecb72f45a1b2f83318765698582f7f/lib.Color.rgb_g(0xedb848fc7835fe5f9d34e575a7612788/lib.ColorSample.unwrap_rgb(0xedb848fc7835fe5f9d34e575a7612788/lib.ColorSample.rgb(point, 0xfd7037736e4fa1794a671d0278638da7/lib.Prng.seed(7)))) == 8 : U32}
law point_b provedin PROOF.bendsource · line 113 · raw
{0xc6ecb72f45a1b2f83318765698582f7f/lib.Color.rgb_b(0xedb848fc7835fe5f9d34e575a7612788/lib.ColorSample.unwrap_rgb(0xedb848fc7835fe5f9d34e575a7612788/lib.ColorSample.rgb(point, 0xfd7037736e4fa1794a671d0278638da7/lib.Prng.seed(7)))) == 9 : U32}
law range_ok_good provedin PROOF.bendsource · line 122 · raw
{0xedb848fc7835fe5f9d34e575a7612788/lib.ColorSample.range_ok_u32(full_range) == True{} : Bool}
law range_ok_bad provedin PROOF.bendsource · line 125 · raw
{0xedb848fc7835fe5f9d34e575a7612788/lib.ColorSample.range_ok_u32(bad_range) == False{} : Bool}
Definitions
def full_range source · line 11 · raw
0xc6ecb72f45a1b2f83318765698582f7f/lib.ColorRange
def narrow source · line 14 · raw
0xc6ecb72f45a1b2f83318765698582f7f/lib.ColorRange
def bad_range source · line 17 · raw
0xc6ecb72f45a1b2f83318765698582f7f/lib.ColorRange
def point source · line 20 · raw
0xc6ecb72f45a1b2f83318765698582f7f/lib.ColorRange