internlm/Lean-Github huggingface dataset:
Theorem: combMo_preserves_truth_at_oldWOrld
Proof state before:
case right.left.intro.intro
β : Type
collection : β → (W : Type) × ℕ × KripkeModel W × W
newVal : ℕ → Prop
mF : Formula
mR : β
moW : (collection mR).fst
a : Program
R₁ R₂ : β
oldWorld₁ : (collection R₁).fst
oldWorld₂ : (collection R₂).fst
hneq : R₁ ≠ R₂
IH_rel :
  ∀ (R : β) (oldWorld₁ oldWorld₂ : (collection R).fst),
    relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld₁⟩) (Sum.inr ⟨R, oldWorld₂⟩) ↔
      relate (collection R).snd.2.1 a oldWorld₁ oldWorld₂
noNewL :
  ∀ (R : β) (oldWorld : (collection R).fst),
    ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
sameR : ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R₁, oldWorld₁⟩) (Sum.inr ⟨R₂, oldWorld₂⟩)
⊢ ¬Relation.ReflTransGen (relate (combinedModel collection newVal).1 a) (Sum.inr ⟨R₁, oldWorld₁⟩)
      (Sum.inr ⟨R₂, oldWorld₂⟩)
Tactic:
sorry
Proof state after:
no goals
Theorem: combMo_preserves_truth_at_oldWOrld
Proof state before:
case right.right
β : Type
collection : β → (W : Type) × ℕ × KripkeModel W × W
newVal : ℕ → Prop
mF : Formula
mR : β
moW : (collection mR).fst
a : Program
IH_a :
  (∀ (R : β) (oldWorld₁ oldWorld₂ : (collection R).fst),
      relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld₁⟩) (Sum.inr ⟨R, oldWorld₂⟩) ↔
        relate (collection R).snd.2.1 a oldWorld₁ oldWorld₂) ∧
    (∀ (R₁ R₂ : β) (oldWorld₁ : (collection R₁).fst) (oldWorld₂ : (collection R₂).fst),
        R₁ ≠ R₂ → ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R₁, oldWorld₁⟩) (Sum.inr ⟨R₂, oldWorld₂⟩)) ∧
      ∀ (R : β) (oldWorld : (collection R).fst),
        ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
⊢ ∀ (R : β) (oldWorld : (collection R).fst),
    ¬relate (combinedModel collection newVal).1 (∗a) (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
Tactic:
intro R oldWorld
Proof state after:
case right.right
β : Type
collection : β → (W : Type) × ℕ × KripkeModel W × W
newVal : ℕ → Prop
mF : Formula
mR : β
moW : (collection mR).fst
a : Program
IH_a :
  (∀ (R : β) (oldWorld₁ oldWorld₂ : (collection R).fst),
      relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld₁⟩) (Sum.inr ⟨R, oldWorld₂⟩) ↔
        relate (collection R).snd.2.1 a oldWorld₁ oldWorld₂) ∧
    (∀ (R₁ R₂ : β) (oldWorld₁ : (collection R₁).fst) (oldWorld₂ : (collection R₂).fst),
        R₁ ≠ R₂ → ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R₁, oldWorld₁⟩) (Sum.inr ⟨R₂, oldWorld₂⟩)) ∧
      ∀ (R : β) (oldWorld : (collection R).fst),
        ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
R : β
oldWorld : (collection R).fst
⊢ ¬relate (combinedModel collection newVal).1 (∗a) (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
Theorem: combMo_preserves_truth_at_oldWOrld
Proof state before:
case right.right
β : Type
collection : β → (W : Type) × ℕ × KripkeModel W × W
newVal : ℕ → Prop
mF : Formula
mR : β
moW : (collection mR).fst
a : Program
IH_a :
  (∀ (R : β) (oldWorld₁ oldWorld₂ : (collection R).fst),
      relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld₁⟩) (Sum.inr ⟨R, oldWorld₂⟩) ↔
        relate (collection R).snd.2.1 a oldWorld₁ oldWorld₂) ∧
    (∀ (R₁ R₂ : β) (oldWorld₁ : (collection R₁).fst) (oldWorld₂ : (collection R₂).fst),
        R₁ ≠ R₂ → ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R₁, oldWorld₁⟩) (Sum.inr ⟨R₂, oldWorld₂⟩)) ∧
      ∀ (R : β) (oldWorld : (collection R).fst),
        ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
