-- in.cue --
x0: 5
x1: b5 & 30

b0: <x0 & >0
b1: b0 & int
b2: int & <5.5
b3: <10 & <=5
b4: >=20 & >20
b5: >=21 & >20
b6: int & >5 & <=6

simplifyExpr: {
	less1: <(<3)
	less2: <(<=3)
	less3: <=(<3)
	less4: <=(<=3)
	less5: <(!=3)
	less6: <=(!=3)

	gtr1: >(>3)
	gtr2: >(>=3)
	gtr3: >=(>3)
	gtr4: >=(>=3)
	gtr5: >(!=3)
	gtr6: >=(!=3)

	lg1: <(>3)
	lg2: <(>=3)
	lg3: <=(>3)
	lg4: <=(>=3)

	gl1: >(<3)
	gl2: >(<=3)
	gl3: >=(<3)
	gl4: >=(<=3)

	ne1: !=(!=3)
	ne2: !=(<3)
	ne3: !=(<=3)
	ne4: !=(>3)
	ne5: !=(>=3)

	s:      string
	n:      number
	i:      int
	f:      float
	b:      bytes
	basic1: <(i)
	basic2: >(n)
	basic3: >=(s)
	basic4: <=(f)
	basic5: <=(b)

	// Do NOT interpret this the same as `!= type`.
	bne1: !=(s)
	bne2: !=(n)
	bne3: !=(n)
	bne4: !=(i)
	bne5: !=(b)

	e1: <(=~"foo")
	e2: >(null)
}
-- binarystring.cue --
simplifyBinary: strings: {
  err1: p1: <"a" & >"b"
  err1: p2: >"b" & <"a"

  err2: p1: >"b" & <="a"
  err2: p2: <="a" & >"b"

  err3: p1: >="b" & <"b"
  err3: p2: <"b" & >="b"
  err3: p3: >"b" & <="b"
  err3: p4: <="b" & >"b"

  ok1: p1: >"a" & <"b"
  ok1: p2: <"b" & >"a"

  ok2: p1: >"a" & <="b"
  ok2: p2: <="b" & >"a"
  ok2: p3: >="a" & <"b"
  ok2: p4: <"b" & >="a"

  ok3: p1: >="b" & <="c"
  ok3: p2: <="c" & >="b"

  ok4: p1: >="b" & <="b"
}
simplifyBinary: byte: {
  err1: p1: <'a' & >'b'
  err1: p2: >'b' & <'a'

  err2: p1: >'b' & <='a'
  err2: p2: <='a' & >'b'

  err3: p1: >='b' & <'b'
  err3: p2: <'b' & >='b'
  err3: p3: >'b' & <='b'
  err3: p4: <='b' & >'b'

  ok1: p1: >'a' & <'b'
  ok1: p2: <'b' & >'a'

  ok2: p1: >'a' & <='b'
  ok2: p2: <='b' & >'a'
  ok2: p3: >='a' & <'b'
  ok2: p4: <'b' & >='a'

  ok3: p1: >='b' & <='c'
  ok3: p2: <='c' & >='b'

  ok4: p1: >='b' & <='b'
}
-- binary.cue --
simplifyBinary: float: {
  err1: p1: <1 & >2
  err1: p2: >2 & <1

  err2: p1: >2 & <=1
  err2: p2: <=1 & >2

  err3: p1: >=2 & <2
  err3: p2: <2 & >=2
  err3: p3: >2 & <=2
  err3: p4: <=2 & >2

  ok1: p1: >1 & <2
  ok1: p2: <2 & >1

  ok2: p1: >=2 & <=2
  ok2: p2: <=2 & >=2
}

simplifyBinary: integer: {
  [_]: [_]: int
  err1: p1: <1 & >2
  err1: p2: >2 & <1

  err2: p1: >2 & <=1
  err2: p2: <=1 & >2

  err3: p1: >=2 & <2
  err3: p2: <2 & >=2
  err3: p3: >2 & <=2
  err3: p4: <=2 & >2

  err4: p1: >1 & <2
  err4: p2: <2 & >1

  ok1: p1: >=2 & <=3
  ok1: p2: <=3 & >=2

  ok2: p1: >=2 & <=2
  ok2: p2: <=2 & >=2

  ok3: p1: >=2 & <3
  ok3: p2: >2 & <=3
  ok3: p3: <3 & >=2
  ok3: p4: <=3 & >2
}
-- out/eval/stats --
Leaks:  0
Freed:  148
Reused: 143
Allocs: 5
Retain: 1

Unifications: 148
Conjuncts:    337
Disjuncts:    149
-- out/evalalpha --
Errors:
simplifyBinary.float.err1.p1: incompatible number bounds <1 and >2:
    ./binary.cue:2:18
    ./binary.cue:2:13
simplifyBinary.float.err1.p2: incompatible number bounds <1 and >2:
    ./binary.cue:3:18
    ./binary.cue:3:13
simplifyBinary.float.err2.p1: incompatible number bounds <=1 and >2:
    ./binary.cue:5:18
    ./binary.cue:5:13
simplifyBinary.float.err2.p2: incompatible number bounds <=1 and >2:
    ./binary.cue:6:19
    ./binary.cue:6:13
simplifyBinary.float.err3.p1: incompatible number bounds <2 and >=2:
    ./binary.cue:8:19
    ./binary.cue:8:13
simplifyBinary.float.err3.p2: incompatible number bounds <2 and >=2:
    ./binary.cue:9:18
    ./binary.cue:9:13
simplifyBinary.float.err3.p3: incompatible number bounds <=2 and >2:
    ./binary.cue:10:18
    ./binary.cue:10:13
simplifyBinary.float.err3.p4: incompatible number bounds <=2 and >2:
    ./binary.cue:11:19
    ./binary.cue:11:13
simplifyBinary.integer.err1.p1: incompatible integer bounds <1 and >2:
    ./binary.cue:22:18
    ./binary.cue:22:13
simplifyBinary.integer.err1.p2: incompatible integer bounds <1 and >2:
    ./binary.cue:23:18
    ./binary.cue:23:13
simplifyBinary.integer.err2.p1: incompatible integer bounds <=1 and >2:
    ./binary.cue:25:18
    ./binary.cue:25:13
simplifyBinary.integer.err2.p2: incompatible integer bounds <=1 and >2:
    ./binary.cue:26:19
    ./binary.cue:26:13
simplifyBinary.integer.err3.p1: incompatible integer bounds <2 and >=2:
    ./binary.cue:28:19
    ./binary.cue:28:13
simplifyBinary.integer.err3.p2: incompatible integer bounds <2 and >=2:
    ./binary.cue:29:18
    ./binary.cue:29:13
simplifyBinary.integer.err3.p3: incompatible integer bounds <=2 and >2:
    ./binary.cue:30:18
    ./binary.cue:30:13
simplifyBinary.integer.err3.p4: incompatible integer bounds <=2 and >2:
    ./binary.cue:31:19
    ./binary.cue:31:13
simplifyBinary.integer.err4.p1: incompatible integer bounds >1 and <2:
    ./binary.cue:33:18
    ./binary.cue:33:13
simplifyBinary.integer.err4.p2: incompatible integer bounds >1 and <2:
    ./binary.cue:34:18
    ./binary.cue:34:13
simplifyBinary.strings.err1.p1: incompatible string bounds <"a" and >"b":
    ./binarystring.cue:2:20
    ./binarystring.cue:2:13
simplifyBinary.strings.err1.p2: incompatible string bounds <"a" and >"b":
    ./binarystring.cue:3:20
    ./binarystring.cue:3:13
simplifyBinary.strings.err2.p1: incompatible string bounds <="a" and >"b":
    ./binarystring.cue:5:20
    ./binarystring.cue:5:13
simplifyBinary.strings.err2.p2: incompatible string bounds <="a" and >"b":
    ./binarystring.cue:6:21
    ./binarystring.cue:6:13
simplifyBinary.strings.err3.p1: incompatible string bounds <"b" and >="b":
    ./binarystring.cue:8:21
    ./binarystring.cue:8:13
simplifyBinary.strings.err3.p2: incompatible string bounds <"b" and >="b":
    ./binarystring.cue:9:20
    ./binarystring.cue:9:13
simplifyBinary.strings.err3.p3: incompatible string bounds <="b" and >"b":
    ./binarystring.cue:10:20
    ./binarystring.cue:10:13
simplifyBinary.strings.err3.p4: incompatible string bounds <="b" and >"b":
    ./binarystring.cue:11:21
    ./binarystring.cue:11:13
