Theorem: LO.FirstOrder.Rew.positive_iff (Logic/FirstOrder/Basic/Syntax/Rew.lean)

State before:
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
t : Semiterm L ξ (n + 1)
⊢ t.Positive → ∃ t', t = bShift t'
Tactic:
induction t <;> simp
State after:
case bvar
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
a✝ : Fin (n + 1)
⊢ 0 < a✝ → ∃ t', #a✝ = bShift t'

case fvar
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
a✝ : ξ
⊢ ∃ t', &a✝ = bShift t'

case func
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
arity✝ : ℕ
a✝¹ : L.Func arity✝
a✝ : Fin arity✝ → Semiterm L ξ (n + 1)
a_ih✝ : ∀ (a : Fin arity✝), (a✝ a).Positive → ∃ t', a✝ a = bShift t'
⊢ (∀ (i : Fin arity✝), (a✝ i).Positive) → ∃ t', func a✝¹ a✝ = bShift t'

State before:
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
x : Fin (n + 1)
⊢ 0 < x → ∃ t', #x = bShift t'
Tactic:
case bvar x =>
  intro hx; exact ⟨#(x.pred (Fin.pos_iff_ne_zero.mp hx)), by simp⟩
State after:
no goals

State before:
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
x : ξ
⊢ ∃ t', &x = bShift t'
Tactic:
case fvar x => exact ⟨&x, by simp⟩
State after:
no goals

State before:
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
k : ℕ
f : L.Func k
v : Fin k → Semiterm L ξ (n + 1)
ih : ∀ (a : Fin k), (v a).Positive → ∃ t', v a = bShift t'
⊢ (∀ (i : Fin k), (v i).Positive) → ∃ t', func f v = bShift t'
Tactic:
case func k f v ih =>
  intro h
  have : ∀ i, ∃ t', v i = bShift t' := fun i => ih i (h i)
  choose w hw using this
  exact ⟨func f w, by simp [Rew.func]; funext i; exact hw i⟩
State after:
no goals

State before:
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
x : Fin (n + 1)
⊢ 0 < x → ∃ t', #x = bShift t'
Tactic:
intro hx
State after:
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
x : Fin (n + 1)
hx : 0 < x
⊢ ∃ t', #x = bShift t'

State before:
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
x : Fin (n + 1)
hx : 0 < x
⊢ ∃ t', #x = bShift t'
Tactic:
exact ⟨#(x.pred (Fin.pos_iff_ne_zero.mp hx)), by simp⟩
State after:
no goals

State before:
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
x : Fin (n + 1)
hx : 0 < x
⊢ #x = bShift #(x.pred ⋯)
Tactic:
simp
State after:
no goals

State before:
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
x : ξ
⊢ ∃ t', &x = bShift t'
Tactic:
exact ⟨&x, by simp⟩
State after:
no goals

State before:
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
x : ξ
⊢ &x = bShift &x
Tactic:
simp
State after:
no goals

State before:
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
k : ℕ
f : L.Func k
v : Fin k → Semiterm L ξ (n + 1)
ih : ∀ (a : Fin k), (v a).Positive → ∃ t', v a = bShift t'
⊢ (∀ (i : Fin k), (v i).Positive) → ∃ t', func f v = bShift t'
Tactic:
intro h
State after:
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
k : ℕ
f : L.Func k
v : Fin k → Semiterm L ξ (n + 1)
ih : ∀ (a : Fin k), (v a).Positive → ∃ t', v a = bShift t'
h : ∀ (i : Fin k), (v i).Positive
⊢ ∃ t', func f v = bShift t'

State before:
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
k : ℕ
f : L.Func k
v : Fin k → Semiterm L ξ (n + 1)
ih : ∀ (a : Fin k), (v a).Positive → ∃ t', v a = bShift t'
h : ∀ (i : Fin k), (v i).Positive
⊢ ∃ t', func f v = bShift t'
Tactic:
have : ∀ i, ∃ t', v i = bShift t' := fun i => ih i (h i)
State after:
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
k : ℕ
f : L.Func k
v : Fin k → Semiterm L ξ (n + 1)
ih : ∀ (a : Fin k), (v a).Positive → ∃ t', v a = bShift t'
h : ∀ (i : Fin k), (v i).Positive
this : ∀ (i : Fin k), ∃ t', v i = bShift t'
⊢ ∃ t', func f v = bShift t'