R : β
oldWorld : (collection R).fst
⊢ ¬relate (combinedModel collection newVal).1 (∗a) (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
Tactic:
unfold relate
Proof state after:
case right.right
β : Type
collection : β → (W : Type) × ℕ × KripkeModel W × W
newVal : ℕ → Prop
mF : Formula
mR : β
moW : (collection mR).fst
a : Program
IH_a :
  (∀ (R : β) (oldWorld₁ oldWorld₂ : (collection R).fst),
      relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld₁⟩) (Sum.inr ⟨R, oldWorld₂⟩) ↔
        relate (collection R).snd.2.1 a oldWorld₁ oldWorld₂) ∧
    (∀ (R₁ R₂ : β) (oldWorld₁ : (collection R₁).fst) (oldWorld₂ : (collection R₂).fst),
        R₁ ≠ R₂ → ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R₁, oldWorld₁⟩) (Sum.inr ⟨R₂, oldWorld₂⟩)) ∧
      ∀ (R : β) (oldWorld : (collection R).fst),
        ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
R : β
oldWorld : (collection R).fst
⊢ ¬Relation.ReflTransGen (relate (combinedModel collection newVal).1 a) (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
Theorem: combMo_preserves_truth_at_oldWOrld
Proof state before:
case right.right
β : Type
collection : β → (W : Type) × ℕ × KripkeModel W × W
newVal : ℕ → Prop
mF : Formula
mR : β
moW : (collection mR).fst
a : Program
IH_a :
  (∀ (R : β) (oldWorld₁ oldWorld₂ : (collection R).fst),
      relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld₁⟩) (Sum.inr ⟨R, oldWorld₂⟩) ↔
        relate (collection R).snd.2.1 a oldWorld₁ oldWorld₂) ∧
    (∀ (R₁ R₂ : β) (oldWorld₁ : (collection R₁).fst) (oldWorld₂ : (collection R₂).fst),
        R₁ ≠ R₂ → ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R₁, oldWorld₁⟩) (Sum.inr ⟨R₂, oldWorld₂⟩)) ∧
      ∀ (R : β) (oldWorld : (collection R).fst),
        ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
R : β
oldWorld : (collection R).fst
⊢ ¬Relation.ReflTransGen (relate (combinedModel collection newVal).1 a) (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
Tactic:
intro star_rel
Proof state after:
case right.right
β : Type
collection : β → (W : Type) × ℕ × KripkeModel W × W
newVal : ℕ → Prop
mF : Formula
mR : β
moW : (collection mR).fst
a : Program
IH_a :
  (∀ (R : β) (oldWorld₁ oldWorld₂ : (collection R).fst),
      relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld₁⟩) (Sum.inr ⟨R, oldWorld₂⟩) ↔
        relate (collection R).snd.2.1 a oldWorld₁ oldWorld₂) ∧
    (∀ (R₁ R₂ : β) (oldWorld₁ : (collection R₁).fst) (oldWorld₂ : (collection R₂).fst),
        R₁ ≠ R₂ → ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R₁, oldWorld₁⟩) (Sum.inr ⟨R₂, oldWorld₂⟩)) ∧
      ∀ (R : β) (oldWorld : (collection R).fst),
        ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
R : β
oldWorld : (collection R).fst
star_rel : Relation.ReflTransGen (relate (combinedModel collection newVal).1 a) (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
⊢ False
Theorem: combMo_preserves_truth_at_oldWOrld
Proof state before:
case right.right
β : Type
collection : β → (W : Type) × ℕ × KripkeModel W × W
newVal : ℕ → Prop
mF : Formula
mR : β
moW : (collection mR).fst
a : Program
IH_a :
  (∀ (R : β) (oldWorld₁ oldWorld₂ : (collection R).fst),
      relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld₁⟩) (Sum.inr ⟨R, oldWorld₂⟩) ↔
        relate (collection R).snd.2.1 a oldWorld₁ oldWorld₂) ∧
    (∀ (R₁ R₂ : β) (oldWorld₁ : (collection R₁).fst) (oldWorld₂ : (collection R₂).fst),
        R₁ ≠ R₂ → ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R₁, oldWorld₁⟩) (Sum.inr ⟨R₂, oldWorld₂⟩)) ∧
      ∀ (R : β) (oldWorld : (collection R).fst),
        ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