simplifyBinary.byte.err1.p1: incompatible bytes bounds <'a' and >'b':
    ./binarystring.cue:27:20
    ./binarystring.cue:27:13
simplifyBinary.byte.err1.p2: incompatible bytes bounds <'a' and >'b':
    ./binarystring.cue:28:20
    ./binarystring.cue:28:13
simplifyBinary.byte.err2.p1: incompatible bytes bounds <='a' and >'b':
    ./binarystring.cue:30:20
    ./binarystring.cue:30:13
simplifyBinary.byte.err2.p2: incompatible bytes bounds <='a' and >'b':
    ./binarystring.cue:31:21
    ./binarystring.cue:31:13
simplifyBinary.byte.err3.p1: incompatible bytes bounds <'b' and >='b':
    ./binarystring.cue:33:21
    ./binarystring.cue:33:13
simplifyBinary.byte.err3.p2: incompatible bytes bounds <'b' and >='b':
    ./binarystring.cue:34:20
    ./binarystring.cue:34:13
simplifyBinary.byte.err3.p3: incompatible bytes bounds <='b' and >'b':
    ./binarystring.cue:35:20
    ./binarystring.cue:35:13
simplifyBinary.byte.err3.p4: incompatible bytes bounds <='b' and >'b':
    ./binarystring.cue:36:21
    ./binarystring.cue:36:13
simplifyExpr.e2: cannot use null for bound >:
    ./in.cue:62:8

Result:
(_|_){
  // [eval]
  simplifyBinary: (_|_){
    // [eval]
    float: (_|_){
      // [eval]
      err1: (_|_){
        // [eval]
        p1: (_|_){
          // [eval] simplifyBinary.float.err1.p1: incompatible number bounds <1 and >2:
          //     ./binary.cue:2:18
          //     ./binary.cue:2:13
        }
        p2: (_|_){
          // [eval] simplifyBinary.float.err1.p2: incompatible number bounds <1 and >2:
          //     ./binary.cue:3:18
          //     ./binary.cue:3:13
        }
      }
      err2: (_|_){
        // [eval]
        p1: (_|_){
          // [eval] simplifyBinary.float.err2.p1: incompatible number bounds <=1 and >2:
          //     ./binary.cue:5:18
          //     ./binary.cue:5:13
        }
        p2: (_|_){
          // [eval] simplifyBinary.float.err2.p2: incompatible number bounds <=1 and >2:
          //     ./binary.cue:6:19
          //     ./binary.cue:6:13
        }
      }
      err3: (_|_){
        // [eval]
        p1: (_|_){
          // [eval] simplifyBinary.float.err3.p1: incompatible number bounds <2 and >=2:
          //     ./binary.cue:8:19
          //     ./binary.cue:8:13
        }
        p2: (_|_){
          // [eval] simplifyBinary.float.err3.p2: incompatible number bounds <2 and >=2:
          //     ./binary.cue:9:18
          //     ./binary.cue:9:13
        }
        p3: (_|_){
          // [eval] simplifyBinary.float.err3.p3: incompatible number bounds <=2 and >2:
          //     ./binary.cue:10:18
          //     ./binary.cue:10:13
        }
        p4: (_|_){
          // [eval] simplifyBinary.float.err3.p4: incompatible number bounds <=2 and >2:
          //     ./binary.cue:11:19
          //     ./binary.cue:11:13
        }
      }
      ok1: (struct){
        p1: (number){ &(>1, <2) }
        p2: (number){ &(>1, <2) }
      }
      ok2: (struct){
        p1: (number){ 2 }
        p2: (number){ 2 }
      }
    }
    integer: (_|_){
      // [eval]
      err1: (_|_){
        // [eval]
        p1: (_|_){
          // [eval] simplifyBinary.integer.err1.p1: incompatible integer bounds <1 and >2:
          //     ./binary.cue:22:18
          //     ./binary.cue:22:13
        }
        p2: (_|_){
          // [eval] simplifyBinary.integer.err1.p2: incompatible integer bounds <1 and >2:
          //     ./binary.cue:23:18
          //     ./binary.cue:23:13
        }
      }
      err2: (_|_){
        // [eval]
        p1: (_|_){
          // [eval] simplifyBinary.integer.err2.p1: incompatible integer bounds <=1 and >2:
          //     ./binary.cue:25:18
          //     ./binary.cue:25:13
        }
        p2: (_|_){
          // [eval] simplifyBinary.integer.err2.p2: incompatible integer bounds <=1 and >2:
          //     ./binary.cue:26:19
          //     ./binary.cue:26:13
        }
      }
      err3: (_|_){
        // [eval]
        p1: (_|_){
          // [eval] simplifyBinary.integer.err3.p1: incompatible integer bounds <2 and >=2:
          //     ./binary.cue:28:19
          //     ./binary.cue:28:13
        }
        p2: (_|_){
          // [eval] simplifyBinary.integer.err3.p2: incompatible integer bounds <2 and >=2:
          //     ./binary.cue:29:18
          //     ./binary.cue:29:13
        }
        p3: (_|_){
          // [eval] simplifyBinary.integer.err3.p3: incompatible integer bounds <=2 and >2:
          //     ./binary.cue:30:18
          //     ./binary.cue:30:13
        }
        p4: (_|_){
          // [eval] simplifyBinary.integer.err3.p4: incompatible integer bounds <=2 and >2:
          //     ./binary.cue:31:19
          //     ./binary.cue:31:13
        }
      }
      err4: (_|_){
        // [eval]
        p1: (_|_){
          // [eval] simplifyBinary.integer.err4.p1: incompatible integer bounds >1 and <2:
          //     ./binary.cue:33:18
          //     ./binary.cue:33:13
        }
        p2: (_|_){
          // [eval] simplifyBinary.integer.err4.p2: incompatible integer bounds >1 and <2:
          //     ./binary.cue:34:18
          //     ./binary.cue:34:13
        }
      }
      ok1: (struct){
        p1: (int){ &(>=2, <=3, int) }
        p2: (int){ &(>=2, <=3, int) }
      }
      ok2: (struct){
        p1: (int){ 2 }
        p2: (int){ 2 }
      }
      ok3: (struct){
        p1: (int){ 2 }
        p2: (int){ 3 }
        p3: (int){ 2 }
        p4: (int){ 3 }
      }
    }
    strings: (_|_){
      // [eval]
      err1: (_|_){
        // [eval]
        p1: (_|_){
          // [eval] simplifyBinary.strings.err1.p1: incompatible string bounds <"a" and >"b":
          //     ./binarystring.cue:2:20
          //     ./binarystring.cue:2:13
        }
        p2: (_|_){
          // [eval] simplifyBinary.strings.err1.p2: incompatible string bounds <"a" and >"b":
          //     ./binarystring.cue:3:20
          //     ./binarystring.cue:3:13
        }
      }
      err2: (_|_){
        // [eval]
        p1: (_|_){
          // [eval] simplifyBinary.strings.err2.p1: incompatible string bounds <="a" and >"b":
          //     ./binarystring.cue:5:20
          //     ./binarystring.cue:5:13
        }
        p2: (_|_){
          // [eval] simplifyBinary.strings.err2.p2: incompatible string bounds <="a" and >"b":
          //     ./binarystring.cue:6:21
          //     ./binarystring.cue:6:13
        }
      }
      err3: (_|_){
        // [eval]
        p1: (_|_){
          // [eval] simplifyBinary.strings.err3.p1: incompatible string bounds <"b" and >="b":
          //     ./binarystring.cue:8:21
          //     ./binarystring.cue:8:13
        }
        p2: (_|_){
          // [eval] simplifyBinary.strings.err3.p2: incompatible string bounds <"b" and >="b":
          //     ./binarystring.cue:9:20
          //     ./binarystring.cue:9:13
        }
        p3: (_|_){
          // [eval] simplifyBinary.strings.err3.p3: incompatible string bounds <="b" and >"b":
          //     ./binarystring.cue:10:20
          //     ./binarystring.cue:10:13
        }
        p4: (_|_){
          // [eval] simplifyBinary.strings.err3.p4: incompatible string bounds <="b" and >"b":
          //     ./binarystring.cue:11:21
          //     ./binarystring.cue:11:13
        }
      }
      ok1: (struct){
        p1: (string){ &(>"a", <"b") }
        p2: (string){ &(>"a", <"b") }
      }
      ok2: (struct){
        p1: (string){ &(>"a", <="b") }
        p2: (string){ &(>"a", <="b") }
        p3: (string){ &(>="a", <"b") }
        p4: (string){ &(>="a", <"b") }
      }
      ok3: (struct){
        p1: (string){ &(>="b", <="c") }
        p2: (string){ &(>="b", <="c") }
      }
      ok4: (struct){
        p1: (string){ "b" }
      }
    }
    byte: (_|_){
      // [eval]
      err1: (_|_){
        // [eval]
        p1: (_|_){
          // [eval] simplifyBinary.byte.err1.p1: incompatible bytes bounds <'a' and >'b':
          //     ./binarystring.cue:27:20
          //     ./binarystring.cue:27:13
        }
        p2: (_|_){
          // [eval] simplifyBinary.byte.err1.p2: incompatible bytes bounds <'a' and >'b':
          //     ./binarystring.cue:28:20
          //     ./binarystring.cue:28:13
        }
      }
      err2: (_|_){
        // [eval]
        p1: (_|_){
          // [eval] simplifyBinary.byte.err2.p1: incompatible bytes bounds <='a' and >'b':
          //     ./binarystring.cue:30:20
          //     ./binarystring.cue:30:13
        }
        p2: (_|_){
          // [eval] simplifyBinary.byte.err2.p2: incompatible bytes bounds <='a' and >'b':
          //     ./binarystring.cue:31:21
          //     ./binarystring.cue:31:13
        }
      }
      err3: (_|_){
        // [eval]
        p1: (_|_){
          // [eval] simplifyBinary.byte.err3.p1: incompatible bytes bounds <'b' and >='b':
          //     ./binarystring.cue:33:21
          //     ./binarystring.cue:33:13
        }
        p2: (_|_){
          // [eval] simplifyBinary.byte.err3.p2: incompatible bytes bounds <'b' and >='b':
          //     ./binarystring.cue:34:20
          //     ./binarystring.cue:34:13
        }
        p3: (_|_){
          // [eval] simplifyBinary.byte.err3.p3: incompatible bytes bounds <='b' and >'b':
          //     ./binarystring.cue:35:20
          //     ./binarystring.cue:35:13
        }
        p4: (_|_){
          // [eval] simplifyBinary.byte.err3.p4: incompatible bytes bounds <='b' and >'b':
          //     ./binarystring.cue:36:21
          //     ./binarystring.cue:36:13
        }
      }
      ok1: (struct){
        p1: (bytes){ &(>'a', <'b') }
        p2: (bytes){ &(>'a', <'b') }
      }
      ok2: (struct){
        p1: (bytes){ &(>'a', <='b') }
        p2: (bytes){ &(>'a', <='b') }
        p3: (bytes){ &(>='a', <'b') }
        p4: (bytes){ &(>='a', <'b') }
      }
      ok3: (struct){
        p1: (bytes){ &(>='b', <='c') }
        p2: (bytes){ &(>='b', <='c') }
      }
      ok4: (struct){
        p1: (bytes){ 'b' }
      }
    }
  }
  x0: (int){ 5 }
  x1: (int){ 30 }
  b0: (number){ &(>0, <5) }
  b1: (int){ &(>0, <5, int) }
  b2: (int){ &(<5.5, int) }
  b3: (number){ <=5 }
  b4: (number){ >20 }
  b5: (number){ >=21 }
  b6: (int){ 6 }
  simplifyExpr: (_|_){
    // [eval]
    less1: (number){ <3 }
    less2: (number){ <3 }
    less3: (number){ <3 }
    less4: (number){ <=3 }
    less5: (number){ number }
    less6: (number){ number }
    gtr1: (number){ >3 }
    gtr2: (number){ >3 }
    gtr3: (number){ >3 }
    gtr4: (number){ >=3 }
    gtr5: (number){ number }
    gtr6: (number){ number }
    lg1: (number){ number }
    lg2: (number){ number }
    lg3: (number){ number }
    lg4: (number){ number }
    gl1: (number){ number }
    gl2: (number){ number }
    gl3: (number){ number }
    gl4: (number){ number }
    ne1: (int){ 3 }
    ne2: (number){ >=3 }
    ne3: (number){ >3 }
    ne4: (number){ <=3 }
    ne5: (number){ <3 }
    s: (string){ string }
    n: (number){ number }
    i: (int){ int }
    f: (float){ float }
    b: (bytes){ bytes }
    basic1: (_|_){
      // [incomplete] simplifyExpr.basic1: non-concrete value i for bound <:
      //     ./in.cue:48:12
    }
    basic2: (_|_){
      // [incomplete] simplifyExpr.basic2: non-concrete value n for bound >:
      //     ./in.cue:49:12
    }
    basic3: (_|_){
      // [incomplete] simplifyExpr.basic3: non-concrete value s for bound >=:
      //     ./in.cue:50:13
    }
    basic4: (_|_){
      // [incomplete] simplifyExpr.basic4: non-concrete value f for bound <=:
      //     ./in.cue:51:13
    }
    basic5: (_|_){
      // [incomplete] simplifyExpr.basic5: non-concrete value b for bound <=:
      //     ./in.cue:52:13
    }
    bne1: (_|_){
      // [incomplete] simplifyExpr.bne1: non-concrete value s for bound !=:
      //     ./in.cue:55:11
    }
    bne2: (_|_){
      // [incomplete] simplifyExpr.bne2: non-concrete value n for bound !=:
      //     ./in.cue:56:11
    }
    bne3: (_|_){
      // [incomplete] simplifyExpr.bne3: non-concrete value n for bound !=:
      //     ./in.cue:57:11
    }
    bne4: (_|_){
      // [incomplete] simplifyExpr.bne4: non-concrete value i for bound !=:
      //     ./in.cue:58:11
    }
    bne5: (_|_){
      // [incomplete] simplifyExpr.bne5: non-concrete value b for bound !=:
      //     ./in.cue:59:11
    }
    e1: (_|_){
      // [incomplete] simplifyExpr.e1: non-concrete value =~"foo" for bound <:
      //     ./in.cue:61:8
    }
    e2: (_|_){
      // [eval] simplifyExpr.e2: cannot use null for bound >:
      //     ./in.cue:62:8
    }
  }
}
-- diff/-out/evalalpha<==>+out/eval --
diff old new
--- old
+++ new
@@ -1,110 +1,106 @@
 Errors:
