This PR adds a new propagation rule for `Bool` disequalities to `grind`. It now propagates `x = true` (`x = false`) from the disequality `x = false` (`x = true`). It ensures we don't have to perform case analysis on `x` to learn this fact. See tests.
25 lines
957 B
Text
25 lines
957 B
Text
set_option grind.warning false
|
|
|
|
example (f : Bool → Nat) : (x = y ↔ q) → ¬ q → y = false → f x = 0 → f true = 0 := by
|
|
grind (splits := 0)
|
|
|
|
example (f : Bool → Nat) : (x = false ↔ q) → ¬ q → f x = 0 → f true = 0 := by
|
|
grind (splits := 0)
|
|
|
|
example (f : Bool → Nat) : (y = x ↔ q) → ¬ q → y = false → f x = 0 → f true = 0 := by
|
|
grind (splits := 0)
|
|
|
|
example (f : Bool → Nat) : (x = true ↔ q) → ¬ q → f x = 0 → f false = 0 := by
|
|
grind (splits := 0)
|
|
|
|
example (f : Bool → Nat) : (true = x ↔ q) → ¬ q → f x = 0 → f false = 0 := by
|
|
grind (splits := 0)
|
|
|
|
example (f : Bool → Nat) : (false = x ↔ q) → ¬ q → f x = 0 → f true = 0 := by
|
|
grind (splits := 0)
|
|
|
|
example (f : Bool → Nat) : (x = false ↔ q) → ¬ q → f x = 0 → f true = 0 := by
|
|
grind (splits := 0)
|
|
|
|
example (f : Bool → Nat) : (y = x ↔ q) → ¬ q → y = true → f x = 0 → f false = 0 := by
|
|
grind (splits := 0)
|