R : β
oldWorld : (collection R).fst
star_rel : Relation.ReflTransGen (relate (combinedModel collection newVal).1 a) (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
⊢ False
Tactic:
cases ReflTransGen.cases_tail_eq_neq star_rel
Proof state after:
case right.right.inl
β : Type
collection : β → (W : Type) × ℕ × KripkeModel W × W
newVal : ℕ → Prop
mF : Formula
mR : β
moW : (collection mR).fst
a : Program
IH_a :
  (∀ (R : β) (oldWorld₁ oldWorld₂ : (collection R).fst),
      relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld₁⟩) (Sum.inr ⟨R, oldWorld₂⟩) ↔
        relate (collection R).snd.2.1 a oldWorld₁ oldWorld₂) ∧
    (∀ (R₁ R₂ : β) (oldWorld₁ : (collection R₁).fst) (oldWorld₂ : (collection R₂).fst),
        R₁ ≠ R₂ → ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R₁, oldWorld₁⟩) (Sum.inr ⟨R₂, oldWorld₂⟩)) ∧
      ∀ (R : β) (oldWorld : (collection R).fst),
        ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
R : β
oldWorld : (collection R).fst
star_rel : Relation.ReflTransGen (relate (combinedModel collection newVal).1 a) (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
h✝ : Sum.inr ⟨R, oldWorld⟩ = Sum.inl ()
⊢ False

case right.right.inr
β : Type
collection : β → (W : Type) × ℕ × KripkeModel W × W
newVal : ℕ → Prop
mF : Formula
mR : β
moW : (collection mR).fst
a : Program
IH_a :
  (∀ (R : β) (oldWorld₁ oldWorld₂ : (collection R).fst),
      relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld₁⟩) (Sum.inr ⟨R, oldWorld₂⟩) ↔
        relate (collection R).snd.2.1 a oldWorld₁ oldWorld₂) ∧
    (∀ (R₁ R₂ : β) (oldWorld₁ : (collection R₁).fst) (oldWorld₂ : (collection R₂).fst),
        R₁ ≠ R₂ → ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R₁, oldWorld₁⟩) (Sum.inr ⟨R₂, oldWorld₂⟩)) ∧
      ∀ (R : β) (oldWorld : (collection R).fst),
        ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
R : β
oldWorld : (collection R).fst
star_rel : Relation.ReflTransGen (relate (combinedModel collection newVal).1 a) (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
h✝ :
  Sum.inr ⟨R, oldWorld⟩ ≠ Sum.inl () ∧
    ∃ y,
      Sum.inr ⟨R, oldWorld⟩ ≠ y ∧
        relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) y ∧
          Relation.ReflTransGen (relate (combinedModel collection newVal).1 a) y (Sum.inl ())
⊢ False
Theorem: combMo_preserves_truth_at_oldWOrld
Proof state before:
β : Type
collection : β → (W : Type) × ℕ × KripkeModel W × W
newVal : ℕ → Prop
mF : Formula
mR : β
moW : (collection mR).fst
a : Program
IH_a :
  (∀ (R : β) (oldWorld₁ oldWorld₂ : (collection R).fst),
      relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld₁⟩) (Sum.inr ⟨R, oldWorld₂⟩) ↔
        relate (collection R).snd.2.1 a oldWorld₁ oldWorld₂) ∧
    (∀ (R₁ R₂ : β) (oldWorld₁ : (collection R₁).fst) (oldWorld₂ : (collection R₂).fst),
        R₁ ≠ R₂ → ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R₁, oldWorld₁⟩) (Sum.inr ⟨R₂, oldWorld₂⟩)) ∧
      ∀ (R : β) (oldWorld : (collection R).fst),
        ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
R : β
oldWorld : (collection R).fst
star_rel : Relation.ReflTransGen (relate (combinedModel collection newVal).1 a) (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
hyp : Sum.inr ⟨R, oldWorld⟩ = Sum.inl ()
⊢ False
Tactic:
case inl hyp => simp at hyp
Proof state after:
no goals
Theorem: combMo_preserves_truth_at_oldWOrld
Proof state before:
β : Type
collection : β → (W : Type) × ℕ × KripkeModel W × W
newVal : ℕ → Prop
mF : Formula
mR : β
moW : (collection mR).fst
a : Program
IH_a :
  (∀ (R : β) (oldWorld₁ oldWorld₂ : (collection R).fst),
      relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld₁⟩) (Sum.inr ⟨R, oldWorld₂⟩) ↔
        relate (collection R).snd.2.1 a oldWorld₁ oldWorld₂) ∧
    (∀ (R₁ R₂ : β) (oldWorld₁ : (collection R₁).fst) (oldWorld₂ : (collection R₂).fst),
        R₁ ≠ R₂ → ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R₁, oldWorld₁⟩) (Sum.inr ⟨R₂, oldWorld₂⟩)) ∧
      ∀ (R : β) (oldWorld : (collection R).fst),
        ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