-simplifyBinary.byte.err1.p1: incompatible bytes bounds <'a' and >'b':
-    ./binarystring.cue:27:13
-    ./binarystring.cue:27:20
-simplifyBinary.byte.err1.p2: incompatible bytes bounds <'a' and >'b':
-    ./binarystring.cue:28:13
-    ./binarystring.cue:28:20
-simplifyBinary.byte.err2.p1: incompatible bytes bounds <='a' and >'b':
-    ./binarystring.cue:30:13
-    ./binarystring.cue:30:20
-simplifyBinary.byte.err2.p2: incompatible bytes bounds <='a' and >'b':
-    ./binarystring.cue:31:13
-    ./binarystring.cue:31:21
-simplifyBinary.byte.err3.p1: incompatible bytes bounds <'b' and >='b':
-    ./binarystring.cue:33:13
-    ./binarystring.cue:33:21
-simplifyBinary.byte.err3.p2: incompatible bytes bounds <'b' and >='b':
-    ./binarystring.cue:34:13
-    ./binarystring.cue:34:20
-simplifyBinary.byte.err3.p3: incompatible bytes bounds <='b' and >'b':
-    ./binarystring.cue:35:13
-    ./binarystring.cue:35:20
-simplifyBinary.byte.err3.p4: incompatible bytes bounds <='b' and >'b':
-    ./binarystring.cue:36:13
-    ./binarystring.cue:36:21
 simplifyBinary.float.err1.p1: incompatible number bounds <1 and >2:
-    ./binary.cue:2:13
     ./binary.cue:2:18
+    ./binary.cue:2:13
 simplifyBinary.float.err1.p2: incompatible number bounds <1 and >2:
-    ./binary.cue:3:13
     ./binary.cue:3:18
+    ./binary.cue:3:13
 simplifyBinary.float.err2.p1: incompatible number bounds <=1 and >2:
-    ./binary.cue:5:13
     ./binary.cue:5:18
+    ./binary.cue:5:13
 simplifyBinary.float.err2.p2: incompatible number bounds <=1 and >2:
-    ./binary.cue:6:13
     ./binary.cue:6:19
+    ./binary.cue:6:13
 simplifyBinary.float.err3.p1: incompatible number bounds <2 and >=2:
-    ./binary.cue:8:13
     ./binary.cue:8:19