State before:
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
k : ℕ
f : L.Func k
v : Fin k → Semiterm L ξ (n + 1)
ih : ∀ (a : Fin k), (v a).Positive → ∃ t', v a = bShift t'
h : ∀ (i : Fin k), (v i).Positive
this : ∀ (i : Fin k), ∃ t', v i = bShift t'
⊢ ∃ t', func f v = bShift t'
Tactic:
choose w hw using this
State after:
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
k : ℕ
f : L.Func k
v : Fin k → Semiterm L ξ (n + 1)
ih : ∀ (a : Fin k), (v a).Positive → ∃ t', v a = bShift t'
h : ∀ (i : Fin k), (v i).Positive
w : Fin k → Semiterm L ξ n
hw : ∀ (i : Fin k), v i = bShift (w i)
⊢ ∃ t', func f v = bShift t'

State before:
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
k : ℕ
f : L.Func k
v : Fin k → Semiterm L ξ (n + 1)
ih : ∀ (a : Fin k), (v a).Positive → ∃ t', v a = bShift t'
h : ∀ (i : Fin k), (v i).Positive
w : Fin k → Semiterm L ξ n
hw : ∀ (i : Fin k), v i = bShift (w i)
⊢ ∃ t', func f v = bShift t'
Tactic:
exact ⟨func f w, by simp [Rew.func]; funext i; exact hw i⟩
State after:
no goals

State before:
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
k : ℕ
f : L.Func k
v : Fin k → Semiterm L ξ (n + 1)
ih : ∀ (a : Fin k), (v a).Positive → ∃ t', v a = bShift t'
h : ∀ (i : Fin k), (v i).Positive
w : Fin k → Semiterm L ξ n
hw : ∀ (i : Fin k), v i = bShift (w i)
⊢ func f v = bShift (func f w)
Tactic:
simp [Rew.func]
State after:
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
k : ℕ
f : L.Func k
v : Fin k → Semiterm L ξ (n + 1)
ih : ∀ (a : Fin k), (v a).Positive → ∃ t', v a = bShift t'
h : ∀ (i : Fin k), (v i).Positive
w : Fin k → Semiterm L ξ n
hw : ∀ (i : Fin k), v i = bShift (w i)
⊢ v = fun i => bShift (w i)

State before:
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
k : ℕ
f : L.Func k
v : Fin k → Semiterm L ξ (n + 1)
ih : ∀ (a : Fin k), (v a).Positive → ∃ t', v a = bShift t'
h : ∀ (i : Fin k), (v i).Positive
w : Fin k → Semiterm L ξ n
hw : ∀ (i : Fin k), v i = bShift (w i)
⊢ v = fun i => bShift (w i)
Tactic:
funext i
State after:
case h
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
k : ℕ
f : L.Func k
v : Fin k → Semiterm L ξ (n + 1)
ih : ∀ (a : Fin k), (v a).Positive → ∃ t', v a = bShift t'
h : ∀ (i : Fin k), (v i).Positive
w : Fin k → Semiterm L ξ n
hw : ∀ (i : Fin k), v i = bShift (w i)
i : Fin k
⊢ v i = bShift (w i)

State before:
case h
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
k : ℕ
f : L.Func k
v : Fin k → Semiterm L ξ (n + 1)
ih : ∀ (a : Fin k), (v a).Positive → ∃ t', v a = bShift t'
h : ∀ (i : Fin k), (v i).Positive
w : Fin k → Semiterm L ξ n
hw : ∀ (i : Fin k), v i = bShift (w i)
i : Fin k
⊢ v i = bShift (w i)
Tactic:
exact hw i
State after:
no goals

State before:
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
t : Semiterm L ξ (n + 1)
⊢ (∃ t', t = bShift t') → t.Positive
Tactic:
rintro ⟨t', rfl⟩
State after:
case intro
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
t' : Semiterm L ξ n
⊢ (bShift t').Positive

State before:
case intro
L : Language
L' : Language
L₁ : Language
L₂ : Language
L₃ : Language
ξ : Type u_1
ξ' : Type u_2
ξ₁ : Type u_3
ξ₂ : Type u_4
ξ₃ : Type u_5
n n₁ n₂ n₃ : ℕ
ω : Rew L ξ₁ n₁ ξ₂ n₂
t' : Semiterm L ξ n
⊢ (bShift t').Positive
Tactic:
simp
State after:
no goals