Built with Alectryon. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+πŸ–±οΈ to focus. On Mac, use ⌘ instead of Ctrl.
Hover-Settings: Show types: Show goals:
Style: centered; floating; windowed.
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ΞΊ
ΞΊ
:
Type uΞΊ: Type (uΞΊ + 1)
Type uΞΊ
} variable {
R: Type uR
R
:
Type uR: Type (uR + 1)
Type uR
} [
CommRing: Type uR β†’ Type uR
CommRing
R: Type uR
R
] [
Invertible: {Ξ± : Type uR} β†’ [inst : Mul Ξ±] β†’ [inst : One Ξ±] β†’ Ξ± β†’ Type uR
Invertible
(
2: R
2
:
R: Type uR
R
)] [
Nontrivial: Type uR β†’ Prop
Nontrivial
R: Type uR
R
] variable {
M: Type uM
M
:
Type uM: Type (uM + 1)
Type uM
} [
AddCommGroup: Type uM β†’ Type uM
AddCommGroup
M: Type uM
M
] [
Module: (R : Type uR) β†’ (M : Type uM) β†’ [inst : Semiring R] β†’ [inst : AddCommMonoid M] β†’ Type (max uR uM)
Module
R: Type uR
R
M: Type uM
M
] -- variable {B : BilinForm R M} variable (
Q: QuadraticForm R M
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: Type uR
R
M: Type uM
M
) {
Cl: CliffordAlgebra Q
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: QuadraticForm R M
Q
} {
Ex: ExteriorAlgebra R M
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: Type uR
R
M: Type uM
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: Type uR
R
M: Type uM
M
] [
Module.Free: (R : Type uR) β†’ (M : Type uM) β†’ [inst : Semiring R] β†’ [inst_1 : AddCommMonoid M] β†’ [inst : Module R M] β†’ Prop
Module.Free
R: Type uR
R
M: Type uM
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
person
:
Type: Type 1
Type
} {
shaves: person β†’ person β†’ Prop
shaves
:
person: Type
person
β†’
person: Type
person
β†’
Prop: Type
Prop
} (
h: βˆƒ b, βˆ€ (p : person), shaves b p ↔ Β¬shaves p p
h
: βˆƒ
b: person
b
:
person: Type
person
, βˆ€
p: person
p
:
person: Type
person
, (
shaves: person β†’ person β†’ Prop
shaves
b: person
b
p: person
p
↔ (Β¬
shaves: person β†’ person β†’ Prop
shaves
p: person
p
p: person
p
))) :
False: Prop
False
:=