+    ./binary.cue:8:13
 simplifyBinary.float.err3.p2: incompatible number bounds <2 and >=2:
-    ./binary.cue:9:13
     ./binary.cue:9:18
+    ./binary.cue:9:13
 simplifyBinary.float.err3.p3: incompatible number bounds <=2 and >2:
-    ./binary.cue:10:13
     ./binary.cue:10:18
+    ./binary.cue:10:13
 simplifyBinary.float.err3.p4: incompatible number bounds <=2 and >2:
-    ./binary.cue:11:13
     ./binary.cue:11:19
-simplifyBinary.integer.err1.p1: incompatible number bounds <1 and >2:
-    ./binary.cue:22:13
+    ./binary.cue:11:13
+simplifyBinary.integer.err1.p1: incompatible integer bounds <1 and >2:
     ./binary.cue:22:18
-simplifyBinary.integer.err1.p2: incompatible number bounds <1 and >2:
-    ./binary.cue:23:13
+    ./binary.cue:22:13
+simplifyBinary.integer.err1.p2: incompatible integer bounds <1 and >2:
     ./binary.cue:23:18
-simplifyBinary.integer.err2.p1: incompatible number bounds <=1 and >2:
-    ./binary.cue:25:13
+    ./binary.cue:23:13
+simplifyBinary.integer.err2.p1: incompatible integer bounds <=1 and >2:
     ./binary.cue:25:18
-simplifyBinary.integer.err2.p2: incompatible number bounds <=1 and >2:
-    ./binary.cue:26:13
+    ./binary.cue:25:13
+simplifyBinary.integer.err2.p2: incompatible integer bounds <=1 and >2:
     ./binary.cue:26:19
-simplifyBinary.integer.err3.p1: incompatible number bounds <2 and >=2:
-    ./binary.cue:28:13
+    ./binary.cue:26:13
+simplifyBinary.integer.err3.p1: incompatible integer bounds <2 and >=2:
     ./binary.cue:28:19
-simplifyBinary.integer.err3.p2: incompatible number bounds <2 and >=2:
-    ./binary.cue:29:13
+    ./binary.cue:28:13
+simplifyBinary.integer.err3.p2: incompatible integer bounds <2 and >=2:
     ./binary.cue:29:18
-simplifyBinary.integer.err3.p3: incompatible number bounds <=2 and >2:
-    ./binary.cue:30:13
+    ./binary.cue:29:13
+simplifyBinary.integer.err3.p3: incompatible integer bounds <=2 and >2:
     ./binary.cue:30:18
-simplifyBinary.integer.err3.p4: incompatible number bounds <=2 and >2:
-    ./binary.cue:31:13
+    ./binary.cue:30:13
+simplifyBinary.integer.err3.p4: incompatible integer bounds <=2 and >2:
     ./binary.cue:31:19
+    ./binary.cue:31:13
 simplifyBinary.integer.err4.p1: incompatible integer bounds >1 and <2:
-    ./binary.cue:21:8
-    ./binary.cue:21:13
-    ./binary.cue:33:13
     ./binary.cue:33:18
+    ./binary.cue:33:13
 simplifyBinary.integer.err4.p2: incompatible integer bounds >1 and <2:
-    ./binary.cue:21:8
-    ./binary.cue:21:13
-    ./binary.cue:34:13
     ./binary.cue:34:18
+    ./binary.cue:34:13
 simplifyBinary.strings.err1.p1: incompatible string bounds <"a" and >"b":
-    ./binarystring.cue:2:13
     ./binarystring.cue:2:20
+    ./binarystring.cue:2:13
 simplifyBinary.strings.err1.p2: incompatible string bounds <"a" and >"b":
-    ./binarystring.cue:3:13
     ./binarystring.cue:3:20
+    ./binarystring.cue:3:13
 simplifyBinary.strings.err2.p1: incompatible string bounds <="a" and >"b":
-    ./binarystring.cue:5:13
     ./binarystring.cue:5:20
+    ./binarystring.cue:5:13
 simplifyBinary.strings.err2.p2: incompatible string bounds <="a" and >"b":
-    ./binarystring.cue:6:13
     ./binarystring.cue:6:21
+    ./binarystring.cue:6:13
 simplifyBinary.strings.err3.p1: incompatible string bounds <"b" and >="b":
-    ./binarystring.cue:8:13
     ./binarystring.cue:8:21
+    ./binarystring.cue:8:13
 simplifyBinary.strings.err3.p2: incompatible string bounds <"b" and >="b":
-    ./binarystring.cue:9:13
     ./binarystring.cue:9:20
+    ./binarystring.cue:9:13
 simplifyBinary.strings.err3.p3: incompatible string bounds <="b" and >"b":
-    ./binarystring.cue:10:13
     ./binarystring.cue:10:20
+    ./binarystring.cue:10:13
 simplifyBinary.strings.err3.p4: incompatible string bounds <="b" and >"b":
-    ./binarystring.cue:11:13
     ./binarystring.cue:11:21
+    ./binarystring.cue:11:13
+simplifyBinary.byte.err1.p1: incompatible bytes bounds <'a' and >'b':
+    ./binarystring.cue:27:20
+    ./binarystring.cue:27:13
+simplifyBinary.byte.err1.p2: incompatible bytes bounds <'a' and >'b':
+    ./binarystring.cue:28:20
+    ./binarystring.cue:28:13
+simplifyBinary.byte.err2.p1: incompatible bytes bounds <='a' and >'b':
+    ./binarystring.cue:30:20
+    ./binarystring.cue:30:13
+simplifyBinary.byte.err2.p2: incompatible bytes bounds <='a' and >'b':
+    ./binarystring.cue:31:21
+    ./binarystring.cue:31:13
+simplifyBinary.byte.err3.p1: incompatible bytes bounds <'b' and >='b':
+    ./binarystring.cue:33:21
+    ./binarystring.cue:33:13
+simplifyBinary.byte.err3.p2: incompatible bytes bounds <'b' and >='b':
+    ./binarystring.cue:34:20
+    ./binarystring.cue:34:13
+simplifyBinary.byte.err3.p3: incompatible bytes bounds <='b' and >'b':
+    ./binarystring.cue:35:20
+    ./binarystring.cue:35:13
+simplifyBinary.byte.err3.p4: incompatible bytes bounds <='b' and >'b':
+    ./binarystring.cue:36:21
+    ./binarystring.cue:36:13
 simplifyExpr.e2: cannot use null for bound >:
     ./in.cue:62:8
 