R : β
oldWorld : (collection R).fst
star_rel : Relation.ReflTransGen (relate (combinedModel collection newVal).1 a) (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
hyp : Sum.inr ⟨R, oldWorld⟩ = Sum.inl ()
⊢ False
Tactic:
simp at hyp
Proof state after:
no goals
Theorem: combMo_preserves_truth_at_oldWOrld
Proof state before:
β : Type
collection : β → (W : Type) × ℕ × KripkeModel W × W
newVal : ℕ → Prop
mF : Formula
mR : β
moW : (collection mR).fst
a : Program
IH_a :
  (∀ (R : β) (oldWorld₁ oldWorld₂ : (collection R).fst),
      relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld₁⟩) (Sum.inr ⟨R, oldWorld₂⟩) ↔
        relate (collection R).snd.2.1 a oldWorld₁ oldWorld₂) ∧
    (∀ (R₁ R₂ : β) (oldWorld₁ : (collection R₁).fst) (oldWorld₂ : (collection R₂).fst),
        R₁ ≠ R₂ → ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R₁, oldWorld₁⟩) (Sum.inr ⟨R₂, oldWorld₂⟩)) ∧
      ∀ (R : β) (oldWorld : (collection R).fst),
        ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
R : β
oldWorld : (collection R).fst
star_rel : Relation.ReflTransGen (relate (combinedModel collection newVal).1 a) (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
hyp :
  Sum.inr ⟨R, oldWorld⟩ ≠ Sum.inl () ∧
    ∃ y,
      Sum.inr ⟨R, oldWorld⟩ ≠ y ∧
        relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) y ∧
          Relation.ReflTransGen (relate (combinedModel collection newVal).1 a) y (Sum.inl ())
⊢ False
Tactic:
rcases hyp.2 with ⟨u, _neq_u, a_rel_to_u, b_rel_u_to⟩
Proof state after:
case intro.intro.intro
β : Type
collection : β → (W : Type) × ℕ × KripkeModel W × W
newVal : ℕ → Prop
mF : Formula
mR : β
moW : (collection mR).fst
a : Program
IH_a :
  (∀ (R : β) (oldWorld₁ oldWorld₂ : (collection R).fst),
      relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld₁⟩) (Sum.inr ⟨R, oldWorld₂⟩) ↔
        relate (collection R).snd.2.1 a oldWorld₁ oldWorld₂) ∧
    (∀ (R₁ R₂ : β) (oldWorld₁ : (collection R₁).fst) (oldWorld₂ : (collection R₂).fst),
        R₁ ≠ R₂ → ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R₁, oldWorld₁⟩) (Sum.inr ⟨R₂, oldWorld₂⟩)) ∧
      ∀ (R : β) (oldWorld : (collection R).fst),
        ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
R : β
oldWorld : (collection R).fst
star_rel : Relation.ReflTransGen (relate (combinedModel collection newVal).1 a) (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
hyp :
  Sum.inr ⟨R, oldWorld⟩ ≠ Sum.inl () ∧
    ∃ y,
      Sum.inr ⟨R, oldWorld⟩ ≠ y ∧
        relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) y ∧
          Relation.ReflTransGen (relate (combinedModel collection newVal).1 a) y (Sum.inl ())
u : Unit ⊕ (k : β) × (collection k).fst
_neq_u : Sum.inr ⟨R, oldWorld⟩ ≠ u
a_rel_to_u : relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) u
b_rel_u_to : Relation.ReflTransGen (relate (combinedModel collection newVal).1 a) u (Sum.inl ())
⊢ False
Theorem: combMo_preserves_truth_at_oldWOrld
Proof state before:
case intro.intro.intro.inl
β : Type
collection : β → (W : Type) × ℕ × KripkeModel W × W
newVal : ℕ → Prop
mF : Formula
mR : β
moW : (collection mR).fst
a : Program
IH_a :
  (∀ (R : β) (oldWorld₁ oldWorld₂ : (collection R).fst),
      relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld₁⟩) (Sum.inr ⟨R, oldWorld₂⟩) ↔
        relate (collection R).snd.2.1 a oldWorld₁ oldWorld₂) ∧
    (∀ (R₁ R₂ : β) (oldWorld₁ : (collection R₁).fst) (oldWorld₂ : (collection R₂).fst),
        R₁ ≠ R₂ → ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R₁, oldWorld₁⟩) (Sum.inr ⟨R₂, oldWorld₂⟩)) ∧
      ∀ (R : β) (oldWorld : (collection R).fst),
        ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
