Skip to content

Commit 0e96318

Browse files
authored
chore: update DTreeMap proofs with more unfolding induction (#8382)
This is a post-stage0 update following #8359.
1 parent 7994e55 commit 0e96318

File tree

2 files changed

+28
-72
lines changed

2 files changed

+28
-72
lines changed

src/Std/Data/DTreeMap/Internal/Balancing.lean

Lines changed: 24 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -529,9 +529,8 @@ attribute [Std.Internal.tree_tac] and_true true_and and_self heq_eq_eq inner.inj
529529
theorem balance!_eq_balanceₘ {k v} {l r : Impl α β} (hlb : l.Balanced) (hrb : r.Balanced)
530530
(hlr : BalanceLErasePrecond l.size r.size ∨ BalanceLErasePrecond r.size l.size) :
531531
balance! k v l r = balanceₘ k v l r := by
532-
set_option tactic.fun_induction.unfolding false in
533532
fun_cases balance!
534-
all_goals dsimp only [balance!, balanceₘ]
533+
all_goals dsimp only [balanceₘ]
535534
· rfl
536535
· split <;> simp_all [Std.Internal.tree_tac]
537536
· split <;> simp_all only [Std.Internal.tree_tac]
@@ -579,7 +578,7 @@ theorem balance!_eq_balanceₘ {k v} {l r : Impl α β} (hlb : l.Balanced) (hrb
579578
omega
580579
· rw [rotateL]
581580
repeat simp_all only [Std.Internal.tree_tac, dite_true, ite_false, ite_true, Nat.not_lt]
582-
rw [if_neg (by omega), if_neg (by omega), if_neg (by omega)]
581+
rw [if_neg (by omega), if_neg (by omega)]
583582
simp only [Std.Internal.tree_tac, Nat.add_right_cancel_iff] at *
584583
omega
585584
· exfalso
@@ -651,45 +650,30 @@ theorem balanced_rotateL (k v l rs rk rv rl rr) (hl : l.Balanced)
651650
(hlr : BalanceLErasePrecond l.size rs ∨ BalanceLErasePrecond rs l.size)
652651
(hh : rs > delta * l.size) :
653652
(rotateL k v l rk rv rl rr : Impl α β).Balanced := by
654-
set_option tactic.fun_induction.unfolding false in
655-
fun_cases rotateL k v l rk rv rl rr <;> dsimp only [rotateL]
656-
· split
657-
· next h =>
658-
exact balanced_singleL _ _ _ _ _ _ _ _ hl hr hlr hh h
659-
· contradiction
660-
· rw [if_neg ‹_›]
661-
tree_tac
662-
· rw [if_neg ‹_›]
663-
exact balanced_doubleL k v _ _ _ _ _ _ _ _ _ _ hl hr hlr hh ‹_›
653+
fun_cases rotateL
654+
· exact balanced_singleL _ _ _ _ _ _ _ _ hl hr hlr hh ‹_›
655+
· tree_tac
656+
· exact balanced_doubleL k v _ _ _ _ _ _ _ _ _ _ hl hr hlr hh ‹_›
664657

665658
theorem balanced_rotateR (k v ls lk lv ll lr r) (hl : (Impl.inner ls lk lv ll lr).Balanced)
666659
(hr : r.Balanced) (hlr : BalanceLErasePrecond ls r.size ∨ BalanceLErasePrecond r.size ls)
667660
(hh : ls > delta * r.size) :
668661
(rotateR k v lk lv ll lr r : Impl α β).Balanced := by
669-
set_option tactic.fun_induction.unfolding false in
670-
fun_cases rotateR k v lk lv ll lr r <;> dsimp only [rotateR]
671-
· split
672-
· next h =>
673-
exact balanced_singleR k v _ _ _ _ _ _ hl hr hlr hh h
674-
· contradiction
675-
· rw [if_neg ‹_›]
676-
tree_tac
677-
· rw [if_neg ‹_›]
678-
exact balanced_doubleR k v _ _ _ _ _ _ _ _ _ _ hl hr hlr hh ‹_›
662+
fun_cases rotateR
663+
· exact balanced_singleR k v _ _ _ _ _ _ hl hr hlr hh ‹_›
664+
· tree_tac
665+
· exact balanced_doubleR k v _ _ _ _ _ _ _ _ _ _ hl hr hlr hh ‹_›
679666

680667
theorem balanceL_eq_balanceLErase {k : α} {v : β k} {l r : Impl α β} {hlb hrb hlr} :
681668
balanceL k v l r hlb hrb hlr = balanceLErase k v l r hlb hrb hlr.erase := by
682-
set_option tactic.fun_induction.unfolding false in
683-
fun_cases balanceL k v l r hlb hrb hlr
684-
all_goals dsimp only [balanceL, balanceLErase]
685-
split
686-
· split <;> contradiction
687-
· rfl
669+
fun_cases balanceL
670+
all_goals dsimp only [balanceLErase]
671+
all_goals simp only [↓reduceDIte, ↓reduceIte, *]
688672

689673
theorem balanceLErase_eq_balanceL! {k : α} {v : β k} {l r : Impl α β} {hlb hrb hlr} :
690674
balanceLErase k v l r hlb hrb hlr = balanceL! k v l r := by
691-
fun_cases balanceL! k v l r
692-
all_goals dsimp only [balanceLErase, balanceL!]
675+
fun_cases balanceL!
676+
all_goals dsimp only [balanceLErase]
693677
all_goals simp only [*]
694678
all_goals dsimp only [dreduceDIte, dreduceIte]
695679
all_goals contradiction
@@ -698,26 +682,20 @@ theorem balanceL!_eq_balance! {k : α} {v : β k} {l r : Impl α β} (hlb : l.Ba
698682
(hrb : r.Balanced) (hlr : BalanceLErasePrecond l.size r.size) :
699683
balanceL! k v l r = balance! k v l r := by
700684
fun_cases balance!
701-
all_goals dsimp only [balanceL!, balance!]
685+
all_goals dsimp only [balanceL!]
702686
all_goals try simp only [*]
703-
all_goals try dsimp only [dreduceDIte, dreduceIte]
704687
all_goals try rfl
705-
all_goals try contradiction
706688
all_goals try (exfalso; tree_tac; done)
707689
congr; tree_tac
708690

709691
theorem balanceR_eq_balanceRErase {k : α} {v : β k} {l r : Impl α β} {hlb hrb hlr} :
710692
balanceR k v l r hlb hrb hlr = balanceRErase k v l r hlb hrb hlr.erase := by
711-
set_option tactic.fun_induction.unfolding false in
712-
fun_cases balanceR k v l r hlb hrb hlr
713-
all_goals dsimp only [balanceR, balanceRErase]
714-
split
715-
· split <;> contradiction
716-
· rfl
693+
fun_cases balanceR <;>
694+
simp only [balanceRErase, ↓reduceDIte, ↓reduceIte, *]
717695

718696
theorem balanceRErase_eq_balanceR! {k : α} {v : β k} {l r : Impl α β} {hlb hrb hlr} :
719697
balanceRErase k v l r hlb hrb hlr = balanceR! k v l r := by
720-
fun_cases balanceR! k v l r
698+
fun_cases balanceR!
721699
all_goals dsimp only [balanceRErase, balanceR!]
722700
all_goals simp only [*]
723701
all_goals dsimp only [dreduceDIte, dreduceIte]
@@ -726,22 +704,16 @@ theorem balanceRErase_eq_balanceR! {k : α} {v : β k} {l r : Impl α β} {hlb h
726704
theorem balanceR!_eq_balance! {k : α} {v : β k} {l r : Impl α β} (hlb : l.Balanced)
727705
(hrb : r.Balanced) (hlr : BalanceLErasePrecond r.size l.size) :
728706
balanceR! k v l r = balance! k v l r := by
729-
fun_cases balance! k v l r
730-
all_goals dsimp only [balanceR!, balance!]
731-
all_goals try simp only [*]
732-
all_goals try dsimp only [dreduceDIte, dreduceIte]
733-
all_goals try rfl
734-
all_goals try contradiction
707+
fun_cases balance!
708+
all_goals dsimp only [balanceR!]
735709
all_goals try (exfalso; tree_tac; done)
736710
congr; tree_tac
737711

738712
theorem balance_eq_balance! {k : α} {v : β k} {l r : Impl α β} {hlb hrb hlr} :
739713
balance k v l r hlb hrb hlr = balance! k v l r := by
740-
set_option tactic.fun_induction.unfolding false in
741-
fun_cases balance! k v l r
742-
all_goals dsimp only [balance, balance!]
743-
all_goals simp only [*]
744-
all_goals dsimp only [dreduceDIte]
714+
fun_cases balance!
715+
all_goals dsimp only [balance]
716+
all_goals simp only [↓reduceDIte, ↓reduceIte, *]
745717
all_goals contradiction
746718

747719
theorem balance_eq_inner [Ord α] {sz k v} {l r : Impl α β}

src/Std/Data/DTreeMap/Internal/Model.lean

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -686,29 +686,13 @@ theorem insertMax_eq_insertMax! [Ord α] {a b} {t : Impl α β} (htb) :
686686

687687
theorem link_eq_link! [Ord α] {k v} {l r : Impl α β} (hlb hrb) :
688688
(link k v l r hlb hrb).impl = link! k v l r := by
689-
set_option tactic.fun_induction.unfolding false in
690-
fun_cases link! <;> rw [link, link!]
691-
· rw [insertMin_eq_insertMin!]
692-
· rw [insertMax_eq_insertMax!]
693-
· split <;> simp only [balanceLErase_eq_balanceL!, link_eq_link! hlb hrb.left]
694-
· split <;> simp only [balanceRErase_eq_balanceR!, balanceLErase_eq_balanceL!,
695-
link_eq_link! hlb hrb.left, link_eq_link! hlb.right hrb]
696-
· split
697-
· simp only [balanceLErase_eq_balanceL!, link_eq_link! hlb hrb.left]
698-
· simp only [Std.Internal.tree_tac]
699-
termination_by sizeOf l + sizeOf r
689+
fun_induction link! <;>
690+
simp [*, link, balanceLErase_eq_balanceL!, balanceRErase_eq_balanceR!, insertMin_eq_insertMin!, insertMax_eq_insertMax!, size]
700691

701692
theorem link2_eq_link2! [Ord α] {l r : Impl α β} (hlb hrb) :
702693
(link2 l r hlb hrb).impl = link2! l r := by
703-
set_option tactic.fun_induction.unfolding false in
704-
fun_cases link2! <;> rw [link2!, link2]
705-
· split <;> simp only [balanceLErase_eq_balanceL!, link2_eq_link2! hlb hrb.left]
706-
· split <;> simp only [balanceRErase_eq_balanceR!, balanceLErase_eq_balanceL!,
707-
link2_eq_link2! hlb.right hrb, link2_eq_link2! hlb hrb.left]
708-
· split
709-
· simp only [balanceLErase_eq_balanceL!, link2_eq_link2! hlb hrb.left]
710-
· simp only [Std.Internal.tree_tac, glue_eq_glue!]
711-
termination_by sizeOf l + sizeOf r
694+
fun_induction link2! <;>
695+
simp [*, link2, balanceLErase_eq_balanceL!, balanceRErase_eq_balanceR!, glue_eq_glue!]
712696

713697
namespace Const
714698

0 commit comments

Comments
 (0)