Goals accomplished! πŸ™
[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.13518 ≑≑ 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

Goals accomplished! πŸ™
example: βˆ€ {G : Type} [hG : Group G] (x y : G), x * y * y⁻¹ = x
example
{
G: Type
G
:
Type: Type 1
Type
} [
hG: Group G
hG
:
Group: Type β†’ Type
Group
G: Type
G
] (
x: G
x
y: G
y
:
G: Type
G
) :
x: G
x
*
y: G
y
*
y: G
y
⁻¹ =
x: G
x
:=

Goals accomplished! πŸ™
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 #137 (by superposition [93, 29]): βˆ€ (a : _exTy_0), a = e!_0 (e!_2 (e!_2 (e!_2 (e!_2 a)))) e!_1 [duper.printProof] Clause #179 (by superposition [137, 35]): βˆ€ (a : _exTy_0), e!_2 (e!_2 a) = a [duper.printProof] Clause #188 (by backward demodulation [179, 35]): βˆ€ (a : _exTy_0), a = e!_0 a e!_1 [duper.printProof] Clause #190 (by superposition [179, 9]): βˆ€ (a : _exTy_0), e!_0 a (e!_2 a) = e!_1 [duper.printProof] Clause #204 (by backward demodulation [190, 14]): e!_0 e!_3 e!_1 β‰  e!_3 [duper.printProof] Clause #217 (by forward demodulation [204, 188]): e!_3 β‰  e!_3 [duper.printProof] Clause #218 (by eliminate resolved literals [217]): 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.21408Β» [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.21410Β» [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.21412Β» [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.21414Β» [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 #137 : [] ↦ [] @ βˆ€ (a : _exTy_0), a = e!_0 (e!_2 (e!_2 (e!_2 (e!_2 a)))) e!_1, Rule Name: superposition [duper.proofReconstruction] #137'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 #179 : [] ↦ [] @ βˆ€ (a : _exTy_0), e!_2 (e!_2 a) = a, Rule Name: superposition [duper.proofReconstruction] #179'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.137.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 #188 : [] ↦ [] @ βˆ€ (a : _exTy_0), a = e!_0 a e!_1, Rule Name: backward demodulation [duper.proofReconstruction] #188'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.179.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 #190 : [] ↦ [] @ βˆ€ (a : _exTy_0), e!_0 a (e!_2 a) = e!_1, Rule Name: superposition [duper.proofReconstruction] #190'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.179.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 #204 : [] ↦ [] @ e!_0 e!_3 e!_1 β‰  e!_3, Rule Name: backward demodulation [duper.proofReconstruction] #204's newProof: (fun heq => (fun h => Eq.mp (congrArg (fun x => e!_0 e!_3 x β‰  e!_3) heq) h) clause.14.0) (clause.190.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 #217 : [] ↦ [] @ e!_3 β‰  e!_3, Rule Name: forward demodulation [duper.proofReconstruction] #217's newProof: (fun heq => (fun h => Eq.mp (congrArg (fun x => x β‰  e!_3) (Eq.symm heq)) h) clause.204.0) (clause.188.0 e!_3) [duper.proofReconstruction] Instantiating parent e!_3 β‰  e!_3 ≑≑ e!_3 β‰  e!_3 with param subst [] ↦ [] [duper.proofReconstruction] Reconstructing proof for #218 : [] ↦ [] @ False, Rule Name: eliminate resolved literals [duper.proofReconstruction] #218's newProof: (fun h => False.elim (h rfl)) clause.217.0 [duper.proofReconstruction] Proof: let clause.0.0 := eq_true Β«_exHyp_uniq.21408Β»; let clause.1.0 := eq_true Β«_exHyp_uniq.21410Β»; let clause.2.0 := eq_true Β«_exHyp_uniq.21412Β»; let clause.3.0 := eq_true Β«_exHyp_uniq.21414Β»; 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.137.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.179.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.137.0 a); let clause.188.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.179.0 a); let clause.190.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.179.0 a); let clause.204.0 := (fun heq => (fun h => Eq.mp (congrArg (fun x => e!_0 e!_3 x β‰  e!_3) heq) h) clause.14.0) (clause.190.0 e!_4); let clause.217.0 := (fun heq => (fun h => Eq.mp (congrArg (fun x => x β‰  e!_3) (Eq.symm heq)) h) clause.204.0) (clause.188.0 e!_3); (fun h => False.elim (h rfl)) clause.217.0

Goals accomplished! πŸ™
example: βˆ€ (a b : ℝ), |a| - |b| ≀ |a - b|
example
(
a: ℝ
a
b: ℝ
b
:
ℝ: Type
ℝ
) : |
a: ℝ
a
| - |
b: ℝ
b
| ≀ |
a: ℝ
a
-
b: ℝ
b
| :=

Goals accomplished! πŸ™
[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.35868Β» [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.35872Β» [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.35868Β»; let clause.2.0 := eq_true Β«_exHyp_uniq.35872Β»; 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}

Goals accomplished! πŸ™
/- 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. -/ example : βˆ€ f : Ξ± β†’ Set Ξ±, Β¬Surjective f :=

Goals accomplished! πŸ™
ΞΊ: Type uΞΊ
R: Type uR
inst✝⁢: CommRing R
inst✝⁡: Invertible 2
inst✝⁴: Nontrivial R
M: Type uM
inst✝³: AddCommGroup M
inst✝²: Module R M
Q: QuadraticForm R M
Cl: CliffordAlgebra Q
Ex: ExteriorAlgebra R M
inst✝¹: Module.Finite R M
inst✝: Module.Free R M
Ξ±: Type u_1
f: Ξ± β†’ Set Ξ±
Surjf: Surjective f

False
ΞΊ: Type uΞΊ
R: Type uR
inst✝⁢: CommRing R
inst✝⁡: Invertible 2
inst✝⁴: Nontrivial R
M: Type uM
inst✝³: AddCommGroup M
inst✝²: Module R M
Q: QuadraticForm R M
Cl: CliffordAlgebra Q
Ex: ExteriorAlgebra R M
inst✝¹: Module.Finite R M
inst✝: Module.Free R M
Ξ±: Type u_1
f: Ξ± β†’ Set Ξ±
Surjf: Surjective f
counterexample: βˆƒ a, f a = {i | i βˆ‰ f i}

False
[duper.printProof] Clause #0 (by assumption []): (e!_0 e?_0 = e!_1 fun eb!_0 => Β¬e!_2 eb!_0 (e!_0 eb!_0)) = True [duper.printProof] Clause #1 (by assumption []): (βˆ€ (x : _exTy_0) (x_1 : _exTy_0 β†’ Prop), e!_2 x (e!_1 fun eb!_2 => x_1 eb!_2) = x_1 x) = True [duper.printProof] Clause #4 (by clausification [0]): e!_0 e?_0 = e!_1 fun eb!_0 => Β¬e!_2 eb!_0 (e!_0 eb!_0) [duper.printProof] Clause #5 (by betaEtaReduce [1]): (βˆ€ (x : _exTy_0) (x_1 : _exTy_0 β†’ Prop), e!_2 x (e!_1 x_1) = x_1 x) = True [duper.printProof] Clause #6 (by clausification [5]): βˆ€ (a : _exTy_0), (βˆ€ (x : _exTy_0 β†’ Prop), e!_2 a (e!_1 x) = x a) = True [duper.printProof] Clause #7 (by clausification [6]): βˆ€ (a : _exTy_0) (a_1 : _exTy_0 β†’ Prop), (e!_2 a (e!_1 a_1) = a_1 a) = True [duper.printProof] Clause #8 (by clausification [7]): βˆ€ (a : _exTy_0) (a_1 : _exTy_0 β†’ Prop), e!_2 a (e!_1 a_1) = a_1 a [duper.printProof] Clause #12 (by superposition [8, 4]): βˆ€ (a : _exTy_0), e!_2 a (e!_0 e?_0) = Β¬e!_2 a (e!_0 a) [duper.printProof] Clause #23 (by identity loobHoist [12]): βˆ€ (a : _exTy_0), e!_2 a (e!_0 e?_0) = Β¬True ∨ e!_2 a (e!_0 a) = False [duper.printProof] Clause #24 (by identity boolHoist [12]): βˆ€ (a : _exTy_0), e!_2 a (e!_0 e?_0) = Β¬False ∨ e!_2 a (e!_0 a) = True [duper.printProof] Clause #25 (by bool simp [23]): βˆ€ (a : _exTy_0), e!_2 a (e!_0 e?_0) = False ∨ e!_2 a (e!_0 a) = False [duper.printProof] Clause #35 (by bool simp [24]): βˆ€ (a : _exTy_0), e!_2 a (e!_0 e?_0) = True ∨ e!_2 a (e!_0 a) = True [duper.printProof] Clause #37 (by equality factoring [35]): True β‰  True ∨ e!_2 e?_0 (e!_0 e?_0) = True [duper.printProof] Clause #38 (by clausification [37]): e!_2 e?_0 (e!_0 e?_0) = True ∨ True = False ∨ True = False [duper.printProof] Clause #40 (by clausification [38]): e!_2 e?_0 (e!_0 e?_0) = True ∨ True = False [duper.printProof] Clause #41 (by clausification [40]): e!_2 e?_0 (e!_0 e?_0) = True [duper.printProof] Clause #42 (by superposition [41, 25]): True = False ∨ True = False [duper.printProof] Clause #43 (by clausification [42]): True = False [duper.printProof] Clause #44 (by clausification [43]): False [duper.proofReconstruction] Collected clauses: [(e!_0 e?_0 = e!_1 fun eb!_0 => Β¬e!_2 eb!_0 (e!_0 eb!_0)) = True, (βˆ€ (x : _exTy_0) (x_1 : _exTy_0 β†’ Prop), e!_2 x (e!_1 fun eb!_2 => x_1 eb!_2) = x_1 x) = True, e!_0 e?_0 = e!_1 fun eb!_0 => Β¬e!_2 eb!_0 (e!_0 eb!_0), (βˆ€ (x : _exTy_0) (x_1 : _exTy_0 β†’ Prop), e!_2 x (e!_1 x_1) = x_1 x) = True, βˆ€ (a : _exTy_0), (βˆ€ (x : _exTy_0 β†’ Prop), e!_2 a (e!_1 x) = x a) = True, βˆ€ (a : _exTy_0) (a_1 : _exTy_0 β†’ Prop), (e!_2 a (e!_1 a_1) = a_1 a) = True, βˆ€ (a : _exTy_0) (a_1 : _exTy_0 β†’ Prop), e!_2 a (e!_1 a_1) = a_1 a, βˆ€ (a : _exTy_0), e!_2 a (e!_0 e?_0) = Β¬e!_2 a (e!_0 a), βˆ€ (a : _exTy_0), e!_2 a (e!_0 e?_0) = Β¬True ∨ e!_2 a (e!_0 a) = False, βˆ€ (a : _exTy_0), e!_2 a (e!_0 e?_0) = Β¬False ∨ e!_2 a (e!_0 a) = True, βˆ€ (a : _exTy_0), e!_2 a (e!_0 e?_0) = False ∨ e!_2 a (e!_0 a) = False, βˆ€ (a : _exTy_0), e!_2 a (e!_0 e?_0) = True ∨ e!_2 a (e!_0 a) = True, True β‰  True ∨ e!_2 e?_0 (e!_0 e?_0) = True, e!_2 e?_0 (e!_0 e?_0) = True ∨ True = False ∨ True = False, e!_2 e?_0 (e!_0 e?_0) = True ∨ True = False, e!_2 e?_0 (e!_0 e?_0) = True, 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 e!_2 e?_0 (e!_0 e?_0) = True [duper.proofReconstruction] Request [] ↦ [] for e!_2 e?_0 (e!_0 e?_0) = True ∨ True = False [duper.proofReconstruction] Request [] ↦ [] for e!_2 e?_0 (e!_0 e?_0) = True ∨ True = False ∨ True = False [duper.proofReconstruction] Request [] ↦ [] for True β‰  True ∨ e!_2 e?_0 (e!_0 e?_0) = True [duper.proofReconstruction] Request [] ↦ [] for βˆ€ (a : _exTy_0), e!_2 a (e!_0 e?_0) = True ∨ e!_2 a (e!_0 a) = True [duper.proofReconstruction] Request [] ↦ [] for βˆ€ (a : _exTy_0), e!_2 a (e!_0 e?_0) = Β¬False ∨ e!_2 a (e!_0 a) = True [duper.proofReconstruction] Request [] ↦ [] for βˆ€ (a : _exTy_0), e!_2 a (e!_0 e?_0) = Β¬e!_2 a (e!_0 a) [duper.proofReconstruction] Request [] ↦ [] for βˆ€ (a : _exTy_0) (a_1 : _exTy_0 β†’ Prop), e!_2 a (e!_1 a_1) = a_1 a [duper.proofReconstruction] Request [] ↦ [] for βˆ€ (a : _exTy_0) (a_1 : _exTy_0 β†’ Prop), (e!_2 a (e!_1 a_1) = a_1 a) = True [duper.proofReconstruction] Request [] ↦ [] for βˆ€ (a : _exTy_0), (βˆ€ (x : _exTy_0 β†’ Prop), e!_2 a (e!_1 x) = x a) = True [duper.proofReconstruction] Request [] ↦ [] for (βˆ€ (x : _exTy_0) (x_1 : _exTy_0 β†’ Prop), e!_2 x (e!_1 x_1) = x_1 x) = True [duper.proofReconstruction] Request [] ↦ [] for (βˆ€ (x : _exTy_0) (x_1 : _exTy_0 β†’ Prop), e!_2 x (e!_1 fun eb!_2 => x_1 eb!_2) = x_1 x) = True [duper.proofReconstruction] Request [] ↦ [] for e!_0 e?_0 = e!_1 fun eb!_0 => Β¬e!_2 eb!_0 (e!_0 eb!_0) [duper.proofReconstruction] Request [] ↦ [] for (e!_0 e?_0 = e!_1 fun eb!_0 => Β¬e!_2 eb!_0 (e!_0 eb!_0)) = True [duper.proofReconstruction] Request [] ↦ [] for βˆ€ (a : _exTy_0), e!_2 a (e!_0 e?_0) = False ∨ e!_2 a (e!_0 a) = False [duper.proofReconstruction] Request [] ↦ [] for βˆ€ (a : _exTy_0), e!_2 a (e!_0 e?_0) = Β¬True ∨ e!_2 a (e!_0 a) = False [duper.proofReconstruction] Reconstructing proof for #0 : [] ↦ [] @ (e!_0 e?_0 = e!_1 fun eb!_0 => Β¬e!_2 eb!_0 (e!_0 eb!_0)) = True, Rule Name: assumption [duper.proofReconstruction] #0's newProof: eq_true Β«_exHyp_uniq.40213Β» [duper.proofReconstruction] Reconstructing proof for #1 : [] ↦ [] @ (βˆ€ (x : _exTy_0) (x_1 : _exTy_0 β†’ Prop), e!_2 x (e!_1 fun eb!_2 => x_1 eb!_2) = x_1 x) = True, Rule Name: assumption [duper.proofReconstruction] #1's newProof: eq_true Β«_exHyp_uniq.40215Β» [duper.proofReconstruction] Instantiating parent (e!_0 e?_0 = e!_1 fun eb!_0 => Β¬e!_2 eb!_0 (e!_0 eb!_0)) = True ≑≑ (e!_0 e?_0 = e!_1 fun eb!_0 => Β¬e!_2 eb!_0 (e!_0 eb!_0)) = True with param subst [] ↦ [] [duper.proofReconstruction] Reconstructing proof for #4 : [] ↦ [] @ e!_0 e?_0 = e!_1 fun eb!_0 => Β¬e!_2 eb!_0 (e!_0 eb!_0), Rule Name: clausification [duper.proofReconstruction] #4's newProof: (fun h => of_eq_true h) clause.0.0 [duper.proofReconstruction] Instantiating parent (βˆ€ (x : _exTy_0) (x_1 : _exTy_0 β†’ Prop), e!_2 x (e!_1 fun eb!_2 => x_1 eb!_2) = x_1 x) = True ≑≑ (βˆ€ (x : _exTy_0) (x_1 : _exTy_0 β†’ Prop), e!_2 x (e!_1 fun eb!_2 => x_1 eb!_2) = x_1 x) = True with param subst [] ↦ [] [duper.proofReconstruction] Reconstructing proof for #5 : [] ↦ [] @ (βˆ€ (x : _exTy_0) (x_1 : _exTy_0 β†’ Prop), e!_2 x (e!_1 x_1) = x_1 x) = True, Rule Name: betaEtaReduce [duper.proofReconstruction] #5's newProof: clause.1.0 [duper.proofReconstruction] Instantiating parent (βˆ€ (x : _exTy_0) (x_1 : _exTy_0 β†’ Prop), e!_2 x (e!_1 x_1) = x_1 x) = True ≑≑ _exTy_0 β†’ (βˆ€ (x : _exTy_0) (x_1 : _exTy_0 β†’ Prop), e!_2 x (e!_1 x_1) = x_1 x) = True with param subst [] ↦ [] [duper.proofReconstruction] Reconstructing proof for #6 : [] ↦ [] @ βˆ€ (a : _exTy_0), (βˆ€ (x : _exTy_0 β†’ Prop), e!_2 a (e!_1 x) = x 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.5.0 [duper.proofReconstruction] Instantiating parent βˆ€ (a : _exTy_0), (βˆ€ (x : _exTy_0 β†’ Prop), e!_2 a (e!_1 x) = x a) = True ≑≑ βˆ€ (x_0 : _exTy_0), (_exTy_0 β†’ Prop) β†’ (fun a => (βˆ€ (x : _exTy_0 β†’ Prop), e!_2 a (e!_1 x) = x a) = True) x_0 with param subst [] ↦ [] [duper.proofReconstruction] Reconstructing proof for #7 : [] ↦ [] @ βˆ€ (a : _exTy_0) (a_1 : _exTy_0 β†’ Prop), (e!_2 a (e!_1 a_1) = a_1 a) = True, Rule Name: clausification [duper.proofReconstruction] #7's newProof: fun a a_1 => (fun h => Duper.clausify_forall ((fun x_0 x_1 => x_1) a a_1) h) (clause.6.0 a) [duper.proofReconstruction] Instantiating parent βˆ€ (a : _exTy_0) (a_1 : _exTy_0 β†’ Prop), (e!_2 a (e!_1 a_1) = a_1 a) = True ≑≑ βˆ€ (x_0 : _exTy_0) (x_1 : _exTy_0 β†’ Prop), (fun a a_1 => (e!_2 a (e!_1 a_1) = a_1 a) = True) x_0 x_1 with param subst [] ↦ [] [duper.proofReconstruction] Reconstructing proof for #8 : [] ↦ [] @ βˆ€ (a : _exTy_0) (a_1 : _exTy_0 β†’ Prop), e!_2 a (e!_1 a_1) = a_1 a, Rule Name: clausification [duper.proofReconstruction] #8's newProof: fun a a_1 => (fun h => of_eq_true h) (clause.7.0 a a_1) [duper.proofReconstruction] Instantiating parent βˆ€ (a : _exTy_0) (a_1 : _exTy_0 β†’ Prop), e!_2 a (e!_1 a_1) = a_1 a ≑≑ βˆ€ (x_0 : _exTy_0), (fun a a_1 => e!_2 a (e!_1 a_1) = a_1 a) x_0 fun eb!_0 => Β¬e!_2 eb!_0 (e!_0 eb!_0) with param subst [] ↦ [] [duper.proofReconstruction] Instantiating parent e!_0 e?_0 = e!_1 fun eb!_0 => Β¬e!_2 eb!_0 (e!_0 eb!_0) ≑≑ _exTy_0 β†’ e!_0 e?_0 = e!_1 fun eb!_0 => Β¬e!_2 eb!_0 (e!_0 eb!_0) with param subst [] ↦ [] [duper.proofReconstruction] Reconstructing proof for #12 : [] ↦ [] @ βˆ€ (a : _exTy_0), e!_2 a (e!_0 e?_0) = Β¬e!_2 a (e!_0 a), Rule Name: superposition [duper.proofReconstruction] #12's newProof: fun a => (fun heq => (fun h => Eq.mp (congrArg (fun x => e!_2 a x = (fun eb!_0 => Β¬e!_2 eb!_0 (e!_0 eb!_0)) a) (Eq.symm heq)) h) (clause.8.0 a fun eb!_0 => Β¬e!_2 eb!_0 (e!_0 eb!_0))) clause.4.0 [duper.proofReconstruction] Instantiating parent βˆ€ (a : _exTy_0), e!_2 a (e!_0 e?_0) = Β¬e!_2 a (e!_0 a) ≑≑ βˆ€ (x_0 : _exTy_0), (fun a => e!_2 a (e!_0 e?_0) = Β¬e!_2 a (e!_0 a)) x_0 with param subst [] ↦ [] [duper.proofReconstruction] Reconstructing proof for #23 : [] ↦ [] @ βˆ€ (a : _exTy_0), e!_2 a (e!_0 e?_0) = Β¬True ∨ e!_2 a (e!_0 a) = False, Rule Name: identity loobHoist [duper.proofReconstruction] #23's newProof: fun a => (fun h => Duper.loob_hoist_proof (fun h => e!_2 a (e!_0 e?_0) = Β¬h) (e!_2 a (e!_0 a)) h) (clause.12.0 a) [duper.proofReconstruction] Instantiating parent βˆ€ (a : _exTy_0), e!_2 a (e!_0 e?_0) = Β¬e!_2 a (e!_0 a) ≑≑ βˆ€ (x_0 : _exTy_0), (fun a => e!_2 a (e!_0 e?_0) = Β¬e!_2 a (e!_0 a)) x_0 with param subst [] ↦ [] [duper.proofReconstruction] Reconstructing proof for #24 : [] ↦ [] @ βˆ€ (a : _exTy_0), e!_2 a (e!_0 e?_0) = Β¬False ∨ e!_2 a (e!_0 a) = True, Rule Name: identity boolHoist [duper.proofReconstruction] #24's newProof: fun a => (fun h => Duper.bool_hoist_proof (fun h => e!_2 a (e!_0 e?_0) = Β¬h) (e!_2 a (e!_0 a)) h) (clause.12.0 a) [duper.proofReconstruction] Instantiating parent βˆ€ (a : _exTy_0), e!_2 a (e!_0 e?_0) = Β¬True ∨ e!_2 a (e!_0 a) = False ≑≑ βˆ€ (x_0 : _exTy_0), (fun a => e!_2 a (e!_0 e?_0) = Β¬True ∨ e!_2 a (e!_0 a) = False) x_0 with param subst [] ↦ [] [duper.proofReconstruction] Reconstructing proof for #25 : [] ↦ [] @ βˆ€ (a : _exTy_0), e!_2 a (e!_0 e?_0) = False ∨ e!_2 a (e!_0 a) = False, Rule Name: bool simp [duper.proofReconstruction] #25's newProof: fun a => (fun h => Or.elim h (fun h => Or.inl (Eq.mp (congrArg (fun x => e!_2 a (e!_0 e?_0) = x) Duper.rule14Theorem) h)) fun h => Or.inr h) (clause.23.0 a) [duper.proofReconstruction] Instantiating parent βˆ€ (a : _exTy_0), e!_2 a (e!_0 e?_0) = Β¬False ∨ e!_2 a (e!_0 a) = True ≑≑ βˆ€ (x_0 : _exTy_0), (fun a => e!_2 a (e!_0 e?_0) = Β¬False ∨ e!_2 a (e!_0 a) = True) x_0 with param subst [] ↦ [] [duper.proofReconstruction] Reconstructing proof for #35 : [] ↦ [] @ βˆ€ (a : _exTy_0), e!_2 a (e!_0 e?_0) = True ∨ e!_2 a (e!_0 a) = True, Rule Name: bool simp [duper.proofReconstruction] #35's newProof: fun a => (fun h => Or.elim h (fun h => Or.inl (Eq.mp (congrArg (fun x => e!_2 a (e!_0 e?_0) = x) Duper.rule7Theorem) h)) fun h => Or.inr h) (clause.24.0 a) [duper.proofReconstruction] Instantiating parent βˆ€ (a : _exTy_0), e!_2 a (e!_0 e?_0) = True ∨ e!_2 a (e!_0 a) = True ≑≑ (fun a => e!_2 a (e!_0 e?_0) = True ∨ e!_2 a (e!_0 a) = True) e?_0 with param subst [] ↦ [] [duper.proofReconstruction] Reconstructing proof for #37 : [] ↦ [] @ True β‰  True ∨ e!_2 e?_0 (e!_0 e?_0) = True, Rule Name: equality factoring [duper.proofReconstruction] #37's newProof: (fun h => Or.elim h (fun h => Duper.equality_factoring_soundness1 True h) fun h => Or.inr h) (clause.35.0 e?_0) [duper.proofReconstruction] Instantiating parent True β‰  True ∨ e!_2 e?_0 (e!_0 e?_0) = True ≑≑ True β‰  True ∨ e!_2 e?_0 (e!_0 e?_0) = True with param subst [] ↦ [] [duper.proofReconstruction] Reconstructing proof for #38 : [] ↦ [] @ e!_2 e?_0 (e!_0 e?_0) = True ∨ True = False ∨ True = False, Rule Name: clausification [duper.proofReconstruction] #38's newProof: (fun h => Or.elim h (fun h => Or.inr (Duper.clausify_prop_inequality1 h)) fun h => Or.inl h) clause.37.0 [duper.proofReconstruction] Instantiating parent e!_2 e?_0 (e!_0 e?_0) = True ∨ True = False ∨ True = False ≑≑ e!_2 e?_0 (e!_0 e?_0) = True ∨ True = False ∨ True = False with param subst [] ↦ [] [duper.proofReconstruction] Reconstructing proof for #40 : [] ↦ [] @ e!_2 e?_0 (e!_0 e?_0) = True ∨ True = False, Rule Name: clausification [duper.proofReconstruction] #40's newProof: (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.38.0 [duper.proofReconstruction] Instantiating parent e!_2 e?_0 (e!_0 e?_0) = True ∨ True = False ≑≑ e!_2 e?_0 (e!_0 e?_0) = True ∨ True = False with param subst [] ↦ [] [duper.proofReconstruction] Reconstructing proof for #41 : [] ↦ [] @ e!_2 e?_0 (e!_0 e?_0) = True, Rule Name: clausification [duper.proofReconstruction] #41's newProof: (fun h => Or.elim h (fun h => h) fun h => False.elim (Duper.true_neq_false h)) clause.40.0 [duper.proofReconstruction] Instantiating parent e!_2 e?_0 (e!_0 e?_0) = True ≑≑ e!_2 e?_0 (e!_0 e?_0) = True with param subst [] ↦ [] [duper.proofReconstruction] Instantiating parent βˆ€ (a : _exTy_0), e!_2 a (e!_0 e?_0) = False ∨ e!_2 a (e!_0 a) = False ≑≑ (fun a => e!_2 a (e!_0 e?_0) = False ∨ e!_2 a (e!_0 a) = False) e?_0 with param subst [] ↦ [] [duper.proofReconstruction] Reconstructing proof for #42 : [] ↦ [] @ True = False ∨ True = False, Rule Name: superposition [duper.proofReconstruction] #42's newProof: (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.25.0 e?_0)) clause.41.0 [duper.proofReconstruction] Instantiating parent True = False ∨ True = False ≑≑ True = False ∨ True = False with param subst [] ↦ [] [duper.proofReconstruction] Reconstructing proof for #43 : [] ↦ [] @ True = False, Rule Name: clausification [duper.proofReconstruction] #43's newProof: (fun h => Or.elim h (fun h => False.elim (Duper.true_neq_false h)) fun h => h) clause.42.0 [duper.proofReconstruction] Instantiating parent True = False ≑≑ True = False with param subst [] ↦ [] [duper.proofReconstruction] Reconstructing proof for #44 : [] ↦ [] @ False, Rule Name: clausification [duper.proofReconstruction] #44's newProof: (fun h => False.elim (Duper.true_neq_false h)) clause.43.0 [duper.proofReconstruction] Proof: let clause.0.0 := eq_true Β«_exHyp_uniq.40213Β»; let clause.1.0 := eq_true Β«_exHyp_uniq.40215Β»; let clause.4.0 := (fun h => of_eq_true h) clause.0.0; let clause.5.0 := clause.1.0; let clause.6.0 := fun a => (fun h => Duper.clausify_forall ((fun x_0 => x_0) a) h) clause.5.0; let clause.7.0 := fun a a_1 => (fun h => Duper.clausify_forall ((fun x_0 x_1 => x_1) a a_1) h) (clause.6.0 a); let clause.8.0 := fun a a_1 => (fun h => of_eq_true h) (clause.7.0 a a_1); let clause.12.0 := fun a => (fun heq => (fun h => Eq.mp (congrArg (fun x => e!_2 a x = (fun eb!_0 => Β¬e!_2 eb!_0 (e!_0 eb!_0)) a) (Eq.symm heq)) h) (clause.8.0 a fun eb!_0 => Β¬e!_2 eb!_0 (e!_0 eb!_0))) clause.4.0; let clause.23.0 := fun a => (fun h => Duper.loob_hoist_proof (fun h => e!_2 a (e!_0 e?_0) = Β¬h) (e!_2 a (e!_0 a)) h) (clause.12.0 a); let clause.24.0 := fun a => (fun h => Duper.bool_hoist_proof (fun h => e!_2 a (e!_0 e?_0) = Β¬h) (e!_2 a (e!_0 a)) h) (clause.12.0 a); let clause.25.0 := fun a => (fun h => Or.elim h (fun h => Or.inl (Eq.mp (congrArg (fun x => e!_2 a (e!_0 e?_0) = x) Duper.rule14Theorem) h)) fun h => Or.inr h) (clause.23.0 a); let clause.35.0 := fun a => (fun h => Or.elim h (fun h => Or.inl (Eq.mp (congrArg (fun x => e!_2 a (e!_0 e?_0) = x) Duper.rule7Theorem) h)) fun h => Or.inr h) (clause.24.0 a); let clause.37.0 := (fun h => Or.elim h (fun h => Duper.equality_factoring_soundness1 True h) fun h => Or.inr h) (clause.35.0 e?_0); let clause.38.0 := (fun h => Or.elim h (fun h => Or.inr (Duper.clausify_prop_inequality1 h)) fun h => Or.inl h) clause.37.0; let clause.40.0 := (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.38.0; let clause.41.0 := (fun h => Or.elim h (fun h => h) fun h => False.elim (Duper.true_neq_false h)) clause.40.0; let clause.42.0 := (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.25.0 e?_0)) clause.41.0; let clause.43.0 := (fun h => Or.elim h (fun h => False.elim (Duper.true_neq_false h)) fun h => h) clause.42.0; (fun h => False.elim (Duper.true_neq_false h)) clause.43.0

Goals accomplished! πŸ™
example: βˆ€ {R : Type uR} [inst : CommRing R] [inst_1 : Nontrivial R] {M : Type uM} [inst_2 : AddCommGroup M] [inst_3 : Module R M] [inst_4 : Module.Finite R M], Module.rank R M = ↑(finrank R M)
example
:
Module.rank: (R : Type uR) β†’ (M : Type uM) β†’ [inst : Semiring R] β†’ [inst_1 : AddCommMonoid M] β†’ [inst : Module R M] β†’ Cardinal.{uM}
Module.rank
R: Type uR
R
M: Type uM
M
=
finrank: (R : Type uR) β†’ (M : Type uM) β†’ [inst : Semiring R] β†’ [inst_1 : AddCommGroup M] β†’ [inst : Module R M] β†’ β„•
finrank
R: Type uR
R
M: Type uM
M
:=

Goals accomplished! πŸ™
[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.90683Β» [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.90683Β»; 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

Goals accomplished! πŸ™
Warning: 'done' tactic does nothing note: this linter can be disabled with `set_option linter.unusedTactic false`

Goals accomplished! πŸ™