import DuperXp
-- import Mathlib.LinearAlgebra.Finrank
-- import Mathlib.LinearAlgebra.FreeModule.Finite.Rank
import Mathlib.LinearAlgebra.CliffordAlgebra.Contraction
import Mathlib.Tactic
import Mathlib.Data.Real.Basic
import Mathlib.Algebra.BigOperators.Ring
open QuadraticForm BilinForm ExteriorAlgebra FiniteDimensional
open Function
open BigOperators
open FiniteDimensional
universe uΞΊ uR uM uΞΉ
variable { ΞΊ : Type uΞΊ}
variable { R : Type uR} [ CommRing : Type uR β Type uR
CommRing R ] [ Invertible : {Ξ± : Type uR} β [inst : Mul Ξ±] β [inst : One Ξ±] β Ξ± β Type uR
Invertible ( 2 : R )] [ Nontrivial : Type uR β Prop
Nontrivial R ]
variable { M : Type uM} [ AddCommGroup : Type uM β Type uM
AddCommGroup M ] [ Module : (R : Type uR) β (M : Type uM) β [inst : Semiring R] β [inst : AddCommMonoid M] β Type (max uR uM)
Module R M ]
-- variable {B : BilinForm R M}
variable ( Q : QuadraticForm : (R : Type uR) β
(M : Type uM) β [inst : CommSemiring R] β [inst_1 : AddCommMonoid M] β [inst : Module R M] β Type (max uR uM)
QuadraticForm R M ) { Cl : CliffordAlgebra : {R : Type uR} β
[inst : CommRing R] β
{M : Type uM} β [inst_1 : AddCommGroup M] β [inst_2 : Module R M] β QuadraticForm R M β Type (max uM uR)
CliffordAlgebra Q } { Ex : ExteriorAlgebra : (R : Type uR) β [inst : CommRing R] β (M : Type uM) β [inst_1 : AddCommGroup M] β [inst : Module R M] β Type (max uM uR)
ExteriorAlgebra R M }
variable [ Module.Finite : (R : Type uR) β (M : Type uM) β [inst : Semiring R] β [inst_1 : AddCommMonoid M] β [inst : Module R M] β Prop
Module.Finite R M ] [ Module.Free : (R : Type uR) β (M : Type uM) β [inst : Semiring R] β [inst_1 : AddCommMonoid M] β [inst : Module R M] β Prop
Module.Free R M ]
set_option trace.duper.printProof true
set_option trace.duper.proofReconstruction true
theorem barber_paradox : β {person : Type} {shaves : person β person β Prop}, (β b, β (p : person), shaves b p β Β¬shaves p p) β False
barber_paradox { person : Type } { shaves : person β person β Prop
shaves : person β person β Prop }
( h : β b, β (p : person), shaves b p β Β¬shaves p p
h : β b : person , β p : person , ( shaves : person β person β Prop
shaves b p β (Β¬ shaves : person β person β Prop
shaves p p ))) : False :=
by duper [* ] { preprocessing := no_preprocessing , inhabitationReasoning := true } [duper.printProof] Clause # 1 (by assumption []): (β b, β (p : person), shaves b p β Β¬ shaves p p) = True
[duper.printProof] Clause # 3 (by clausification [1 ]): β (a : person),
(β (p : person), shaves (@ skS. 0 Type 0 (person β person) a) p β Β¬ shaves p p) = True
[duper.printProof] Clause # 4 (by clausification [1 ]): Nonempty person = True
[duper.printProof] Clause # 5 (by clausification [3 ]): β (a a_1 : person),
(shaves (@ skS. 0 Type 0 (person β person) a) a_1 β Β¬ shaves a_1 a_1) = True
[duper.printProof] Clause # 6 (by clausification [5 ]): β (a a_1 : person),
shaves (@ skS. 0 Type 0 (person β person) a) a_1 = True β¨ (Β¬ shaves a_1 a_1) = False
[duper.printProof] Clause # 7 (by clausification [5 ]): β (a a_1 : person),
shaves (@ skS. 0 Type 0 (person β person) a) a_1 = False β¨ (Β¬ shaves a_1 a_1) = True
[duper.printProof] Clause # 8 (by clausification [6 ]): β (a a_1 : person),
shaves (@ skS. 0 Type 0 (person β person) a) a_1 = True β¨ shaves a_1 a_1 = True
[duper.printProof] Clause # 9 (by equality factoring [8 ]): β (a : person),
True β True β¨ shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True
[duper.printProof] Clause # 10 (by clausification [7 ]): β (a a_1 : person),
shaves (@ skS. 0 Type 0 (person β person) a) a_1 = False β¨ shaves a_1 a_1 = False
[duper.printProof] Clause # 13 (by clausification [9 ]): β (a : person),
shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True β¨
True = False β¨ True = False
[duper.printProof] Clause # 15 (by clausification [13 ]): β (a : person),
shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True β¨ True = False
[duper.printProof] Clause # 16 (by clausification [15 ]): β (a : person),
shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True
[duper.printProof] Clause # 17 (by superposition [16 , 10 ]): person β True = False β¨ True = False
[duper.printProof] Clause # 20 (by removeVanishedVars [17 , 4 ]): True = False β¨ True = False
[duper.printProof] Clause # 21 (by clausification [20 ]): True = False
[duper.printProof] Clause # 22 (by clausification [21 ]): False
[duper.proofReconstruction] Collected clauses: [(β b, β (p : person), shaves b p β Β¬ shaves p p) = True,
β (a : person), (β (p : person), shaves (@ skS. 0 Type 0 (person β person) a) p β Β¬ shaves p p) = True,
Nonempty person = True,
β (a a_1 : person), (shaves (@ skS. 0 Type 0 (person β person) a) a_1 β Β¬ shaves a_1 a_1) = True,
β (a a_1 : person), shaves (@ skS. 0 Type 0 (person β person) a) a_1 = True β¨ (Β¬ shaves a_1 a_1) = False,
β (a a_1 : person), shaves (@ skS. 0 Type 0 (person β person) a) a_1 = False β¨ (Β¬ shaves a_1 a_1) = True,
β (a a_1 : person), shaves (@ skS. 0 Type 0 (person β person) a) a_1 = True β¨ shaves a_1 a_1 = True,
β (a : person),
True β True β¨ shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True,
β (a a_1 : person), shaves (@ skS. 0 Type 0 (person β person) a) a_1 = False β¨ shaves a_1 a_1 = False,
β (a : person),
shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True β¨
True = False β¨ True = False,
β (a : person),
shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True β¨ True = False,
β (a : person), shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True,
person β True = False β¨ True = False,
True = False β¨ True = False,
True = False,
False]
[duper.proofReconstruction] Request [] β¦ [] for False
[duper.proofReconstruction] Request [] β¦ [] for True = False
[duper.proofReconstruction] Request [] β¦ [] for True = False β¨ True = False
[duper.proofReconstruction] Request [] β¦ [] for person β True = False β¨ True = False
[duper.proofReconstruction] Request [] β¦ [] for β (a : person),
shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True
[duper.proofReconstruction] Request [] β¦ [] for β (a : person),
shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True β¨ True = False
[duper.proofReconstruction] Request [] β¦ [] for β (a : person),
shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True β¨
True = False β¨ True = False
[duper.proofReconstruction] Request [] β¦ [] for β (a : person),
True β True β¨ shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True
[duper.proofReconstruction] Request [] β¦ [] for β (a a_1 : person),
shaves (@ skS. 0 Type 0 (person β person) a) a_1 = True β¨ shaves a_1 a_1 = True
[duper.proofReconstruction] Request [] β¦ [] for β (a a_1 : person),
shaves (@ skS. 0 Type 0 (person β person) a) a_1 = True β¨ (Β¬ shaves a_1 a_1) = False
[duper.proofReconstruction] Request [] β¦ [] for β (a a_1 : person),
(shaves (@ skS. 0 Type 0 (person β person) a) a_1 β Β¬ shaves a_1 a_1) = True
[duper.proofReconstruction] Request [] β¦ [] for β (a : person),
(β (p : person), shaves (@ skS. 0 Type 0 (person β person) a) p β Β¬ shaves p p) = True
[duper.proofReconstruction] Request [] β¦ [] for (β b, β (p : person), shaves b p β Β¬ shaves p p) = True
[duper.proofReconstruction] Request [] β¦ [] for β (a a_1 : person),
shaves (@ skS. 0 Type 0 (person β person) a) a_1 = False β¨ shaves a_1 a_1 = False
[duper.proofReconstruction] Request [] β¦ [] for β (a a_1 : person),
shaves (@ skS. 0 Type 0 (person β person) a) a_1 = False β¨ (Β¬ shaves a_1 a_1) = True
[duper.proofReconstruction] Request [] β¦ [] for Nonempty person = True
[duper.proofReconstruction] Reconstructing proof for # 1 : [] β¦ [] @ (β b, β (p : person), shaves b p β Β¬ shaves p p) =
True, Rule Name: assumption
[duper.proofReconstruction] # 1 ' s newProof: eq_true h
[duper.proofReconstruction] Instantiating parent (β b, β (p : person), shaves b p β Β¬ shaves p p) =
True β‘β‘ person β (β b, β (p : person), shaves b p β Β¬ shaves p p) = True with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing skolem, _uniq. 12242 β‘β‘ skol. 0 : person β
person := Duper.Skolem.some fun x => β (p : person), shaves x p β Β¬ shaves p p
[duper.proofReconstruction] Reconstructing proof for # 3 : [] β¦ [] @ β (a : person),
(β (p : person), shaves (skol. 0 a) p β Β¬ shaves p p) = True, Rule Name: clausification
[duper.proofReconstruction] # 3 ' s newProof: fun a =>
(fun h => eq_true (Duper.Skolem.spec ((fun x_0 => x_0) a) (of_eq_true h))) clause. 1 . 0
[duper.proofReconstruction] Instantiating parent (β b, β (p : person), shaves b p β Β¬ shaves p p) =
True β‘β‘ (β b, β (p : person), shaves b p β Β¬ shaves p p) = True with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 4 : [] β¦ [] @ Nonempty person = True, Rule Name: clausification
[duper.proofReconstruction] # 4 ' s newProof: (fun h => eq_true (Duper.nonempty_of_exists h)) clause. 1 . 0
[duper.proofReconstruction] Instantiating parent β (a : person),
(β (p : person), shaves (@ skS. 0 Type 0 (person β person) a) p β Β¬ shaves p p) =
True β‘β‘ β (x_0 : person),
person β
(fun a => (β (p : person), shaves (@ skS. 0 Type 0 (person β person) a) p β Β¬ shaves p p) = True)
x_0 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 5 : [] β¦ [] @ β (a a_1 : person),
(shaves (skol. 0 a) a_1 β Β¬ shaves a_1 a_1) = True, Rule Name: clausification
[duper.proofReconstruction] # 5 ' s newProof: fun a a_1 =>
(fun h => Duper.clausify_forall ((fun x_0 x_1 => x_1) a a_1) h) (clause. 3 . 0 a)
[duper.proofReconstruction] Instantiating parent β (a a_1 : person),
(shaves (@ skS. 0 Type 0 (person β person) a) a_1 β Β¬ shaves a_1 a_1) =
True β‘β‘ β (x_0 x_1 : person),
(fun a a_1 => (shaves (@ skS. 0 Type 0 (person β person) a) a_1 β Β¬ shaves a_1 a_1) = True) x_0
x_1 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 6 : [] β¦ [] @ β (a a_1 : person),
shaves (skol. 0 a) a_1 = True β¨ (Β¬ shaves a_1 a_1) = False, Rule Name: clausification
[duper.proofReconstruction] # 6 ' s newProof: fun a a_1 => (fun h => Duper.clausify_iff1 h) (clause. 5 . 0 a a_1)
[duper.proofReconstruction] Instantiating parent β (a a_1 : person),
(shaves (@ skS. 0 Type 0 (person β person) a) a_1 β Β¬ shaves a_1 a_1) =
True β‘β‘ β (x_0 x_1 : person),
(fun a a_1 => (shaves (@ skS. 0 Type 0 (person β person) a) a_1 β Β¬ shaves a_1 a_1) = True) x_0
x_1 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 7 : [] β¦ [] @ β (a a_1 : person),
shaves (skol. 0 a) a_1 = False β¨ (Β¬ shaves a_1 a_1) = True, Rule Name: clausification
[duper.proofReconstruction] # 7 ' s newProof: fun a a_1 => (fun h => Duper.clausify_iff2 h) (clause. 5 . 0 a a_1)
[duper.proofReconstruction] Instantiating parent β (a a_1 : person),
shaves (@ skS. 0 Type 0 (person β person) a) a_1 = True β¨
(Β¬ shaves a_1 a_1) =
False β‘β‘ β (x_0 x_1 : person),
(fun a a_1 => shaves (@ skS. 0 Type 0 (person β person) a) a_1 = True β¨ (Β¬ shaves a_1 a_1) = False) x_0
x_1 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 8 : [] β¦ [] @ β (a a_1 : person),
shaves (skol. 0 a) a_1 = True β¨ shaves a_1 a_1 = True, Rule Name: clausification
[duper.proofReconstruction] # 8 ' s newProof: fun a a_1 =>
(fun h => Or.elim h (fun h => Or.inl h) fun h => Or.inr (Duper.clausify_not_false h)) (clause. 6 . 0 a a_1)
[duper.proofReconstruction] Instantiating parent β (a a_1 : person),
shaves (@ skS. 0 Type 0 (person β person) a) a_1 = True β¨
shaves a_1 a_1 =
True β‘β‘ β (x_0 : person),
(fun a a_1 => shaves (@ skS. 0 Type 0 (person β person) a) a_1 = True β¨ shaves a_1 a_1 = True) x_0
(@ skS. 0 Type 0 (person β person) x_0) with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 9 : [] β¦ [] @ β (a : person),
True β True β¨ shaves (skol. 0 a) (skol. 0 a) = True, Rule Name: equality factoring
[duper.proofReconstruction] # 9 ' s newProof: fun a =>
(fun h => Or.elim h (fun h => Duper.equality_factoring_soundness1 True h) fun h => Or.inr h)
(clause. 8 . 0 a (skol. 0 a))
[duper.proofReconstruction] Instantiating parent β (a a_1 : person),
shaves (@ skS. 0 Type 0 (person β person) a) a_1 = False β¨
(Β¬ shaves a_1 a_1) =
True β‘β‘ β (x_0 x_1 : person),
(fun a a_1 => shaves (@ skS. 0 Type 0 (person β person) a) a_1 = False β¨ (Β¬ shaves a_1 a_1) = True) x_0
x_1 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 10 : [] β¦ [] @ β (a a_1 : person),
shaves (skol. 0 a) a_1 = False β¨ shaves a_1 a_1 = False, Rule Name: clausification
[duper.proofReconstruction] # 10 ' s newProof: fun a a_1 =>
(fun h => Or.elim h (fun h => Or.inl h) fun h => Or.inr (Duper.clausify_not h)) (clause. 7 . 0 a a_1)
[duper.proofReconstruction] Instantiating parent β (a : person),
True β True β¨
shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) =
True β‘β‘ β (x_0 : person),
(fun a => True β True β¨ shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True)
x_0 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 13 : [] β¦ [] @ β (a : person),
shaves (skol. 0 a) (skol. 0 a) = True β¨ True = False β¨ True = False, Rule Name: clausification
[duper.proofReconstruction] # 13 ' s newProof: fun a =>
(fun h => Or.elim h (fun h => Or.inr (Duper.clausify_prop_inequality1 h)) fun h => Or.inl h) (clause. 9 . 0 a)
[duper.proofReconstruction] Instantiating parent β (a : person),
shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True β¨
True = False β¨
True =
False β‘β‘ β (x_0 : person),
(fun a =>
shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True β¨
True = False β¨ True = False)
x_0 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 15 : [] β¦ [] @ β (a : person),
shaves (skol. 0 a) (skol. 0 a) = True β¨ True = False, Rule Name: clausification
[duper.proofReconstruction] # 15 ' s newProof: fun a =>
(fun h =>
Or.elim h (fun h => Or.inl h) fun h =>
Or.elim h (fun h => False.elim (Duper.true_neq_false h)) fun h => Or.inr h)
(clause. 13 . 0 a)
[duper.proofReconstruction] Instantiating parent β (a : person),
shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True β¨
True =
False β‘β‘ β (x_0 : person),
(fun a => shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True β¨ True = False)
x_0 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 16 : [] β¦ [] @ β (a : person),
shaves (skol. 0 a) (skol. 0 a) = True, Rule Name: clausification
[duper.proofReconstruction] # 16 ' s newProof: fun a =>
(fun h => Or.elim h (fun h => h) fun h => False.elim (Duper.true_neq_false h)) (clause. 15 . 0 a)
[duper.proofReconstruction] Instantiating parent β (a : person),
shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) =
True β‘β‘ β (x_0 : person),
(fun a => shaves (@ skS. 0 Type 0 (person β person) a) (@ skS. 0 Type 0 (person β person) a) = True)
x_0 with param subst [] β¦ []
[duper.proofReconstruction] Instantiating parent β (a a_1 : person),
shaves (@ skS. 0 Type 0 (person β person) a) a_1 = False β¨
shaves a_1 a_1 =
False β‘β‘ β (x_0 : person),
(fun a a_1 => shaves (@ skS. 0 Type 0 (person β person) a) a_1 = False β¨ shaves a_1 a_1 = False) x_0
(@ skS. 0 Type 0 (person β person) x_0) with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 17 : [] β¦ [] @ person β
True = False β¨ True = False, Rule Name: superposition
[duper.proofReconstruction] # 17 ' s newProof: fun a =>
(fun heq =>
(fun h =>
Or.elim h (fun h => Or.inl (Eq.mp (congrArg (fun x => x = False) heq) h)) fun h =>
Or.inr (Eq.mp (congrArg (fun x => x = False) heq) h))
(clause. 10 . 0 a (skol. 0 a)))
(clause. 16 . 0 a)
[duper.proofReconstruction] Instantiating parent person β
True = False β¨
True = False β‘β‘ β (x_0 : person), (fun a => True = False β¨ True = False) x_0 with param subst [] β¦ []
[duper.proofReconstruction] Instantiating parent Nonempty person =
True β‘β‘ person β Nonempty person = True with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 20 : [] β¦ [] @ True = False β¨
True = False, Rule Name: removeVanishedVars
[duper.proofReconstruction] # 20 ' s newProof: clause. 17 . 0 Classical.ofNonempty
[duper.proofReconstruction] Instantiating parent True = False β¨
True = False β‘β‘ True = False β¨ True = False with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 21 : [] β¦ [] @ True = False, Rule Name: clausification
[duper.proofReconstruction] # 21 ' s newProof: (fun h =>
Or.elim h (fun h => False.elim (Duper.true_neq_false h)) fun h => h)
clause. 20 . 0
[duper.proofReconstruction] Instantiating parent True = False β‘β‘ True = False with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 22 : [] β¦ [] @ False, Rule Name: clausification
[duper.proofReconstruction] # 22 ' s newProof: (fun h => False.elim (Duper.true_neq_false h)) clause. 21 . 0
[duper.proofReconstruction] Proof: let clause. 1 . 0 := eq_true h;
let skol. 0 := Duper.Skolem.some fun x => β (p : person), shaves x p β Β¬ shaves p p;
let clause. 3 . 0 := fun a => (fun h => eq_true (Duper.Skolem.spec ((fun x_0 => x_0) a) (of_eq_true h))) clause. 1 . 0 ;
let clause. 4 . 0 := (fun h => eq_true (Duper.nonempty_of_exists h)) clause. 1 . 0 ;
let clause. 5 . 0 := fun a a_1 => (fun h => Duper.clausify_forall ((fun x_0 x_1 => x_1) a a_1) h) (clause. 3 . 0 a);
let clause. 6 . 0 := fun a a_1 => (fun h => Duper.clausify_iff1 h) (clause. 5 . 0 a a_1);
let clause. 7 . 0 := fun a a_1 => (fun h => Duper.clausify_iff2 h) (clause. 5 . 0 a a_1);
let clause. 8 . 0 := fun a a_1 =>
(fun h => Or.elim h (fun h => Or.inl h) fun h => Or.inr (Duper.clausify_not_false h)) (clause. 6 . 0 a a_1);
let clause. 9 . 0 := fun a =>
(fun h => Or.elim h (fun h => Duper.equality_factoring_soundness1 True h) fun h => Or.inr h)
(clause. 8 . 0 a (skol. 0 a));
let clause. 10 . 0 := fun a a_1 =>
(fun h => Or.elim h (fun h => Or.inl h) fun h => Or.inr (Duper.clausify_not h)) (clause. 7 . 0 a a_1);
let clause. 13 . 0 := fun a =>
(fun h => Or.elim h (fun h => Or.inr (Duper.clausify_prop_inequality1 h)) fun h => Or.inl h) (clause. 9 . 0 a);
let clause. 15 . 0 := fun a =>
(fun h =>
Or.elim h (fun h => Or.inl h) fun h =>
Or.elim h (fun h => False.elim (Duper.true_neq_false h)) fun h => Or.inr h)
(clause. 13 . 0 a);
let clause. 16 . 0 := fun a =>
(fun h => Or.elim h (fun h => h) fun h => False.elim (Duper.true_neq_false h)) (clause. 15 . 0 a);
let clause. 17 . 0 := fun a =>
(fun heq =>
(fun h =>
Or.elim h (fun h => Or.inl (Eq.mp (congrArg (fun x => x = False) heq) h)) fun h =>
Or.inr (Eq.mp (congrArg (fun x => x = False) heq) h))
(clause. 10 . 0 a (skol. 0 a)))
(clause. 16 . 0 a);
let clause. 20 . 0 := clause. 17 . 0 Classical.ofNonempty;
let clause. 21 . 0 := (fun h => Or.elim h (fun h => False.elim (Duper.true_neq_false h)) fun h => h) clause. 20 . 0 ;
(fun h => False.elim (Duper.true_neq_false h)) clause. 21 . 0
example : β {G : Type} [hG : Group G] (x y : G), x * y * yβ»ΒΉ = x
example { G : Type } [ hG : Group G ] ( x y : G ) : x * y * y β»ΒΉ = x :=
by duper? [ inv_mul_cancel : β {G : Type ?u.17780} [inst : Group G] (a : G), aβ»ΒΉ * a = 1
inv_mul_cancel, one_mul : β {M : Type ?u.17789} [inst : MulOneClass M] (a : M), 1 * a = a
one_mul, mul_assoc : β {G : Type ?u.17798} [inst : Semigroup G] (a b c : G), a * b * c = a * (b * c)
mul_assoc] Try this: duper [inv_mul_cancel, one_mul, mul_assoc] {portfolioInstance := 1 } [duper.printProof] Clause # 0 (by assumption []): (β (x x_1 x_2 : _exTy_0),
e! _0 (e! _0 x x_1) x_2 = e! _0 x (e! _0 x_1 x_2)) =
True
[duper.printProof] Clause # 1 (by assumption []): (β (x : _exTy_0), e! _0 e! _1 x = x) = True
[duper.printProof] Clause # 2 (by assumption []): (β (x : _exTy_0), e! _0 (e! _2 x) x = e! _1) = True
[duper.printProof] Clause # 3 (by assumption []): (Β¬ e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) = e! _3) = True
[duper.printProof] Clause # 4 (by clausification [3 ]): (e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) = e! _3) = False
[duper.printProof] Clause # 5 (by clausification [4 ]): e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) β e! _3
[duper.printProof] Clause # 6 (by clausification [1 ]): β (a : _exTy_0), (e! _0 e! _1 a = a) = True
[duper.printProof] Clause # 7 (by clausification [6 ]): β (a : _exTy_0), e! _0 e! _1 a = a
[duper.printProof] Clause # 8 (by clausification [2 ]): β (a : _exTy_0), (e! _0 (e! _2 a) a = e! _1) = True
[duper.printProof] Clause # 9 (by clausification [8 ]): β (a : _exTy_0), e! _0 (e! _2 a) a = e! _1
[duper.printProof] Clause # 10 (by clausification [0 ]): β (a : _exTy_0),
(β (x x_1 : _exTy_0), e! _0 (e! _0 a x) x_1 = e! _0 a (e! _0 x x_1)) = True
[duper.printProof] Clause # 11 (by clausification [10 ]): β (a a_1 : _exTy_0),
(β (x : _exTy_0), e! _0 (e! _0 a a_1) x = e! _0 a (e! _0 a_1 x)) = True
[duper.printProof] Clause # 12 (by clausification [11 ]): β (a a_1 a_2 : _exTy_0),
(e! _0 (e! _0 a a_1) a_2 = e! _0 a (e! _0 a_1 a_2)) = True
[duper.printProof] Clause # 13 (by clausification [12 ]): β (a a_1 a_2 : _exTy_0),
e! _0 (e! _0 a a_1) a_2 = e! _0 a (e! _0 a_1 a_2)
[duper.printProof] Clause # 14 (by backward demodulation [13 , 5 ]): e! _0 e! _3 (e! _0 e! _4 (e! _2 e! _4)) β e! _3
[duper.printProof] Clause # 17 (by superposition [13 ,
9 ]): β (a a_1 : _exTy_0), e! _0 e! _1 a = e! _0 (e! _2 a_1) (e! _0 a_1 a)
[duper.printProof] Clause # 29 (by forward demodulation [17 , 7 ]): β (a a_1 : _exTy_0), a = e! _0 (e! _2 a_1) (e! _0 a_1 a)
[duper.printProof] Clause # 35 (by superposition [29 , 9 ]): β (a : _exTy_0), a = e! _0 (e! _2 (e! _2 a)) e! _1
[duper.printProof] Clause # 93 (by superposition [35 , 29 ]): β (a : _exTy_0), e! _1 = e! _0 (e! _2 (e! _2 (e! _2 a))) a
[duper.printProof] Clause # 138 (by superposition [93 , 29 ]): β (a : _exTy_0), a = e! _0 (e! _2 (e! _2 (e! _2 (e! _2 a)))) e! _1
[duper.printProof] Clause # 180 (by superposition [138 , 35 ]): β (a : _exTy_0), e! _2 (e! _2 a) = a
[duper.printProof] Clause # 189 (by backward demodulation [180 , 35 ]): β (a : _exTy_0), a = e! _0 a e! _1
[duper.printProof] Clause # 191 (by superposition [180 , 9 ]): β (a : _exTy_0), e! _0 a (e! _2 a) = e! _1
[duper.printProof] Clause # 205 (by backward demodulation [191 , 14 ]): e! _0 e! _3 e! _1 β e! _3
[duper.printProof] Clause # 218 (by forward demodulation [205 , 189 ]): e! _3 β e! _3
[duper.printProof] Clause # 219 (by eliminate resolved literals [218 ]): False
[duper.proofReconstruction] Collected clauses: [(β (x x_1 x_2 : _exTy_0),
e! _0 (e! _0 x x_1) x_2 = e! _0 x (e! _0 x_1 x_2)) =
True,
(β (x : _exTy_0), e! _0 e! _1 x = x) = True,
(β (x : _exTy_0), e! _0 (e! _2 x) x = e! _1) = True,
(Β¬ e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) = e! _3) = True,
(e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) = e! _3) = False,
e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) β e! _3,
β (a : _exTy_0), (e! _0 e! _1 a = a) = True,
β (a : _exTy_0), e! _0 e! _1 a = a,
β (a : _exTy_0), (e! _0 (e! _2 a) a = e! _1) = True,
β (a : _exTy_0), e! _0 (e! _2 a) a = e! _1,
β (a : _exTy_0), (β (x x_1 : _exTy_0), e! _0 (e! _0 a x) x_1 = e! _0 a (e! _0 x x_1)) = True,
β (a a_1 : _exTy_0), (β (x : _exTy_0), e! _0 (e! _0 a a_1) x = e! _0 a (e! _0 a_1 x)) = True,
β (a a_1 a_2 : _exTy_0), (e! _0 (e! _0 a a_1) a_2 = e! _0 a (e! _0 a_1 a_2)) = True,
β (a a_1 a_2 : _exTy_0), e! _0 (e! _0 a a_1) a_2 = e! _0 a (e! _0 a_1 a_2),
e! _0 e! _3 (e! _0 e! _4 (e! _2 e! _4)) β e! _3,
β (a a_1 : _exTy_0), e! _0 e! _1 a = e! _0 (e! _2 a_1) (e! _0 a_1 a),
β (a a_1 : _exTy_0), a = e! _0 (e! _2 a_1) (e! _0 a_1 a),
β (a : _exTy_0), a = e! _0 (e! _2 (e! _2 a)) e! _1,
β (a : _exTy_0), e! _1 = e! _0 (e! _2 (e! _2 (e! _2 a))) a,
β (a : _exTy_0), a = e! _0 (e! _2 (e! _2 (e! _2 (e! _2 a)))) e! _1,
β (a : _exTy_0), e! _2 (e! _2 a) = a,
β (a : _exTy_0), a = e! _0 a e! _1,
β (a : _exTy_0), e! _0 a (e! _2 a) = e! _1,
e! _0 e! _3 e! _1 β e! _3,
e! _3 β e! _3,
False]
[duper.proofReconstruction] Request [] β¦ [] for False
[duper.proofReconstruction] Request [] β¦ [] for e! _3 β e! _3
[duper.proofReconstruction] Request [] β¦ [] for e! _0 e! _3 e! _1 β e! _3
[duper.proofReconstruction] Request [] β¦ [] for β (a : _exTy_0), e! _0 a (e! _2 a) = e! _1
[duper.proofReconstruction] Request [] β¦ [] for β (a : _exTy_0), e! _2 (e! _2 a) = a
[duper.proofReconstruction] Request [] β¦ [] for β (a : _exTy_0), a = e! _0 (e! _2 (e! _2 (e! _2 (e! _2 a)))) e! _1
[duper.proofReconstruction] Request [] β¦ [] for β (a : _exTy_0), e! _1 = e! _0 (e! _2 (e! _2 (e! _2 a))) a
[duper.proofReconstruction] Request [] β¦ [] for β (a : _exTy_0), a = e! _0 (e! _2 (e! _2 a)) e! _1
[duper.proofReconstruction] Request [] β¦ [] for β (a a_1 : _exTy_0), a = e! _0 (e! _2 a_1) (e! _0 a_1 a)
[duper.proofReconstruction] Request [] β¦ [] for β (a a_1 : _exTy_0), e! _0 e! _1 a = e! _0 (e! _2 a_1) (e! _0 a_1 a)
[duper.proofReconstruction] Request [] β¦ [] for β (a a_1 a_2 : _exTy_0), e! _0 (e! _0 a a_1) a_2 = e! _0 a (e! _0 a_1 a_2)
[duper.proofReconstruction] Request [] β¦ [] for β (a a_1 a_2 : _exTy_0),
(e! _0 (e! _0 a a_1) a_2 = e! _0 a (e! _0 a_1 a_2)) = True
[duper.proofReconstruction] Request [] β¦ [] for β (a a_1 : _exTy_0),
(β (x : _exTy_0), e! _0 (e! _0 a a_1) x = e! _0 a (e! _0 a_1 x)) = True
[duper.proofReconstruction] Request [] β¦ [] for β (a : _exTy_0),
(β (x x_1 : _exTy_0), e! _0 (e! _0 a x) x_1 = e! _0 a (e! _0 x x_1)) = True
[duper.proofReconstruction] Request [] β¦ [] for (β (x x_1 x_2 : _exTy_0),
e! _0 (e! _0 x x_1) x_2 = e! _0 x (e! _0 x_1 x_2)) =
True
[duper.proofReconstruction] Request [] β¦ [] for β (a : _exTy_0), e! _0 (e! _2 a) a = e! _1
[duper.proofReconstruction] Request [] β¦ [] for β (a : _exTy_0), (e! _0 (e! _2 a) a = e! _1) = True
[duper.proofReconstruction] Request [] β¦ [] for (β (x : _exTy_0), e! _0 (e! _2 x) x = e! _1) = True
[duper.proofReconstruction] Request [] β¦ [] for β (a : _exTy_0), e! _0 e! _1 a = a
[duper.proofReconstruction] Request [] β¦ [] for β (a : _exTy_0), (e! _0 e! _1 a = a) = True
[duper.proofReconstruction] Request [] β¦ [] for (β (x : _exTy_0), e! _0 e! _1 x = x) = True
[duper.proofReconstruction] Request [] β¦ [] for e! _0 e! _3 (e! _0 e! _4 (e! _2 e! _4)) β e! _3
[duper.proofReconstruction] Request [] β¦ [] for e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) β e! _3
[duper.proofReconstruction] Request [] β¦ [] for (e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) = e! _3) = False
[duper.proofReconstruction] Request [] β¦ [] for (Β¬ e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) = e! _3) = True
[duper.proofReconstruction] Request [] β¦ [] for β (a : _exTy_0), a = e! _0 a e! _1
[duper.proofReconstruction] Reconstructing proof for # 0 : [] β¦ [] @ (β (x x_1 x_2 : _exTy_0),
e! _0 (e! _0 x x_1) x_2 = e! _0 x (e! _0 x_1 x_2)) =
True, Rule Name: assumption
[duper.proofReconstruction] # 0 ' s newProof: eq_true Β« _exHyp_uniq. 19630 Β»
[duper.proofReconstruction] Reconstructing proof for # 1 : [] β¦ [] @ (β (x : _exTy_0), e! _0 e! _1 x = x) =
True, Rule Name: assumption
[duper.proofReconstruction] # 1 ' s newProof: eq_true Β« _exHyp_uniq. 19632 Β»
[duper.proofReconstruction] Reconstructing proof for # 2 : [] β¦ [] @ (β (x : _exTy_0), e! _0 (e! _2 x) x = e! _1) =
True, Rule Name: assumption
[duper.proofReconstruction] # 2 ' s newProof: eq_true Β« _exHyp_uniq. 19634 Β»
[duper.proofReconstruction] Reconstructing proof for # 3 : [] β¦ [] @ (Β¬ e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) = e! _3) =
True, Rule Name: assumption
[duper.proofReconstruction] # 3 ' s newProof: eq_true Β« _exHyp_uniq. 19636 Β»
[duper.proofReconstruction] Instantiating parent (Β¬ e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) = e! _3) =
True β‘β‘ (Β¬ e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) = e! _3) = True with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 4 : [] β¦ [] @ (e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) = e! _3) =
False, Rule Name: clausification
[duper.proofReconstruction] # 4 ' s newProof: (fun h => Duper.clausify_not h) clause. 3 . 0
[duper.proofReconstruction] Instantiating parent (e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) = e! _3) =
False β‘β‘ (e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) = e! _3) = False with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 5 : [] β¦ [] @ e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) β
e! _3, Rule Name: clausification
[duper.proofReconstruction] # 5 ' s newProof: (fun h => Duper.not_of_eq_false h) clause. 4 . 0
[duper.proofReconstruction] Instantiating parent (β (x : _exTy_0), e! _0 e! _1 x = x) =
True β‘β‘ _exTy_0 β (β (x : _exTy_0), e! _0 e! _1 x = x) = True with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 6 : [] β¦ [] @ β (a : _exTy_0),
(e! _0 e! _1 a = a) = True, Rule Name: clausification
[duper.proofReconstruction] # 6 ' s newProof: fun a => (fun h => Duper.clausify_forall ((fun x_0 => x_0) a) h) clause. 1 . 0
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
(e! _0 e! _1 a = a) = True β‘β‘ β (x_0 : _exTy_0), (fun a => (e! _0 e! _1 a = a) = True) x_0 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 7 : [] β¦ [] @ β (a : _exTy_0),
e! _0 e! _1 a = a, Rule Name: clausification
[duper.proofReconstruction] # 7 ' s newProof: fun a => (fun h => of_eq_true h) (clause. 6 . 0 a)
[duper.proofReconstruction] Instantiating parent (β (x : _exTy_0), e! _0 (e! _2 x) x = e! _1) =
True β‘β‘ _exTy_0 β (β (x : _exTy_0), e! _0 (e! _2 x) x = e! _1) = True with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 8 : [] β¦ [] @ β (a : _exTy_0),
(e! _0 (e! _2 a) a = e! _1) = True, Rule Name: clausification
[duper.proofReconstruction] # 8 ' s newProof: fun a => (fun h => Duper.clausify_forall ((fun x_0 => x_0) a) h) clause. 2 . 0
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
(e! _0 (e! _2 a) a = e! _1) =
True β‘β‘ β (x_0 : _exTy_0), (fun a => (e! _0 (e! _2 a) a = e! _1) = True) x_0 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 9 : [] β¦ [] @ β (a : _exTy_0),
e! _0 (e! _2 a) a = e! _1, Rule Name: clausification
[duper.proofReconstruction] # 9 ' s newProof: fun a => (fun h => of_eq_true h) (clause. 8 . 0 a)
[duper.proofReconstruction] Instantiating parent (β (x x_1 x_2 : _exTy_0),
e! _0 (e! _0 x x_1) x_2 = e! _0 x (e! _0 x_1 x_2)) =
True β‘β‘ _exTy_0 β
(β (x x_1 x_2 : _exTy_0), e! _0 (e! _0 x x_1) x_2 = e! _0 x (e! _0 x_1 x_2)) = True with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 10 : [] β¦ [] @ β (a : _exTy_0),
(β (x x_1 : _exTy_0), e! _0 (e! _0 a x) x_1 = e! _0 a (e! _0 x x_1)) = True, Rule Name: clausification
[duper.proofReconstruction] # 10 ' s newProof: fun a => (fun h => Duper.clausify_forall ((fun x_0 => x_0) a) h) clause. 0 . 0
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
(β (x x_1 : _exTy_0), e! _0 (e! _0 a x) x_1 = e! _0 a (e! _0 x x_1)) =
True β‘β‘ β (x_0 : _exTy_0),
_exTy_0 β
(fun a => (β (x x_2 : _exTy_0), e! _0 (e! _0 a x) x_2 = e! _0 a (e! _0 x x_2)) = True) x_0 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 11 : [] β¦ [] @ β (a a_1 : _exTy_0),
(β (x : _exTy_0), e! _0 (e! _0 a a_1) x = e! _0 a (e! _0 a_1 x)) = True, Rule Name: clausification
[duper.proofReconstruction] # 11 ' s newProof: fun a a_1 =>
(fun h => Duper.clausify_forall ((fun x_0 x_1 => x_1) a a_1) h) (clause. 10 . 0 a)
[duper.proofReconstruction] Instantiating parent β (a a_1 : _exTy_0),
(β (x : _exTy_0), e! _0 (e! _0 a a_1) x = e! _0 a (e! _0 a_1 x)) =
True β‘β‘ β (x_0 x_1 : _exTy_0),
_exTy_0 β
(fun a a_1 => (β (x : _exTy_0), e! _0 (e! _0 a a_1) x = e! _0 a (e! _0 a_1 x)) = True) x_0
x_1 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 12 : [] β¦ [] @ β (a a_1 a_2 : _exTy_0),
(e! _0 (e! _0 a a_1) a_2 = e! _0 a (e! _0 a_1 a_2)) = True, Rule Name: clausification
[duper.proofReconstruction] # 12 ' s newProof: fun a a_1 a_2 =>
(fun h => Duper.clausify_forall ((fun x_0 x_1 x_2 => x_2) a a_1 a_2) h) (clause. 11 . 0 a a_1)
[duper.proofReconstruction] Instantiating parent β (a a_1 a_2 : _exTy_0),
(e! _0 (e! _0 a a_1) a_2 = e! _0 a (e! _0 a_1 a_2)) =
True β‘β‘ β (x_0 x_1 x_2 : _exTy_0),
(fun a a_1 a_2 => (e! _0 (e! _0 a a_1) a_2 = e! _0 a (e! _0 a_1 a_2)) = True) x_0 x_1 x_2 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 13 : [] β¦ [] @ β (a a_1 a_2 : _exTy_0),
e! _0 (e! _0 a a_1) a_2 = e! _0 a (e! _0 a_1 a_2), Rule Name: clausification
[duper.proofReconstruction] # 13 ' s newProof: fun a a_1 a_2 => (fun h => of_eq_true h) (clause. 12 . 0 a a_1 a_2)
[duper.proofReconstruction] Instantiating parent β (a a_1 a_2 : _exTy_0),
e! _0 (e! _0 a a_1) a_2 =
e! _0 a
(e! _0 a_1
a_2) β‘β‘ (fun a a_1 a_2 => e! _0 (e! _0 a a_1) a_2 = e! _0 a (e! _0 a_1 a_2)) e! _3 e! _4
(e! _2 e! _4) with param subst [] β¦ []
[duper.proofReconstruction] Instantiating parent e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) β
e! _3 β‘β‘ e! _0 (e! _0 e! _3 e! _4) (e! _2 e! _4) β e! _3 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 14 : [] β¦ [] @ e! _0 e! _3 (e! _0 e! _4 (e! _2 e! _4)) β
e! _3, Rule Name: backward demodulation
[duper.proofReconstruction] # 14 ' s newProof: (fun heq =>
(fun h => Eq.mp (congrArg (fun x => x β e! _3) heq) h) clause. 5 . 0 )
(clause. 13 . 0 e! _3 e! _4 (e! _2 e! _4))
[duper.proofReconstruction] Instantiating parent β (a a_1 a_2 : _exTy_0),
e! _0 (e! _0 a a_1) a_2 =
e! _0 a
(e! _0 a_1
a_2) β‘β‘ β (x_0 x_1 : _exTy_0),
(fun a a_1 a_2 => e! _0 (e! _0 a a_1) a_2 = e! _0 a (e! _0 a_1 a_2)) (e! _2 x_1) x_1 x_0 with param subst [] β¦ []
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
e! _0 (e! _2 a) a =
e! _1 β‘β‘ _exTy_0 β β (x_1 : _exTy_0), (fun a => e! _0 (e! _2 a) a = e! _1) x_1 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 17 : [] β¦ [] @ β (a a_1 : _exTy_0),
e! _0 e! _1 a = e! _0 (e! _2 a_1) (e! _0 a_1 a), Rule Name: superposition
[duper.proofReconstruction] # 17 ' s newProof: fun a a_1 =>
(fun heq =>
(fun h => Eq.mp (congrArg (fun x => e! _0 x a = e! _0 (e! _2 a_1) (e! _0 a_1 a)) heq) h)
(clause. 13 . 0 (e! _2 a_1) a_1 a))
(clause. 9 . 0 a_1)
[duper.proofReconstruction] Instantiating parent β (a a_1 : _exTy_0),
e! _0 e! _1 a =
e! _0 (e! _2 a_1)
(e! _0 a_1
a) β‘β‘ β (x_0 x_1 : _exTy_0),
(fun a a_1 => e! _0 e! _1 a = e! _0 (e! _2 a_1) (e! _0 a_1 a)) x_0 x_1 with param subst [] β¦ []
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
e! _0 e! _1 a = a β‘β‘ β (x_0 : _exTy_0), _exTy_0 β (fun a => e! _0 e! _1 a = a) x_0 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 29 : [] β¦ [] @ β (a a_1 : _exTy_0),
a = e! _0 (e! _2 a_1) (e! _0 a_1 a), Rule Name: forward demodulation
[duper.proofReconstruction] # 29 ' s newProof: fun a a_1 =>
(fun heq => (fun h => Eq.mp (congrArg (fun x => x = e! _0 (e! _2 a_1) (e! _0 a_1 a)) heq) h) (clause. 17 . 0 a a_1))
(clause. 7 . 0 a)
[duper.proofReconstruction] Instantiating parent β (a a_1 : _exTy_0),
a =
e! _0 (e! _2 a_1)
(e! _0 a_1
a) β‘β‘ β (x_0 : _exTy_0),
(fun a a_1 => a = e! _0 (e! _2 a_1) (e! _0 a_1 a)) x_0 (e! _2 x_0) with param subst [] β¦ []
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
e! _0 (e! _2 a) a = e! _1 β‘β‘ β (x_0 : _exTy_0), (fun a => e! _0 (e! _2 a) a = e! _1) x_0 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 35 : [] β¦ [] @ β (a : _exTy_0),
a = e! _0 (e! _2 (e! _2 a)) e! _1, Rule Name: superposition
[duper.proofReconstruction] # 35 ' s newProof: fun a =>
(fun heq => (fun h => Eq.mp (congrArg (fun x => a = e! _0 (e! _2 (e! _2 a)) x) heq) h) (clause. 29 . 0 a (e! _2 a)))
(clause. 9 . 0 a)
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
a =
e! _0 (e! _2 (e! _2 a))
e! _1 β‘β‘ β (x_0 : _exTy_0), (fun a => a = e! _0 (e! _2 (e! _2 a)) e! _1) x_0 with param subst [] β¦ []
[duper.proofReconstruction] Instantiating parent β (a a_1 : _exTy_0),
a =
e! _0 (e! _2 a_1)
(e! _0 a_1
a) β‘β‘ β (x_0 : _exTy_0),
(fun a a_1 => a = e! _0 (e! _2 a_1) (e! _0 a_1 a)) e! _1 (e! _2 (e! _2 x_0)) with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 93 : [] β¦ [] @ β (a : _exTy_0),
e! _1 = e! _0 (e! _2 (e! _2 (e! _2 a))) a, Rule Name: superposition
[duper.proofReconstruction] # 93 ' s newProof: fun a =>
(fun heq =>
(fun h => Eq.mp (congrArg (fun x => e! _1 = e! _0 (e! _2 (e! _2 (e! _2 a))) x) (Eq.symm heq)) h)
(clause. 29 . 0 e! _1 (e! _2 (e! _2 a))))
(clause. 35 . 0 a)
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
e! _1 =
e! _0 (e! _2 (e! _2 (e! _2 a)))
a β‘β‘ β (x_0 : _exTy_0), (fun a => e! _1 = e! _0 (e! _2 (e! _2 (e! _2 a))) a) x_0 with param subst [] β¦ []
[duper.proofReconstruction] Instantiating parent β (a a_1 : _exTy_0),
a =
e! _0 (e! _2 a_1)
(e! _0 a_1
a) β‘β‘ β (x_0 : _exTy_0),
(fun a a_1 => a = e! _0 (e! _2 a_1) (e! _0 a_1 a)) x_0 (e! _2 (e! _2 (e! _2 x_0))) with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 138 : [] β¦ [] @ β (a : _exTy_0),
a = e! _0 (e! _2 (e! _2 (e! _2 (e! _2 a)))) e! _1, Rule Name: superposition
[duper.proofReconstruction] # 138 ' s newProof: fun a =>
(fun heq =>
(fun h => Eq.mp (congrArg (fun x => a = e! _0 (e! _2 (e! _2 (e! _2 (e! _2 a)))) x) (Eq.symm heq)) h)
(clause. 29 . 0 a (e! _2 (e! _2 (e! _2 a)))))
(clause. 93 . 0 a)
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
a =
e! _0 (e! _2 (e! _2 (e! _2 (e! _2 a))))
e! _1 β‘β‘ β (x_0 : _exTy_0), (fun a => a = e! _0 (e! _2 (e! _2 (e! _2 (e! _2 a)))) e! _1) x_0 with param subst [] β¦ []
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
a =
e! _0 (e! _2 (e! _2 a))
e! _1 β‘β‘ β (x_0 : _exTy_0), (fun a => a = e! _0 (e! _2 (e! _2 a)) e! _1) (e! _2 (e! _2 x_0)) with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 180 : [] β¦ [] @ β (a : _exTy_0),
e! _2 (e! _2 a) = a, Rule Name: superposition
[duper.proofReconstruction] # 180 ' s newProof: fun a =>
(fun heq =>
(fun h => Eq.mp (congrArg (fun x => e! _2 (e! _2 a) = x) (Eq.symm heq)) h) (clause. 35 . 0 (e! _2 (e! _2 a))))
(clause. 138 . 0 a)
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
e! _2 (e! _2 a) = a β‘β‘ β (x_0 : _exTy_0), (fun a => e! _2 (e! _2 a) = a) x_0 with param subst [] β¦ []
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
a =
e! _0 (e! _2 (e! _2 a))
e! _1 β‘β‘ β (x_0 : _exTy_0), (fun a => a = e! _0 (e! _2 (e! _2 a)) e! _1) x_0 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 189 : [] β¦ [] @ β (a : _exTy_0),
a = e! _0 a e! _1, Rule Name: backward demodulation
[duper.proofReconstruction] # 189 ' s newProof: fun a =>
(fun heq => (fun h => Eq.mp (congrArg (fun x => a = e! _0 x e! _1) heq) h) (clause. 35 . 0 a)) (clause. 180 . 0 a)
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
e! _2 (e! _2 a) = a β‘β‘ β (x_0 : _exTy_0), (fun a => e! _2 (e! _2 a) = a) x_0 with param subst [] β¦ []
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
e! _0 (e! _2 a) a = e! _1 β‘β‘ β (x_0 : _exTy_0), (fun a => e! _0 (e! _2 a) a = e! _1) (e! _2 x_0) with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 191 : [] β¦ [] @ β (a : _exTy_0),
e! _0 a (e! _2 a) = e! _1, Rule Name: superposition
[duper.proofReconstruction] # 191 ' s newProof: fun a =>
(fun heq => (fun h => Eq.mp (congrArg (fun x => e! _0 x (e! _2 a) = e! _1) heq) h) (clause. 9 . 0 (e! _2 a)))
(clause. 180 . 0 a)
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
e! _0 a (e! _2 a) = e! _1 β‘β‘ (fun a => e! _0 a (e! _2 a) = e! _1) e! _4 with param subst [] β¦ []
[duper.proofReconstruction] Instantiating parent e! _0 e! _3 (e! _0 e! _4 (e! _2 e! _4)) β
e! _3 β‘β‘ e! _0 e! _3 (e! _0 e! _4 (e! _2 e! _4)) β e! _3 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 205 : [] β¦ [] @ e! _0 e! _3 e! _1 β
e! _3, Rule Name: backward demodulation
[duper.proofReconstruction] # 205 ' s newProof: (fun heq =>
(fun h => Eq.mp (congrArg (fun x => e! _0 e! _3 x β e! _3) heq) h) clause. 14 . 0 )
(clause. 191 . 0 e! _4)
[duper.proofReconstruction] Instantiating parent e! _0 e! _3 e! _1 β e! _3 β‘β‘ e! _0 e! _3 e! _1 β e! _3 with param subst [] β¦ []
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
a = e! _0 a e! _1 β‘β‘ (fun a => a = e! _0 a e! _1) e! _3 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 218 : [] β¦ [] @ e! _3 β e! _3, Rule Name: forward demodulation
[duper.proofReconstruction] # 218 ' s newProof: (fun heq =>
(fun h => Eq.mp (congrArg (fun x => x β e! _3) (Eq.symm heq)) h) clause. 205 . 0 )
(clause. 189 . 0 e! _3)
[duper.proofReconstruction] Instantiating parent e! _3 β e! _3 β‘β‘ e! _3 β e! _3 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 219 : [] β¦ [] @ False, Rule Name: eliminate resolved literals
[duper.proofReconstruction] # 219 ' s newProof: (fun h => False.elim (h rfl)) clause. 218 . 0
[duper.proofReconstruction] Proof: let clause. 0 . 0 := eq_true Β« _exHyp_uniq. 19630 Β»;
let clause. 1 . 0 := eq_true Β« _exHyp_uniq. 19632 Β»;
let clause. 2 . 0 := eq_true Β« _exHyp_uniq. 19634 Β»;
let clause. 3 . 0 := eq_true Β« _exHyp_uniq. 19636 Β»;
let clause. 4 . 0 := (fun h => Duper.clausify_not h) clause. 3 . 0 ;
let clause. 5 . 0 := (fun h => Duper.not_of_eq_false h) clause. 4 . 0 ;
let clause. 6 . 0 := fun a => (fun h => Duper.clausify_forall ((fun x_0 => x_0) a) h) clause. 1 . 0 ;
let clause. 7 . 0 := fun a => (fun h => of_eq_true h) (clause. 6 . 0 a);
let clause. 8 . 0 := fun a => (fun h => Duper.clausify_forall ((fun x_0 => x_0) a) h) clause. 2 . 0 ;
let clause. 9 . 0 := fun a => (fun h => of_eq_true h) (clause. 8 . 0 a);
let clause. 10 . 0 := fun a => (fun h => Duper.clausify_forall ((fun x_0 => x_0) a) h) clause. 0 . 0 ;
let clause. 11 . 0 := fun a a_1 => (fun h => Duper.clausify_forall ((fun x_0 x_1 => x_1) a a_1) h) (clause. 10 . 0 a);
let clause. 12 . 0 := fun a a_1 a_2 =>
(fun h => Duper.clausify_forall ((fun x_0 x_1 x_2 => x_2) a a_1 a_2) h) (clause. 11 . 0 a a_1);
let clause. 13 . 0 := fun a a_1 a_2 => (fun h => of_eq_true h) (clause. 12 . 0 a a_1 a_2);
let clause. 14 . 0 :=
(fun heq => (fun h => Eq.mp (congrArg (fun x => x β e! _3) heq) h) clause. 5 . 0 ) (clause. 13 . 0 e! _3 e! _4 (e! _2 e! _4));
let clause. 17 . 0 := fun a a_1 =>
(fun heq =>
(fun h => Eq.mp (congrArg (fun x => e! _0 x a = e! _0 (e! _2 a_1) (e! _0 a_1 a)) heq) h)
(clause. 13 . 0 (e! _2 a_1) a_1 a))
(clause. 9 . 0 a_1);
let clause. 29 . 0 := fun a a_1 =>
(fun heq => (fun h => Eq.mp (congrArg (fun x => x = e! _0 (e! _2 a_1) (e! _0 a_1 a)) heq) h) (clause. 17 . 0 a a_1))
(clause. 7 . 0 a);
let clause. 35 . 0 := fun a =>
(fun heq => (fun h => Eq.mp (congrArg (fun x => a = e! _0 (e! _2 (e! _2 a)) x) heq) h) (clause. 29 . 0 a (e! _2 a)))
(clause. 9 . 0 a);
let clause. 93 . 0 := fun a =>
(fun heq =>
(fun h => Eq.mp (congrArg (fun x => e! _1 = e! _0 (e! _2 (e! _2 (e! _2 a))) x) (Eq.symm heq)) h)
(clause. 29 . 0 e! _1 (e! _2 (e! _2 a))))
(clause. 35 . 0 a);
let clause. 138 . 0 := fun a =>
(fun heq =>
(fun h => Eq.mp (congrArg (fun x => a = e! _0 (e! _2 (e! _2 (e! _2 (e! _2 a)))) x) (Eq.symm heq)) h)
(clause. 29 . 0 a (e! _2 (e! _2 (e! _2 a)))))
(clause. 93 . 0 a);
let clause. 180 . 0 := fun a =>
(fun heq =>
(fun h => Eq.mp (congrArg (fun x => e! _2 (e! _2 a) = x) (Eq.symm heq)) h) (clause. 35 . 0 (e! _2 (e! _2 a))))
(clause. 138 . 0 a);
let clause. 189 . 0 := fun a =>
(fun heq => (fun h => Eq.mp (congrArg (fun x => a = e! _0 x e! _1) heq) h) (clause. 35 . 0 a)) (clause. 180 . 0 a);
let clause. 191 . 0 := fun a =>
(fun heq => (fun h => Eq.mp (congrArg (fun x => e! _0 x (e! _2 a) = e! _1) heq) h) (clause. 9 . 0 (e! _2 a)))
(clause. 180 . 0 a);
let clause. 205 . 0 :=
(fun heq => (fun h => Eq.mp (congrArg (fun x => e! _0 e! _3 x β e! _3) heq) h) clause. 14 . 0 ) (clause. 191 . 0 e! _4);
let clause. 218 . 0 :=
(fun heq => (fun h => Eq.mp (congrArg (fun x => x β e! _3) (Eq.symm heq)) h) clause. 205 . 0 ) (clause. 189 . 0 e! _3);
(fun h => False.elim (h rfl)) clause. 218 . 0
example : β (a b : β), |a| - |b| β€ |a - b|
example ( a b : β ) : | a | - | b | β€ | a - b | := by
duper? [ abs_le : β {Ξ± : Type ?u.32822} [inst : LinearOrderedAddCommGroup Ξ±] {a b : Ξ±}, |a| β€ b β -b β€ a β§ a β€ b
abs_le, abs_sub_abs_le_abs_sub : β {Ξ± : Type ?u.32833} [inst : LinearOrderedAddCommGroup Ξ±] (a b : Ξ±), |a| - |b| β€ |a - b|
abs_sub_abs_le_abs_sub] [duper.printProof] Clause # 0 (by assumption []): (β (x x_1 : _exTy_0),
e! _0 (e! _1 (e! _2 x) (e! _2 x_1)) (e! _2 (e! _1 x x_1))) =
True
[duper.printProof] Clause # 2 (by assumption []): (Β¬ e! _0 (e! _1 (e! _2 e! _4) (e! _2 e! _5)) (e! _2 (e! _1 e! _4 e! _5))) = True
[duper.printProof] Clause # 3 (by clausification [2 ]): e! _0 (e! _1 (e! _2 e! _4) (e! _2 e! _5)) (e! _2 (e! _1 e! _4 e! _5)) =
False
[duper.printProof] Clause # 4 (by clausification [0 ]): β (a : _exTy_0),
(β (x : _exTy_0), e! _0 (e! _1 (e! _2 a) (e! _2 x)) (e! _2 (e! _1 a x))) = True
[duper.printProof] Clause # 5 (by clausification [4 ]): β (a a_1 : _exTy_0),
e! _0 (e! _1 (e! _2 a) (e! _2 a_1)) (e! _2 (e! _1 a a_1)) = True
[duper.printProof] Clause # 6 (by superposition [5 , 3 ]): True = False
[duper.printProof] Clause # 7 (by clausification [6 ]): False
[duper.proofReconstruction] Collected clauses: [(β (x x_1 : _exTy_0),
e! _0 (e! _1 (e! _2 x) (e! _2 x_1)) (e! _2 (e! _1 x x_1))) =
True,
(Β¬ e! _0 (e! _1 (e! _2 e! _4) (e! _2 e! _5)) (e! _2 (e! _1 e! _4 e! _5))) = True,
e! _0 (e! _1 (e! _2 e! _4) (e! _2 e! _5)) (e! _2 (e! _1 e! _4 e! _5)) = False,
β (a : _exTy_0), (β (x : _exTy_0), e! _0 (e! _1 (e! _2 a) (e! _2 x)) (e! _2 (e! _1 a x))) = True,
β (a a_1 : _exTy_0), e! _0 (e! _1 (e! _2 a) (e! _2 a_1)) (e! _2 (e! _1 a a_1)) = True,
True = False,
False]
[duper.proofReconstruction] Request [] β¦ [] for False
[duper.proofReconstruction] Request [] β¦ [] for True = False
[duper.proofReconstruction] Request [] β¦ [] for β (a a_1 : _exTy_0),
e! _0 (e! _1 (e! _2 a) (e! _2 a_1)) (e! _2 (e! _1 a a_1)) = True
[duper.proofReconstruction] Request [] β¦ [] for β (a : _exTy_0),
(β (x : _exTy_0), e! _0 (e! _1 (e! _2 a) (e! _2 x)) (e! _2 (e! _1 a x))) = True
[duper.proofReconstruction] Request [] β¦ [] for (β (x x_1 : _exTy_0),
e! _0 (e! _1 (e! _2 x) (e! _2 x_1)) (e! _2 (e! _1 x x_1))) =
True
[duper.proofReconstruction] Request [] β¦ [] for e! _0 (e! _1 (e! _2 e! _4) (e! _2 e! _5)) (e! _2 (e! _1 e! _4 e! _5)) = False
[duper.proofReconstruction] Request [] β¦ [] for (Β¬ e! _0 (e! _1 (e! _2 e! _4) (e! _2 e! _5)) (e! _2 (e! _1 e! _4 e! _5))) = True
[duper.proofReconstruction] Reconstructing proof for # 0 : [] β¦ [] @ (β (x x_1 : _exTy_0),
e! _0 (e! _1 (e! _2 x) (e! _2 x_1)) (e! _2 (e! _1 x x_1))) =
True, Rule Name: assumption
[duper.proofReconstruction] # 0 ' s newProof: eq_true Β« _exHyp_uniq. 34764 Β»
[duper.proofReconstruction] Reconstructing proof for # 2 : [] β¦ [] @ (Β¬ e! _0 (e! _1 (e! _2 e! _4) (e! _2 e! _5))
(e! _2 (e! _1 e! _4 e! _5))) =
True, Rule Name: assumption
[duper.proofReconstruction] # 2 ' s newProof: eq_true Β« _exHyp_uniq. 34768 Β»
[duper.proofReconstruction] Instantiating parent (Β¬ e! _0 (e! _1 (e! _2 e! _4) (e! _2 e! _5)) (e! _2 (e! _1 e! _4 e! _5))) =
True β‘β‘ (Β¬ e! _0 (e! _1 (e! _2 e! _4) (e! _2 e! _5)) (e! _2 (e! _1 e! _4 e! _5))) = True with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 3 : [] β¦ [] @ e! _0 (e! _1 (e! _2 e! _4) (e! _2 e! _5))
(e! _2 (e! _1 e! _4 e! _5)) =
False, Rule Name: clausification
[duper.proofReconstruction] # 3 ' s newProof: (fun h => Duper.clausify_not h) clause. 2 . 0
[duper.proofReconstruction] Instantiating parent (β (x x_1 : _exTy_0),
e! _0 (e! _1 (e! _2 x) (e! _2 x_1)) (e! _2 (e! _1 x x_1))) =
True β‘β‘ _exTy_0 β
(β (x x_1 : _exTy_0), e! _0 (e! _1 (e! _2 x) (e! _2 x_1)) (e! _2 (e! _1 x x_1))) = True with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 4 : [] β¦ [] @ β (a : _exTy_0),
(β (x : _exTy_0), e! _0 (e! _1 (e! _2 a) (e! _2 x)) (e! _2 (e! _1 a x))) = True, Rule Name: clausification
[duper.proofReconstruction] # 4 ' s newProof: fun a => (fun h => Duper.clausify_forall ((fun x_0 => x_0) a) h) clause. 0 . 0
[duper.proofReconstruction] Instantiating parent β (a : _exTy_0),
(β (x : _exTy_0), e! _0 (e! _1 (e! _2 a) (e! _2 x)) (e! _2 (e! _1 a x))) =
True β‘β‘ β (x_0 : _exTy_0),
_exTy_0 β
(fun a => (β (x : _exTy_0), e! _0 (e! _1 (e! _2 a) (e! _2 x)) (e! _2 (e! _1 a x))) = True)
x_0 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 5 : [] β¦ [] @ β (a a_1 : _exTy_0),
e! _0 (e! _1 (e! _2 a) (e! _2 a_1)) (e! _2 (e! _1 a a_1)) = True, Rule Name: clausification
[duper.proofReconstruction] # 5 ' s newProof: fun a a_1 =>
(fun h => Duper.clausify_forall ((fun x_0 x_1 => x_1) a a_1) h) (clause. 4 . 0 a)
[duper.proofReconstruction] Instantiating parent β (a a_1 : _exTy_0),
e! _0 (e! _1 (e! _2 a) (e! _2 a_1)) (e! _2 (e! _1 a a_1)) =
True β‘β‘ (fun a a_1 => e! _0 (e! _1 (e! _2 a) (e! _2 a_1)) (e! _2 (e! _1 a a_1)) = True) e! _4
e! _5 with param subst [] β¦ []
[duper.proofReconstruction] Instantiating parent e! _0 (e! _1 (e! _2 e! _4) (e! _2 e! _5)) (e! _2 (e! _1 e! _4 e! _5)) =
False β‘β‘ e! _0 (e! _1 (e! _2 e! _4) (e! _2 e! _5)) (e! _2 (e! _1 e! _4 e! _5)) = False with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 6 : [] β¦ [] @ True = False, Rule Name: superposition
[duper.proofReconstruction] # 6 ' s newProof: (fun heq =>
(fun h => Eq.mp (congrArg (fun x => x = False) heq) h) clause. 3 . 0 )
(clause. 5 . 0 e! _4 e! _5)
[duper.proofReconstruction] Instantiating parent True = False β‘β‘ True = False with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 7 : [] β¦ [] @ False, Rule Name: clausification
[duper.proofReconstruction] # 7 ' s newProof: (fun h => False.elim (Duper.true_neq_false h)) clause. 6 . 0
[duper.proofReconstruction] Proof: let clause. 0 . 0 := eq_true Β« _exHyp_uniq. 34764 Β»;
let clause. 2 . 0 := eq_true Β« _exHyp_uniq. 34768 Β»;
let clause. 3 . 0 := (fun h => Duper.clausify_not h) clause. 2 . 0 ;
let clause. 4 . 0 := fun a => (fun h => Duper.clausify_forall ((fun x_0 => x_0) a) h) clause. 0 . 0 ;
let clause. 5 . 0 := fun a a_1 => (fun h => Duper.clausify_forall ((fun x_0 x_1 => x_1) a a_1) h) (clause. 4 . 0 a);
let clause. 6 . 0 :=
(fun heq => (fun h => Eq.mp (congrArg (fun x => x = False) heq) h) clause. 3 . 0 ) (clause. 5 . 0 e! _4 e! _5);
(fun h => False.elim (Duper.true_neq_false h)) clause. 6 . 0 Try this: duper [abs_le, abs_sub_abs_le_abs_sub] {portfolioInstance := 1 }
/- Attempting to call `duper` directly on the original goal will fail because it isn't able to generate a
counterexample to Surjf on its own. But if we provide the counterexample, `duper` can solve from there. -/
-- deterministic time out
-- example : β f : Ξ± β Set Ξ±, Β¬Surjective f := by
-- intro f Surjf
-- have counterexample := Surjf {i | i β f i}
-- duper [Set.mem_setOf_eq, counterexample]
example : Module.rank R M = Module.finrank R M := by
duper [ Module.finrank_eq_rank : β (R : Type ?u.39128) (M : Type ?u.39127) [inst : Semiring R] [inst_1 : AddCommMonoid M] [inst_2 : Module R M]
[inst_3 : StrongRankCondition R] [inst_4 : Module.Finite R M], β(Module.finrank R M) = Module.rank R M
Module.finrank_eq_rank] [duper.printProof] Clause # 0 (by assumption []): (Β¬ e! _0 e! _1 = e! _0 e! _1) = True
[duper.printProof] Clause # 1 (by clausification [0 ]): (e! _0 e! _1 = e! _0 e! _1) = False
[duper.printProof] Clause # 2 (by clausification [1 ]): e! _0 e! _1 β e! _0 e! _1
[duper.printProof] Clause # 3 (by eliminate resolved literals [2 ]): False
[duper.proofReconstruction] Collected clauses: [(Β¬ e! _0 e! _1 = e! _0 e! _1) = True,
(e! _0 e! _1 = e! _0 e! _1) = False,
e! _0 e! _1 β e! _0 e! _1,
False]
[duper.proofReconstruction] Request [] β¦ [] for False
[duper.proofReconstruction] Request [] β¦ [] for e! _0 e! _1 β e! _0 e! _1
[duper.proofReconstruction] Request [] β¦ [] for (e! _0 e! _1 = e! _0 e! _1) = False
[duper.proofReconstruction] Request [] β¦ [] for (Β¬ e! _0 e! _1 = e! _0 e! _1) = True
[duper.proofReconstruction] Reconstructing proof for # 0 : [] β¦ [] @ (Β¬ e! _0 e! _1 = e! _0 e! _1) =
True, Rule Name: assumption
[duper.proofReconstruction] # 0 ' s newProof: eq_true Β« _exHyp_uniq. 49488 Β»
[duper.proofReconstruction] Instantiating parent (Β¬ e! _0 e! _1 = e! _0 e! _1) =
True β‘β‘ (Β¬ e! _0 e! _1 = e! _0 e! _1) = True with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 1 : [] β¦ [] @ (e! _0 e! _1 = e! _0 e! _1) =
False, Rule Name: clausification
[duper.proofReconstruction] # 1 ' s newProof: (fun h => Duper.clausify_not h) clause. 0 . 0
[duper.proofReconstruction] Instantiating parent (e! _0 e! _1 = e! _0 e! _1) =
False β‘β‘ (e! _0 e! _1 = e! _0 e! _1) = False with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 2 : [] β¦ [] @ e! _0 e! _1 β e! _0 e! _1, Rule Name: clausification
[duper.proofReconstruction] # 2 ' s newProof: (fun h => Duper.not_of_eq_false h) clause. 1 . 0
[duper.proofReconstruction] Instantiating parent e! _0 e! _1 β e! _0 e! _1 β‘β‘ e! _0 e! _1 β e! _0 e! _1 with param subst [] β¦ []
[duper.proofReconstruction] Reconstructing proof for # 3 : [] β¦ [] @ False, Rule Name: eliminate resolved literals
[duper.proofReconstruction] # 3 ' s newProof: (fun h => False.elim (h rfl)) clause. 2 . 0
[duper.proofReconstruction] Proof: let clause. 0 . 0 := eq_true Β« _exHyp_uniq. 49488 Β»;
let clause. 1 . 0 := (fun h => Duper.clausify_not h) clause. 0 . 0 ;
let clause. 2 . 0 := (fun h => Duper.not_of_eq_false h) clause. 1 . 0 ;
(fun h => False.elim (h rfl)) clause. 2 . 0
done Warning: ' done' tactic does nothing
note: this linter can be disabled with `set_option linter.unusedTactic false`