Rules 1 through 15 are from Leo-III. Rules 16 through 22 and 25 through 27 are from "Superposition with
First-Class Booleans and Inprocessing Clausification." Rules 23, 24, and 28 were made just for duper.
Rules with the b
suffix operate on Bool
, rules without the b
suffix operate on Prop
.
- rule1 : BoolSimpRule
- rule1b : BoolSimpRule
- rule2 : BoolSimpRule
- rule2b : BoolSimpRule
- rule2Sym : BoolSimpRule
- rule2bSym : BoolSimpRule
- rule3 : BoolSimpRule
- rule3b : BoolSimpRule
- rule3Sym : BoolSimpRule
- rule3bSym : BoolSimpRule
- rule4 : BoolSimpRule
- rule4b : BoolSimpRule
- rule4Sym : BoolSimpRule
- rule4bSym : BoolSimpRule
- rule5 : BoolSimpRule
- rule5b : BoolSimpRule
- rule6 : BoolSimpRule
- rule6b : BoolSimpRule
- rule6Sym : BoolSimpRule
- rule6bSym : BoolSimpRule
- rule7 : BoolSimpRule
- rule7b : BoolSimpRule
- rule8 : BoolSimpRule
- rule8b : BoolSimpRule
- rule9 : BoolSimpRule
- rule9b : BoolSimpRule
- rule9Sym : BoolSimpRule
- rule9bSym : BoolSimpRule
- rule10 : BoolSimpRule
- rule10b : BoolSimpRule
- rule10Sym : BoolSimpRule
- rule10bSym : BoolSimpRule
- rule11 : BoolSimpRule
- rule11b : BoolSimpRule
- rule11Sym : BoolSimpRule
- rule11bSym : BoolSimpRule
- rule12 : BoolSimpRule
- rule12b : BoolSimpRule
- rule13 : BoolSimpRule
- rule13b : BoolSimpRule
- rule13Sym : BoolSimpRule
- rule13bSym : BoolSimpRule
- rule14 : BoolSimpRule
- rule14b : BoolSimpRule
- rule15 : BoolSimpRule
- rule15b : BoolSimpRule
- rule16 : BoolSimpRule
- rule17 : BoolSimpRule
- rule18 : BoolSimpRule
- rule19 : BoolSimpRule
- rule20 : BoolSimpRule
- rule21 : BoolSimpRule
- rule22 : BoolSimpRule
- rule23 : BoolSimpRule
- rule23b : BoolSimpRule
- rule24 : BoolSimpRule
- rule24b : BoolSimpRule
- rule25 : BoolSimpRule
- rule26 : BoolSimpRule
- rule27 : BoolSimpRule
- rule28 : BoolSimpRule
Instances For
Equations
- Duper.instReprBoolSimpRule = { reprPrec := Duper.reprBoolSimpRule✝ }
Equations
- Duper.BoolSimpRule.rule1.format = Lean.toMessageData "rule1"
- Duper.BoolSimpRule.rule1b.format = Lean.toMessageData "rule1b"
- Duper.BoolSimpRule.rule2.format = Lean.toMessageData "rule2"
- Duper.BoolSimpRule.rule2b.format = Lean.toMessageData "rule2b"
- Duper.BoolSimpRule.rule2Sym.format = Lean.toMessageData "rule2Sym"
- Duper.BoolSimpRule.rule2bSym.format = Lean.toMessageData "rule2bSym"
- Duper.BoolSimpRule.rule3.format = Lean.toMessageData "rule3"
- Duper.BoolSimpRule.rule3b.format = Lean.toMessageData "rule3b"
- Duper.BoolSimpRule.rule3Sym.format = Lean.toMessageData "rule3Sym"
- Duper.BoolSimpRule.rule3bSym.format = Lean.toMessageData "rule3bSym"
- Duper.BoolSimpRule.rule4.format = Lean.toMessageData "rule4"
- Duper.BoolSimpRule.rule4b.format = Lean.toMessageData "rule4b"
- Duper.BoolSimpRule.rule4Sym.format = Lean.toMessageData "rule4Sym"
- Duper.BoolSimpRule.rule4bSym.format = Lean.toMessageData "rule4bSym"
- Duper.BoolSimpRule.rule5.format = Lean.toMessageData "rule5"
- Duper.BoolSimpRule.rule5b.format = Lean.toMessageData "rule5b"
- Duper.BoolSimpRule.rule6.format = Lean.toMessageData "rule6"
- Duper.BoolSimpRule.rule6b.format = Lean.toMessageData "rule6b"
- Duper.BoolSimpRule.rule6Sym.format = Lean.toMessageData "rule6Sym"
- Duper.BoolSimpRule.rule6bSym.format = Lean.toMessageData "rule6bSym"
- Duper.BoolSimpRule.rule7.format = Lean.toMessageData "rule7"
- Duper.BoolSimpRule.rule7b.format = Lean.toMessageData "rule7b"
- Duper.BoolSimpRule.rule8.format = Lean.toMessageData "rule8"
- Duper.BoolSimpRule.rule8b.format = Lean.toMessageData "rule8b"
- Duper.BoolSimpRule.rule9.format = Lean.toMessageData "rule9"
- Duper.BoolSimpRule.rule9b.format = Lean.toMessageData "rule9b"
- Duper.BoolSimpRule.rule9Sym.format = Lean.toMessageData "rule9Sym"
- Duper.BoolSimpRule.rule9bSym.format = Lean.toMessageData "rule9bSym"
- Duper.BoolSimpRule.rule10.format = Lean.toMessageData "rule10"
- Duper.BoolSimpRule.rule10b.format = Lean.toMessageData "rule10b"
- Duper.BoolSimpRule.rule10Sym.format = Lean.toMessageData "rule10Sym"
- Duper.BoolSimpRule.rule10bSym.format = Lean.toMessageData "rule10bSym"
- Duper.BoolSimpRule.rule11.format = Lean.toMessageData "rule11"
- Duper.BoolSimpRule.rule11b.format = Lean.toMessageData "rule11b"
- Duper.BoolSimpRule.rule11Sym.format = Lean.toMessageData "rule11Sym"
- Duper.BoolSimpRule.rule11bSym.format = Lean.toMessageData "rule11bSym"
- Duper.BoolSimpRule.rule12.format = Lean.toMessageData "rule12"
- Duper.BoolSimpRule.rule12b.format = Lean.toMessageData "rule12b"
- Duper.BoolSimpRule.rule13.format = Lean.toMessageData "rule13"
- Duper.BoolSimpRule.rule13b.format = Lean.toMessageData "rule13b"
- Duper.BoolSimpRule.rule13Sym.format = Lean.toMessageData "rule13Sym"
- Duper.BoolSimpRule.rule13bSym.format = Lean.toMessageData "rule13bSym"
- Duper.BoolSimpRule.rule14.format = Lean.toMessageData "rule14"
- Duper.BoolSimpRule.rule14b.format = Lean.toMessageData "rule14b"
- Duper.BoolSimpRule.rule15.format = Lean.toMessageData "rule15"
- Duper.BoolSimpRule.rule15b.format = Lean.toMessageData "rule15b"
- Duper.BoolSimpRule.rule16.format = Lean.toMessageData "rule16"
- Duper.BoolSimpRule.rule17.format = Lean.toMessageData "rule17"
- Duper.BoolSimpRule.rule18.format = Lean.toMessageData "rule18"
- Duper.BoolSimpRule.rule19.format = Lean.toMessageData "rule19"
- Duper.BoolSimpRule.rule20.format = Lean.toMessageData "rule20"
- Duper.BoolSimpRule.rule21.format = Lean.toMessageData "rule21"
- Duper.BoolSimpRule.rule22.format = Lean.toMessageData "rule22"
- Duper.BoolSimpRule.rule23.format = Lean.toMessageData "rule23"
- Duper.BoolSimpRule.rule23b.format = Lean.toMessageData "rule23b"
- Duper.BoolSimpRule.rule24.format = Lean.toMessageData "rule24"
- Duper.BoolSimpRule.rule24b.format = Lean.toMessageData "rule24b"
- Duper.BoolSimpRule.rule25.format = Lean.toMessageData "rule25"
- Duper.BoolSimpRule.rule26.format = Lean.toMessageData "rule26"
- Duper.BoolSimpRule.rule27.format = Lean.toMessageData "rule27"
- Duper.BoolSimpRule.rule28.format = Lean.toMessageData "rule28"
Instances For
Equations
- Duper.instToMessageDataBoolSimpRule = { toMessageData := Duper.BoolSimpRule.format }
Assuming e has the form e1 ∨ e2 ∨ ... ∨ en, returns an array #[e1, e2, ... en].
Note: If e has the form (e1a ∨ e1b) ∨ e2 ∨ ... en, then the disjunction (e1a ∨ e1b) will
be considered e1 (and the disjunction e1 will not be broken down further). This decision is made
to reflect the form of the disjunction assumed by ProofReconstruction.lean's orIntro
Equations
- One or more equations did not get rendered due to their size.
Instances For
¬s ∨ s ↦ True
Equations
- Duper.applyRule2 (((Lean.Expr.const `Or us).app e1).app e2) = if (e1 == (Lean.Expr.const `Not []).app e2) = true then some (Lean.mkConst `True) else none
- Duper.applyRule2 e = none
Instances For
!s || s ↦ true
Equations
- Duper.applyRule2b (((Lean.Expr.const `Bool.or us).app e1).app e2) = if (e1 == (Lean.Expr.const `Bool.not []).app e2) = true then some (Lean.mkConst `Bool.true) else none
- Duper.applyRule2b e = none
Instances For
s ∨ ¬s ↦ True
Equations
- Duper.applyRule2Sym (((Lean.Expr.const `Or us).app e1).app e2) = if (e2 == (Lean.Expr.const `Not []).app e1) = true then some (Lean.mkConst `True) else none
- Duper.applyRule2Sym e = none
Instances For
s || !s ↦ true
Equations
- Duper.applyRule2bSym (((Lean.Expr.const `Bool.or us).app e1).app e2) = if (e2 == (Lean.Expr.const `Bool.not []).app e1) = true then some (Lean.mkConst `Bool.true) else none
- Duper.applyRule2bSym e = none
Instances For
s ∨ True ↦ True
Equations
- Duper.applyRule3 (((Lean.Expr.const `Or us).app e1).app e2) = if (e2 == Lean.mkConst `True) = true then some (Lean.mkConst `True) else none
- Duper.applyRule3 e = none
Instances For
s || true ↦ true
Equations
- Duper.applyRule3b (((Lean.Expr.const `Bool.or us).app e1).app e2) = if (e2 == Lean.mkConst `Bool.true) = true then some (Lean.mkConst `Bool.true) else none
- Duper.applyRule3b e = none
Instances For
True ∨ s ↦ True
Equations
- Duper.applyRule3Sym (((Lean.Expr.const `Or us).app e1).app e2) = if (e1 == Lean.mkConst `True) = true then some (Lean.mkConst `True) else none
- Duper.applyRule3Sym e = none
Instances For
true || s ↦ true
Equations
- Duper.applyRule3bSym (((Lean.Expr.const `Bool.or us).app e1).app e2) = if (e1 == Lean.mkConst `Bool.true) = true then some (Lean.mkConst `Bool.true) else none
- Duper.applyRule3bSym e = none
Instances For
s ∨ False ↦ s
Equations
- Duper.applyRule4 (((Lean.Expr.const `Or us).app e1).app e2) = if (e2 == Lean.mkConst `False) = true then some e1 else none
- Duper.applyRule4 e = none
Instances For
s || false ↦ s
Equations
- Duper.applyRule4b (((Lean.Expr.const `Bool.or us).app e1).app e2) = if (e2 == Lean.mkConst `Bool.false) = true then some e1 else none
- Duper.applyRule4b e = none
Instances For
False ∨ s ↦ s
Equations
- Duper.applyRule4Sym (((Lean.Expr.const `Or us).app e1).app e2) = if (e1 == Lean.mkConst `False) = true then some e2 else none
- Duper.applyRule4Sym e = none
Instances For
false || s ↦ s
Equations
- Duper.applyRule4bSym (((Lean.Expr.const `Bool.or us).app e1).app e2) = if (e1 == Lean.mkConst `Bool.false) = true then some e2 else none
- Duper.applyRule4bSym e = none
Instances For
s = s ↦ True
Equations
- Duper.applyRule5 ((((Lean.Expr.const `Eq us).app arg).app e1).app e2) = if (e1 == e2) = true then some (Lean.mkConst `True) else none
- Duper.applyRule5 e = none
Instances For
s == s ↦ true
Equations
- Duper.applyRule5b (((((Lean.Expr.const `BEq.beq us).app arg).app arg_1).app e1).app e2) = if (e1 == e2) = true then some (Lean.mkConst `Bool.true) else none
- Duper.applyRule5b e = none
Instances For
s = True ↦ s
Equations
- Duper.applyRule6 ((((Lean.Expr.const `Eq us).app arg).app e1).app e2) = if (e2 == Lean.mkConst `True) = true then some e1 else none
- Duper.applyRule6 e = none
Instances For
s == true ↦ s
Equations
- Duper.applyRule6b (((((Lean.Expr.const `BEq.beq us).app arg).app arg_1).app e1).app e2) = if (e2 == Lean.mkConst `Bool.true) = true then some e1 else none
- Duper.applyRule6b e = none
Instances For
True = s ↦ s
Equations
- Duper.applyRule6Sym ((((Lean.Expr.const `Eq us).app arg).app e1).app e2) = if (e1 == Lean.mkConst `True) = true then some e2 else none
- Duper.applyRule6Sym e = none
Instances For
true == s ↦ s
Equations
- Duper.applyRule6bSym (((((Lean.Expr.const `BEq.beq us).app arg).app arg_1).app e1).app e2) = if (e1 == Lean.mkConst `Bool.true) = true then some e2 else none
- Duper.applyRule6bSym e = none
Instances For
Not False ↦ True
Equations
- Duper.applyRule7 ((Lean.Expr.const `Not us).app (Lean.Expr.const `False us_1)) = some (Lean.mkConst `True)
- Duper.applyRule7 e = none
Instances For
!false ↦ True
Equations
- Duper.applyRule7b ((Lean.Expr.const `Bool.not us).app (Lean.Expr.const `Bool.false us_1)) = some (Lean.mkConst `Bool.true)
- Duper.applyRule7b e = none
Instances For
¬s ∧ s ↦ False
Equations
- Duper.applyRule9 (((Lean.Expr.const `And us).app e1).app e2) = if (e1 == (Lean.Expr.const `Not []).app e2) = true then some (Lean.mkConst `False) else none
- Duper.applyRule9 e = none
Instances For
!s && s ↦ false
Equations
- Duper.applyRule9b (((Lean.Expr.const `Bool.and us).app e1).app e2) = if (e1 == (Lean.Expr.const `Bool.not []).app e2) = true then some (Lean.mkConst `Bool.false) else none
- Duper.applyRule9b e = none
Instances For
s ∧ ¬s ↦ False
Equations
- Duper.applyRule9Sym (((Lean.Expr.const `And us).app e1).app e2) = if (e2 == (Lean.Expr.const `Not []).app e1) = true then some (Lean.mkConst `False) else none
- Duper.applyRule9Sym e = none
Instances For
s && !s ↦ false
Equations
- Duper.applyRule9bSym (((Lean.Expr.const `Bool.and us).app e1).app e2) = if (e2 == (Lean.Expr.const `Bool.not []).app e1) = true then some (Lean.mkConst `Bool.false) else none
- Duper.applyRule9bSym e = none
Instances For
s ∧ True ↦ s
Equations
- Duper.applyRule10 (((Lean.Expr.const `And us).app e1).app e2) = if (e2 == Lean.mkConst `True) = true then some e1 else none
- Duper.applyRule10 e = none
Instances For
s && true ↦ s
Equations
- Duper.applyRule10b (((Lean.Expr.const `Bool.and us).app e1).app e2) = if (e2 == Lean.mkConst `Bool.true) = true then some e1 else none
- Duper.applyRule10b e = none
Instances For
True ∧ s ↦ s
Equations
- Duper.applyRule10Sym (((Lean.Expr.const `And us).app e1).app e2) = if (e1 == Lean.mkConst `True) = true then some e2 else none
- Duper.applyRule10Sym e = none
Instances For
true && s ↦ s
Equations
- Duper.applyRule10bSym (((Lean.Expr.const `Bool.and us).app e1).app e2) = if (e1 == Lean.mkConst `Bool.true) = true then some e2 else none
- Duper.applyRule10bSym e = none
Instances For
s ∧ False ↦ False
Equations
- Duper.applyRule11 (((Lean.Expr.const `And us).app e1).app e2) = if (e2 == Lean.mkConst `False) = true then some (Lean.mkConst `False) else none
- Duper.applyRule11 e = none
Instances For
s && false ↦ false
Equations
- Duper.applyRule11b (((Lean.Expr.const `Bool.and us).app e1).app e2) = if (e2 == Lean.mkConst `Bool.false) = true then some (Lean.mkConst `Bool.false) else none
- Duper.applyRule11b e = none
Instances For
False ∧ s ↦ False
Equations
- Duper.applyRule11Sym (((Lean.Expr.const `And us).app e1).app e2) = if (e1 == Lean.mkConst `False) = true then some (Lean.mkConst `False) else none
- Duper.applyRule11Sym e = none
Instances For
false && s ↦ false
Equations
- Duper.applyRule11bSym (((Lean.Expr.const `Bool.and us).app e1).app e2) = if (e1 == Lean.mkConst `Bool.false) = true then some (Lean.mkConst `Bool.false) else none
- Duper.applyRule11bSym e = none
Instances For
s ≠ s ↦ False
Equations
- Duper.applyRule12 ((((Lean.Expr.const `Ne us).app arg).app e1).app e2) = if (e1 == e2) = true then some (Lean.mkConst `False) else none
- Duper.applyRule12 e = none
Instances For
s != s ↦ False
Equations
- Duper.applyRule12b (((((Lean.Expr.const `bne us).app arg).app arg_1).app e1).app e2) = if (e1 == e2) = true then some (Lean.mkConst `Bool.false) else none
- Duper.applyRule12b e = none
Instances For
s = False ↦ ¬s
Equations
- Duper.applyRule13 ((((Lean.Expr.const `Eq us).app arg).app e1).app e2) = if (e2 == Lean.mkConst `False) = true then some (Lean.mkApp (Lean.mkConst `Not) e1) else none
- Duper.applyRule13 e = none
Instances For
s == false ↦ !s
Equations
- Duper.applyRule13b (((((Lean.Expr.const `BEq.beq us).app arg).app arg_1).app e1).app e2) = if (e2 == Lean.mkConst `Bool.false) = true then some (Lean.mkApp (Lean.mkConst `Bool.not) e1) else none
- Duper.applyRule13b e = none
Instances For
False = s ↦ ¬s
Equations
- Duper.applyRule13Sym ((((Lean.Expr.const `Eq us).app arg).app e1).app e2) = if (e1 == Lean.mkConst `False) = true then some (Lean.mkApp (Lean.mkConst `Not) e2) else none
- Duper.applyRule13Sym e = none
Instances For
false == s ↦ !s
Equations
- Duper.applyRule13bSym (((((Lean.Expr.const `BEq.beq us).app arg).app arg_1).app e1).app e2) = if (e1 == Lean.mkConst `Bool.false) = true then some (Lean.mkApp (Lean.mkConst `Bool.not) e2) else none
- Duper.applyRule13bSym e = none
Instances For
Not True ↦ False
Equations
- Duper.applyRule14 ((Lean.Expr.const `Not us).app (Lean.Expr.const `True us_1)) = some (Lean.mkConst `False)
- Duper.applyRule14 e = none
Instances For
!true ↦ false
Equations
- Duper.applyRule14b ((Lean.Expr.const `Bool.not us).app (Lean.Expr.const `Bool.true us_1)) = some (Lean.mkConst `Bool.false)
- Duper.applyRule14b e = none
Instances For
¬¬s ↦ s
Equations
- Duper.applyRule15 ((Lean.Expr.const `Not us).app ((Lean.Expr.const `Not us_1).app e')) = some e'
- Duper.applyRule15 e = none
Instances For
!!s ↦ s
Equations
- Duper.applyRule15b ((Lean.Expr.const `Bool.not us).app ((Lean.Expr.const `Bool.not us_1).app e')) = some e'
- Duper.applyRule15b e = none
Instances For
True → s ↦ s
Equations
- Duper.applyRule16 (Lean.Expr.forallE binderName t b binderInfo) = if (t == Lean.mkConst `True) = true then some b else none
- Duper.applyRule16 e = none
Instances For
False → s ↦ True
Equations
- Duper.applyRule17 (Lean.Expr.forallE binderName t b binderInfo) = if (t == Lean.mkConst `False) = true then some (Lean.mkConst `True) else none
- Duper.applyRule17 e = none
Instances For
s → False ↦ ¬s
Equations
- One or more equations did not get rendered due to their size.
- Duper.applyRule18 e = pure none
Instances For
s → True ↦ True (we generalize this to (∀ _ : α, True) ↦ True)
Equations
- Duper.applyRule19 (Lean.Expr.forallE binderName t b binderInfo) = if (b == Lean.mkConst `True) = true then some (Lean.mkConst `True) else none
- Duper.applyRule19 e = none
Instances For
s → ¬s ↦ ¬s
Equations
- Duper.applyRule20 (Lean.Expr.forallE binderName t b binderInfo) = if (b == (Lean.Expr.const `Not []).app t) = true then some b else none
- Duper.applyRule20 e = none
Instances For
¬s → s ↦ s
Equations
- Duper.applyRule21 (Lean.Expr.forallE binderName t b binderInfo) = if (t == (Lean.Expr.const `Not []).app b) = true then some b else none
- Duper.applyRule21 e = none
Instances For
s → s ↦ True
Equations
- One or more equations did not get rendered due to their size.
- Duper.applyRule22 e = pure none
Instances For
∀ p : Prop, f(p) ↦ f(True) ∧ f(False)
Equations
- One or more equations did not get rendered due to their size.
- Duper.applyRule23 e = pure none
Instances For
∀ b : Bool, f(b) ↦ f true ∧ f false (assuming f : Bool → Prop
)
Equations
- One or more equations did not get rendered due to their size.
- Duper.applyRule23b e = pure none
Instances For
∃ p : Prop, f(p) ↦ f True ∨ f False
Equations
- One or more equations did not get rendered due to their size.
- Duper.applyRule24 e = pure none
Instances For
∃ b : Bool, f(b) ↦ f true ∨ f false (assuming f : Bool → Prop
)
Equations
- One or more equations did not get rendered due to their size.
- Duper.applyRule24b e = pure none
Instances For
(s1 → s2 → ... → sn → v) ↦ True if there exists i and j such that si = ¬sj Since this rule will require a more involved proof reconstruction, rather than returning the resulting expression as in previous applyRule functions, we return the two indices of the hypotheses that directly contradict each other. Specifically, if si = ¬sj, then we return some (i, j).
Equations
Instances For
(s1 → s2 → ... → sn → v1 ∨ ... ∨ vm) ↦ True if there exists i and j such that si = vj Since this rule will require a more involved proof reconstruction, rather than returning the resulting expression as in previous applyRule functions, we return the index of the hypothesis si and the index of the conclusion vj. Specifically, if si = vj, then we return some (i, j)
Equations
Instances For
(s1 ∧ s2 ∧ ... ∧ sn → v1 ∨ ... ∨ vm) ↦ True if there exists i and j such that si = vj Since this rule will require a more involved proof reconstruction, rather than returning the resulting expression as in previous applyRule functions, we return the index of the hypothesis si and the inddex of the conclusion vj. Specifically, if si = vj, then we return some (i, j)
Equations
- One or more equations did not get rendered due to their size.
Instances For
s1 ↔ s2 ↦ s1 = s2
Equations
- Duper.applyRule28 (((Lean.Expr.const `Iff us).app e1).app e2) = some (Lean.mkApp3 (Lean.mkConst `Eq [Lean.levelOne]) (Lean.mkSort Lean.levelZero) e1 e2)
- Duper.applyRule28 e = none
Instances For
Returns the rule theorem corresponding to boolSimpRule with the first argument applied.
Note that this function assumes that boolSimpRule
has already been shown to be applicable to originalExp
so
this is not rechecked (e.g. for rule1, this function does not check that the two propositions in the disjunction
are actually equal, it assumes that this is the case from the fact that rule1 was applied)
Equations
- One or more equations did not get rendered due to their size.
- Duper.getBoolSimpRuleTheorem Duper.BoolSimpRule.rule25 originalExp (some (i, j)) = do let __do_lift ← Duper.mkRule25Theorem originalExp 0 i j Lean.Meta.mkAppM `eq_true #[__do_lift]
- Duper.getBoolSimpRuleTheorem Duper.BoolSimpRule.rule25 originalExp none = Lean.throwError (Lean.toMessageData "rule25 requires indices that were not passed into getBoolSimpRuleTheorem")
- Duper.getBoolSimpRuleTheorem Duper.BoolSimpRule.rule26 originalExp (some (i, j)) = do let __do_lift ← Duper.mkRule26Theorem originalExp 0 i j Lean.Meta.mkAppM `eq_true #[__do_lift]
- Duper.getBoolSimpRuleTheorem Duper.BoolSimpRule.rule26 originalExp none = Lean.throwError (Lean.toMessageData "rule26 requires indices that were not passed into getBoolSimpRuleTheorem")
- Duper.getBoolSimpRuleTheorem Duper.BoolSimpRule.rule27 originalExp (some (i, j)) = do let __do_lift ← Duper.mkRule27Theorem originalExp i j Lean.Meta.mkAppM `eq_true #[__do_lift]
- Duper.getBoolSimpRuleTheorem Duper.BoolSimpRule.rule27 originalExp none = Lean.throwError (Lean.toMessageData "rule27 requires indices that were not passed into getBoolSimpRuleTheorem")
Instances For
Some boolSimpRules (those with b
suffixes) operates on Bool
rather than Prop
. mkBoolSimpProp
needs to know whether
boolSimpRule
is one such rule in order to pass the correct type into congrArg
Equations
- Duper.boolSimpRuleOperatesOnBool Duper.BoolSimpRule.rule1b = true
- Duper.boolSimpRuleOperatesOnBool Duper.BoolSimpRule.rule2b = true
- Duper.boolSimpRuleOperatesOnBool Duper.BoolSimpRule.rule2bSym = true
- Duper.boolSimpRuleOperatesOnBool Duper.BoolSimpRule.rule3b = true
- Duper.boolSimpRuleOperatesOnBool Duper.BoolSimpRule.rule3bSym = true
- Duper.boolSimpRuleOperatesOnBool Duper.BoolSimpRule.rule4b = true
- Duper.boolSimpRuleOperatesOnBool Duper.BoolSimpRule.rule4bSym = true
- Duper.boolSimpRuleOperatesOnBool Duper.BoolSimpRule.rule5b = true
- Duper.boolSimpRuleOperatesOnBool Duper.BoolSimpRule.rule6b = true
- Duper.boolSimpRuleOperatesOnBool Duper.BoolSimpRule.rule6bSym = true
- Duper.boolSimpRuleOperatesOnBool Duper.BoolSimpRule.rule7b = true
- Duper.boolSimpRuleOperatesOnBool Duper.BoolSimpRule.rule8b = true
- Duper.boolSimpRuleOperatesOnBool Duper.BoolSimpRule.rule9b = true
- Duper.boolSimpRuleOperatesOnBool Duper.BoolSimpRule.rule9bSym = true
- Duper.boolSimpRuleOperatesOnBool Duper.BoolSimpRule.rule10b = true
- Duper.boolSimpRuleOperatesOnBool Duper.BoolSimpRule.rule10bSym = true
- Duper.boolSimpRuleOperatesOnBool Duper.BoolSimpRule.rule11b = true
- Duper.boolSimpRuleOperatesOnBool Duper.BoolSimpRule.rule11bSym = true
- Duper.boolSimpRuleOperatesOnBool Duper.BoolSimpRule.rule12b = true
- Duper.boolSimpRuleOperatesOnBool Duper.BoolSimpRule.rule13b = true
- Duper.boolSimpRuleOperatesOnBool Duper.BoolSimpRule.rule13bSym = true
- Duper.boolSimpRuleOperatesOnBool Duper.BoolSimpRule.rule14b = true
- Duper.boolSimpRuleOperatesOnBool Duper.BoolSimpRule.rule15b = true
- Duper.boolSimpRuleOperatesOnBool boolSimpRule = false
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
The list of rules that do not require the RuleM monad
Equations
- One or more equations did not get rendered due to their size.
Instances For
The list of rules that do require the RuleM monad
Equations
- One or more equations did not get rendered due to their size.
Instances For
The list of rules for which indices must be returned
Equations
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Implements various Prop-related simplifications as described in "Superposition with First-Class Booleans and Inprocessing Clausification" and "Extensional Paramodulation for Higher-Order Logic and its Effective Implementation Leo-III"
Equations
- One or more equations did not get rendered due to their size.