@@ -119,13 +115,13 @@
         // [eval]
         p1: (_|_){
           // [eval] simplifyBinary.float.err1.p1: incompatible number bounds <1 and >2:
-          //     ./binary.cue:2:13
           //     ./binary.cue:2:18
+          //     ./binary.cue:2:13
         }
         p2: (_|_){
           // [eval] simplifyBinary.float.err1.p2: incompatible number bounds <1 and >2:
-          //     ./binary.cue:3:13
           //     ./binary.cue:3:18
+          //     ./binary.cue:3:13
         }
       }
       err2: (_|_){
@@ -132,13 +128,13 @@
         // [eval]
         p1: (_|_){
           // [eval] simplifyBinary.float.err2.p1: incompatible number bounds <=1 and >2:
-          //     ./binary.cue:5:13
           //     ./binary.cue:5:18
+          //     ./binary.cue:5:13
         }
         p2: (_|_){
           // [eval] simplifyBinary.float.err2.p2: incompatible number bounds <=1 and >2:
-          //     ./binary.cue:6:13
           //     ./binary.cue:6:19
+          //     ./binary.cue:6:13
         }
       }
       err3: (_|_){
@@ -145,23 +141,23 @@
         // [eval]
         p1: (_|_){
           // [eval] simplifyBinary.float.err3.p1: incompatible number bounds <2 and >=2:
-          //     ./binary.cue:8:13
           //     ./binary.cue:8:19
+          //     ./binary.cue:8:13
         }
         p2: (_|_){
           // [eval] simplifyBinary.float.err3.p2: incompatible number bounds <2 and >=2:
-          //     ./binary.cue:9:13
           //     ./binary.cue:9:18
+          //     ./binary.cue:9:13
         }
         p3: (_|_){
           // [eval] simplifyBinary.float.err3.p3: incompatible number bounds <=2 and >2:
-          //     ./binary.cue:10:13
           //     ./binary.cue:10:18
+          //     ./binary.cue:10:13
         }
         p4: (_|_){
           // [eval] simplifyBinary.float.err3.p4: incompatible number bounds <=2 and >2:
-          //     ./binary.cue:11:13
           //     ./binary.cue:11:19
+          //     ./binary.cue:11:13
         }
       }
       ok1: (struct){
@@ -178,50 +174,50 @@
       err1: (_|_){
         // [eval]
         p1: (_|_){
-          // [eval] simplifyBinary.integer.err1.p1: incompatible number bounds <1 and >2:
-          //     ./binary.cue:22:13
+          // [eval] simplifyBinary.integer.err1.p1: incompatible integer bounds <1 and >2:
           //     ./binary.cue:22:18
-        }
-        p2: (_|_){
-          // [eval] simplifyBinary.integer.err1.p2: incompatible number bounds <1 and >2:
-          //     ./binary.cue:23:13
+          //     ./binary.cue:22:13
+        }
+        p2: (_|_){
+          // [eval] simplifyBinary.integer.err1.p2: incompatible integer bounds <1 and >2:
           //     ./binary.cue:23:18
-        }
-      }
-      err2: (_|_){
-        // [eval]
-        p1: (_|_){
-          // [eval] simplifyBinary.integer.err2.p1: incompatible number bounds <=1 and >2:
-          //     ./binary.cue:25:13
+          //     ./binary.cue:23:13
+        }
+      }
+      err2: (_|_){
+        // [eval]
+        p1: (_|_){
+          // [eval] simplifyBinary.integer.err2.p1: incompatible integer bounds <=1 and >2:
           //     ./binary.cue:25:18
-        }
-        p2: (_|_){
-          // [eval] simplifyBinary.integer.err2.p2: incompatible number bounds <=1 and >2:
-          //     ./binary.cue:26:13
+          //     ./binary.cue:25:13
+        }
+        p2: (_|_){
+          // [eval] simplifyBinary.integer.err2.p2: incompatible integer bounds <=1 and >2:
           //     ./binary.cue:26:19
-        }
-      }
-      err3: (_|_){
-        // [eval]
-        p1: (_|_){
-          // [eval] simplifyBinary.integer.err3.p1: incompatible number bounds <2 and >=2:
-          //     ./binary.cue:28:13
+          //     ./binary.cue:26:13
+        }
+      }
+      err3: (_|_){
+        // [eval]
+        p1: (_|_){
+          // [eval] simplifyBinary.integer.err3.p1: incompatible integer bounds <2 and >=2:
           //     ./binary.cue:28:19
-        }
-        p2: (_|_){
-          // [eval] simplifyBinary.integer.err3.p2: incompatible number bounds <2 and >=2:
-          //     ./binary.cue:29:13
+          //     ./binary.cue:28:13
+        }
+        p2: (_|_){
+          // [eval] simplifyBinary.integer.err3.p2: incompatible integer bounds <2 and >=2:
           //     ./binary.cue:29:18
-        }
-        p3: (_|_){
-          // [eval] simplifyBinary.integer.err3.p3: incompatible number bounds <=2 and >2:
-          //     ./binary.cue:30:13
+          //     ./binary.cue:29:13
+        }
+        p3: (_|_){
+          // [eval] simplifyBinary.integer.err3.p3: incompatible integer bounds <=2 and >2:
           //     ./binary.cue:30:18
-        }
-        p4: (_|_){
-          // [eval] simplifyBinary.integer.err3.p4: incompatible number bounds <=2 and >2:
-          //     ./binary.cue:31:13
+          //     ./binary.cue:30:13
+        }
+        p4: (_|_){
+          // [eval] simplifyBinary.integer.err3.p4: incompatible integer bounds <=2 and >2:
           //     ./binary.cue:31:19
+          //     ./binary.cue:31:13
         }
       }
       err4: (_|_){
@@ -228,17 +224,13 @@
         // [eval]
         p1: (_|_){
           // [eval] simplifyBinary.integer.err4.p1: incompatible integer bounds >1 and <2:
-          //     ./binary.cue:21:8
-          //     ./binary.cue:21:13
-          //     ./binary.cue:33:13
           //     ./binary.cue:33:18
+          //     ./binary.cue:33:13
         }
         p2: (_|_){
           // [eval] simplifyBinary.integer.err4.p2: incompatible integer bounds >1 and <2:
-          //     ./binary.cue:21:8
-          //     ./binary.cue:21:13
-          //     ./binary.cue:34:13
           //     ./binary.cue:34:18
+          //     ./binary.cue:34:13
         }
       }
       ok1: (struct){
@@ -246,8 +238,8 @@
         p2: (int){ &(>=2, <=3, int) }
       }
       ok2: (struct){
-        p1: (number){ 2 }
-        p2: (number){ 2 }
+        p1: (int){ 2 }
+        p2: (int){ 2 }
       }
       ok3: (struct){
         p1: (int){ 2 }
@@ -262,13 +254,13 @@
         // [eval]
         p1: (_|_){
           // [eval] simplifyBinary.strings.err1.p1: incompatible string bounds <"a" and >"b":
-          //     ./binarystring.cue:2:13
           //     ./binarystring.cue:2:20
+          //     ./binarystring.cue:2:13
         }
         p2: (_|_){
           // [eval] simplifyBinary.strings.err1.p2: incompatible string bounds <"a" and >"b":
-          //     ./binarystring.cue:3:13
           //     ./binarystring.cue:3:20
+          //     ./binarystring.cue:3:13
         }
       }
       err2: (_|_){
@@ -275,13 +267,13 @@
         // [eval]
         p1: (_|_){
           // [eval] simplifyBinary.strings.err2.p1: incompatible string bounds <="a" and >"b":
-          //     ./binarystring.cue:5:13
           //     ./binarystring.cue:5:20
+          //     ./binarystring.cue:5:13
         }
         p2: (_|_){
           // [eval] simplifyBinary.strings.err2.p2: incompatible string bounds <="a" and >"b":
-          //     ./binarystring.cue:6:13
           //     ./binarystring.cue:6:21
+          //     ./binarystring.cue:6:13
         }
       }
       err3: (_|_){
@@ -288,23 +280,23 @@
         // [eval]
         p1: (_|_){
           // [eval] simplifyBinary.strings.err3.p1: incompatible string bounds <"b" and >="b":
-          //     ./binarystring.cue:8:13
           //     ./binarystring.cue:8:21
+          //     ./binarystring.cue:8:13
         }
         p2: (_|_){
           // [eval] simplifyBinary.strings.err3.p2: incompatible string bounds <"b" and >="b":
-          //     ./binarystring.cue:9:13
           //     ./binarystring.cue:9:20
+          //     ./binarystring.cue:9:13
         }
         p3: (_|_){
           // [eval] simplifyBinary.strings.err3.p3: incompatible string bounds <="b" and >"b":
-          //     ./binarystring.cue:10:13
           //     ./binarystring.cue:10:20
+          //     ./binarystring.cue:10:13
         }
         p4: (_|_){
           // [eval] simplifyBinary.strings.err3.p4: incompatible string bounds <="b" and >"b":
-          //     ./binarystring.cue:11:13
           //     ./binarystring.cue:11:21
+          //     ./binarystring.cue:11:13
         }
       }
       ok1: (struct){
@@ -331,13 +323,13 @@
         // [eval]
         p1: (_|_){
           // [eval] simplifyBinary.byte.err1.p1: incompatible bytes bounds <'a' and >'b':
-          //     ./binarystring.cue:27:13
           //     ./binarystring.cue:27:20
+          //     ./binarystring.cue:27:13
         }
         p2: (_|_){
           // [eval] simplifyBinary.byte.err1.p2: incompatible bytes bounds <'a' and >'b':
-          //     ./binarystring.cue:28:13
           //     ./binarystring.cue:28:20
+          //     ./binarystring.cue:28:13
         }
       }
       err2: (_|_){
@@ -344,13 +336,13 @@
         // [eval]
         p1: (_|_){
           // [eval] simplifyBinary.byte.err2.p1: incompatible bytes bounds <='a' and >'b':
-          //     ./binarystring.cue:30:13
           //     ./binarystring.cue:30:20
+          //     ./binarystring.cue:30:13
         }
         p2: (_|_){
           // [eval] simplifyBinary.byte.err2.p2: incompatible bytes bounds <='a' and >'b':
-          //     ./binarystring.cue:31:13
           //     ./binarystring.cue:31:21
+          //     ./binarystring.cue:31:13
         }
       }
       err3: (_|_){
@@ -357,23 +349,23 @@
         // [eval]
         p1: (_|_){
           // [eval] simplifyBinary.byte.err3.p1: incompatible bytes bounds <'b' and >='b':
-          //     ./binarystring.cue:33:13
           //     ./binarystring.cue:33:21
+          //     ./binarystring.cue:33:13
         }
         p2: (_|_){
           // [eval] simplifyBinary.byte.err3.p2: incompatible bytes bounds <'b' and >='b':
-          //     ./binarystring.cue:34:13
           //     ./binarystring.cue:34:20
+          //     ./binarystring.cue:34:13
         }
         p3: (_|_){
           // [eval] simplifyBinary.byte.err3.p3: incompatible bytes bounds <='b' and >'b':
-          //     ./binarystring.cue:35:13
           //     ./binarystring.cue:35:20
+          //     ./binarystring.cue:35:13
         }
         p4: (_|_){
           // [eval] simplifyBinary.byte.err3.p4: incompatible bytes bounds <='b' and >'b':
-          //     ./binarystring.cue:36:13
           //     ./binarystring.cue:36:21
+          //     ./binarystring.cue:36:13
         }
       }
       ok1: (struct){
-- diff/explanation --
simplifyBinary.integer.ok2.*: v3 indicates correct type.
-- out/eval --
Errors:
simplifyBinary.byte.err1.p1: incompatible bytes bounds <'a' and >'b':
    ./binarystring.cue:27:13
    ./binarystring.cue:27:20
simplifyBinary.byte.err1.p2: incompatible bytes bounds <'a' and >'b':
    ./binarystring.cue:28:13
    ./binarystring.cue:28:20
simplifyBinary.byte.err2.p1: incompatible bytes bounds <='a' and >'b':
    ./binarystring.cue:30:13
    ./binarystring.cue:30:20
simplifyBinary.byte.err2.p2: incompatible bytes bounds <='a' and >'b':
    ./binarystring.cue:31:13
    ./binarystring.cue:31:21
simplifyBinary.byte.err3.p1: incompatible bytes bounds <'b' and >='b':
    ./binarystring.cue:33:13
    ./binarystring.cue:33:21
simplifyBinary.byte.err3.p2: incompatible bytes bounds <'b' and >='b':
    ./binarystring.cue:34:13
    ./binarystring.cue:34:20
simplifyBinary.byte.err3.p3: incompatible bytes bounds <='b' and >'b':
    ./binarystring.cue:35:13
    ./binarystring.cue:35:20
simplifyBinary.byte.err3.p4: incompatible bytes bounds <='b' and >'b':
    ./binarystring.cue:36:13
    ./binarystring.cue:36:21
simplifyBinary.float.err1.p1: incompatible number bounds <1 and >2:
    ./binary.cue:2:13
    ./binary.cue:2:18
simplifyBinary.float.err1.p2: incompatible number bounds <1 and >2:
    ./binary.cue:3:13
    ./binary.cue:3:18
simplifyBinary.float.err2.p1: incompatible number bounds <=1 and >2:
    ./binary.cue:5:13
    ./binary.cue:5:18
simplifyBinary.float.err2.p2: incompatible number bounds <=1 and >2:
    ./binary.cue:6:13
    ./binary.cue:6:19
simplifyBinary.float.err3.p1: incompatible number bounds <2 and >=2:
    ./binary.cue:8:13
    ./binary.cue:8:19
simplifyBinary.float.err3.p2: incompatible number bounds <2 and >=2:
    ./binary.cue:9:13
    ./binary.cue:9:18
simplifyBinary.float.err3.p3: incompatible number bounds <=2 and >2:
    ./binary.cue:10:13
    ./binary.cue:10:18
simplifyBinary.float.err3.p4: incompatible number bounds <=2 and >2:
    ./binary.cue:11:13
    ./binary.cue:11:19
simplifyBinary.integer.err1.p1: incompatible number bounds <1 and >2:
    ./binary.cue:22:13
    ./binary.cue:22:18
simplifyBinary.integer.err1.p2: incompatible number bounds <1 and >2:
    ./binary.cue:23:13
    ./binary.cue:23:18
simplifyBinary.integer.err2.p1: incompatible number bounds <=1 and >2:
    ./binary.cue:25:13
    ./binary.cue:25:18
simplifyBinary.integer.err2.p2: incompatible number bounds <=1 and >2:
    ./binary.cue:26:13
    ./binary.cue:26:19
simplifyBinary.integer.err3.p1: incompatible number bounds <2 and >=2:
    ./binary.cue:28:13
    ./binary.cue:28:19
simplifyBinary.integer.err3.p2: incompatible number bounds <2 and >=2:
    ./binary.cue:29:13
    ./binary.cue:29:18
simplifyBinary.integer.err3.p3: incompatible number bounds <=2 and >2:
    ./binary.cue:30:13
    ./binary.cue:30:18
simplifyBinary.integer.err3.p4: incompatible number bounds <=2 and >2:
    ./binary.cue:31:13
    ./binary.cue:31:19
simplifyBinary.integer.err4.p1: incompatible integer bounds >1 and <2:
    ./binary.cue:21:8
    ./binary.cue:21:13
    ./binary.cue:33:13
    ./binary.cue:33:18
simplifyBinary.integer.err4.p2: incompatible integer bounds >1 and <2:
    ./binary.cue:21:8
    ./binary.cue:21:13
    ./binary.cue:34:13
    ./binary.cue:34:18
simplifyBinary.strings.err1.p1: incompatible string bounds <"a" and >"b":
    ./binarystring.cue:2:13
    ./binarystring.cue:2:20
simplifyBinary.strings.err1.p2: incompatible string bounds <"a" and >"b":
    ./binarystring.cue:3:13
    ./binarystring.cue:3:20
simplifyBinary.strings.err2.p1: incompatible string bounds <="a" and >"b":
    ./binarystring.cue:5:13
    ./binarystring.cue:5:20
simplifyBinary.strings.err2.p2: incompatible string bounds <="a" and >"b":
    ./binarystring.cue:6:13
    ./binarystring.cue:6:21
simplifyBinary.strings.err3.p1: incompatible string bounds <"b" and >="b":
    ./binarystring.cue:8:13
    ./binarystring.cue:8:21
simplifyBinary.strings.err3.p2: incompatible string bounds <"b" and >="b":
    ./binarystring.cue:9:13
    ./binarystring.cue:9:20
simplifyBinary.strings.err3.p3: incompatible string bounds <="b" and >"b":
    ./binarystring.cue:10:13
    ./binarystring.cue:10:20
simplifyBinary.strings.err3.p4: incompatible string bounds <="b" and >"b":
    ./binarystring.cue:11:13
    ./binarystring.cue:11:21
simplifyExpr.e2: cannot use null for bound >:
    ./in.cue:62:8

Result:
(_|_){
  // [eval]
  simplifyBinary: (_|_){
    // [eval]
    float: (_|_){
      // [eval]
      err1: (_|_){
        // [eval]
        p1: (_|_){
          // [eval] simplifyBinary.float.err1.p1: incompatible number bounds <1 and >2:
          //     ./binary.cue:2:13
          //     ./binary.cue:2:18
        }
        p2: (_|_){
          // [eval] simplifyBinary.float.err1.p2: incompatible number bounds <1 and >2:
          //     ./binary.cue:3:13
          //     ./binary.cue:3:18
        }
      }
      err2: (_|_){
        // [eval]
        p1: (_|_){
          // [eval] simplifyBinary.float.err2.p1: incompatible number bounds <=1 and >2:
          //     ./binary.cue:5:13
          //     ./binary.cue:5:18
        }
        p2: (_|_){
          // [eval] simplifyBinary.float.err2.p2: incompatible number bounds <=1 and >2:
          //     ./binary.cue:6:13
          //     ./binary.cue:6:19
        }
      }
      err3: (_|_){
        // [eval]
        p1: (_|_){
          // [eval] simplifyBinary.float.err3.p1: incompatible number bounds <2 and >=2:
          //     ./binary.cue:8:13
          //     ./binary.cue:8:19
        }
        p2: (_|_){
          // [eval] simplifyBinary.float.err3.p2: incompatible number bounds <2 and >=2:
          //     ./binary.cue:9:13
          //     ./binary.cue:9:18
        }
        p3: (_|_){
          // [eval] simplifyBinary.float.err3.p3: incompatible number bounds <=2 and >2:
          //     ./binary.cue:10:13
          //     ./binary.cue:10:18
        }
        p4: (_|_){
          // [eval] simplifyBinary.float.err3.p4: incompatible number bounds <=2 and >2:
          //     ./binary.cue:11:13
          //     ./binary.cue:11:19
        }
      }
      ok1: (struct){
        p1: (number){ &(>1, <2) }
        p2: (number){ &(>1, <2) }
      }
      ok2: (struct){
        p1: (number){ 2 }
        p2: (number){ 2 }
      }
    }
    integer: (_|_){
      // [eval]
      err1: (_|_){
        // [eval]
        p1: (_|_){
          // [eval] simplifyBinary.integer.err1.p1: incompatible number bounds <1 and >2:
          //     ./binary.cue:22:13
          //     ./binary.cue:22:18
        }
        p2: (_|_){
          // [eval] simplifyBinary.integer.err1.p2: incompatible number bounds <1 and >2:
          //     ./binary.cue:23:13
          //     ./binary.cue:23:18
        }
      }
      err2: (_|_){
        // [eval]
        p1: (_|_){
          // [eval] simplifyBinary.integer.err2.p1: incompatible number bounds <=1 and >2:
          //     ./binary.cue:25:13
          //     ./binary.cue:25:18
        }
        p2: (_|_){
          // [eval] simplifyBinary.integer.err2.p2: incompatible number bounds <=1 and >2:
          //     ./binary.cue:26:13
          //     ./binary.cue:26:19
        }
      }
      err3: (_|_){
        // [eval]
        p1: (_|_){
          // [eval] simplifyBinary.integer.err3.p1: incompatible number bounds <2 and >=2:
          //     ./binary.cue:28:13
          //     ./binary.cue:28:19
        }
        p2: (_|_){
          // [eval] simplifyBinary.integer.err3.p2: incompatible number bounds <2 and >=2:
          //     ./binary.cue:29:13
          //     ./binary.cue:29:18
        }
        p3: (_|_){
          // [eval] simplifyBinary.integer.err3.p3: incompatible number bounds <=2 and >2:
          //     ./binary.cue:30:13
          //     ./binary.cue:30:18
        }
        p4: (_|_){
          // [eval] simplifyBinary.integer.err3.p4: incompatible number bounds <=2 and >2:
          //     ./binary.cue:31:13
          //     ./binary.cue:31:19
        }
      }
      err4: (_|_){
        // [eval]
        p1: (_|_){
          // [eval] simplifyBinary.integer.err4.p1: incompatible integer bounds >1 and <2:
          //     ./binary.cue:21:8
          //     ./binary.cue:21:13
          //     ./binary.cue:33:13
          //     ./binary.cue:33:18
        }
        p2: (_|_){
          // [eval] simplifyBinary.integer.err4.p2: incompatible integer bounds >1 and <2:
          //     ./binary.cue:21:8
          //     ./binary.cue:21:13
          //     ./binary.cue:34:13
          //     ./binary.cue:34:18
        }
      }
      ok1: (struct){
        p1: (int){ &(>=2, <=3, int) }
        p2: (int){ &(>=2, <=3, int) }
      }
      ok2: (struct){
        p1: (number){ 2 }
        p2: (number){ 2 }
      }
      ok3: (struct){
        p1: (int){ 2 }
        p2: (int){ 3 }
        p3: (int){ 2 }
        p4: (int){ 3 }
      }
    }
    strings: (_|_){
      // [eval]
      err1: (_|_){
        // [eval]
        p1: (_|_){
          // [eval] simplifyBinary.strings.err1.p1: incompatible string bounds <"a" and >"b":
          //     ./binarystring.cue:2:13
          //     ./binarystring.cue:2:20
        }
        p2: (_|_){
          // [eval] simplifyBinary.strings.err1.p2: incompatible string bounds <"a" and >"b":
          //     ./binarystring.cue:3:13
          //     ./binarystring.cue:3:20
        }
      }
      err2: (_|_){
        // [eval]
        p1: (_|_){
          // [eval] simplifyBinary.strings.err2.p1: incompatible string bounds <="a" and >"b":
          //     ./binarystring.cue:5:13
          //     ./binarystring.cue:5:20
        }
        p2: (_|_){
          // [eval] simplifyBinary.strings.err2.p2: incompatible string bounds <="a" and >"b":
          //     ./binarystring.cue:6:13
          //     ./binarystring.cue:6:21
        }
      }
      err3: (_|_){
        // [eval]
        p1: (_|_){
          // [eval] simplifyBinary.strings.err3.p1: incompatible string bounds <"b" and >="b":
          //     ./binarystring.cue:8:13
          //     ./binarystring.cue:8:21
        }
        p2: (_|_){
          // [eval] simplifyBinary.strings.err3.p2: incompatible string bounds <"b" and >="b":
          //     ./binarystring.cue:9:13
          //     ./binarystring.cue:9:20
        }
        p3: (_|_){
          // [eval] simplifyBinary.strings.err3.p3: incompatible string bounds <="b" and >"b":
          //     ./binarystring.cue:10:13
          //     ./binarystring.cue:10:20
        }
        p4: (_|_){
          // [eval] simplifyBinary.strings.err3.p4: incompatible string bounds <="b" and >"b":
          //     ./binarystring.cue:11:13
          //     ./binarystring.cue:11:21
        }
      }
      ok1: (struct){
        p1: (string){ &(>"a", <"b") }
        p2: (string){ &(>"a", <"b") }
      }
      ok2: (struct){
        p1: (string){ &(>"a", <="b") }
        p2: (string){ &(>"a", <="b") }
        p3: (string){ &(>="a", <"b") }
        p4: (string){ &(>="a", <"b") }
      }
      ok3: (struct){
        p1: (string){ &(>="b", <="c") }
        p2: (string){ &(>="b", <="c") }
      }
      ok4: (struct){
        p1: (string){ "b" }
      }
    }
    byte: (_|_){
      // [eval]
      err1: (_|_){
        // [eval]
        p1: (_|_){
          // [eval] simplifyBinary.byte.err1.p1: incompatible bytes bounds <'a' and >'b':
          //     ./binarystring.cue:27:13
          //     ./binarystring.cue:27:20
        }
        p2: (_|_){
          // [eval] simplifyBinary.byte.err1.p2: incompatible bytes bounds <'a' and >'b':
          //     ./binarystring.cue:28:13
          //     ./binarystring.cue:28:20
        }
      }
      err2: (_|_){
        // [eval]
        p1: (_|_){
          // [eval] simplifyBinary.byte.err2.p1: incompatible bytes bounds <='a' and >'b':
          //     ./binarystring.cue:30:13
          //     ./binarystring.cue:30:20
        }
        p2: (_|_){
          // [eval] simplifyBinary.byte.err2.p2: incompatible bytes bounds <='a' and >'b':
          //     ./binarystring.cue:31:13
          //     ./binarystring.cue:31:21
        }
      }
      err3: (_|_){
        // [eval]
        p1: (_|_){
          // [eval] simplifyBinary.byte.err3.p1: incompatible bytes bounds <'b' and >='b':
          //     ./binarystring.cue:33:13
          //     ./binarystring.cue:33:21
        }
        p2: (_|_){
          // [eval] simplifyBinary.byte.err3.p2: incompatible bytes bounds <'b' and >='b':
          //     ./binarystring.cue:34:13
          //     ./binarystring.cue:34:20
        }
        p3: (_|_){
          // [eval] simplifyBinary.byte.err3.p3: incompatible bytes bounds <='b' and >'b':
          //     ./binarystring.cue:35:13
          //     ./binarystring.cue:35:20
        }
        p4: (_|_){
          // [eval] simplifyBinary.byte.err3.p4: incompatible bytes bounds <='b' and >'b':
          //     ./binarystring.cue:36:13
          //     ./binarystring.cue:36:21
        }
      }
      ok1: (struct){
        p1: (bytes){ &(>'a', <'b') }
        p2: (bytes){ &(>'a', <'b') }
      }
      ok2: (struct){
        p1: (bytes){ &(>'a', <='b') }
        p2: (bytes){ &(>'a', <='b') }
        p3: (bytes){ &(>='a', <'b') }
        p4: (bytes){ &(>='a', <'b') }
      }
      ok3: (struct){
        p1: (bytes){ &(>='b', <='c') }
        p2: (bytes){ &(>='b', <='c') }
      }
      ok4: (struct){
        p1: (bytes){ 'b' }
      }
    }
  }
  x0: (int){ 5 }
  x1: (int){ 30 }
  b0: (number){ &(>0, <5) }
  b1: (int){ &(>0, <5, int) }
  b2: (int){ &(<5.5, int) }
  b3: (number){ <=5 }
  b4: (number){ >20 }
  b5: (number){ >=21 }
  b6: (int){ 6 }
  simplifyExpr: (_|_){
    // [eval]
    less1: (number){ <3 }
    less2: (number){ <3 }
    less3: (number){ <3 }
    less4: (number){ <=3 }
    less5: (number){ number }
    less6: (number){ number }
    gtr1: (number){ >3 }
    gtr2: (number){ >3 }
    gtr3: (number){ >3 }
    gtr4: (number){ >=3 }
    gtr5: (number){ number }
    gtr6: (number){ number }
    lg1: (number){ number }
    lg2: (number){ number }
    lg3: (number){ number }
    lg4: (number){ number }
    gl1: (number){ number }
    gl2: (number){ number }
    gl3: (number){ number }
    gl4: (number){ number }
    ne1: (int){ 3 }
    ne2: (number){ >=3 }
    ne3: (number){ >3 }
    ne4: (number){ <=3 }
    ne5: (number){ <3 }
    s: (string){ string }
    n: (number){ number }
    i: (int){ int }
    f: (float){ float }
    b: (bytes){ bytes }
    basic1: (_|_){
      // [incomplete] simplifyExpr.basic1: non-concrete value i for bound <:
      //     ./in.cue:48:12
    }
    basic2: (_|_){
      // [incomplete] simplifyExpr.basic2: non-concrete value n for bound >:
      //     ./in.cue:49:12
    }
    basic3: (_|_){
      // [incomplete] simplifyExpr.basic3: non-concrete value s for bound >=:
      //     ./in.cue:50:13
    }
    basic4: (_|_){
      // [incomplete] simplifyExpr.basic4: non-concrete value f for bound <=:
      //     ./in.cue:51:13
    }
    basic5: (_|_){
      // [incomplete] simplifyExpr.basic5: non-concrete value b for bound <=:
      //     ./in.cue:52:13
    }
    bne1: (_|_){
      // [incomplete] simplifyExpr.bne1: non-concrete value s for bound !=:
      //     ./in.cue:55:11
    }
    bne2: (_|_){
      // [incomplete] simplifyExpr.bne2: non-concrete value n for bound !=:
      //     ./in.cue:56:11
    }
    bne3: (_|_){
      // [incomplete] simplifyExpr.bne3: non-concrete value n for bound !=:
      //     ./in.cue:57:11
    }
    bne4: (_|_){
      // [incomplete] simplifyExpr.bne4: non-concrete value i for bound !=:
      //     ./in.cue:58:11
    }
    bne5: (_|_){
      // [incomplete] simplifyExpr.bne5: non-concrete value b for bound !=:
      //     ./in.cue:59:11
    }
    e1: (_|_){
      // [incomplete] simplifyExpr.e1: non-concrete value =~"foo" for bound <:
      //     ./in.cue:61:8
    }
    e2: (_|_){
      // [eval] simplifyExpr.e2: cannot use null for bound >:
      //     ./in.cue:62:8
    }
  }
}
-- out/compile --
--- binary.cue
{
  simplifyBinary: {
    float: {
      err1: {
        p1: (<1 & >2)
      }
      err1: {
        p2: (>2 & <1)
      }
      err2: {
        p1: (>2 & <=1)
      }
      err2: {
        p2: (<=1 & >2)
      }
      err3: {
        p1: (>=2 & <2)
      }
      err3: {
        p2: (<2 & >=2)
      }
      err3: {
        p3: (>2 & <=2)
      }
      err3: {
        p4: (<=2 & >2)
      }
      ok1: {
        p1: (>1 & <2)
      }
      ok1: {
        p2: (<2 & >1)
      }
      ok2: {
        p1: (>=2 & <=2)
      }
      ok2: {
        p2: (<=2 & >=2)
      }
    }
  }
  simplifyBinary: {
    integer: {
      [_]: {
        [_]: int
      }
      err1: {
        p1: (<1 & >2)
      }
      err1: {
        p2: (>2 & <1)
      }
      err2: {
        p1: (>2 & <=1)
      }
      err2: {
        p2: (<=1 & >2)
      }
      err3: {
        p1: (>=2 & <2)
      }
      err3: {
        p2: (<2 & >=2)
      }
      err3: {
        p3: (>2 & <=2)
      }
      err3: {
        p4: (<=2 & >2)
      }
      err4: {
        p1: (>1 & <2)
      }
      err4: {
        p2: (<2 & >1)
      }
      ok1: {
        p1: (>=2 & <=3)
      }
      ok1: {
        p2: (<=3 & >=2)
      }
      ok2: {
        p1: (>=2 & <=2)
      }
      ok2: {
        p2: (<=2 & >=2)
      }
      ok3: {
        p1: (>=2 & <3)
      }
      ok3: {
        p2: (>2 & <=3)
      }
      ok3: {
        p3: (<3 & >=2)
      }
      ok3: {
        p4: (<=3 & >2)
      }
    }
  }
}
--- binarystring.cue
{
  simplifyBinary: {
    strings: {
      err1: {
        p1: (<"a" & >"b")
      }
      err1: {
        p2: (>"b" & <"a")
      }
      err2: {
        p1: (>"b" & <="a")
      }
      err2: {
        p2: (<="a" & >"b")
      }
      err3: {
        p1: (>="b" & <"b")
      }
      err3: {
        p2: (<"b" & >="b")
      }
      err3: {
        p3: (>"b" & <="b")
      }
      err3: {
        p4: (<="b" & >"b")
      }
      ok1: {
        p1: (>"a" & <"b")
      }
      ok1: {
        p2: (<"b" & >"a")
      }
      ok2: {
        p1: (>"a" & <="b")
      }
      ok2: {
        p2: (<="b" & >"a")
      }
      ok2: {
        p3: (>="a" & <"b")
      }
      ok2: {
        p4: (<"b" & >="a")
      }
      ok3: {
        p1: (>="b" & <="c")
      }
      ok3: {
        p2: (<="c" & >="b")
      }
      ok4: {
        p1: (>="b" & <="b")
      }
    }
  }
  simplifyBinary: {
    byte: {
      err1: {
        p1: (<'a' & >'b')
      }
      err1: {
        p2: (>'b' & <'a')
      }
      err2: {
        p1: (>'b' & <='a')
      }
      err2: {
        p2: (<='a' & >'b')
      }
      err3: {
        p1: (>='b' & <'b')
      }
      err3: {
        p2: (<'b' & >='b')
      }
      err3: {
        p3: (>'b' & <='b')
      }
      err3: {
        p4: (<='b' & >'b')
      }
      ok1: {
        p1: (>'a' & <'b')
      }
      ok1: {
        p2: (<'b' & >'a')
      }
      ok2: {
        p1: (>'a' & <='b')
      }
      ok2: {
        p2: (<='b' & >'a')
      }
      ok2: {
        p3: (>='a' & <'b')
      }
      ok2: {
        p4: (<'b' & >='a')
      }
      ok3: {
        p1: (>='b' & <='c')
      }
      ok3: {
        p2: (<='c' & >='b')
      }
      ok4: {
        p1: (>='b' & <='b')
      }
    }
  }
}
--- in.cue
{
  x0: 5
  x1: (〈0;b5〉 & 30)
  b0: (<〈0;x0〉 & >0)
  b1: (〈0;b0〉 & int)
  b2: (int & <5.5)
  b3: (<10 & <=5)
  b4: (>=20 & >20)
  b5: (>=21 & >20)
  b6: ((int & >5) & <=6)
  simplifyExpr: {
    less1: <<3
    less2: <<=3
    less3: <=<3
    less4: <=<=3
    less5: <!=3
    less6: <=!=3
    gtr1: >>3
    gtr2: >>=3
    gtr3: >=>3
    gtr4: >=>=3
    gtr5: >!=3
    gtr6: >=!=3
    lg1: <>3
    lg2: <>=3
    lg3: <=>3
    lg4: <=>=3
    gl1: ><3
    gl2: ><=3
    gl3: >=<3
    gl4: >=<=3
    ne1: !=!=3
    ne2: !=<3
    ne3: !=<=3
    ne4: !=>3
    ne5: !=>=3
    s: string
    n: number
    i: int
    f: float
    b: bytes
    basic1: <〈0;i〉
    basic2: >〈0;n〉
    basic3: >=〈0;s〉
    basic4: <=〈0;f〉
    basic5: <=〈0;b〉
    bne1: !=〈0;s〉
    bne2: !=〈0;n〉
    bne3: !=〈0;n〉
    bne4: !=〈0;i〉
    bne5: !=〈0;b〉
    e1: <=~"foo"
    e2: >null
  }
}