R : β
oldWorld : (collection R).fst
star_rel : Relation.ReflTransGen (relate (combinedModel collection newVal).1 a) (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
hyp :
  Sum.inr ⟨R, oldWorld⟩ ≠ Sum.inl () ∧
    ∃ y,
      Sum.inr ⟨R, oldWorld⟩ ≠ y ∧
        relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) y ∧
          Relation.ReflTransGen (relate (combinedModel collection newVal).1 a) y (Sum.inl ())
val✝ : Unit
_neq_u : Sum.inr ⟨R, oldWorld⟩ ≠ Sum.inl val✝
a_rel_to_u : relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) (Sum.inl val✝)
b_rel_u_to : Relation.ReflTransGen (relate (combinedModel collection newVal).1 a) (Sum.inl val✝) (Sum.inl ())
⊢ False
Tactic:
absurd a_rel_to_u
Proof state after:
case intro.intro.intro.inl
β : Type
collection : β → (W : Type) × ℕ × KripkeModel W × W
newVal : ℕ → Prop
mF : Formula
mR : β
moW : (collection mR).fst
a : Program
IH_a :
  (∀ (R : β) (oldWorld₁ oldWorld₂ : (collection R).fst),
      relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld₁⟩) (Sum.inr ⟨R, oldWorld₂⟩) ↔
        relate (collection R).snd.2.1 a oldWorld₁ oldWorld₂) ∧
    (∀ (R₁ R₂ : β) (oldWorld₁ : (collection R₁).fst) (oldWorld₂ : (collection R₂).fst),
        R₁ ≠ R₂ → ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R₁, oldWorld₁⟩) (Sum.inr ⟨R₂, oldWorld₂⟩)) ∧
      ∀ (R : β) (oldWorld : (collection R).fst),
        ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
R : β
oldWorld : (collection R).fst
star_rel : Relation.ReflTransGen (relate (combinedModel collection newVal).1 a) (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
hyp :
  Sum.inr ⟨R, oldWorld⟩ ≠ Sum.inl () ∧
    ∃ y,
      Sum.inr ⟨R, oldWorld⟩ ≠ y ∧
        relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) y ∧
          Relation.ReflTransGen (relate (combinedModel collection newVal).1 a) y (Sum.inl ())
val✝ : Unit
_neq_u : Sum.inr ⟨R, oldWorld⟩ ≠ Sum.inl val✝
a_rel_to_u : relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) (Sum.inl val✝)
b_rel_u_to : Relation.ReflTransGen (relate (combinedModel collection newVal).1 a) (Sum.inl val✝) (Sum.inl ())
⊢ ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) (Sum.inl val✝)
Theorem: combMo_preserves_truth_at_oldWOrld
Proof state before:
case intro.intro.intro.inl
β : Type
collection : β → (W : Type) × ℕ × KripkeModel W × W
newVal : ℕ → Prop
mF : Formula
mR : β
moW : (collection mR).fst
a : Program
IH_a :
  (∀ (R : β) (oldWorld₁ oldWorld₂ : (collection R).fst),
      relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld₁⟩) (Sum.inr ⟨R, oldWorld₂⟩) ↔
        relate (collection R).snd.2.1 a oldWorld₁ oldWorld₂) ∧
    (∀ (R₁ R₂ : β) (oldWorld₁ : (collection R₁).fst) (oldWorld₂ : (collection R₂).fst),
        R₁ ≠ R₂ → ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R₁, oldWorld₁⟩) (Sum.inr ⟨R₂, oldWorld₂⟩)) ∧
      ∀ (R : β) (oldWorld : (collection R).fst),
        ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
R : β
oldWorld : (collection R).fst
star_rel : Relation.ReflTransGen (relate (combinedModel collection newVal).1 a) (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
hyp :
  Sum.inr ⟨R, oldWorld⟩ ≠ Sum.inl () ∧
    ∃ y,
      Sum.inr ⟨R, oldWorld⟩ ≠ y ∧
        relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) y ∧
          Relation.ReflTransGen (relate (combinedModel collection newVal).1 a) y (Sum.inl ())
