Theorem: Lean4Axiomatic.Integer.positive_mul_sgn_self (Lean4Axiomatic/Integer/Sign.lean)

State before:
ℕ : Type
inst✝⁵ : Natural ℕ
ℤ : Type
inst✝⁴ : Core ℤ
inst✝³ : Addition ℤ
inst✝² : Multiplication ℤ
inst✝¹ : Negation ℤ
inst✝ : Sign ℤ
a : ℤ
⊢ Nonzero a → Positive (a * sgn a)
Tactic:
intro (_ : Nonzero a)
State after:
ℕ : Type
inst✝⁵ : Natural ℕ
ℤ : Type
inst✝⁴ : Core ℤ
inst✝³ : Addition ℤ
inst✝² : Multiplication ℤ
inst✝¹ : Negation ℤ
inst✝ : Sign ℤ
a : ℤ
x✝ : Nonzero a
⊢ Positive (a * sgn a)

State before:
ℕ : Type
inst✝⁵ : Natural ℕ
ℤ : Type
inst✝⁴ : Core ℤ
inst✝³ : Addition ℤ
inst✝² : Multiplication ℤ
inst✝¹ : Negation ℤ
inst✝ : Sign ℤ
a : ℤ
x✝ : Nonzero a
⊢ Positive (a * sgn a)
Tactic:
have : Sqrt1 (sgn a) := sgn_nonzero.mp ‹Nonzero a›
State after:
ℕ : Type
inst✝⁵ : Natural ℕ
ℤ : Type
inst✝⁴ : Core ℤ
inst✝³ : Addition ℤ
inst✝² : Multiplication ℤ
inst✝¹ : Negation ℤ
inst✝ : Sign ℤ
a : ℤ
x✝ : Nonzero a
this : Sqrt1 (sgn a)
⊢ Positive (a * sgn a)

State before:
ℕ : Type
inst✝⁵ : Natural ℕ
ℤ : Type
inst✝⁴ : Core ℤ
inst✝³ : Addition ℤ
inst✝² : Multiplication ℤ
inst✝¹ : Negation ℤ
inst✝ : Sign ℤ
a : ℤ
x✝ : Nonzero a
this : Sqrt1 (sgn a)
⊢ Positive (a * sgn a)
Tactic:
have : sgn a * sgn a ≃ 1 := this.elim
State after:
ℕ : Type
inst✝⁵ : Natural ℕ
ℤ : Type
inst✝⁴ : Core ℤ
inst✝³ : Addition ℤ
inst✝² : Multiplication ℤ
inst✝¹ : Negation ℤ
inst✝ : Sign ℤ
a : ℤ
x✝ : Nonzero a
this✝ : Sqrt1 (sgn a)
this : sgn a * sgn a ≃ 1
⊢ Positive (a * sgn a)

State before:
ℕ : Type
inst✝⁵ : Natural ℕ
ℤ : Type
inst✝⁴ : Core ℤ
inst✝³ : Addition ℤ
inst✝² : Multiplication ℤ
inst✝¹ : Negation ℤ
inst✝ : Sign ℤ
a : ℤ
x✝ : Nonzero a
this✝ : Sqrt1 (sgn a)
this : sgn a * sgn a ≃ 1
⊢ Positive (a * sgn a)
Tactic:
have : sgn (a * sgn a) ≃ 1 := calc
  sgn (a * sgn a)     ≃ _ := sgn_compat_mul
  sgn a * sgn (sgn a) ≃ _ := AA.substR sgn_idemp
  sgn a * sgn a       ≃ _ := ‹sgn a * sgn a ≃ 1›
  1                   ≃ _ := Rel.refl
State after:
ℕ : Type
inst✝⁵ : Natural ℕ
ℤ : Type
inst✝⁴ : Core ℤ
inst✝³ : Addition ℤ
inst✝² : Multiplication ℤ
inst✝¹ : Negation ℤ
inst✝ : Sign ℤ
a : ℤ
x✝ : Nonzero a
this✝¹ : Sqrt1 (sgn a)
this✝ : sgn a * sgn a ≃ 1
this : sgn (a * sgn a) ≃ 1
⊢ Positive (a * sgn a)

State before:
ℕ : Type
inst✝⁵ : Natural ℕ
ℤ : Type
inst✝⁴ : Core ℤ
inst✝³ : Addition ℤ
inst✝² : Multiplication ℤ
inst✝¹ : Negation ℤ
inst✝ : Sign ℤ
a : ℤ
x✝ : Nonzero a
this✝¹ : Sqrt1 (sgn a)
this✝ : sgn a * sgn a ≃ 1
this : sgn (a * sgn a) ≃ 1
⊢ Positive (a * sgn a)
Tactic:
have : Positive (a * sgn a) := sgn_positive.mpr ‹sgn (a * sgn a) ≃ 1›
State after:
ℕ : Type
inst✝⁵ : Natural ℕ
ℤ : Type
inst✝⁴ : Core ℤ
inst✝³ : Addition ℤ
inst✝² : Multiplication ℤ
inst✝¹ : Negation ℤ
inst✝ : Sign ℤ
a : ℤ
x✝ : Nonzero a
this✝² : Sqrt1 (sgn a)
this✝¹ : sgn a * sgn a ≃ 1
this✝ : sgn (a * sgn a) ≃ 1
this : Positive (a * sgn a)
⊢ Positive (a * sgn a)

State before:
ℕ : Type
inst✝⁵ : Natural ℕ
ℤ : Type
inst✝⁴ : Core ℤ
inst✝³ : Addition ℤ
inst✝² : Multiplication ℤ
inst✝¹ : Negation ℤ
inst✝ : Sign ℤ
a : ℤ
x✝ : Nonzero a
this✝² : Sqrt1 (sgn a)
this✝¹ : sgn a * sgn a ≃ 1
this✝ : sgn (a * sgn a) ≃ 1
this : Positive (a * sgn a)
⊢ Positive (a * sgn a)
Tactic:
exact this
State after:
no goals