Skip to content

Commit 273228d

Browse files
committed
Prove that projection functions maintain wellformedness
1 parent b018b9b commit 273228d

1 file changed

Lines changed: 36 additions & 3 deletions

File tree

Valaig/Aig/Projections.lean

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,12 @@ where
4040
termination_by iter.length
4141
decreasing_by all_goals grind
4242

43-
private theorem projectComb.Comb_go {reset iter size} (comb : state.Comb) :
43+
section projectComb
44+
variable {reset : Bool} {state : Aig} {map : Array Lit} {iter : Std.Iter Var}
45+
variable {size : iter.var.idx = map.size}
46+
47+
@[local simp, local grind .]
48+
private theorem projectComb.Comb_go (comb : state.Comb) :
4449
(go aig reset wf iter state map size valid).fst.Comb := by
4550
fun_induction go
4651
· grind only
@@ -50,23 +55,51 @@ private theorem projectComb.Comb_go {reset iter size} (comb : state.Comb) :
5055
subst res
5156
grind
5257

53-
@[local simp]
54-
private theorem Comb_projectComb :
58+
@[local simp, local grind .]
59+
private theorem projectComb.WellFormed_go (swf : state.WellFormed) :
60+
(go aig reset wf iter state map size valid).fst.WellFormed := by
61+
fun_induction go
62+
· grind only
63+
· grind only
64+
next res ih =>
65+
apply ih
66+
subst res
67+
grind
68+
69+
private theorem Comb_projectComb {reset} :
5570
(aig.projectComb reset wf).fst.Comb :=
5671
projectComb.Comb_go (by simp)
5772

73+
private theorem WellFormed_projectComb {reset} :
74+
(aig.projectComb reset wf).fst.WellFormed :=
75+
projectComb.WellFormed_go (by simp)
76+
77+
end projectComb
78+
5879
@[inline]
5980
def resetAig (aig : Aig) (wf : aig.WellFormed := by grind) : Aig × (Lit.In aig -> Lit) :=
6081
projectComb aig true wf
6182

83+
@[simp, grind .]
6284
theorem Comb_resetAig :
6385
(aig.resetAig wf).fst.Comb :=
6486
Comb_projectComb
6587

88+
@[simp, grind .]
89+
theorem WellFormed_resetAig :
90+
(aig.resetAig wf).fst.WellFormed :=
91+
WellFormed_projectComb
92+
6693
@[inline]
6794
def transAig (aig : Aig) (wf : aig.WellFormed := by grind) : Aig × (Lit.In aig -> Lit) :=
6895
projectComb aig false wf
6996

97+
@[simp, grind .]
7098
theorem Comb_transAig :
7199
(aig.transAig wf).fst.Comb :=
72100
Comb_projectComb
101+
102+
@[simp, grind .]
103+
theorem WellFormed_transAig :
104+
(aig.transAig wf).fst.WellFormed :=
105+
WellFormed_projectComb

0 commit comments

Comments
 (0)