val✝ : Unit
_neq_u : Sum.inr ⟨R, oldWorld⟩ ≠ Sum.inl val✝
a_rel_to_u : relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) (Sum.inl val✝)
b_rel_u_to : Relation.ReflTransGen (relate (combinedModel collection newVal).1 a) (Sum.inl val✝) (Sum.inl ())
⊢ ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) (Sum.inl val✝)
Tactic:
rcases IH_a with ⟨IH_rel, sameR, noNewL⟩
Proof state after:
case intro.intro.intro.inl.intro.intro
β : Type
collection : β → (W : Type) × ℕ × KripkeModel W × W
newVal : ℕ → Prop
mF : Formula
mR : β
moW : (collection mR).fst
a : Program
R : β
oldWorld : (collection R).fst
star_rel : Relation.ReflTransGen (relate (combinedModel collection newVal).1 a) (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
hyp :
  Sum.inr ⟨R, oldWorld⟩ ≠ Sum.inl () ∧
    ∃ y,
      Sum.inr ⟨R, oldWorld⟩ ≠ y ∧
        relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) y ∧
          Relation.ReflTransGen (relate (combinedModel collection newVal).1 a) y (Sum.inl ())
val✝ : Unit
_neq_u : Sum.inr ⟨R, oldWorld⟩ ≠ Sum.inl val✝
a_rel_to_u : relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) (Sum.inl val✝)
b_rel_u_to : Relation.ReflTransGen (relate (combinedModel collection newVal).1 a) (Sum.inl val✝) (Sum.inl ())
IH_rel :
  ∀ (R : β) (oldWorld₁ oldWorld₂ : (collection R).fst),
    relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld₁⟩) (Sum.inr ⟨R, oldWorld₂⟩) ↔
      relate (collection R).snd.2.1 a oldWorld₁ oldWorld₂
sameR :
  ∀ (R₁ R₂ : β) (oldWorld₁ : (collection R₁).fst) (oldWorld₂ : (collection R₂).fst),
    R₁ ≠ R₂ → ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R₁, oldWorld₁⟩) (Sum.inr ⟨R₂, oldWorld₂⟩)
noNewL :
  ∀ (R : β) (oldWorld : (collection R).fst),
    ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
⊢ ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) (Sum.inl val✝)
Theorem: combMo_preserves_truth_at_oldWOrld
Proof state before:
case intro.intro.intro.inl.intro.intro
β : Type
collection : β → (W : Type) × ℕ × KripkeModel W × W
newVal : ℕ → Prop
mF : Formula
mR : β
moW : (collection mR).fst
a : Program
R : β
oldWorld : (collection R).fst
star_rel : Relation.ReflTransGen (relate (combinedModel collection newVal).1 a) (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
hyp :
  Sum.inr ⟨R, oldWorld⟩ ≠ Sum.inl () ∧
    ∃ y,
      Sum.inr ⟨R, oldWorld⟩ ≠ y ∧
        relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) y ∧
          Relation.ReflTransGen (relate (combinedModel collection newVal).1 a) y (Sum.inl ())
val✝ : Unit
_neq_u : Sum.inr ⟨R, oldWorld⟩ ≠ Sum.inl val✝
a_rel_to_u : relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) (Sum.inl val✝)
b_rel_u_to : Relation.ReflTransGen (relate (combinedModel collection newVal).1 a) (Sum.inl val✝) (Sum.inl ())
IH_rel :
  ∀ (R : β) (oldWorld₁ oldWorld₂ : (collection R).fst),
    relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld₁⟩) (Sum.inr ⟨R, oldWorld₂⟩) ↔
      relate (collection R).snd.2.1 a oldWorld₁ oldWorld₂
sameR :
  ∀ (R₁ R₂ : β) (oldWorld₁ : (collection R₁).fst) (oldWorld₂ : (collection R₂).fst),
    R₁ ≠ R₂ → ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R₁, oldWorld₁⟩) (Sum.inr ⟨R₂, oldWorld₂⟩)
noNewL :
  ∀ (R : β) (oldWorld : (collection R).fst),
    ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) (Sum.inl ())
⊢ ¬relate (combinedModel collection newVal).1 a (Sum.inr ⟨R, oldWorld⟩) (Sum.inl val✝)
Tactic:
apply noNewL
Proof state after:
no goals